# ZXing: maintenance mode, a dead Android app, and a C++ port that moved out

> ZXing is a Java barcode image processing library for 1D and 2D formats with ports to other languages, and it is in maintenance mode. The Android Barcode Scanner app can no longer be published, the official C++ port is deprecated, and the active work now lives in third-party ports.

**zxing/zxing** — ZXing ("Zebra Crossing") barcode scanning library for Java, Android

- Repository: https://github.com/zxing/zxing
- Stars: 34,114 · Forks: 9,438
- Language: Java
- License: Apache-2.0
- Published: 2026-08-17 · Updated: 2026-08-18 · Language: en
- Canonical page: https://hysenlabs.com/projects/zxing-zxing

## Maintenance mode means patches, and the Android app is over

The first line of the README is the one that decides everything else: the project is in maintenance mode only. Changes are driven by contributed patches, only bug fixes and minor enhancements will be considered, and there is no roadmap. The project describes itself as DIY.

Then there is the app. The Barcode Scanner app can no longer be published, so it is unlikely any changes will be accepted for it. It does not work with Android 14, it will not be updated, and the README asks you not to file an issue for it. Three separate statements, all pointing the same way: the demo application is finished, and the library is not the same thing as the app.

For an adopter the split matters. If you are embedding the decoding library in a Java or JVM product and you can patch what you need, maintenance mode is a workable deal. If your plan was to ship the scanner app, or to depend on the app being installable, that plan has no path in this repository.

## Seven modules, two of which exist to serve an app that cannot ship

The components table splits into what is active and what is left over. Active means present in the build, not under active development, and the list is: core, the image decoding library and its test code; javase, the JavaSE specific client code; android, the Android client Barcode Scanner; android-integration, which supports integration with the Barcode Scanner through an Intent; android-core, the Android code shared between the app and other Android apps; zxingorg, the source behind zxing.org; and zxing.appspot.com, the source behind the web based barcode generator.

Read the android entries next to the previous section and the shape becomes clear. Three of the seven modules exist to serve, wrap or share code with an application that can no longer be published and will not be updated. That includes the Intent integration, which is the documented way to hand a scan to the scanner app.

So a new Android product that wanted to delegate scanning to ZXing has to find another route, while a product that embeds android-core or the core library itself is unaffected by the app's fate. Which of those two you are decides whether the maintenance notice is a problem.

## The format table is the contract, and nothing outside it is claimed

The reason ZXing is still depended on is the table of formats, and it is worth reading as a contract rather than as a feature list. The 1D product column carries UPC-A, UPC-E, EAN-8, EAN-13 and the UPC/EAN extension 2 and 5. The 1D industrial column carries Code 39, Code 93, Code 128, Codabar and ITF. The 2D column carries QR Code, Data Matrix, Aztec, PDF 417, MaxiCode, RSS-14 and RSS-Expanded.

That is a retail and logistics set. If your requirement is one of those, the table is the answer. If your requirement is something else, the README makes no claim about it, and a maintenance-mode project is a poor place to discover a gap.

One naming detail has teeth for anything you ship. The README states that the QR code is trademarked by Denso Wave, and thanks the logo to Haase and Martin OHG. The format being a registered trademark does not affect decoding it, but it does mean the word and the mark are not yours to use freely in product copy, so read that line before you name a feature after the code.

## The old ports are pinned to commits, which is what deprecated means here

Five sources are listed as available in previous releases, and every link in that section points at a specific commit hash rather than at a branch. There is a C++ port, an iPhone client, an Objective-C port, a partial ActionScript port and a JRuby wrapper, each frozen at the commit where it last existed.

That is the mechanism of the deprecation. The code is still readable and you can still vendor it, but it no longer receives changes and it will not track the Java library. A security fix or a new format in core does not reach any of them.

The practical consequence is that language support for ZXing is now a separate decision with a separate owner. If your product needs one of these five, you are choosing to maintain a fork, and the honest way to plan that is to price it as your own code from day one rather than as an upstream dependency that will be patched for you.

## The live port is zxing-cpp, and it is the one with the wrappers

The third-party table is where current work happens, and one row stands out. zxing-cpp is described as the latest and active port to C++, and it includes Android, C, iOS, .NET, Rust, Python, WASM and WinRT wrappers. Beside it, glassechidna's zxing-cpp is explicitly a fork taken from the deprecated official C++ port, which tells you where the lineage came from and why there are two.

