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 conceptsshared 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.ts

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