GlassKit

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:

app.tsx
app/src/App.tsx

The component receives one prop, onExit, which returns the user to the launcher:

app/src/apps/your-app/app.tsx
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:

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/.

On this page