Multi-repo: repository & path
Schema v0.7.0 lets one manifest describe services that live in different repositories. Two per-service fields control this — repository and path — and the CLI's convention engine resolves paths differently depending on them.
The two fields
| Field | Meaning |
|---|---|
repository | The GitHub owner/repo the service lives in. Omit for a service in the same repo as the manifest (monorepo). |
path | The service's path within its repository. . or omitted = repo root; a subdir (e.g. app) = service lives in a subdirectory. |
Resolution matrix
repository | path | Result |
|---|---|---|
| omitted | omitted | Monorepo — service at the convention path apps/{type}/{name} (or packages/{name}) |
| omitted | subdir | Monorepo with an explicit subdirectory layout |
owner/repo | . / omitted | Multi-repo — service is the whole repo (paths are repo-root-relative) |
owner/repo | subdir | Multi-repo — service is a subdirectory of that repo |
How paths are resolved
When a service is multi-repo (has a repository) or declares a path, the convention engine switches to repo-relative mode: the Dockerfile, build context, and CI change-detection watch paths are computed relative to the service's location in its own repo, rather than the monorepo's apps/{type}/{name} convention. A service at the repo root (path: ".") watches the whole repo; a subdir service watches just that subdir.
Per-service environment overrides
Repos can use different branch models. A multi-repo service may override the platform-wide ci.environments with its own per-environment branch mapping via a service-level environments block; omitted environments fall back to ci.environments. See Environments & Branches.
Example
"services": {
"web": {
"repository": "FoundryMedia/foundry-app",
"path": "app",
"environments": { "prod": { "branch": "main" } },
"stack": { "type": "frontend", "framework": "vite" },
"deploy": { "strategy": "static" }
},
"launcher": {
"repository": "FoundryMedia/foundry-app",
"stack": { "type": "frontend", "framework": "vite" },
"deploy": { "strategy": "desktop" }
}
}Here web lives in the app/ subdir of foundry-app and deploys from main; launcher is the root of the same repo. A full worked example is the central foundry-ops/platform.json.