Skip to main content

Common problems & fixes

What the message means, and the smallest change that resolves it.

Template validation

MessageFix
Unknown fibe.gg/ labelYou typed something Fibe doesn't recognize. Remove it or fix the spelling. Labels not under the fibe.gg/ prefix pass through untouched.
Service has a build directive but no fibe.gg/repo_urlAdd the repo URL, or remove the Compose build: block.
source_mount without a repo_urlSame fix; live mount needs to know where the source is.
Zero-downtime services must have an exposeRolling updates are for routed services; add fibe.gg/expose.
Zero-downtime services cannot have ports: or container_nameReplicas can't share a pinned name or publish the same host port. Drop them.
Invalid repo URLUse an HTTPS GitHub or Gitea URL. SSH URLs aren't accepted.
Invalid exposure visibilityOnly the lowercase strings internal and external work. External:3000 (uppercase E) is wrong.
Invalid exposure portMust be a real port between 1 and 65535.
Invalid subdomainLowercase letters, digits, hyphens; no leading or trailing hyphen; or the special @ for the root domain.
Invalid path ruleOnly path matchers (Path, PathPrefix, PathRegexp) are allowed. Host, header, method, query, and client-IP matchers belong to Fibe and aren't authoring-side.
Invalid healthcheck durationUse values like 30s, 500ms, or 1m; hours and days aren't accepted.
Boolean label not recognizedQuote it as "true" or "false"; don't use yes, no, on, off, 1, or 0.

Variables

MessageFix
Variable referenced but not declaredYou wrote $$var__NAME somewhere but never declared NAME under variables:.
Variable declared but never usedEither reference it inline somewhere, give it a path:/paths: binding, or remove the declaration.
Variable missing a nameEvery variable needs a non-empty name: for the launcher UI.
Validation pattern not wrapped in slashesWrite the regex inside slashes, like "/^[a-z]+$/".
Validation pattern doesn't parseFix the expression itself; the pattern is invalid regex.
Required variable is missingSupply a value at launch, add a default, or set random: true.
Value fails the validation patternFix the value, loosen the pattern, or remove it.

Triggers & schedules

MessageFix
Trigger doesn't fireCheck that the trigger is enabled, the Prop has a working git webhook, and the event type matches what you're actually doing (pull request vs. push to that branch).
Scheduled job doesn't fireCheck enabled status, verify the cron expression with a quick external tool, and confirm the target Marquee is up.
Resource ID not foundThe Prop or Marquee referenced in trigger/schedule settings doesn't exist or isn't owned by you anymore. Re-pick a current one.

Runtime & lifecycle

MessageFix
Compose ${VAR} left in the outputFibe doesn't fill these from the launcher. Convert to $$var__VAR and declare it.
Trick runs foreverYour watched service started a dev server, an idle loop, or a long-poll. Replace it with a command that exits when the work is done.
Long-running app reset to one replica and never restartingYou accidentally set job_mode: true on something that should stay up. Remove it.
502 from the public URL but works inside the containerYour app is binding to localhost. Switch to 0.0.0.0. See the table below.
Vite says "Invalid Host header"Vite 6+ rejects unknown hosts. Set server.allowedHosts: true in your Vite config.
Healthcheck returns 200 too earlyThe new replica is being marked ready before the app actually is. Tighten the check so it reflects real readiness.
Image upgrade broke the volumeA floating tag like :latest rolled across a major version and the on-disk format changed. Pin the image to a specific minor version.

Subtle behaviors worth knowing

  • Mark a template as a Trick and Fibe forces every service to one replica and no automatic restart — even ones you didn't list as the watched service.
  • Hostnames in the template are stripped at compile time; service-to-service traffic uses Compose's built-in DNS by service name.
  • When the same variable is both inlined and path-bound, the path write is the final word.
  • The fibe.gg/* labels are read before the container starts. You can't configure them with environment values that only exist inside the running container.

Where the app should bind

FrameworkCorrect bind
Railsbin/rails server -b 0.0.0.0
Node / Expressapp.listen(PORT, '0.0.0.0')
Next.jsnext dev -H 0.0.0.0
Vitevite --host 0.0.0.0
Django dev serverpython manage.py runserver 0.0.0.0:8000
FastAPI / uvicornuvicorn app:main --host 0.0.0.0
Flask devflask run --host 0.0.0.0