Reference

launchpad.json

Every setting in the file that describes your app, with examples.

One file describes your app. The console writes it for you from the configure screen; you can also write it by hand and commit it, in which case the console reads it on import.

A full example

{
  "name": "my-app",
  "repo": "you/my-app",
  "branch": "main",
  "framework": "nextjs",
  "domain": "app.example.com",
  "hosting": {
    "rootDir": "frontend",
    "healthCheckPath": "/api/health",
    "env": { "NEXT_PUBLIC_API_URL": "${processes.api.url}" },
    "secrets": ["NEXT_PUBLIC_SUPABASE_URL", "NEXT_PUBLIC_SUPABASE_ANON_KEY"]
  },
  "processes": [
    { "name": "api", "type": "web", "runtime": "python", "rootDir": "backend",
      "start": "uvicorn app.main:app --host 0.0.0.0 --port $PORT",
      "healthCheckPath": "/ping", "domain": "api.example.com" },
    { "name": "worker", "type": "worker", "runtime": "node", "start": "node worker/index.js" },
    { "name": "nightly", "type": "cron", "runtime": "node", "start": "node jobs/nightly.js", "schedule": "0 3 * * *" }
  ],
  "services": {
    "database": { "provider": "neon", "region": "aws-us-east-1" },
    "redis": {},
    "email": { "domain": "mail.example.com" },
    "auth": { "providers": ["github"] },
    "storage": { "provider": "r2", "buckets": [{ "name": "uploads" }] },
    "payments": { "products": [{ "key": "pro", "name": "Pro", "prices": [{ "key": "monthly", "amount": 2000, "currency": "usd", "interval": "month" }] }] },
    "botProtection": {}
  },
  "dns": { "provider": "cloudflare" }
}

Include only what you use. A valid file can be as short as a name and a repository.

Top level

SettingWhat it is
nameLowercase letters, digits and dashes, 3–50 characters. Every resource is named after it.
repoowner/repository on GitHub.
branchThe branch that deploys. Defaults to main.
frameworkA hint for the host, such as nextjs. Detected when left out.
domainThe web app's custom domain.
hostingThe web app. false for an app that is only background processes.
processesWeb services, workers and cron jobs on Render.
servicesThe database, Redis, email, sign-in, storage, payments and bot protection.
monitorExtra https URLs for the health check to probe.
dns{ "provider": "cloudflare" } to have DNS records added for you.

hosting

SettingWhat it is
rootDirThe folder the web app lives in, for a monorepo.
healthCheckPathThe path health checks probe, such as /api/health.
envExtra variables for the web app only. May use ${env.KEY} and ${processes.NAME.url}.
secretsLimits which variables the web app receives.
providervercel (the default) or cloudflare-pages.
outputDir, buildCommandCloudflare Pages only: the folder the build writes, and how to build.

Cloudflare Pages suits static sites and Vite, Astro or SvelteKit apps. Next.js stays on Vercel, because Cloudflare's Next.js adapter for Pages is deprecated.

processes

SettingWhat it is
nameUsed to name the service, and in ${processes.NAME.url}.
typeweb, worker or cron.
runtimedocker, node or python. Docker needs no start; the others do.
build, startBuild defaults to npm install or pip install -r requirements.txt.
scheduleCron jobs only, a cron expression in UTC.
rootDir, domain, plan, regionThe folder, a custom domain, and Render's plan and region names.
diskA persistent disk for a web or worker process: { "mountPath": "/data", "sizeGB": 1 }.
env, secretsAs for hosting.

services

ServiceSettings
databaseprovider: neon, coolify (Postgres on your own server, beside an app hosted there; see Your own server) or supabase (used when provider is left out; the console's import picks Neon unless the app needs Supabase sign-in or storage). region, and urlScheme to change DATABASE_URL's scheme, such as postgresql+asyncpg. On Neon, previews: own (the default) gives previews and local development their own copy of the database; shared gives them production's.
redis{}, or region and eviction.
emaildomain, the sending domain.
authSupabase Auth by default: providers (github, google) and redirectUrls. { "provider": "clerk" } uses Clerk instead.
storageprovider: r2 (default) or supabase, and buckets, each with name, public, and on Supabase maxFileSizeMB and allowedTypes.
paymentsprovider: stripe (default) or razorpay. products with prices (amount in the currency's smallest unit), webhookPath and events.
botProtection{}.

Referring to other values

  • ${env.KEY} is any service variable or secret.
  • ${processes.NAME.url} is a web process's address, usable in the web app's env.

Validation

The file is checked before anything is created, and every problem is listed at once, with the setting's name and what it expects. In the console, an invalid file is refused on import with the same messages.

Something missing or wrong? Edit this page on GitHub or email hello@axonscape.com.