Monorepo generator and delivery contracts

Generate the product and its delivery path together.

One command writes web, API and worker workspaces, dependency boundaries, local services, CI, containers and a validated route to PM2, Coolify or Kubernetes. Developers and coding agents use the same package-level contract.

What the command writes

A repo with an explicit place for product code, reusable code and infra

Recipes are bundled and versioned. monox.lock records their versions and integrity so another machine can explain exactly what shaped the repository.

my-product/
├── apps/
│   ├── api/
│   ├── jobs/
│   └── web/
├── packages/
├── infra/
│   ├── docker/
│   └── local/
├── .github/workflows/ci.yml
├── AGENTS.md
├── monox.config.json
└── monox.lock

One source of truth per app

"deployment": {
  "schemaVersion": "2",
  "id": "jobs",
  "kind": "worker",
  "network": { "exposure": "none" },
  "env": { "secretRefs": [{
    "name": "rabbitmq-url",
    "target": "RABBITMQ_URL" }] },
  "scaling": {
    "mode": "keda",
    "minReplicas": 0,
    "metrics": [{ "type": "rabbitmq",
      "sourceRef": "RABBITMQ_URL",
      "queue": "jobs", "target": 10 }]
  }
}

The root config contains environments, targets and boundaries. It does not repeat an application list.

The setup work MonoX removes

What you do not need to wire by hand

MonoX packages the repeated platform decisions. Your team still owns the product decisions.

  1. 01

    Workspace setup

    Package manager, workspace globs, dependency direction and shared agent boundaries.

  2. 02

    Local runtime

    Health routes, Docker files and selected services with required-value placeholders in ignored local env files.

  3. 03

    Verification

    Immutable install, lock verification, test and build commands in generated CI.

  4. 04

    Delivery model

    Typed workloads, probes, limits, scaling signals and target-specific plans.

Local to production

The contract stays the same while the target changes

Package metadata describes the workload. The selected target supplies image, namespace, domain, identity and secret bindings.

  1. ValidateReject unknown fields, inline secrets and ambiguous targets.
  2. ExplainShow every default, profile, environment and variant in order.
  3. PlanBind source, config, target state and adapter digests.
  4. ApplyUse the built-in local executor or an explicitly injected transport; reject stale plans.

0.2.0 boundary: create-monox writes these contracts, but it does not install a public monox delivery binary. The sequence below is source-repository tooling, not a generated-project command.

# MonoX source checkout
yarn monox validate
yarn monox config explain @monox/jobs --env staging
yarn monox plan --env staging --all --output .monox/plan.json
yarn monox apply --plan .monox/plan.json

MonoX draws the boundary. You own what crosses it.

You provide cloud access through OIDC or workload identity, choose domains and managed services, set budgets and capacity, connect external secrets, and approve production changes.

MonoX does not replace a cloud control plane, guarantee provider capacity, or hide destructive operations behind a normal deploy.

0.2 release evidence

Implemented, guarded and still awaiting production proof

Status is tied to tests in the public repository. Planned production claims stay out of the copy.

Surface Release status Evidence
Deployment contract v2 Implemented Package discovery, RFC 7396 overlays, variants and unique target binding
Workspace recipes Built in JavaScript, TypeScript, Python, PHP and Go catalog with deterministic locks
Local and container path Source-tested Compose contracts and non-root defaults; complete add-on runtime acceptance is pending
PM2, SSH, Coolify and Kubernetes Guarded Typed plans and fail-closed transport injection before external state changes
AWS and GCP provisioning Plan only 0.2.0 renders provider plans only; real sandbox apply is not included
Production reference Not public yet 42 tracked contracts inventoried; case study waits for security cleanup and canary rollback