Orbit
Tech Stack

Opinionated on the parts that don't matter, flexible on the ones that do.

Orbit is built on libraries you'd pick anyway. Pick your frontend framework at scaffold time. Swap billing, jobs, email, or uploads by replacing one adapter — each lives behind a port.

Frontend
Choose one

Pick one — or keep both. Framework is chosen at scaffold time.

  • Next.js 16

    App Router + Turbopack. Server components, server actions, the usual.

    Option
  • TanStack Start

    Vite + TanStack Router file-based routes. Fully client-first with an SSR story.

    Option
  • React 19

    Shared across both shells. Strict mode on.

  • Tailwind CSS v4

    New engine, design tokens in CSS, no tailwind.config.js.

  • cossui

    ~55 accessible components in packages/ui, yours to own and extend.

  • TanStack Query & Router

    Server state + typed client routing (Router on the Start shell).

Backend

Hono on Node, typed end-to-end. No framework magic.

  • Hono 4

    Fast, type-safe routing. Node adapter + WS upgrade.

  • TypeScript 6

    Strict settings across every workspace.

  • Zod 4

    Runtime validation at the HTTP boundary.

  • ws

    Native WebSocket server for the realtime hub.

Database

One Postgres database, one Prisma schema, branded IDs throughout.

  • PostgreSQL

    You bring the database. Any Postgres works.

  • Prisma 7

    Schema, migrations, generated client in apps/api.

  • UUIDv7 + prefixes

    Typed branded IDs: ws_*, team_*, mbr_*, sub_*, etc.

Auth

better-auth does the hard parts. Providers are feature-flagged.

  • better-auth

    Sessions, cookies, OAuth, magic link, admin plugin.

  • Magic link

    Passwordless email. Dev endpoint logs the URL in console.

    Default
  • OAuth

    Google + Apple wired in. Buttons hide when creds are missing.

    Default
  • Email + password

    Optional. Stored on the accounts table.

Billing
Choose one

Subscriptions behind a BillingProvider port. Pick one adapter.

  • Stripe

    The default. Checkout, portal, subscription webhooks.

    Default
  • Polar

    Merchant-of-record, indie-friendly pricing.

    Option
  • Dodo Payments

    Merchant-of-record via a Stainless-generated SDK.

    Option
  • BillingEvent ledger

    Append-only row-per-webhook, idempotent and audit-friendly.

Email

Mailer is a port. Templates are plain React components.

  • Resend

    Default adapter. Swap for anything that sends mail.

    Default
  • React Email

    Components for magic-link and invite templates.

  • Console mailer

    Fallback adapter used in dev — emails print to stdout.

Jobs & cron
Choose one

Background work behind a JobQueue / JobRuntime pair.

  • graphile-worker

    Postgres-backed queue with cron. Zero extra infra.

    Default
  • Upstash QStash

    Managed HTTP queue. Great for serverless.

    Option
  • No-op runtime

    Inline execution for tests and seeds.

Uploads

One provider today, pluggable via an Uploads bounded context.

  • UploadThing

    Presigned uploads, typed router, avatars out of the box.

Tooling & CI

The bits that make a monorepo actually work.

  • Turborepo

    Pipelines for dev, build, typecheck, lint.

  • Vite 8

    Dev server for the TanStack shells and www.

  • Vitest 4

    Unit + integration tests for the api workspace.

  • tsx

    Zero-config TypeScript runner for api dev and scripts.

Icons, fonts, utilities

Small choices you don't have to re-make.

  • lucide-react

    Icon set used across ui and www.

  • Geist + Inter

    Variable fonts, self-hosted via @fontsource-variable.

  • CVA + tailwind-merge

    Variant APIs for the ui package.