Services
Each key in services is a service name. The value declares what the service IS, grouped into structured blocks: scope (visibility), stack (technology), deploy (how it ships), and run (local dev). Multi-repo services add repository and path.
Service fields
| Field | Type | Description |
|---|
scope | string | public or internal — visibility of the service |
stack | object | type, framework, language — see below |
deploy | object | How it ships. Requires strategy. See Deploy Strategies |
run | object | Local dev runtime — ports, args, env, health checks |
database | string / object | Inline database config (engine, changelog, schema) |
repository | string | Multi-repo: the owner/repo this service lives in. See Multi-repo |
path | string | Multi-repo: the service's path within its repository (. = root) |
environments | object | Multi-repo: per-service env→branch override. See Environments |
stack
| Field | Values | Meaning |
|---|
type | backend,frontend,package | Architecture category. In a monorepo it also fixes the location: backend → apps/backend/{name}, frontend → apps/frontend/{name}, package → packages/{name} |
framework | spring-boot,uvicorn,nextjs,vite,… | The concrete runtime/framework. Drives convention defaults (Dockerfile, build context, secrets) |
language | java,python,typescript,… | Primary language (optional) |
stack.type (what it is / where it lives) is orthogonal to deploy.strategy (how it ships). A frontend can deploy as static (S3/CDN) or service (SSR on ECS); a package deploys as none.
Deprecated fields (v0.5.0)
The flat v0.4.0 fields were grouped into blocks. The CLI still reads the old names as aliases, but new manifests should use the blocks:
| Old (deprecated) | New |
|---|
kind | stack.type |
type | stack.framework |
role | scope |
strategy | deploy.strategy |
Example
"services": {
"api": {
"scope": "internal",
"stack": { "type": "backend", "framework": "spring-boot", "language": "java" },
"deploy": { "strategy": "service" },
"database": { "engine": "postgresql", "changelog": "ci/db/api/changelog-master.xml" }
},
"web": {
"scope": "public",
"stack": { "type": "frontend", "framework": "nextjs", "language": "typescript" },
"deploy": { "strategy": "static", "cdn": true }
},
"shared": {
"stack": { "type": "package" }
}
}