Writing a Launchfile

A Launchfile is a YAML file called Launchfile (no extension) that lives in your project root. It declares what your application needs — the platform handles the rest.

File structure

Every Launchfile has a name field. Everything else is optional and additive — you pay complexity cost only for the complexity you actually have.

# The simplest valid Launchfile
name: my-app
runtime: node
commands:
  start: "node server.js"

Declaring resources

Use requires for resources your app cannot run without, and supports for optional enhancements:

requires:
  - type: postgres
    set_env:
      DATABASE_URL: $url

supports:
  - type: redis
    set_env:
      CACHE_URL: $url

The $url expression resolves to the resource's connection URL at deploy time. See the expression syntax reference for all available patterns.

Environment variables

The env block declares app-owned environment variables with optional defaults, descriptions, and generators:

env:
  PORT:
    default: "3000"
  API_KEY:
    required: true
    description: "Third-party API key"
  SESSION_SECRET:
    generator: secret
    sensitive: true

Multi-component apps

For apps with multiple services (e.g., a backend API + a frontend), use the components map:

name: my-platform
components:
  api:
    runtime: node
    provides:
      - protocol: http
        port: 3000
    requires: [postgres]
    commands:
      start: "node api.js"
  web:
    runtime: node
    depends_on:
      - component: api
        condition: healthy
    provides:
      - protocol: http
        port: 3001
        exposed: true

Learn more

This guide covers the basics. For the full field reference, see the specification. For real-world patterns, browse the examples.

esc
Type to search the docs