Dev Server
Use zero-native dev when zero-native should own the frontend server lifecycle. It starts the configured frontend process, waits for the port to accept connections, launches the native shell with ZERO_NATIVE_FRONTEND_URL, sets ZERO_NATIVE_HMR=1, and terminates the frontend when the shell exits. Framework HMR stays owned by the dev server (Vite, Next.js, etc.) because the WebView loads the dev URL directly.
Usage
zero-native dev --binary zig-out/bin/MyApp
zero-native dev --binary zig-out/bin/MyApp --url http://127.0.0.1:3000/ --command "npm run dev"
zero-native dev --binary zig-out/bin/MyApp --timeout-ms 60000Flags
| Flag | Description |
|---|---|
--manifest | Path to app.zon (default: app.zon) |
--binary | Path to the built native binary |
--url | Override dev server URL from app.zon |
--command | Override dev server command from app.zon |
--timeout-ms | Override readiness timeout (default from app.zon) |
Configuration in app.zon
.frontend = .{
.dist = "dist",
.entry = "index.html",
.spa_fallback = true,
.dev = .{
.url = "http://127.0.0.1:5173/",
.command = .{ "npm", "run", "dev", "--", "--host", "127.0.0.1" },
.ready_path = "/",
.timeout_ms = 30000,
},
}Framework recipes
Vite: .url = "http://127.0.0.1:5173/", command npm run dev -- --host 127.0.0.1.
Next.js: .url = "http://127.0.0.1:3000/", command npm run dev -- --hostname 127.0.0.1.
Static preview: point .dist at the build output and use any local server command.