url2qr
Zero-dependency QR code generator optimized for URLs. Parallel implementations in Python and Rust, verified to produce bit-exact identical output.
Features
- Byte mode encoding (required for URLs with lowercase letters)
- EC-L error correction (7% recovery, optimized for clean screen display)
- Versions 1-6 (up to 134 characters)
- Fixed mask pattern (no scoring overhead)
- Terminal output with Unicode half-blocks
Installation
Python (pip)
pip install url2qr
Python (conda)
conda install -c mcg url2qr
Rust (cargo)
cargo install url2qr
Or add to your Cargo.toml:
[dependencies]
url2qr = "0.1"
Usage
Python
from url2qr import generate_qr, qr_to_terminal
# Display in terminal
print(qr_to_terminal("https://example.com"))
# Get raw matrix (list of lists, 1=dark, 0=light)
matrix = generate_qr("https://example.com")
Rust
use url2qr::{generate_qr, qr_to_terminal};
let matrix = generate_qr("https://example.com").unwrap();
let output = qr_to_terminal("https://example.com", 4, false).unwrap();
println!("{output}");
CLI
# Python
python url2qr.py "https://example.com"
# Rust
cargo run -- "https://example.com"
Vendoring
The Python module (url2qr.py) is designed to be vendored directly into larger projects. Simply copy the single file into your project. It is licensed under BSD 3-Clause and may be freely vendored into any other BSD 3-Clause software without credit or attribution.
Development
Prerequisites
- Python 3.9+ with pytest and qrcode (test dependency)
- Rust 1.78+ (MSRV)
Setup
# Python
pip install -e ".[test]"
pre-commit install
# Rust
cd rust && cargo build
Running Tests
# Python tests (validates against qrcode reference package)
pytest test_url2qr.py -v
# Rust tests (unit + integration with embedded reference matrices)
cd rust && cargo test
# Cross-language validation (regenerate vectors and compare)
python test-vectors/generate.py
cd rust && cargo run --bin dump_vectors > /tmp/rust_vectors.json
# Compare the two JSON files
Linting
# Python
pre-commit run --all-files
# Rust
cd rust && cargo fmt --check && cargo clippy -- -D warnings
Cross-Language Verification
Both implementations are verified to produce bit-exact identical QR matrices for all test URLs. The test-vectors/ directory contains shared test vectors generated from the Python implementation (which is itself validated against the qrcode reference package). CI runs cross-validation on every push.
Constraints
- Maximum URL length: 134 characters
- Only supports byte mode (URLs with lowercase require this)
- Fixed to EC-L and mask pattern 0
Acknowledgment
This module was developed by Michael Grant from scratch
using Claude. There are quite a few more capable QR code libraries in existence,
most notably the qrcode module used
to drive our unit tests. This module does not fork these other libraries; instead it
was constructed from first principles with significantly reduced functionality in order
to support a particular embedded use case.
Release files for url2qr 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| url2qr-0.1.1.tar.gz | 6.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| url2qr-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 12.9 kB
Release files / url2qr-0.1.1.tar.gz
| Download URL | url2qr-0.1.1.tar.gz |
|---|---|
| Size | 6.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1cb0863065548835fdc198fa10cc6aae74ddb30f6d0a8516b6ef49171a1da6aa
|
|
BLAKE2b-256 checksum How to use checksums |
f88858263155990dd7841322636195bb7a984af8b0c41e922bf46d345b6306c1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 28, 2026.
Transparency logRelease files / url2qr-0.1.1-py3-none-any.whl
| Download URL | url2qr-0.1.1-py3-none-any.whl |
|---|---|
| Size | 6.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0d90c4faacfc0af3fd573bc6bbdac7d120927f7cb28096412ab43cc3917da9eb
|
|
BLAKE2b-256 checksum How to use checksums |
6091380087f5d05faa35923bd5433fc41676e1b7e51f1155f0de68b9e9b7ed00
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 28, 2026.
Transparency log