The rest of the table is long and mostly older bindings: Barcode-Lib4J for printing and exporting barcodes, SCodes and QZXing for Qt, jsqrcode for JavaScript, python-zxing and pyzxing, ZXing .NET, ZXingObjC, ZXing Delphi, zxing-dart, rxing for Rust, a TypeScript port in zxing-js/library, and two PHP projects. The project also lists four related libraries that are not ports at all: Barcode4J, BoofCV, ZBar as a C99 reader, and OkapiBarcode.

If you are not on the JVM, this table is the decision, not the components table above it. Pick the port that already has a wrapper for your platform, and check its own release history rather than assuming it moves at the Java library's pace.

## No install command: the README hands you a wiki, a pom.xml and a javadoc

There is no dependency snippet, no install command and no coordinates in this README. Getting started points at a wiki page, Get Started Developing, and the links section offers an online decoder at zxing.org, a QR code generator on appspot, the javadoc and the documentation site. That is the whole of the documented path in.

What the repository itself shows is the build shape: a root pom.xml, and one directory per component, core, javase, android, android-integration, android-core, zxingorg and zxing.appspot.com, alongside docs, src, and the usual AUTHORS, CHANGES, LICENSE and NOTICE files, plus a .reuse directory for licence metadata. A Maven build with one module per component is enough to know what you are dealing with, and the wiki is where the actual dependency and Gradle instructions live.

Also worth noting: two of the seven modules are the source for hosted sites, zxing.org and the appspot generator. Some of what looks like library surface area is in fact a website.

## Two gaps longer than a year between the last three tags

The release dates tell you what maintenance mode costs in cadence. zxing-3.5.4 was published on 2025-11-11, zxing-3.5.3 on 2024-01-31 and zxing-3.5.2 on 2023-07-30. That is a gap of nearly two years between 3.5.2 and 3.5.3, and close to two years again between 3.5.3 and 3.5.4.

The last push to the repository was 2026-09-21, so commits are still landing, and the pattern is what the maintenance notice describes: changes arrive when someone contributes them rather than on a schedule. A patch release is not something to wait for on a quarterly cadence.

For planning, that means pinning a version you have tested rather than tracking a branch, and treating an upgrade as an event that happens when you need a specific fix. The hosted tools and the port table are more likely to move than the Java core is.

## Conclusion

Use ZXing when you are on the JVM, need one of the formats in its table, and can send a patch when you need one, because the project takes contributed fixes and minor enhancements only. Do not plan anything on the Android Barcode Scanner app, on the Intent integration that depends on it, or on the C++, iPhone, Objective-C, ActionScript and JRuby sources that now sit in previous releases. Before you commit: check the format you need is in the supported table, read the maintenance mode notice rather than the star history, and if you are off the JVM take zxing-cpp instead, since that is the port described as latest and active with Android, C, iOS, .NET, Rust, Python, WASM and WinRT wrappers. Pin a release: the tags are 3.5.4 from 2025-11-11, 3.5.3 from 2024-01-31 and 3.5.2 from 2023-07-30, and the last push was 2026-09-21.

## FAQ

### Is ZXing still maintained?

It is in maintenance mode, not abandoned. The README says changes are driven by contributed patches and that only bug fixes and minor enhancements will be considered, with no roadmap, and describes the project as DIY. The last push was 2026-09-21 and the newest release is zxing-3.5.4 from 2025-11-11.

### What is the ZXing library?

ZXing, short for zebra crossing, is an open-source multi-format 1D and 2D barcode image processing library implemented in Java, with ports to other languages. Its supported formats include UPC-A, UPC-E, EAN-8, EAN-13, Code 39, Code 93, Code 128, Codabar, ITF, QR Code, Data Matrix, Aztec, PDF 417, MaxiCode, RSS-14 and RSS-Expanded.

### What is a good alternative to ZXing?

For anything off the JVM, zxing-cpp is described in the project's own third-party table as the latest and active port, with Android, C, iOS, .NET, Rust, Python, WASM and WinRT wrappers. The README also lists ZBar as a C99 reader library and BoofCV, Barcode4J and OkapiBarcode as related generator and reader libraries.

### How do I install the ZXing C++ port?

Not from this repository. The official C++ port is listed under modules available in previous releases, pinned to a specific commit, and the active project is the third-party zxing-cpp, which is described as including Android, C, iOS, .NET, Rust, Python, WASM and WinRT wrappers.

### How do I install the ZXing library?

The README prints no install command and no dependency coordinates. It points at the Get Started Developing wiki page, the javadoc and the documentation site, and the repository itself is a Maven build with a root pom.xml and one module per component, including core and javase.

## Sources

- [Official README](https://github.com/zxing/zxing#readme)
- [Project repository](https://github.com/zxing/zxing)
- [Release notes](https://github.com/zxing/zxing/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/zxing-zxing
