NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #593 most downloaded on PyPI
QR Code image generator
Last release 1 years ago
01 May 2025
Release timing varies
gaps range from 3 weeks to 2.5 years
Nearly every release is documented
notes for 35 of 38 stable releases
1 version withdrawn
withdrawn after publishing
15 years old
39 releases · first in 2011
Optimize QRColorMask apply_mask method for enhanced performance
Optimize QRColorMask apply_mask method for enhanced performance
Fix typos on StyledPilImage embeded_* parameters. The old parameters with the typos are still accepted for backward compatibility.
- Added support for Python 3.13.
Added support for Python 3.13.
One column per quarter.
Added support for Python 3.11 and 3.12.
Added support for Python 3.11 and 3.12.
Drop support for Python <=3.8.
Change local development setup to use Poetry.
Testsuite and code quality checks are done through Github Actions.
Code quality and formatting utilises ruff.
Removed typing_extensions as a dependency, as it's no longer required with having Python 3.9+ as a requirement. having Python 3.9+ as a requirement.
Only allow high error correction rate (qrcode.ERROR_CORRECT_H) when generating QR codes with embedded images to ensure content is readable
Allow pypng factory to allow for saving to a string (like qr.save("some_file.png")) in addition to file-like objects.
Allow pypng factory to allow for saving to a string (like qr.save("some_file.png")) in addition to file-like objects.
Fix bad over-optimization in v7.4 that broke large QR codes. Thanks to mattiasj-axis!
Fix bad over-optimization in v7.4 that broke large QR codes. Thanks to mattiasj-axis!
Restructure the factory drawers, allowing different shapes in SVG image factories as well.
Restructure the factory drawers, allowing different shapes in SVG image factories as well.
Add a --factory-drawer option to the qr console script.
Optimize the output for the SVGPathImage factory (more than 30% reduction in file sizes).
Add a pypng image factory as a pure Python PNG solution. If pillow is not installed, then this becomes the default factory.
The pymaging image factory has been removed, but its factory shortcut and the actual PymagingImage factory class now just link to the PyPNGImage factory.
Improvements for embedded image.
Improvements for embedded image.
Skip color mask if QR is black and white
Skip color mask if QR is black and white
Add Styled PIL image factory, allowing different color masks and shapes in QR codes
Add Styled PIL image factory, allowing different color masks and shapes in QR codes
Small performance inprovement
Add check for border size parameter
Add --ascii parameter to command line interface allowing to output ascii when stdout is piped
Add --ascii parameter to command line interface allowing to output ascii when stdout is piped
Add --output parameter to command line interface to specify output file
Accept RGB tuples in fill_color and back_color
Add to_string method to SVG images
Replace inline styles with SVG attributes to avoid CSP issues
Add Python3.10 to supported versions
- Drop Python < 3.6 support.
Drop Python < 3.6 support.
Fix short chunks of data not being optimized to the correct mode.
Fix short chunks of data not being optimized to the correct mode.
Tests fixed for Python 3
Fix optimize length being ignored in QRCode.add_data.
Fix optimize length being ignored in QRCode.add_data.
Better calculation of the best mask pattern and related optimizations. Big thanks to cryptogun!
Fix incomplete block table for QR version 15. Thanks Rodrigo Queiro for the report and Jacob Welsh for the investigation and fix.
Fix incomplete block table for QR version 15. Thanks Rodrigo Queiro for the report and Jacob Welsh for the investigation and fix.
Avoid unnecessary dependency for non MS platforms, thanks to Noah Vesely.
Make BaseImage.get_image() actually work.
Revert some terminal changes from 5.2 that broke Python 3's real life tty code generation and introduce a better way from Jacob Welsh.
Revert some terminal changes from 5.2 that broke Python 3's real life tty code generation and introduce a better way from Jacob Welsh.
Small fix to terminal output in Python 3 (and fix tests)
Small fix to terminal output in Python 3 (and fix tests)
Add --error-correction option to qr script.
Add --error-correction option to qr script.
Fix script piping to stdout in Python 3 and reading non-UTF-8 characters in Python 3.
Fix script piping in Windows.
Add some useful behind-the-curtain methods for tinkerers.
Fix terminal output when using Python 2.6
Fix terminal output to display correctly on MS command line.
Make qr script work in Windows. Thanks Ionel Cristian Mărieș
Make qr script work in Windows. Thanks Ionel Cristian Mărieș
Fixed print_ascii function in Python 3.
Out-of-bounds code version numbers are handled more consistently with a ValueError.
Much better test coverage (now only officially supporting Python 2.6+)
Update version numbers correctly.
Update version numbers correctly.
Change the output when using the qr script to use ASCII rather than just colors, better using the terminal real estate.
Speed optimizations.
Change the output when using the qr script to use ASCII rather than just colors, better using the terminal real estate.
Fix a bug in passing bytecode data directly when in Python 3.
Substation speed optimizations to best-fit algorithm (thanks Jacob Welsh!).
Introduce a print_ascii method and use it as the default for the qr script rather than print_tty.
Bad version number for previous hotfix release.
Bad version number for previous hotfix release.
Fix incorrect regex causing a comma to be considered part of the alphanumeric set.
Fix incorrect regex causing a comma to be considered part of the alphanumeric set.
Switch to using setuptools for setup.py.
Fix the pymaging backend not able to save the image to a buffer. Thanks ilj!
Fix the pymaging backend not able to save the image to a buffer. Thanks ilj!
Made qrcode work on Python 2.4 - Thanks tcely. Note: officially, qrcode only supports 2.5+.
Made qrcode work on Python 2.4 - Thanks tcely. Note: officially, qrcode only supports 2.5+.
Support pure-python PNG generation (via pymaging) for Python 2.6+ -- thanks Adam Wisniewski!
SVG image generation now supports alternate sizing (the default box size of 10 -- 1mm per rectangle).
SVG path image generation allows cleaner SVG output by combining all QR rects into a single path. Thank you, Viktor Stískala.
Added some extra simple SVG factories that fill the background white.
Update change log to contain version 3.1 changes. :P
Update change log to contain version 3.1 changes. :P
Give the qr script an --optimize argument to control the chunk optimization setting.
Important fixes for incorrect matches of the alphanumeric encoding mode. Previously, the pattern would match if a single line was alphanumeric only (e
Important fixes for incorrect matches of the alphanumeric encoding mode. Previously, the pattern would match if a single line was alphanumeric only (even if others wern't). Also, the two characters { and } had snuck in as valid characters. Thanks to Eran Tromer for the report and fix.
Optimized chunking -- if the parts of the data stream can be encoded more efficiently, the data will be split into chunks of the most efficient modes.
Add QRCode.get_matrix, an easy way to get the matrix array of a QR code including the border. Thanks Hugh Rawlinson.
Python 3 support.
Add QRCode.get_matrix, an easy way to get the matrix array of a QR code including the border. Thanks Hugh Rawlinson.
Add in a workaround so that Python 2.6 users can use SVG generation (they must install lxml).
Some initial tests! And tox support (pip install tox) for testing across Python platforms.
Fix incorrect termination padding.
Fix incorrect termination padding.
Fix the first four columns incorrectly shifted by one. Thanks to Josep Gómez-Suay for the report and fix.
Fix the first four columns incorrectly shifted by one. Thanks to Josep Gómez-Suay for the report and fix.
Fix strings within 4 bits of the QR version limit being incorrectly terminated. Thanks to zhjie231 for the report.
Fix installation error on Windows.
Fix installation error on Windows.
The PilImage wrapper is more transparent - you can use any methods or attributes available to the underlying PIL Image instance.
The PilImage wrapper is more transparent - you can use any methods or attributes available to the underlying PIL Image instance.
Fixed the first column of the QR Code coming up empty! Thanks to BecoKo.
Added a show method to the PIL image wrapper so the run_example function actually works.
Added a show method to the PIL image wrapper so the run_example function actually works.
* Fix a packaging issue
Fix a packaging issue
Use a pluggable backend system for generating images, thanks to Branko Čibej! Comes with PIL and SVG backends built in.
Use a pluggable backend system for generating images, thanks to Branko Čibej! Comes with PIL and SVG backends built in.
Encode unicode to utf-8 bytestrings when adding data to a QRCode.
Encode unicode to utf-8 bytestrings when adding data to a QRCode.
When adding data, auto-select the more efficient encoding methods for numbers and alphanumeric data (KANJI still not supported).
When adding data, auto-select the more efficient encoding methods for numbers and alphanumeric data (KANJI still not supported).
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →