Skip to content

Code

The startup-builder framework and platform, where a Startup is files compiled by five Builders into a business with an API, SDK, CLI and MCP server.

StartupBuilder builds a business as code. A startup.ts and a few folders compile into a running Startup, with an API, SDK, CLI and MCP server for every Verb.

Three ways in

You haveStart with
Nothing yetGetting started: npm create startups to a deployed Startup that takes a test payment
A Startup built on startups.newIts repository. Repositories mirrors it to GitHub; clone the mirror and run npx startup-builder dev
A Startup and a keyCall it from your own code: API, SDK, CLI or MCP
A coding agentBuild with a coding agent

One file, one business

startup.ts
import { Startup } from 'startup-builder'

export default Startup({
  name: 'Leaseline',
  domain: 'leaseline.app',
  extends: 'solo-saas',
  idea: 'Small property managers pay to never miss a lease renewal.',
  offers: {
    pro: {
      price: { amount: 29, currency: 'USD' },
      interval: 'month',
      terms: 'Every renewal noticed at 60 days.',
    },
  },
})

Each line is read by one Builder, and everything the file leaves out comes from the Startup Template:

LineBuilderCompiles to
extends: 'solo-saas'StartupBuilderTeams, a role agent in every seat, Processes and Workflows, Settings
domainSiteBuilderA Site at leaseline.app with pricing, terms and sign-in
offers.proSalesBuilderAn Offer and its Price, the Stripe objects behind them, checkout, a billing portal
Every inherited NounSoftwareBuilderapi.sb/leaseline.app, typed $, CLI operations, MCP tools, an App

Builders as compilers shows the six steps of one compile.

One call, every Interface

Every Interface reaches the same api.sb route: Order.place is one operation, with one input and one result.

One call, from any Interface to the Workflows it wakes: Order.placePOST /{namespace}/orders/place, $.Order.place, do Order.place and do · Order.place all reach https://api.sb/{namespace}. Order.place records one Action and emits Order.placed, which also goes to webhooks and starts Deliver an outcome.APIPOST /orders/placeSDK$.Order.placeCLIdo Order.placeMCPdo · Order.placeThe one APIapi.sb/{namespace}one name, one JSON inputVerbOrder.placerecords one ActionEventOrder.placedalso sent to webhooksWorkflowDeliver an outcomeOperations TeamOne call, from any Interface to the Workflows it wakes: Order.placePOST /{namespace}/orders/place, $.Order.place, do Order.place and do · Order.place all reach https://api.sb/{namespace}. Order.place records one Action and emits Order.placed, which also goes to webhooks and starts Deliver an outcome.APIPOST /orders/placeSDK$.Order.placeCLIdo Order.placeMCPdo · Order.placeThe one APIapi.sb/{namespace}one name, one JSON inputVerbOrder.placerecords one ActionEventOrder.placedalso sent to webhooksWorkflowDeliver an outcomeOperations Team
One call, four Interfaces, one path: the client reaches the API, the Verb records an Action, its Event goes out, and every Workflow whose Trigger names that Event starts.
Read as text
  • Clients: POST /{namespace}/orders/place, $.Order.place, do Order.place, do · Order.place.
  • API: https://api.sb/{namespace}.
  • Verb: Order.place, which records one Action.
  • Event: Order.placed, also sent to webhooks.
  • Workflow: Deliver an outcome (Operations Team).

The tab

Guides

What a founder says to their agent, and the guide that does it.

You sayGuideCallsStatus
Ship my changesShip my changesChange.review, Change.merge, Version.deploylive