Define your app's compute, data, and in-memory primitives in a single YAML file. Typed validation, clear error messages, and platform helpers out of the box.
version: 1 name: my-saas compute: app: port: 8000 worker: {} data: engine: postgres version: 17 migrate: "uv run alembic upgrade head"
Catches invalid manifests early with clear, human-readable error messages. No Pydantic internals leak to the user.
Enforces lowercase alphanumeric names with hyphens, 3-63 characters. Reserved bluefox- prefix is guarded.
Only allows supported engines in each version. V1 supports postgres for data and redis for in-memory.
Service names, image tags, environment variables, routable process detection — everything the platform needs to deploy your app.
Parse your manifest with a single function call. Get a typed object with helper methods for every platform operation.
from bluefox_yml import load_manifest manifest = load_manifest("bluefox.yml") # Typed access to every field manifest.name # "my-saas" manifest.compute["app"].port # 8000 manifest.data.engine # "postgres" # Platform helpers manifest.service_name("app") # "my-saas_app" manifest.image_tag(3) # "localhost:5000/my-saas:v3" manifest.db_image() # "postgres:17-alpine" manifest.env_vars("app") # {"APP_NAME": "my-saas", ...}
from bluefox_yml import load_manifest, ManifestError, format_error try: manifest = load_manifest() except ManifestError as e: print(format_error(e)) # "bluefox.yml error: bluefox.yml validation error: # name: name must be DNS-safe: ..."