A QR scanner for the Light Phone III, and a companion web page that turns text into a QR code.
Part of the gi-os Light App collection.
| Piece | What it is | Where |
|---|---|---|
| LightQR | Android tool. Scan a code, read the text, open the link, keep a history. | app/ |
| QR Generator | Static web page. Type anything, download the code. | docs/, served by GitHub Pages |
- Reads QR codes with the back camera. CameraX supplies the frames and ZXing decodes them off the luminance plane. ZXing is pure Java, so it runs on LightOS, which has no Google Play Services.
- Takes a typed or pasted address instead, when a camera is the wrong tool.
- Shows the decoded text on a result screen. An Open link button appears for a URL.
- Keeps a local history of every scan and entry. There is no cloud and no account.
- Uses black on white, Akkurat type, and the LightOS top and bottom bars.
gi-os.github.io/LightQR encodes text in the browser. Nothing leaves the page. Use it to hand a long address to the phone without typing it.
- Install Obtainium.
- Add
https://github.com/gi-os/LightQRas an app.
Every push to main publishes a new versioned release, so Obtainium sees each update.
Download the APK from Releases and run:
adb install -r LightQR-vX.Y.Z.apkOn LightOS, set tool permissions to Any tools to launch it from the toolbox.
.github/workflows/release.yml builds a signed APK on each push to main.
versionCodeis the CI run number.versionNameis1.0.<run>. The workflow tags the commitvX.Y.Z.- The build signs with a fixed key,
app/lightqr.keystore, so Obtainium can upgrade in place. - The workflow attaches the APK to the release and marks it latest.
The keystore sits in the repo with default passwords, because this is a personal tool
and a stable signature matters more here than a secret. To sign with your own key, set
the repo secrets and pass them to the workflow as KEYSTORE_FILE, KEYSTORE_PASS,
KEY_ALIAS and KEY_PASS. The Gradle config already reads those.
gradle :app:assembleReleaseYou need JDK 17 and the Android SDK, with compileSdk 34. The APK lands in
app/build/outputs/apk/release/.
LightQR is a plain Android app. It does not use
light-sdk. The trade is deliberate. CameraX
and the standard soft keyboard work without an API allowlist, but the tool cannot enter
the official Tool Library until someone ports it into the SDK tool module.
![]() Scanner |
![]() Result, with OPEN and COPY |
Taken on a Light Phone III.
- gi-os/LightPass is where this started. The QR key scanner inside LightPass became a tool of its own, and LightQR keeps its CameraX setup and its Akkurat type handling.
- ZXing by the ZXing authors does the decoding. Nothing else in this space works as well without Play Services. Thank you.
- The Light Phone for LightOS and for opening the platform to community tools.
- Obtainium by ImranR98 handles updates, so this repo does not need a store.
- CameraX and Jetpack Compose do the rest.
Two later tools took from LightQR. LightRSS copied
the docs/ generator page to make its feed QR codes.
LightFog copied the release workflow, because plain
Gradle in GitHub Actions beats an EAS build for a single-developer project.
Twelve tools for the Light Phone III, all open source, all built in one run.
| Tool | What it does | Built on |
|---|---|---|
| LightPass | Photograph a movie ticket, keep the stub | Plain Android |
| LightQR (this repo) | QR scanner, plus a browser generator | Plain Android |
| LightRSS | RSS and Atom reader with images and QR subscribe | light-sdk, fork of zachattack323/LightRSS |
| LightNYCSubway | Live MTA subway arrivals | light-sdk fork |
| chat | iMessage over a self-hosted BlueBubbles server | Fork of craigeley/chat |
| LightFog | Fog of World companion, GPS recorder and fog map | Fork of garado/light-topographic |
| LightNonogram | Picross, plus a generator that only ships solvable puzzles | Kotlin generator, light-sdk tool |
| LightSolitaire | Klondike, draw one, unlimited redeals | light-sdk |
| LightFastread | RSVP speed reader for EPUB and MOBI | Fork of fluffyspace/FastRead |
| LightTip | Tip calculator, plus a receipt splitter that reads the line items | Plain Android |
| LightNoise | Twelve synthesized sounds, a two-layer mixer and a sleep timer | Plain Android |
| LightPods | AirPods battery, in-ear and lid status | Plain Android, ports LibrePods |
The Light Phone does not sponsor or endorse any of these. Licences vary per repo.
MIT. See LICENSE.

