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
| Setting | What it is |
|---|---|
name | Lowercase letters, digits and dashes, 3–50 characters. Every resource is named after it. |
repo | owner/repository on GitHub. |
branch | The branch that deploys. Defaults to main. |
framework | A hint for the host, such as nextjs. Detected when left out. |
domain | The web app's custom domain. |
hosting | The web app. false for an app that is only background processes. |
processes | Web services, workers and cron jobs on Render. |
services | The database, Redis, email, sign-in, storage, payments and bot protection. |
monitor | Extra https URLs for the health check to probe. |
dns | { "provider": "cloudflare" } to have DNS records added for you. |
hosting
| Setting | What it is |
|---|---|
rootDir | The folder the web app lives in, for a monorepo. |
healthCheckPath | The path health checks probe, such as /api/health. |
env | Extra variables for the web app only. May use ${env.KEY} and ${processes.NAME.url}. |
secrets | Limits which variables the web app receives. |
provider | vercel (the default) or cloudflare-pages. |
outputDir, buildCommand | Cloudflare 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
| Setting | What it is |
|---|---|
name | Used to name the service, and in ${processes.NAME.url}. |
type | web, worker or cron. |
runtime | docker, node or python. Docker needs no start; the others do. |
build, start | Build defaults to npm install or pip install -r requirements.txt. |
schedule | Cron jobs only, a cron expression in UTC. |
rootDir, domain, plan, region | The folder, a custom domain, and Render's plan and region names. |
disk | A persistent disk for a web or worker process: { "mountPath": "/data", "sizeGB": 1 }. |
env, secrets | As for hosting. |
services
| Service | Settings |
|---|---|
database | provider: 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. |
email | domain, the sending domain. |
auth | Supabase Auth by default: providers (github, google) and redirectUrls. { "provider": "clerk" } uses Clerk instead. |
storage | provider: r2 (default) or supabase, and buckets, each with name, public, and on Supabase maxFileSizeMB and allowedTypes. |
payments | provider: 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'senv.
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.