Open-source, local-first AI mobile app builder; type a prompt, & an agent writes a real Expo (React Native) app to disk while you sit and watch it run in a live preview within seconds. Then, iterate.
Think "Rork.com, but open source and running locally."
Milestones M0 through M3a are complete, and M4a (export to a standalone repo), M4b (native builds via EAS), and M4c (portable project bundles plus static snapshots) have landed. Today Kira can take a prompt, generate a real Expo app, run it in a live web preview, auto-repair bundle and type errors, and let you iterate by chat. Generated apps persist as projects in SQLite, each with its own chat history, and every model call routes through a settings store with bring-your-own-key support (Claude, plus other providers and local Ollama). Any project can be exported to a clean, standalone Expo app you own: a portable folder that runs with npm install and npx expo start, with its own git repo and no dependency on Kira.
See docs/ARCHITECTURE.md for the full design and roadmap.
Kira does not simulate a runtime. It wraps a REAL Expo project on disk:
- An agent (Vercel AI SDK, bring-your-own-key, default Claude) edits files in a sandboxed project directory using a small set of tools: list, read, write, delete, run command, get preview errors.
expo startIS the runtime. You get Metro bundling, a web preview, an Expo Go QR for devices, hot reload, and the error overlay for free.- A repair loop bundles and typechecks after each generation, feeds any errors back to the model, and auto-fixes up to three times before surfacing to you.
Everything runs locally. No cloud, no auth, no billing in v1. Seams are left for a hosted mode later.
- Node 20.19.4 or newer (Node 22 LTS or 24 recommended)
- pnpm 9 or newer (
corepack enable pnpm, ornpm i -g pnpm) - Git
pnpm install # installs monorepo tooling (turbo, typescript, prettier)
pnpm demo:web # starts the workspace/demo Expo app on http://localhost:8081Open http://localhost:8081 in your browser. You should see the Kira demo screen.
Edit workspace/demo/src/app/index.tsx and it hot-reloads.
The workspace/demo app is a standalone Expo project with its own node_modules. If you
cloned fresh and it was not installed yet, run:
npm --prefix workspace/demo installopenrork/
apps/
studio/ # the Next.js orchestrator and UI (chat, projects, settings, preview)
packages/
orchestrator/ # the agent loop, file tools, Expo runtime, eval harness
workspace/ # generated Expo apps live here, one directory per project
demo/ # M0 proof: a real Expo SDK 54 app, standalone install
docs/ # architecture and design notes
workspace/ is intentionally NOT a pnpm workspace member. Each app under it is a
standalone, independently installed Expo project, exactly like the apps the agent will
generate. This keeps React Native and Metro out of pnpm's symlinked store, which is the
single biggest Expo-in-a-monorepo footgun.
- M0 (done): monorepo plus an Expo demo that renders on web.
- M1a (done): the orchestrator API. A tools-enabled agent reads and writes files in a project directory and runs Expo.
- M1b (done): the UI. Chat pane, file tree, embedded web preview.
- M1c (done): the error-repair loop and a small eval set.
- M2 (done): iterate on an existing app via chat with surgical follow-up edits, plus token-usage and cost accounting in the eval harness.
- M3a (done): multiple projects persisted in SQLite with per-project chat, a projects home, an Expo dev server scoped to the active project, and a settings screen for provider, model, API keys, and Ollama with bring-your-own-key.
- M4a (done): export any project as a clean, standalone Expo app you own. Copies the project out of the workspace (excluding node_modules, caches, logs, env files, and local state), generates a README with the pinned Expo SDK and run steps, writes an Expo .gitignore, initializes a git repo with an initial commit, detects gh for a one-line GitHub push, and runs a self-sufficiency check (npm install plus a web bundle) in the exported folder.
- M4b (done): native build handoff through EAS. From a finished project, start a cloud EAS Build (an Android .aab or an iOS .ipa) on your own Expo account and, optionally, submit it to Play internal testing or TestFlight, without leaving the studio. Detects or scaffolds eas.json with development, preview, and production profiles, validates and can safely fill the required app config fields, links the project, streams build logs into the existing Logs pane, and surfaces the EAS dashboard link and the downloadable artifact URL. EAS manages signing on your account; no Expo, Apple, Google, keystore, or App Store Connect secret is ever stored or logged.
- M4c (done): local-first sharing. Export any project as a single portable .zip bundle (source, assets, package files, the pinned Expo SDK config, and a manifest, with no node_modules, caches, logs, env files, or secrets) that imports into any other OpenZork and runs unchanged, or generate a static, read-only web snapshot to host anywhere or open locally. Import validates the manifest and every zip entry (no path traversal) before unpacking, warns on an SDK mismatch, and never overwrites an existing project.
- M5 (later): hosted accounts, live shared sessions, team workspaces, and cloud sync.
- Later: device QR plus tunnel and multi-screen routing polish.
MIT. See LICENSE.
