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 fibe.gg/port setRolling updates are for routed services; add fibe.gg/port.
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 https://github.com/<owner>/<repo>, a full ssh:// URL, or a URL on a configured Gitea host. The short git@host:path form and arbitrary GitHub-like HTTPS hosts 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).
Trigger stopped firing after a Marquee problemWhen the target Marquee leaves the active state, Fibe disables the trigger so events don't pile up against a dead target. Bring the Marquee back, then re-enable the trigger yourself — it doesn't re-enable on its own.
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. Exception: in Trick runs, ${VAR} is filled from your Job ENV entries and the built-in FIBE_* run variables — if that's what you meant, define the Job ENV entry instead of converting.
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.
Job timed out waiting for watched services to completeThe run hit the 4-hour ceiling without the watched service exiting. Fibe checks watched services every 10 seconds by default, up to 1,440 checks; operators can change those defaults. On timeout, the job errors and its containers are torn down. Same root cause as a run that never exits: make the watched command finish when the work is done, or split the work into shorter runs.
Build timed out: stuck in building state for over 45 minutesBuilds have a 45-minute ceiling. Usually a slow base-image pull or a heavy build on a slow network — switch to a smaller base image, trim the build context, then relaunch.
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