Skip to main content

Fibe Labels

The label prefix is fibe.gg/ (configurable to a different prefix in self-hosted setups via Compose.configuration.label_prefix, but fibe.gg/ is what every public template uses). Unknown fibe.gg/* labels FAIL parsing. Non-fibe.gg/ labels pass through to Docker.

All 19 supported labels

LabelValueDefaultRequired when
fibe.gg/repo_urlURL (https://) to GitHub or Gitea repo, or $$var__NAMEservice is dynamic (has build:, source_mount, or is source-backed)
fibe.gg/source_mountPath inside the container (^[A-Za-z0-9_./-]+$)/appsource-backed live-mount
fibe.gg/dockerfilePath relative to repo rootDockerfilenon-default Dockerfile location
fibe.gg/branchGit ref namerepo default branchpin to non-default branch
fibe.gg/start_commandshell command stringimage CMDoverriding runtime command
fibe.gg/env_filepath relative to repo root.env.examplenon-default env example
fibe.gg/exposeinternal:PORT, external:PORT, or bare portnot exposedservice must serve HTTP to humans
fibe.gg/subdomain@ (root), or ^[a-z0-9]([a-z0-9-]*[a-z0-9])?$service namenon-default routing host
fibe.gg/path_ruleTraefik path matcher (Path, PathPrefix, PathRegexp only)/multiple services share one subdomain
fibe.gg/productiontrue / false (string or boolean)unsetdistinguish built-image vs mounted-source dev
fibe.gg/zerodowntimetrue / falseunset (single instance, restart-style rollout)want rolling updates
fibe.gg/healthcheck_pathHTTP path beginning with //up when zero-downtime generates a healthcheckcustom zero-downtime readiness path
fibe.gg/healthcheck_intervalduration Nms / Ns / Nm10s when zero-downtime generates a healthcheckcustom zero-downtime timing
fibe.gg/healthcheck_timeoutduration5s when zero-downtime generates a healthcheckcustom zero-downtime timing
fibe.gg/healthcheck_retriespositive integer ([1-9][0-9]*)3 when zero-downtime generates a healthcheckcustom zero-downtime timing
fibe.gg/healthcheck_start_periodduration30s when zero-downtime generates a healthcheckcustom zero-downtime timing
fibe.gg/build_targetDockerfile stage nameunsetmulti-stage build
fibe.gg/build_argscomma-separated KEY=value pairsunsetbuild needs --build-arg
fibe.gg/job_watchtrue / falsefalsewatched-exit job-mode service

Any of the above values may also be a $$var__NAME interpolation (whole or partial) — runtime substitutes before final compose generation. See reference-template-variables.

Value rules

Booleans

Allowed: true, false, YAML booleans (in map form), empty string. NOT allowed: yes/no/on/off/1/0. Quoted strings are recommended for forward-compat with YAML 1.1 truthy parsing:

labels:
fibe.gg/production: "true"
fibe.gg/zerodowntime: "false"

Internally only the literal string "true" is treated as true (TRUTHY_VALUES = ["true"]). Anything else parses to false.

fibe.gg/expose

Schema allows the empty string and (internal|external):PORT or just PORT. Runtime requires 1 ≤ PORT ≤ 65535.

  • external:3000 — public HTTPS route via Traefik.
  • internal:3000 — internal route with Basic Auth middleware per Marquee.
  • 3000 (bare) — accepted as internal/default.

fibe.gg/subdomain

Allowed values:

  • @ — bind the route at the root of the Marquee domain.
  • lowercase alnum/hyphen, no leading/trailing hyphen: ^[a-z0-9]([a-z0-9-]*[a-z0-9])?$.
  • empty string — fall back to the default (service name).
  • $$var__NAME interpolation.

Scalar values are coerced to strings before validation (true/false/integer become "true"/"false"/"123"), then validated by the slug regex.

Examples:

services:
api:
labels:
fibe.gg/expose: external:3000
# valid:
fibe.gg/subdomain: api
fibe.gg/subdomain: "@"
fibe.gg/subdomain: "" # fallback to service name
# string templates:
fibe.gg/subdomain: "$$var__SUBDOMAIN"
# invalid in runtime validation:
fibe.gg/subdomain: 42
fibe.gg/subdomain: true
fibe.gg/subdomain: "bad-subdomain-"

If omitted, the public host is <service-name>.<marquee-root-domain>.

fibe.gg/path_rule

Allowed matchers in the value: Path, PathPrefix, PathRegexp. The value must contain at least one of these (Path|PathPrefix|PathRegexp\s*\( regex check).

Forbidden matchers — Fibe owns the host, you cannot override it: Host, HostRegexp, HostSNI, HostSNIRegexp, Headers, HeadersRegexp, Method, Query, ClientIP.

Multiple matchers can be combined with && / ||:

fibe.gg/path_rule: Path(`/cable`) || Path(`/health`)

fibe.gg/healthcheck_interval / _timeout / _start_period

Duration regex: ^[0-9]+(?:ms|s|m)$. Examples: 500ms, 10s, 1m. Bigger units (h, d) are not accepted.

fibe.gg/healthcheck_retries

Positive integer (or its string form). ^[1-9][0-9]*$.

fibe.gg/build_args

Comma-separated KEY=value pairs. Whitespace tolerated:

fibe.gg/build_args: "RAILS_ENV=production, NODE_VERSION=20"

Parsed into a key→value map.

fibe.gg/repo_url

Must start with https:// and resolve through Configuration::validate_repo_url (GitHub or Gitea host). Inline $$var__NAME interpolation is allowed and bypasses validation until compile time.

Two forms accepted

Map form (preferred — easier to target with path: bindings):

services:
web:
labels:
fibe.gg/expose: external:3000
fibe.gg/subdomain: api
traefik.enable: "true" # non-fibe labels are pass-through

Array form (legacy Compose):

services:
worker:
labels:
- fibe.gg/job_watch=true
- com.example.owner=team

In array form each item is <name>=<value>. The schema applies the same fibeLabelString regex per item.

Cross-label semantics

These are enforced by the runtime parser, not the JSON Schema:

  • Compose build: requires fibe.gg/repo_url.
  • fibe.gg/source_mount requires fibe.gg/repo_url.
  • fibe.gg/zerodowntime: "true" requires:
    • fibe.gg/expose set,
    • service does not define Compose ports:,
    • service does not define container_name.
  • fibe.gg/healthcheck_* labels are optional zero-downtime overrides. When they are omitted, Fibe generates rollout healthcheck settings from defaults.
  • An unknown fibe.gg/* key is a hard error: Service '<name>': unknown label '<key>'.

Inline variable interpolation

Any of the labels above may contain $$var__NAME inline. The schema's templatedFibeLabelString pattern accepts it. The label value is template-substituted at compile time:

labels:
fibe.gg/expose: external:$$var__PORT
fibe.gg/subdomain: $$var__SUBDOMAIN
fibe.gg/repo_url: $$var__REPO_URL

The variable must be declared in x-fibe.gg.variables. See recipe-inline-variables.

Defaults applied at runtime

If unset, the runtime fills:

  • fibe.gg/dockerfileDockerfile
  • fibe.gg/env_file.env.example
  • fibe.gg/source_mount/app (only for dynamic services; never invented for static ones)
  • fibe.gg/branch → repo default branch

Source defaults (auto-fill for source-backed templates)

When a template imports from a source Prop and x-fibe.gg.metadata.source_defaults: true, the runtime fills:

  • fibe.gg/repo_url on services that have build:, source_mount, or already declare repo_url/branch — with the source Prop's URL.
  • fibe.gg/branch similarly with the source ref.
  • trigger_config.repo_url / branch if the template is job_mode: true and a trigger_config exists.

See recipe-source-mount for source-mount specifics and mode-trigger-vcs for trigger defaults.

recipe-ports-to-expose, recipe-add-subdomain, recipe-add-path-rule, recipe-zero-downtime-healthcheck, recipe-build-to-repo-url, recipe-build-args-and-target, recipe-strip-incompatible-keys, reference-template-variables, reference-validation-pipeline.