Thanks for your interest. This project was built at a 24-hour hackathon and is genuinely early — a lot of things are stubs or "Phase 3 — coming." Contributions are welcome.
git clone https://github.com/sidkandan/GeminiDisplayKit
cd GeminiDisplayKit
npm install
cp .env.example .env # set GEMINI_API_KEY
# Test the CLI works
node bin/gdk.mjs --help
# Run the framework smoke test
npm testEach of these is a contained piece of work that would meaningfully improve the framework:
templates/rhythm/— extract the PulseBlade example into a reusable templatetemplates/quest/— extract the Director + scavenger pattern into a reusable templatetemplates/arena/— wrap Prompt Arena's Python engine via anomni.config.mjsthat shells out- Refactor
examples/prompt-arena/to depend on the framework — seeexamples/prompt-arena/BONUS-NOT-DEMOED.md gdk capture --source dat|pixel|file— currently a stub; needs to shell out to operator-gated capture scripts- Unit tests for the bridge router —
src/bridge/server.mjsroute matching has no test coverage - Hot-reload for
display/files ingdk dev— currently a manual refresh - TypeScript types — JSDoc is in place but a
.d.tswould be nice
See docs/architecture.md for the full design.
src/
├── bridge/ HTTP + SSE + static + per-game routes
├── tools/ Wrappers for every Gemini surface used in glasses games
├── display/ Drop-in CSS/JS for the 600×600 HUD
├── commands/ One file per CLI subcommand
├── utils/ QR + tunnel helpers
├── cli.mjs Dispatch + flag parser
└── index.mjs Public SDK surface
- Adds or updates docs in
docs/if the change is user-facing - Does not introduce any new dependencies without discussion
- Does not commit
.env,node_modules/,.venv/, or any API keys - Runs
bash scripts/scrub-for-publish.shclean (no API keys, no/Users/paths) -
npm testpasses - Updates
PROVENANCE.mdif you've added new files - Adds yourself to
CONTRIBUTORS.mdif this is your first PR
- Plain
.mjsmodules with JSDoc types - No bundler, no transpiler
- Match the surrounding code's comment density and naming
- One concept per file; small files preferred
Open a GitHub issue for any non-trivial change before sending a PR. We can align on scope first, save you time.
By contributing, you agree your contributions will be licensed under the project's MIT License.