The app slot
The glasses app ships one starter behind the launcher. app/src/apps/starter/ is the slot you replace, with a GlassKit Studio eject or your own code.
The Vite glasses app ships one app: the starter checklist in
app/src/apps/starter/. That folder is the app slot, and replacing
it is the whole workflow.
Two ways to fill the slot
Describe your idea in GlassKit Studio and Eject to Stack drops the generated app into the slot and registers it. Or build by hand: copy the starter's folder shape and register yours the same way.
The shape
An app is a folder with an app.tsx entry (default export) plus any
components or lib files beside it:
The component receives one prop, onExit, which returns the user to
the launcher:
export default function YourApp({ onExit }: { onExit: () => void }) {
// your 600×600 screen(s)
}Registering
Registration is one entry in the APPS const in app/src/App.tsx:
import YourApp from "./apps/your-app/app";
const APPS = {
yourApp: {
label: "Your App",
tagline: "One line for the launcher",
Component: YourApp,
},
} as const;Add more entries and the launcher lists them; with a single entry the launcher is a one-item menu. The starter can be deleted the moment your app exists.
Under it
Everything the slot sits on is already wired and typed: the vendored
GlassKit components in app/src/components/glasskit/, the
@glasskit-ui/react SDK (D-pad, sensors, viewport), Convex auth via
the companion pairing flow, and — once you enable the
AI add-on — the useAi() seam. Design notes for
common interaction shapes live in the repo under docs/recipes/.
AI coding tools
GlassKit is built for Claude Code, Cursor, and Codex. Per-workspace AGENTS.md, .cursor rules, and Meta's official Web Apps plugin pre-vendored under .claude/skills/.
glasses-ui API reference
The typed 600×600 + D-pad + sensor primitives Meta doesn't ship. Public API of @glasskit/glasses-ui.