# Even G2 App Lab 🕶️⭐ > **The repo that gives back.** Everything here — docs, tooling notes, starter code, hard-won gotchas — is free for every Even Realities G2 developer. Take it, build on it, ship faster. Built and maintained by **drjones** — homelab warlord, red teamer, and the guy who reads the SDK type definitions so you don't have to. If this repo saved you a weekend of debugging, pour one out for the countless hours spent discovering that the simulator sends `sysEvent` but hardware sends `textEvent`. ## What's in here | Path | What it is | |---|---| | `apps/` | Working G2 apps — each one verified in the simulator before it lands | | `docs/pages/` | Full snapshot of the official Even Realities developer docs, converted to clean markdown (28 pages) — grep it, feed it to your agent, don't scrape it again | | `README.md` | This love letter | ## Why this exists The G2 platform is awesome but the docs are a website and the SDK is a black box. This repo is: 1. **A local docs mirror** — the entire developer documentation, markdown-ified, so it's searchable offline and LLM-friendly 2. **Proven starter code** — every app here has been booted in the simulator, click-tested through the automation API, and screenshot-verified on the framebuffer 3. **A graveyard of gotchas** — so they only kill each of us once ## The golden gotchas (learned the hard way) - **Simulator ≠ hardware**: simulator clicks arrive as `sysEvent`, real glasses send `textEvent`. Handle BOTH or your app works in dev and dies in the wild. - **SDK 0.0.14 API**: bridge methods are on the instance (`bridge.createStartUpPageContainer(...)`), containers must be **class instances** (`new TextContainerProperty({...})`), not plain objects. - **`min_sdk_version` in `app.json` must match** the SDK version in `node_modules` — mismatch = rejected. - **HMR breaks the bridge** — restart the simulator after code changes. - **`waitForEvenAppBridge()` before everything** — instant in sim, waits on hardware. - **Network whitelist is NOT a CORS bypass** — your API needs real CORS headers too. - **npm `omit=dev` silently skips devDependencies** — check `npm config get omit` if `tsc` "doesn't exist". ## Toolchain | Tool | Version | |---|---| | `evenhub` CLI | 0.1.13 | | `evenhub-simulator` | 0.8.0 | | `@evenrealities/even_hub_sdk` | 0.0.14 | | Node | 20+ | ## Quick start (one app, five commands) ```bash npm create vite@latest my-app -- --template vanilla-ts cd my-app && npm install npm install @evenrealities/even_hub_sdk@latest npm run dev # :5173 evenhub-simulator http://localhost:5173/ --automation-port 9898 ``` Then drive it like a robot (the way apps should be tested): ```bash curl http://127.0.0.1:9898/api/ping # -> pong curl -X POST http://127.0.0.1:9898/api/input -H 'Content-Type: application/json' -d '{"action":"click"}' curl -s http://127.0.0.1:9898/api/screenshot/glasses -o frame.png ``` ## License / ethos Copy freely. The glasses render monochrome green at 576×288 — there's enough room in this world for all our apps. 🟢 --- *Hydroponics, homelabs, and head-mounted displays. — Indiana "drjones" Holmes*