Skip to main content
The project.yaml file lives at orgs/<org-name>/<project-name>/project.yaml and defines project-level settings. The presence of this file is what tells Applad that the directory is a project — no explicit listing required.

Basic Structure

id: "mobile-app"
name: "Mobile App"
org: "acme-corp"
description: "Consumer mobile application"
id
string
required
Unique identifier for the project (used in URLs and references)
name
string
required
Human-readable project name
org
string
required
Organization ID this project belongs to (must match parent org directory)
description
string
Optional description of the project

Project Features

Enable or disable features at the project level:
features:
  graphql: true
  realtime: true
  messaging: true
  flags: true
  analytics: true
  deployments: true
  instruct: true
features.graphql
boolean
default:"true"
Enable GraphQL API for this project
features.realtime
boolean
default:"true"
Enable real-time subscriptions
features.messaging
boolean
default:"true"
Enable messaging system (email, SMS, push, etc.)
features.flags
boolean
default:"true"
Enable feature flags
features.analytics
boolean
default:"true"
Enable analytics collection
features.deployments
boolean
default:"true"
Enable deployment pipelines
features.instruct
boolean
default:"true"
Enable Applad Instruct for this project

Environments

Define environments and their infrastructure targets:
environments:
  - name: "development"
    url: "http://localhost:8080"
    infrastructure:
      type: "local"

  - name: "staging"
    url: "https://staging-api.myapp.com"
    infrastructure:
      type: "vps"
      host: "staging.acme-corp.com"
      user: "applad"
      ssh_key: "ci-github-actions"
      docker_host: "unix:///var/run/docker.sock"

  - name: "production"
    url: "https://api.myapp.com"
    infrastructure:
      type: "vps"
      host: "prod-01.acme-corp.com"
      user: "applad"
      ssh_key: "ci-github-actions"
      docker_host: "unix:///var/run/docker.sock"
environments[].name
string
required
Environment name (e.g., "development", "staging", "production")
environments[].url
string
required
Base URL where this environment is accessible

Infrastructure Types

Runs on your local machine using Docker Compose. No authentication required.
infrastructure:
  type: "local"
applad up synthesizes a docker-compose.yml and runs it locally. Same containers as staging and production. Only Docker required — no Dart tooling needed.
Runs on a VPS (Virtual Private Server) via SSH.
infrastructure:
  type: "vps"
  host: "staging.acme-corp.com"
  user: "applad"
  ssh_key: "ci-github-actions"
  docker_host: "unix:///var/run/docker.sock"
infrastructure.host
string
required
SSH hostname or IP address
infrastructure.user
string
required
SSH username (typically "applad")
infrastructure.ssh_key
string
required
SSH key label from org.yaml ssh_keys section
infrastructure.docker_host
string
default:"unix:///var/run/docker.sock"
Docker socket path on the VPS
Provision resources on cloud providers (AWS, GCP, Azure, etc.)
infrastructure:
  type: "cloud"
  provider: "aws"
  region: "us-east-1"
  credentials: "aws-production"
infrastructure.provider
string
required
Cloud provider: "aws", "gcp", "azure", etc.
infrastructure.region
string
required
Cloud region (e.g., "us-east-1", "eu-west-1")
infrastructure.credentials
string
required
Credential reference from admin database

Cloud Adapters

Cloud resources used on-demand alongside VPS infrastructure:
environments:
  - name: "production"
    url: "https://api.myapp.com"
    infrastructure:
      type: "vps"
      host: "prod-01.acme-corp.com"
      user: "applad"
      ssh_key: "ci-github-actions"
    
    cloud_adapters:
      - provider: "aws"
        region: "eu-west-1"
        credentials: "aws-production"
        services:
          - s3
          - ses
          - rds

      - provider: "cloudflare"
        credentials: "cloudflare-prod"
        services:
          - r2
          - workers
cloud_adapters[].provider
string
required
Cloud provider: "aws", "gcp", "azure", "cloudflare", etc.
cloud_adapters[].region
string
Cloud region (provider-dependent)
cloud_adapters[].credentials
string
required
Credential reference from admin database
cloud_adapters[].services
array
required
List of services to enable (e.g., s3, ses, rds, r2, workers)
Provisioning and Teardown
  • Cloud adapters are provisioned by applad up when first referenced
  • Torn down explicitly via applad cloud tear-down <id>
  • Resources persist between deployments unless explicitly removed

Member Access

Project-level role overrides and time-limited access live in the admin database, managed via applad access commands or the admin UI. They are not defined in project.yaml.Editing this file does not change what anyone can do.

Complete Example

id: "mobile-app"
name: "Mobile App"
org: "acme-corp"
description: "Consumer mobile application"

features:
  graphql: true
  realtime: true
  messaging: true
  flags: true
  analytics: true
  deployments: true
  instruct: true

environments:
  - name: "development"
    url: "http://localhost:8080"
    infrastructure:
      type: "local"

  - name: "staging"
    url: "https://staging-api.myapp.com"
    infrastructure:
      type: "vps"
      host: "staging.acme-corp.com"
      user: "applad"
      ssh_key: "ci-github-actions"
      docker_host: "unix:///var/run/docker.sock"

  - name: "production"
    url: "https://api.myapp.com"
    infrastructure:
      type: "vps"
      host: "prod-01.acme-corp.com"
      user: "applad"
      ssh_key: "ci-github-actions"
      docker_host: "unix:///var/run/docker.sock"

    cloud_adapters:
      - provider: "aws"
        region: "eu-west-1"
        credentials: "aws-production"
        services:
          - s3
          - ses
          - rds

      - provider: "cloudflare"
        credentials: "cloudflare-prod"
        services:
          - r2
          - workers

Project Structure

Once you’ve created project.yaml, organize your project with these subdirectories:
orgs/acme-corp/mobile-app/
├── project.yaml
├── .env.example (auto-generated)
├── auth/
│   └── auth.yaml
├── database/
│   ├── database.yaml
│   ├── migrations/
│   └── tables/
├── storage/
│   ├── storage.yaml
│   └── buckets/
├── functions/
├── workflows/
├── messaging/
│   ├── messaging.yaml
│   └── templates/
├── flags/
├── deployments/
├── realtime/
├── analytics/
└── observability/

Next Steps

Environments

Configure environment-specific overrides

Database Schema

Set up database connections and tables

Functions

Create serverless functions

Deployments

Configure deployment pipelines

Build docs developers (and LLMs) love