v3.2 · schema-first builds

Ship your backendbefore the coffee lands.

Forge turns one schema into a typed API, reversible migrations, and deploy config. One command, no YAML, no platform lock-in.

$npx forge init
  • MIT licensed
  • Node 18+
  • No telemetry
  • Zero config
schema.forgeapi.ts
saved
// one schema, everything else generated
model User {
  id        uuid     @primary
  email     string   @unique
  plan      Plan     @default(free)
  createdAt datetime @now
}

model Project {
  id     uuid    @primary
  owner  User    @relation
  name   string
}
// generated · do not edit
export type User = {
  id: string
  email: string
  plan: 'free' | 'pro'
}

// GET  /users/:id
// POST /users
// GET  /projects
// POST /projects

 4 routes
 2 tables
 types emitted
$ forge deploy✓ migration applied✓ live in 11.4s

Deploys anywhere you already run

VercelSupabaseRailwayFly.ioNeonRender

14.2k

GitHub stars

11.4s

Median deploy

<40ms

Cold start

0

Config files required

Why forge

The boring parts,
already done.

You describe the data once. Forge handles the API surface, the migration history, and the deploy, then gets out of the way.

zsh · forge
$ forge deploy --env production  reading schema.forge  ✓ 2 models, 4 routes resolved  ✓ migration 0042 applied (reversible)  ✓ types emitted to ./forge/types.d.ts  building edge bundle…  ✓ bundle 84kb gzipped  ✓ deployed to production  live in 11.4s → https://api.acme.dev

01

Types that follow the schema

Rename a column and your build fails in the right place, with the file and line. No drift between client and server.

// rename plan → tiersrc/billing.ts:42  Property 'plan' does not exist  Did you mean 'tier'?

02

Migrations you can read

Every change becomes a reversible, reviewable migration. No hand-edited SQL at 2am, no guessing what shipped.

-- 0042_add_tier.sqlALTER TABLE users  ADD COLUMN tier text  DEFAULT 'free';

03

No runtime to adopt

Output is plain TypeScript and standard SQL. Run it on your own infra, in a container, or at the edge.

// no proprietary importsimport  { db } from './forge'// that's the whole runtime

The pipeline

Schema in. Production out.

  1. 01

    Describe your data

    One schema file. Models, relations, defaults. No decorators, no config directory.

  2. 02

    Forge generates

    A typed client, REST and RPC handlers, and a reversible migration, all from that file.

  3. 03

    Deploy anywhere

    Push to your own infra or any host. Output is plain TypeScript and standard SQL.

deploy.yml#1284 · mainpassed in 11.4s
  • checkout0.4s
  • install deps2.1s
  • forge generate1.2s
  • typecheck3.0s
  • migrate --dry-run0.9s
  • deploy edge3.8s
Deployed https://api.acme.dev · 84kb gzipped · 38ms cold start

No lock-in

Your stack. Your call.

Forge is a build step, not a platform. It targets the databases and runtimes you already pay for, and leaves nothing proprietary behind.

PostgreSQLPrimary store
RedisCache & queues
SQLiteLocal & edge
S3Object storage
forge
VercelEdge functions
Fly.ioContainers
RailwayManaged
DockerAnywhere

Bring your own database

Point Forge at an existing Postgres and it introspects your tables into a schema you can version.

$ forge introspect --url $DATABASE_URL

Runs in CI unchanged

The same command works locally, in GitHub Actions, and in your deploy step. No special mode.

$ forge deploy --env staging --ci

Eject whenever

Generated code is yours. Delete Forge and the TypeScript and SQL keep working.

$ forge eject --out ./server

Trusted by teams that ship

Fewer files. Fewer incidents.

We deleted 4,000 lines of hand-rolled CRUD and the API got faster. The migration story alone paid for the switch.

Daniel Okafor

Staff Engineer

northbeam

Typecheck catches schema drift before review. We have not had a column-rename incident since.

Mei Tanaka

Platform Lead

clearpath

Ejecting was a real option, which is exactly why we never needed to. Output is just TypeScript.

Adam Reyes

CTO

driftline

Featured migration

Rails monolith to typed edge API in one sprint

How Northbeam introspected 41 existing tables, generated a typed client, and cut p95 latency without rewriting their product code.

41

tables introspected

-4,012

lines of CRUD deleted

-62%

p95 API latency

1

sprint to production

Read the migration

14.2k

GitHub stars

380+

Contributors

2.1M

Weekly downloads

99.98%

Deploy success rate

MITLicensedSOC 2Type IISemVerGuaranteedNoTelemetry

Pricing

Free to build on. Paid to scale on.

The engine is open source and always will be. You pay when a team needs to share it.

MonthlyAnnualSave 20%

Open source

The full engine, MIT licensed, forever.

$0/mo

  • Unlimited projects
  • Schema, types, migrations
  • All deploy targets
  • Community Discord
  • No telemetry, ever
npx forge init

No account required

Most popular

Team

Shared schemas and CI for a real team.

$32/seat/mo

  • Everything in Open source
  • Shared schema registry
  • Preview environments
  • CI deploy gates
  • Migration approvals
  • Priority support
Start 14-day trial

No credit card required

Enterprise

Compliance, SSO, and a name to call.

Custom

  • Everything in Team
  • SSO and SCIM
  • Audit logs
  • Self-hosted registry
  • SLA and dedicated support
  • Migration assistance
Talk to engineering

Custom pricing

One command. Then back to the product.

Scaffold a typed API in under a minute. No account, no credit card, no platform to adopt.

$npx forge init