Not an official app. G1 Extended is an independent companion for the Even Realities G1, not made by, affiliated with, or endorsed by Even Realities. Free, no accounts, no telemetry — and everything about it, including its extension catalogue, is forbidden to be sold. See TERMS.md.
An alternative, open-source Android client for the Even Realities G1 smart glasses.
It removes the telemetry and the account the original client came with, and gives back a device that works entirely on its own. Working from a reverse-engineered BLE protocol — two Nordic UART radios, one per temple — it lets you force HUD layouts the official app does not expose, read hardware events it discards, and push your own data to the lens, including from a microcontroller of your own.
No account. No telemetry. Nothing leaves your phone.
Latest release → — the signed APK is attached to every release, and once installed the app updates itself from its banner: one tap downloads the new version and opens Android's installer.
Testing the next version early: pre-releases are published on the
releases page from the
beta branch. They never appear in the in-app update check — stable stays
stable unless you opt in by hand.
The home screen: a mirror of what the lens shows right now, the glasses' battery, brightness and silent mode, then one tile per tool.
The design is inspired by the original Even Realities app. G1 Extended is still an independent project, not made or endorsed by Even Realities.
Glasses
- Pairs with both temples over BLE and reconnects on its own
- Battery level for each side
- Brightness, silent mode, head-up angle, dashboard position
- Keeps the connection alive from a background service
On the display
- A dashboard with the time, weather, your agenda, checklists and reminders
- Phone notifications forwarded in real time, filtered per app
- Turn-by-turn directions, read from whatever navigation app you already use
- Optional live speed readout from GPS
- Live captions from the glasses microphone
- A teleprompter that follows your voice, or a set pace, or your thumb
- Your own lines on the lens, built from live values or a URL you choose
- Optionally, an assistant: hold the left temple, ask, and read the answer on the lens. Claude with your own API key, or your own Home Assistant and whichever agent it runs (a model you host included); never a bundled one, and only ever the transcribed text, never the audio
- Dictation: hold a temple touchpad, speak, see the text on the lens
- Optionally, your house: speak to Home Assistant and read a few of its values on the lens
Voice
- Recorded first, transcribed after: hold the touchpad, speak, let go, and the recording is turned into text on the phone by the offline Vosk model. The phone-microphone option uses Android's live recogniser instead
- Optional wake word
- The audio is kept. A recording reaches your phone's storage before it is transcribed, so a missing speech model or a word the recogniser did not know costs you a transcript, never the recording. Play, export or delete any of them on the Recordings screen
- This app never uploads audio
The glasses need the phone to keep two Bluetooth links open and to answer a heartbeat, or the firmware drops the connection after 32 seconds. That is not something Android lets an app do quietly, so it runs as a foreground service with a persistent notification. There is no way around the notification and no attempt to hide it.
What that costs, and what it does not:
- Heartbeat every 15 seconds while connected. Required by the protocol.
- Reconnect attempts while disconnected, spaced by how long the glasses have been gone: every 2 seconds for the first half minute, then easing to once every 5 minutes after an hour. Roughly 115 attempts in the first hour of absence, then 12 an hour. Opening the app brings the next one forward.
- Battery level read every 90 seconds while connected.
- No location polling. Location is read once when weather is refreshed, and continuously only while the speedometer card is on screen.
- No background network activity. Nothing is synced, uploaded or reported — including your recordings, which never leave the phone unless you export one yourself. See PRIVACY.md.
Android suspends background work when the screen has been off for a while, and several manufacturers go considerably further than Android does. A foreground service survives Doze; it does not always survive an OEM task killer.
Ask for the battery optimisation exemption when the app offers it — it is in the permissions screen, and without it the connection will drop whenever the phone sleeps. On devices from manufacturers that ignore that exemption, the app also has to be allowed to start automatically and be locked in the recent apps list. Those settings live in different places on every brand; dontkillmyapp.com lists them per manufacturer.
If the connection drops overnight despite all of that, it is worth reporting with the device model — that is the kind of thing no amount of reading the code will reveal.
This is a fork of AGiXT/mobile with everything that was not about the glasses taken out:
| Removed | Why |
|---|---|
| AI assistant and chat | The point of the fork |
| Accounts, login, OAuth | The app has no server to log into |
| Solana wallet integration | Nothing to do with glasses |
| Remote command execution | The server could read contacts, send SMS, take photos, read files |
| Wear OS companion app | Not a G1 |
| The iOS project | Never compiled, and could not work: notification access, the background service, the app list and the offline speech model are all Android-only |
| Android digital assistant | Existed only to launch the AI |
| Discord build webhook | Sent commit messages and usernames to a third-party chat |
Android permissions went from 33 to 18. Every network request the app makes is optional:
api.open-meteo.comfor the weather widget, if you enable italphacephei.comonce, to download the offline speech modelapi.github.comto check for a newer release, if you leave that onraw.githubusercontent.comfor the extension catalogue, when you ask for itapi.anthropic.comfor Claude, the assistant, once you paste your own API key- your own Home Assistant, if you connected one
No account, no telemetry, and every network request optional — including the two that go to servers you chose yourself. Recordings stay in the app's own private storage and are uploaded nowhere. The full statement is in PRIVACY.md.
Counted from the working tree, not estimated.
| Dart | 27 900 lines across 135 files |
| Native C and C++ | 26 300 lines — the LC3 decoder and noise suppression, inherited |
| Tests | 474, in 54 files |
| Static analysis | 0 issues; CI fails on a single info-level hint |
| Android permissions | 18, down from 33 |
| Dependencies | 29, down from 43 |
| Network requests | 6, every one optional and switchable off |
| APK | 47 MB for arm64, 40 MB for armeabi-v7a — one file per architecture, not a universal build |
Roughly 12 000 of the surviving Dart lines are inherited from AGiXT/mobile, mostly the Bluetooth layer. The 35 commits since the fork removed 41 000 lines and added the glasses features listed above.
The badges above are rendered by GitHub when you read this page. They are not part of the app and the app never contacts those hosts — see PRIVACY.md for the ones it does contact.
What works, what waits on a device, and what is open for anyone to take: ROADMAP.md.
Fork, branch, pull request — see CONTRIBUTING.md. Bug reports go through issues, and the template asks for a diagnostic report because almost everything that has broken here compiled cleanly and passed its tests first.
AI-assisted contributions are accepted; AI-POLICY.md says what is expected of them, and states the one rule that is not negotiable: no accounts, no telemetry, no phoning home.
flutter pub get
flutter build apk --release
CI builds an APK on every push and attaches it as an artifact. A release is cut only by pushing a tag, so ordinary commits do not create versions:
git tag v1.1.0
git push origin v1.1.0
android/keystore.properties and android/app/keystore/ are gitignored, and
CI deletes the key it restores as soon as the build ends. Without a key the
build still succeeds and produces a debug-signed APK, so a fork or a pull
request is never blocked — but a debug-signed APK must not be published.
That last point is the one that bites. Android ties an app's identity to its signature: an APK signed with one key cannot be updated by an APK signed with another. Publish once with the debug key and every later release becomes an uninstall-and-lose-your-data affair. Sign properly before the first release, and keep that key somewhere you will still have it in five years.
To create one:
keytool -genkeypair -v -keystore android/app/keystore/release.jks \
-alias release -keyalg RSA -keysize 4096 -validity 10000
Then write android/keystore.properties:
storePassword=...
keyPassword=...
keyAlias=release
storeFile=../app/keystore/release.jks
For CI, add two repository secrets: KEYSTORE_BASE64, the keystore as
base64 -w0, and KEYSTORE_PASSWORD.
Even Realities G1 BLE Protocol.txt documents the BLE commands this app uses,
and docs/PROTOCOL_NOTES.md sorts what the app
actually does by how well it is established: confirmed on real glasses,
inherited and working but unexamined, or reimplemented from another project
and never seen working. A byte that displays on a lens and a byte that looks
right in a capture are not the same kind of fact.
Hardware figures that shape the code, from the manufacturer's own specifications:
| Display | 640 × 200, monochrome green micro LED, 25° field of view |
| Refresh | 20 Hz — which is why directions and speed are throttled rather than redrawn on every update |
| Scripts | Latin, Japanese, Korean and simplified Chinese. Cyrillic, Arabic, Hindi, Bengali and traditional Chinese are not drawable and are refused before sending |
| Battery | 160 mAh in the glasses, 2000 mAh in the case |
| Microphones | Two |
The bitmap helper works on a 576 × 136 canvas, which is not the display resolution above. It is not an inherited mistake: two independent implementations treat 576 × 136 as the surface the BLE commands actually drive, with text composed inside a 488 pixel column at font size 21, five lines to a screen. The 640 × 200 figure is the optics; 576 × 136 is what arrives over the air. The lens mirror in Settings > Debug draws that canvas from the bytes the app writes, so a layout can be checked without wearing anything.
Nobody has the manufacturer's documentation, so the protocol is what several projects have independently worked out. Where they disagree, glasses decide.
| even_glasses | Python, the oldest reference that still runs |
| fahrplan | Flutter, the ancestor of this codebase's Bluetooth layer |
| openg1-sdk | Python, a protocol specification with confidence levels and 83 conformance vectors, plus a simulator |
| g1bridge | Python, verified on hardware in September 2026 |
| even-utils | Java, the only project to have worked out the dashboard's second pane |
What ships inside the APK that someone else wrote is listed in THIRD_PARTY.md, and shown in the app under Settings > About > Licence.
Copyright (c) 2026 Simon Labbé. Licensed under the EUPL v. 1.2 — the European Union Public Licence, a copyleft licence: you may use, modify and redistribute the code, including commercially, and what you distribute you must distribute under the EUPL or a compatible licence (its appendix lists the GPL, AGPL, LGPL, MPL 2, EPL, OSL and CeCILL families).
The code this project inherited was published under the BSD 2-Clause licence and stays under it: the original notice is kept in LICENSES/BSD-2-Clause-even-realities.txt and shown in the app under Settings > About > Licence, and it must travel with any copy of that code or of a binary built from it. New contributions are accepted under the EUPL.
The lineage, since this repository is no longer marked as a fork and nothing else records it:
- the copyright notice names even-realities
- AGiXT/mobile built the AI assistant on top of it, starting May 2025
- this repository removed that assistant and everything else unrelated to the glasses
Roughly 12 000 of the surviving lines are inherited, mostly the BLE layer and the LC3 decoder. That work is not mine and the licence is theirs.

