You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Memento mori. Every project reaches a stage where development slows down or stops. Clearly, @nayuki has done a lot and owes nothing to anyone. It would be a shame if such valuable work were lost.
The Rust crate qrcodegen has 2´300´000 downloads overall. This crate was built with care, which is why so many people started using it. I’d like to continue developing the crate because I’m interested in the growth of the Rust ecosystem.
If a project can’t continue to evolve, it’s effectively dead. It cannot be considered the best library by definition—even if it meets all stated goals like flexibility, correctness, minimalism, and documentation. For a project to grow, development must be delegated to the motivated community members. It's essential to maintain quality without relying on manual oversight.
Here is my perspective on what can be done to improve the situation. Most of the points below I’ve already implemented in my fork and will publish later. Others will require collaboration. It's okay to disagree with what’s been written. I’m an independent person with my own ideas—concepts I’ve developed through professional experience with Rust, as well as reading the feedback from the issues and pull requests of this repository.
Ecosystem
Logotype a stylized postmark with a pixel crab over it? Gonna ask my friend designer to help with it
Make it collaborator-friendly create .gitignore, CONTRIBUTING.md files, be welcome for improvements
Make it user-friendly describe common scenarios and integrate with popular rust crates
Compare with another crates: rxing, qrcode, qr_code, etc present as a table with pros & cons
Probably rename the crate to qr if @jht5945 is ok with it
Functionality
Kanji mode ✔︎ the Japanese community will love this
Merge with #[no_std] code make a separate feature flag
Highlight panicking methods or avoid panics at all to bring trust and provide reliability
Compliance with ISO/IEC 18004:2024 it would be a solid argument for picking this library
Introduce demo generator on docs.rs version, mask and ecc could be tuned right there
If I had complete freedom, I would do the following:
Extract this repository into a separate one, where @nayuki is the owner, and I’m the maintainer with full editing rights. I already have experience with this setup in the yake-rust project.
Rebase the entire history to keep only the commits relevant to the Rust library.
Grant me publishing rights for new versions on crates.io.
Another option is simply to fork the project—developing an independent version of the crate. But in that case, users would be negatively affected: instead of just updating the version in their Cargo.toml, they would now have to discover that a compatible fork exists.
I am open to discussion, as my intentions clearly may not match those of @nayuki. Which is totally fine.
I believe @nayuki did an incredible job—check it out for yourself: demo, step-by-step guide, compact segmentation page, and optimization insights.
Memento mori. Every project reaches a stage where development slows down or stops. Clearly, @nayuki has done a lot and owes nothing to anyone. It would be a shame if such valuable work were lost.
The Rust crate
qrcodegenhas 2´300´000 downloads overall. This crate was built with care, which is why so many people started using it. I’d like to continue developing the crate because I’m interested in the growth of the Rust ecosystem.If a project can’t continue to evolve, it’s effectively dead. It cannot be considered the best library by definition—even if it meets all stated goals like flexibility, correctness, minimalism, and documentation. For a project to grow, development must be delegated to the motivated community members. It's essential to maintain quality without relying on manual oversight.
Here is my perspective on what can be done to improve the situation. Most of the points below I’ve already implemented in my fork and will publish later. Others will require collaboration. It's okay to disagree with what’s been written. I’m an independent person with my own ideas—concepts I’ve developed through professional experience with Rust, as well as reading the feedback from the issues and pull requests of this repository.
Ecosystem
a stylized postmark with a pixel crab over it? Gonna ask my friend designer to help with it
create
.gitignore,CONTRIBUTING.mdfiles, be welcome for improvementsdescribe common scenarios and integrate with popular rust crates
present as a table with pros & cons
qrif @jht5945 is ok with it
Functionality
the Japanese community will love this
the algorithm is present at Java codebase, but not in Rust port
add qr_segment_advanced module for the Rust code #40
is supported by another crate
SVG renderer ✔︎
It's good to have out-of-the-box solution.
It was removed at 5bc7bce, so everybody now has to copy-paste the same piece of code from examples.
Questions and sugestion about the rust port #204
io::Writerto not store the whole string in-memory
https://github.com/kennytm/qrcode-rust?tab=readme-ov-file#svg-generation
Image renderer ✔︎
It's a common scenario to embed a base64
.pngpicture into web servers.https://github.com/constantoine/qrcodegen-image
you just need to include
jpg,gif,aviffeatures on theimagecrateto reduce the compilation time
Quality
Convert doc comments to rust format #39
cargo check, clippy
Especially check the edge cases
with divan or criterion
https://rust-lang.github.io/api-guidelines/about.html
#[no_std]codemake a separate feature flag
to bring trust and provide reliability
ISO/IEC 18004:2024it would be a solid argument for picking this library
version, mask and ecc could be tuned right there
If I had complete freedom, I would do the following:
Another option is simply to fork the project—developing an independent version of the crate. But in that case, users would be negatively affected: instead of just updating the version in their
Cargo.toml, they would now have to discover that a compatible fork exists.I am open to discussion, as my intentions clearly may not match those of @nayuki. Which is totally fine.