Orbit
01 · Getting started

Prerequisites

A short list of tools you'll need on your machine before running the CLI.

ToolVersionNotes
Node.js≥ 18.1720 or 22 LTS recommended — React 19 and the ORM client use modern APIs.
npm10.9.7Pinned via the root packageManager field. pnpm and yarn aren't tested.
PostgreSQL≥ 14Not included in docker-compose — point DATABASE_URL at any Postgres.
GitanyThe CLI clones the template from GitHub.

Node

The CLI declares engines.node >= 18, but the starter uses React 19, a modern ORM client, and native fetch in the API — stick to Node 20 or 22 LTS for the smoothest ride.

If you're on macOS, the quickest path is brew install node. For version management, Volta and fnm both work well.

Package manager

The repo is pinned to npm via the "packageManager": "npm@10.9.7" field in the root package.json. Every workspace script expects npm run, and the lockfile is package-lock.json. Turbo drives the workspaces from there.

Note

Nothing stops you from swapping in pnpm or yarn, but you'll be off the tested path. Hooks, turbo filters, and the workspace layout were all written against npm.

PostgreSQL

Orbit's docker-compose.yml intentionally does not ship a Postgres container — you're expected to bring your own. In practice that means one of:

  • A local Postgres from Homebrew, Postgres.app, or a plain Docker container you manage yourself.
  • A managed provider: Neon, Supabase, Railway, Render, or RDS all work out of the box.

Whatever you pick, you'll end up with a URL that looks like this and goes into apps/api/.env:

apps/api/.env

DATABASE_URL="postgresql://postgres@127.0.0.1:5432/orbit?schema=public"
Heads up

If your provider uses a transaction pooler (PgBouncer, PlanetScale psdb), set DIRECT_DATABASE_URL to a non-pooled URL as well — migrations (Prisma or drizzle-kit) and graphile-worker both need advisory locks and long-lived connections that poolers drop.

Git

The CLI clones https://github.com/were-orbit/orbit-starter.git under the hood. Any recent git version works; you don't need an SSH key — the default is an HTTPS clone.

Optional

  • Docker — only if you want to run the three apps in containers via docker-compose up. Dev works fine without it.
  • smee.io — for local Stripe / Polar / Dodo webhook forwarding. Covered on the npm run dev page.