Skip to content

mithran.yaml reference

mithran.yaml lives at your repo root and describes the app. map onboard writes a starter; this is the full field list.

apiVersion: map.mithran/v1
kind: MithranApp
metadata:
  app_id: my-app
  name: My App
identity:
  project_ref: you/my-app
capabilities:
  - kind: http
    route: /
    runtime: nodejs22
    startup:
      command: npm start
resources:
  requests:
    cpu: 250m
non_secret_env:
  - { name: NODE_ENV, value: production }
public_edge:
  type: platform
  exposure: public
app_env:
  preview:
    branch_pattern: "^refs/heads/.*$"
    image_tag: preview
  production:
    branch_pattern: "^refs/heads/main$"
    image_tag: prod

Fields

Field Required Notes
apiVersion yes map.mithran/v1.
kind yes MithranApp.
metadata.app_id yes Your hostname label. my-appmy-app.apps.sandbox.mithran.cloud. DNS-friendly, short.
metadata.name yes Human-readable name.
identity.project_ref yes owner/repo.
capabilities[] yes One or more services. For HTTP: kind: http, a route, a runtime, and a startup.command.
resources.requests.cpu no CPU request, e.g. 250m.
non_secret_env[] no Plain config as { name, value }. Committed to the repo, so never secrets.
public_edge.type no platform to serve on the shared wildcard.
public_edge.exposure no public serves anonymous traffic. protected makes the edge require a signed-in Mithran session before any request reaches your app, with no credential in your repo. none doesn't expose it publicly.
app_env.<env>.branch_pattern no Regex matching the ref for that environment.
app_env.<env>.image_tag no Image tag for that environment.

Conventions

  • Your process must listen on $PORT and answer GET /health with a 200, or health checks fail.
  • A release/** push or vX.Y.Z tag deploys to production; the bare app_id host serves that.
  • The build comes from your Dockerfile. The manifest declares the app; the Dockerfile builds it.