CLI
tibi subcommand the binary currently ships, with examples.tibi (no args)
Same output as tibi about. Use for support reports.
tibi new <name>
Scaffolds .tibi-config, .gitignore, package.json, and pages/_layout.tibi / pages/index.tibi / pages/_404.tibi. No Cargo.toml, no src/main.rs, no Dockerfile. The bundled tibi binary boots the app from the config alone; tibi build produces a static dist/ that deploys to any host. The package.json's preinstall hook installs tibi automatically on PaaS platforms that run npm install. Fails if the target directory already exists.
tibi routes [path]
Prints the URL → file map. Defaults to ./pages.
tibi check [path]
Parses every .tibi file in pages/ + every layout. Exits non-zero with the failing files on parse / component-resolution errors. Useful in pre-commit hooks.
tibi build [--pages path] [--dist path]
Writes one HTML file per static route via tibi_ssg::build_site. Dynamic routes and _404 / _500 are reported as skipped.
tibi serve [--config <path>]
Discovers .tibi-config from the current working directory upwards (or takes an explicit path via --config) and runs the no-Rust path: pages scanned from pages_dir, server bound to [server] host + port, every component-declared channel (__channels in their frontmatter) spawned, downloads_dir mounted at /downloads/* AND at the URL root with Content-Disposition: attachment (browsers download instead of rendering), and public_dir mounted at the URL root for inline assets (favicons, logos, fonts). Public wins on filename collisions.
tibi dev
Re-execs tibi serve with TIBI_DEV=1 set so the app spawns the file watcher; saves to any .tibi file push "reload" on the hmr WebSocket channel and the browser refreshes. Same config discovery as serve.
tibi plugin <cmd>
Marketplace front-end + Rust plugin pre-compile pass + packaged-plugin scaffolder. compile walks [server] plugins_dir, builds every *.rs source via rustc -O into dist/plugins-bin/<name>-<sha8>, and the runtime loader picks those up first. new drops a ready-to-edit source tree (omit the name to be prompted; --prefix Xy changes the tag namespace, default Ti). pack turns that tree into the verified two-file bundle the runtime accepts. Sharing the resulting pair is manual today -- no central submission path exists yet. See Plugins for the full lifecycle + binary search order.
Override the marketplace source with TIBI_MARKETPLACE_URL — must be an http(s):// endpoint serving the same JSON shape. Local file:// / relative-path forms were removed in v0.2.13 because a leaked env var turned the CLI into an arbitrary-file-read primitive; serve local mirrors over loopback HTTP instead.
tibi deploy cf-pages [--project name] [--branch name] [--dist path] [--skip-build]
Wraps tibi build + wrangler pages deploy dist/ --project-name <name>. Requires wrangler on PATH (install via npm install -g wrangler; or use npx wrangler directly if you'd rather not install globally). Tibi never touches CF credentials — wrangler owns auth via its own wrangler login flow. Missing wrangler surfaces a friendly install hint rather than a raw OS error.
Drop the per-invocation flags by setting them in .tibi-config:
CLI flags always win over config values. Use --skip-build when CI already produced dist/ in a previous stage; --dist overrides the upload directory. See Deploy for the full Cloudflare Pages walkthrough plus the SSR / container alternative.
tibi update [--version <channel>]
Re-runs the official install script from tibi.fi so the update path matches a fresh install exactly — fetches the pre-built tarball, drops tibi + cargo-tibi into ~/.local/bin. No local compile.
On Windows the same command fetches install.ps1 and runs it through PowerShell instead — the zip lands in %LOCALAPPDATA%\Programs\tibi, and the installer renames the running tibi.exe aside before dropping the new one in, so updating from the binary being replaced just works.
Channels:
tibi update— tracksmain(stable).tibi update --version staging— swap to the staging tarball for previewing unreleased changes.
Override the release host with TIBI_RELEASE_HOST (handy for self-hosted mirrors or local-testing the install flow).
Background version check
Every tibi invocation (except tibi update itself) checks the release channel's VERSION file on tibi.fi for a newer build. The check is cached for 24h at $XDG_CACHE_HOME/tibi/version-check (or ~/.cache/tibi/version-check / %LOCALAPPDATA%\tibi\version-check), and the refresh runs in a detached background thread, so it never blocks the current command.
When a newer version is found and stderr is a TTY, a one-line hint is printed:
It never auto-updates — you stay in control of when to run tibi update. Set TIBI_NO_UPDATE_CHECK=1 to disable the nag entirely (handy for shared images / CI).
cargo tibi <cmd>
If you'd rather invoke through cargo, install cargo-tibi and run cargo tibi <cmd>. The shim drops the leading tibi arg and execs the colocated tibi binary.