Repository navigation
0.2.0 - 2026-09-16
Release Notes
Migration (script-installer users): the browser UI now ships INSIDE the binary —
after upgrading, delete a previously unpacked~/.flux/web-ui/once (a stale dir
becomes a per-path OVERRIDE that shadows the embedded UI; the startup log warns when
it carries an oldweb-ui-version.txt). Source builds viacargonow need
node/pnpm by default (a toolchain-less build embeds a placeholder page; headless-only:
--no-default-features).
Changed
- The shipped binary drops from 32MB to 20MB —
[profile.dist]now builds withlto = "fat"+codegen-units = 1(cross-crate inlining/DCE, −4.5MB of.textat a release-only build-time cost) andstrip = "symbols"(the ELF.symtab/.strtabwere 8.2MB of dead weight withdebug = 0). Accepted tradeoff:RUST_BACKTRACE=1in a shipped binary shows addresses without names — tool panics are caught and reported by payload (flux-chattool_exec) and the shutdown contract is crash-only (T-11); dev[profile.release]stays unstripped for debugging. Attribution via cargo-bloat:.text16.7MB led by rmcp 2.3MB, ~2.5MB of C/asm natives (sqlite3/aws-lc/zstd), std 1.6MB, the rustls/reqwest/h2/hyper stack ~1.6MB; embedded UI 2.5MB sits in.rodata.
Added
- The browser UI is EMBEDDED in the server binary (rust-embed, feature
web-ui-embed, default-on; decision T-14) — release builds serveclients/web/diststraight from the binary (+~2.5MB, the woff2 fonts dominate), debug builds keep reading the repo dist from disk at runtime (pinned to the compile-time path: the dev fallback — a UI rebuild needs nocargo build). Serving gains compile-time sha256 strong ETags (conditional requests 304) on top of the existing immutable/no-store split; MIME, HEAD/405 and the traversal guard (..%2Funit test) moved fromServeDirinto the custom handler. crates/flux-server/build.rsdrives the embed (Meilisearch-style):rerun-if-changedover web sources/dist/lockfile/proto (a vite rebuild's NEW hashed names are invisible to cargo'sinclude_bytes!tracking — the build script rerun forces the macro to re-walk); invokesscripts/package-web.{sh,ps1}when the dist is missing/stale (node 24 + pnpm required); writes a placeholder index.html on toolchain-less checkouts so the binary still compiles (rust-embed validates the folder in ALL modes). Escapes:FLUX_WEB_UI_NO_BUILD=1skips the UI build;--no-default-featuresbuilds headless-only.- Per-path disk override with Gitea
custom/semantics —--web-assets-diror~/.flux/web-ui(only when it exists) shadows the embedded bundle file-by-file; anything absent falls through to the embedded base. The four-level asset-resolution chain collapses to override-dir-or-embedded. A stale override dir still carriesweb-ui-version.txtand warns at startup (the stamp advisory now guards the only surface that CAN go stale — the embedded side cannot mismatch by construction).
Removed
- The standalone
flux-web-ui.tar.gzrelease artifact (and theweb-ui/payload in platform archives) — the binary is self-contained; the script-installer flow is ONE command now, and the "② unpack the UI tarball into~/.flux/web-ui" README step is gone.web-ui/next to the binary is no longer a resolution level (re-populate~/.flux/web-ui/if you deliberately want a disk override). dist config:include = ["web-ui/"]and the[[dist.extra-artifacts]]block deleted;.github/build-setup.ymlnow supplies protoc + node/pnpm and lets build.rs build the UI inside the cargo build. flux-server ispublish = false+[package.metadata.dist] dist = true(crates.io was never a distribution channel, and the embedded folder lives outside the crate dir).
Fixed
- The workdir VALUE now actually reaches the model —
DEFAULT_PREAMBLE's comment promised per-chat workdir interpolation at thebegincall site, butcompose_system_promptused the workdir solely to look up the skill catalog and never injected the path, so the model's only programmatic source for the path wasstate_get("workdir")— a round-trip the state schema's own enum advertised. Nowcompose_system_promptstates the boundary line (path + "sandbox boundary, fixed for this conversation") before the catalog at every begin (stable-before-volatile: the boundary never moves, the catalog refreshes at rebuild gates), and the state enum drops theworkdirkey (INITIAL_STATEkeeps onlycurrent_dir) — the write refusal and the hidden read (get("workdir")serves the fixed field) stay.
Install flux-server 0.2.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/km0e/flux/releases/download/v0.2.0/flux-server-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/km0e/flux/releases/download/v0.2.0/flux-server-installer.ps1 | iex"Download flux-server 0.2.0
| File | Platform | Checksum |
|---|---|---|
| flux-server-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| flux-server-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| flux-server-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| flux-server-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| flux-server-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |