Blueprint examples
Adapt working manifest patterns for monorepos, Laravel, databases, workers, and containers.
These examples use supported Openstead fields. Replace application paths and commands with those in your repository. Validate before applying, and configure secrets separately.
Python API and static frontend
This repository has a Django project under backend and a static frontend under frontend. Both services inherit the Blueprint repository and branch.
services:
- name: example-api
type: web
plan: free
runtime: python
rootDir: backend
startCommand: gunicorn config.wsgi:application --bind 0.0.0.0:8000
configuration:
port: 8000
autoDeploy: commit
- name: example-website
type: static
plan: free
runtime: node
rootDir: frontend
buildCommand: npm ci && npm run build
staticPublishPath: dist
configuration:
autoDeploy: commitEnsure Gunicorn is declared in the backend dependencies and the frontend build really produces dist. Set allowed hosts, API origins, and other environment variables in each service.
Laravel and MySQL
services:
- name: example-laravel
type: web
plan: starter
runtime: php
configuration:
autoDeploy: commit
- name: example-mysql
type: mysql
plan: mysql-free
configuration:
sourceType: none
databaseVersion: "8.4"
databaseName: example_app
databaseUser: example_app
backupEnabled: true
backupRetentionDays: 7Import configuration with deployment after sync disabled. Deploy MySQL, set Laravel's DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, and DB_PASSWORD using the database's private connection details, and configure the application's APP_KEY and APP_URL.
Complete checkout for the web service before its deployment. Configure persistent uploads with a disk through the service's storage controls. This manifest does not add that disk or inject database credentials automatically.
Worker and scheduled command
services:
- name: example-worker
type: worker
plan: starter
runtime: python
startCommand: celery -A config worker --loglevel=info
- name: example-nightly-report
type: cron
plan: starter
runtime: python
startCommand: python manage.py send_daily_report
schedule: "0 8 * * *"
configuration:
timezone: Africa/Lagos
timeoutSeconds: 1800Install the command dependencies in the repository. Configure the queue connection and any application credentials through variables. The scheduled command runs at 08:00 in the configured timezone, with a 30-minute timeout. Both services require paid instance terms.
Dockerfile application
services:
- name: example-container
type: web
plan: free
configuration:
runtime: docker
buildMethod: dockerfile
dockerfilePath: Dockerfile
dockerContext: .
port: 8080The Dockerfile supplies the startup command. Make the application listen on 0.0.0.0:8080. A Free service's filesystem is ephemeral; add a paid persistent disk if the application needs durable local writes.
Deploy a published image
services:
- name: example-image
type: web
plan: starter
configuration:
sourceType: image
buildMethod: image
image: ghcr.io/example/example-api:2026-09
port: 8000Replace the illustrative image with one you can pull. A private image additionally needs a matching workspace registry credential through configuration.registryId. Use a real registry UUID, never the token itself.
Apply changes safely
Validate with openstead blueprints validate --file openstead.yaml or the dashboard. Review the services and plans created, configure secrets, complete any checkout, and deploy. Confirm the resulting releases individually: a successful Blueprint sync reports applied configuration, while each deployment has its own outcome.