Pulsar
docs
← back to home

Blueprints / IaC

Declare your project's infrastructure as a single YAML file — pulsar.yaml — committed to your repo alongside your code.

What is a blueprint?

A blueprint describes your project's services, databases, env vars, and scaling config in a declarative way. Instead of clicking through the dashboard, you define everything once in pulsar.yaml and sync it with one click.

Blueprints are optional — all settings can still be configured through the dashboard or CLI. They're most useful for teams that want infrastructure changes tracked in version control alongside code.

pulsar.yaml format

yaml
version: "1"

# Services run as Docker containers
services:
  web:
    type: web          # web | worker | database | cache | custom
    start_cmd: npm start
    root_dir: ./       # relative to repo root

  worker:
    type: worker
    start_cmd: npm run worker

# Managed database instances
databases:
  main:
    type: postgres     # postgres | mysql | redis | mongodb | pocketbase
    size: nano         # nano | micro | small | medium

  cache:
    type: redis
    size: nano

# Environment variables (all environments)
env:
  NODE_ENV: production
  PORT: "3000"

Using the dashboard

Every project has an Infrastructure tab (inside Project → Tabs). Open the YAML editor, paste or edit your blueprint, and click Save. The blueprint is validated immediately — any syntax or schema errors are shown inline.

Click Sync to apply the blueprint to the live project. Pulsar will provision any declared databases that don't yet exist and update service configuration.

Service types

webHTTP server — gets a public URL via nginx reverse proxy
workerBackground process — no public URL, no health check
databaseManaged database container (use the databases: key instead)
cacheIn-memory cache (Redis or similar)
customAny other container — no special treatment

Database sizes

nano256 MB RAM — development, side projects
micro512 MB RAM — small production workloads
small1 GB RAM — standard production
medium2 GB RAM — higher traffic workloads

Blueprint status

activeBlueprint is valid and matches live state
errorYAML syntax or schema error — see inline message
outdatedBlueprint saved but not yet synced to live project

Full example

yaml
version: "1"

# A Next.js app with Postgres and a background job worker
services:
  web:
    type: web
    start_cmd: npm start
    root_dir: ./

  email-worker:
    type: worker
    start_cmd: node workers/email.js

databases:
  postgres:
    type: postgres
    size: small

  sessions:
    type: redis
    size: nano

env:
  NODE_ENV: production
  PORT: "3000"
  # DATABASE_URL is auto-injected when a postgres db is declared