Getting started
The fastest way to a working project is the create-devora installer. It works from an empty directory — you don't need a devora.config.ts or any framework files first.
npx create-devora@latest
Yarn and pnpm both work the same way: yarn create devora or pnpm create devora.
What it asks
Run with no flags in a real terminal, it prompts for three things in order:
1. Project name. Defaults to my-devora-app. This becomes the directory the CLI creates — it refuses to run if that directory already exists.
2. App names (comma-separated). Defaults to marketing,dashboard,admin. Each name becomes one app under apps/ — this is where multi-app is decided. A single-app project just answers with one name; a project with a public site, a logged-in product, and an internal panel answers with three. You can add or remove apps later with devora add/devora remove, so this choice isn't permanent.
3. Auth mode, once per app. For each app name, it asks: "Does <app> need auth/sessions? [shared/isolated/none] (default: shared)". This is the per-app choice described in Core concepts — shared puts the app on the project's common login/session, isolated gives it its own session cookie and secret (e.g. an admin panel with a different identity provider), and none disables the session/cookie/CSRF carrier for that app entirely (e.g. a marketing site with no login anywhere). A marketing-style app should answer none — it never generates a login route or expects a session secret.
Every prompt has a non-interactive fallback: running in a script or CI (no real TTY) skips straight to the defaults above, and --apps=/--auth=name:mode,... flags let you skip the prompts entirely while scripting a scaffold.
Resulting project structure
For the default answers (project name, three apps, all shared auth), you get:
my-devora-app/
├── devora.config.ts # declares all apps, project-level auth default
├── packages/
│ ├── core/ # shared logic: types, utils, data client
│ └── backend/ # the shared backend — server functions + DB client
│ ├── functions/
│ └── db/
└── apps/
├── marketing/
│ ├── routes/
│ ├── app.config.ts
│ └── nav.ts
├── dashboard/
│ ├── routes/
│ ├── app.config.ts
│ └── nav.ts
└── admin/
├── routes/
├── app.config.ts
└── nav.tsEach app scaffolded with shared or isolated auth also gets a login.tsx/logout.tsx route pair and a protected demo route, wired up to the session carrier described in Security model. An app scaffolded with none skips all of that — no login button, no session dependency.
Next steps
After scaffolding (or after the installer's own dependency install finishes), run cd my-devora-app && devora dev to start every app in dev mode, or devora dev --app=dashboard to run just one. See the CLI reference for every command.