Install without Node
Install zfb as a standalone binary — no Node.js or npm required. Covers curl, Homebrew, and Windows PowerShell install paths.
zfb ships as a self-contained Rust binary. Node.js is not required to install or run it — esbuild and Tailwind are embedded into the zfb executable's vendor snapshot and extracted at runtime before they are invoked as subprocesses. They are not shipped as separate release-tarball binaries next to zfb. You only need Node as an opt-in escape hatch for specific features (see When Node is still needed below).
The Node-free path supports the full feature set for content sites: Markdown, MDX, HTML pages, and islands — esbuild and Tailwind run as standalone native binaries extracted by zfb, so client-side hydration and CSS processing work with zero Node involvement. For what the embedded Tailwind means for a project that does use npm, see Tailwind is embedded, not installed.
Supported platforms
| Platform | Architecture | Target triple |
|---|---|---|
| Linux (glibc) | x64 | x86_64-unknown-linux-gnu |
| Linux (glibc) | arm64 | aarch64-unknown-linux-gnu |
| macOS | x64 | x86_64-apple-darwin |
| macOS | arm64 (Apple Silicon) | aarch64-apple-darwin |
| Windows | x64 | x86_64-pc-windows-msvc |
musl/Alpine Linux is not supported
There is no musl-linked binary. install.sh detects OS and CPU architecture only — it cannot tell glibc from musl — so on Alpine (or another musl-based distro) it downloads the glibc x86_64-unknown-linux-gnu binary, which then fails to execute with a raw dynamic-loader error rather than a clear message. Use a glibc-based Linux image (e.g. Debian/Ubuntu) instead. (The npm install path detects musl and fails with a friendlier message — seeInstallation.)
Install paths
Linux / macOS — curl
curl -fsSL https://raw.githubusercontent.com/Takazudo/zudo-front-builder/main/install.sh | shInstalls zfb to $HOME/. Add that directory to your PATH if it isn't already:
export PATH="$HOME/.local/bin:$PATH"Environment variables:
| Variable | Default | Purpose |
|---|---|---|
ZFB_INSTALL | $HOME/.local | Install prefix. Binary lands at $ZFB_. |
ZFB_VERSION | (latest stable) | Pin a release. Use v1.0.0 for a specific tag, or latest-prerelease to opt into pre-releases. |
macOS — Homebrew
brew install Takazudo/tap/zfbThe tap is hosted at Takazudo/homebrew-tap. The formula is updated on each stable release by scripts/.
Homebrew tracks the stable channel
Like the npm latest tag, the Homebrew formula follows stable releases only — it has no per-version pin or prerelease opt-in. To install a specific version or a prerelease, use the curl installer with ZFB_VERSION (e.g.ZFB_VERSION=latest-prerelease) instead.
To update to a newer version later:
brew upgrade zfbWindows — PowerShell
irm https://raw.githubusercontent.com/Takazudo/zudo-front-builder/main/install.ps1 | iexInstalls zfb.exe to %LOCALAPPDATA%\.
Environment variables:
| Variable | Default | Purpose |
|---|---|---|
ZFB_INSTALL | %LOCALAPPDATA%\zfb | Install root. Binary lands at $ZFB_. |
ZFB_VERSION | (latest stable) | Pin a release tag (e.g. v1.0.0) or latest-prerelease. |
Add the binary to your PATH for the current session:
$env:PATH = "$env:LOCALAPPDATA\zfb\bin;$env:PATH"Or permanently (open a new terminal after running):
[System.Environment]::SetEnvironmentVariable(
'PATH',
"$env:LOCALAPPDATA\zfb\bin;" + [System.Environment]::GetEnvironmentVariable('PATH', 'User'),
'User'
)Windows — Scoop
Not yet available
A Scoop bucket (Takazudo/scoop-bucket) is planned but the bucket repository has not been created yet. Use the PowerShell script above in the meantime.
Verify the install
zfb --versionConfig file: zfb.config.json vs zfb.config.ts
Both config formats work without Node. zfb.config.ts is evaluated in-process via the embedded V8 isolate that ships with the default zfb binary — there is no runtime Node dependency.
zfb.config.ts is a data config — node:* imports, process.env, and other Node-only APIs are not available inside the evaluator. Use zfb.config.ts when you want TypeScript types, comments, and computed values. Use zfb.config.json for a plain JSON alternative.
// zfb.config.json — also Node-free compatible
{
"framework": "preact",
"outDir": "dist",
"collections": [
{
"name": "blog",
"path": "content/blog",
"schema": { "type": "object", "properties": { "title": { "type": "string" } } }
}
]
}If both zfb.config.ts and zfb.config.json are present, the .ts file wins.
When Node is still needed
The following features require Node in PATH:
| Feature | Why |
|---|---|
zfb check without --skip-tsc | TypeScript type-checking delegates to tsc, which is a Node package. Pass --skip-tsc to run the non-TS checks only. |
Cloudflare adapter (@takazudo/zfb-adapter-cloudflare) | The adapter depends on Wrangler, which is a Node CLI. SSR deployments to Cloudflare Workers always need Node in the deploy environment. |
Everything else — building, dev server, islands, Tailwind, MDX, content collections, and zfb.config.ts evaluation — runs Node-free.
Upgrading zfb
An in-place zfb upgrade command is planned for a future release. For now, re-run the same install command you used initially — it overwrites the existing binary with the latest version.