Skip to main content

Creating a New Project

Applad projects start with applad init, which scaffolds the complete directory structure and configuration files you need to get running.

Initialize from Template

1

Choose a template

Select a template that matches your use case:
applad init --template saas    # Multi-tenant SaaS with auth and billing
applad init --template api     # Lean REST API setup
applad init --template cms     # Content management with hosting
applad init --template minimal # Bare minimum to start
2

Review the generated structure

After initialization, you’ll have:
my-project/
├── applad.yaml          # Root instance configuration
├── .env.example         # Auto-generated environment variables
├── .gitignore          # Excludes .env files automatically
└── orgs/               # Organizations directory
3

Configure environment variables

Copy the example environment file and fill in your values:
cp .env.example .env
The .env.example file is auto-generated with annotations showing:
  • Which config file uses each variable
  • Expected format
  • Whether it should be treated as a secret

Instance Configuration

The applad.yaml file at the root defines your instance-level configuration:
applad.yaml
version: "1.0"
name: "my-applad-instance"
description: "My Applad instance"

instance:
  url: "https://api.myapp.com"
  region: "us-east-1"
  secret: ${APPLAD_SECRET}

  features:
    ui: true
    api: true
    graphql: true
    realtime: true
    storage: true
    functions: true
    deployments: true
    workflows: true
    flags: true
    analytics: true
    instruct: true
    messaging: true

Creating an Organization

Organizations are the top level of the hierarchy. Every project belongs to an org.
1

Create the organization

applad orgs create --name "Acme Corp"
This scaffolds orgs/acme-corp/org.yaml with default roles and an empty SSH keys list.
2

Switch to your org

Set the active organization context:
applad orgs switch acme-corp

Creating a Project

Projects live inside organizations and own all resources — tables, functions, deployments, etc.
1

Create the project

applad projects create \
  --name "Mobile App" \
  --org "acme-corp"
This creates the project directory at orgs/acme-corp/mobile-app/ with a project.yaml file.
2

Configure environments

Edit orgs/acme-corp/mobile-app/project.yaml to define your environments:
project.yaml
id: "mobile-app"
name: "Mobile App"
org: "acme-corp"
description: "Consumer mobile application"

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"

  - name: "production"
    url: "https://api.myapp.com"
    infrastructure:
      type: "vps"
      host: "prod-01.acme-corp.com"
      user: "applad"
      ssh_key: "ci-github-actions"
3

Switch to your project

Set the active project context:
applad projects switch mobile-app

First Run

Once your project is configured, bring it up:
1

Validate your configuration

applad config validate
This checks syntax, required fields, cross-references, and validates all ${VAR} references.
2

Review what will happen

applad up --dry-run --diff
Shows exactly what will change without executing anything.
3

Start your instance

applad up
On first run, Applad detects the uninitialized database and runs bootstrap inline. You’ll be prompted for:
  • Instance URL
  • First owner’s email
  • SSH public key path
  • Organization name
After bootstrap completes, your instance is running.

Development Workflow

For local development, use watch mode to automatically reconcile on file changes:
applad up --watch
Only use --watch in local development. Never use it in production or CI.

Next Steps

Define Tables

Create your database schema with tables and migrations

Configure Auth

Set up authentication providers and session management

Add Storage

Configure file storage with buckets and permissions

Deploy Functions

Create serverless functions for your backend logic

Build docs developers (and LLMs) love