Releases: valkyoth/fluxheim
Release list
Fluxheim 1.6.0
Fluxheim 1.6.0 Release Notes
Fluxheim 1.6.0 starts the Pingora-exit foundation line. This release is the
baseline and guardrail release for the 1.6 series; runtime behavior is intended
to remain unchanged while the project records the evidence and policy needed to
remove Pingora safely in later 1.6.x releases.
Added
- Added the first 1.6 modularity policy and legacy exception inventory. New or
newly split Rust implementation files should target 300 lines and stay under
500 lines; existing oversized files are tracked explicitly so the exception
list can shrink across the Pingora-exit line. - Added
scripts/validate-modularity-policy.shto report and validate the
current oversized Rust-file inventory against
docs/modularity-exceptions.md. - Added
docs/runtime-baseline.mdand
scripts/capture-runtime-baseline.shto record locked dependency trees,
per-profile Pingora dependency presence, release metadata, and default
release-binary size before the runtime cutover work begins. - Added
scripts/capture-runtime-performance-baseline.shand wired it into
release-mode runtime baseline capture. It records local startup time, idle
RSS/file descriptors, static HTTP latency, cache MISS/HIT latency,
load-balancer route timing, keep-alive throughput, and fresh TLS connection
timing. - Added
docs/pingora-dependency-exceptions.tsvand
scripts/validate-pingora-dependency-policy.shso the 1.6 line has a
release-gated inventory of allowed Pingora crates per official profile. - Added
docs/runtime-parity-fixtures.md,
docs/runtime-parity-fixtures.tsv, and
scripts/validate-runtime-fixtures.shto pin the smoke scripts, examples,
and TLS fixtures that define runtime parity before HTTP/cache/LB/TLS
cutovers begin. - Added initial
fluxheim-runtimeandfluxheim-serverworkspace crates for
Fluxheim-owned shutdown, background task, listener, and server-runner
boundary traits. The current Pingora runtime path is unchanged. - Added typed
PolicyEpoch,PolicyProof,RuntimeFact, decision, reason,
and visibility primitives influxheim-runtimefor later policy-proof
adoption. They are not wired into request handling in this release. - Added
docs/extraction-dependency-graph.mdto record the intended split
order forsnapshot, protocol, tracing/observability, headers, ACME,
runtime/server, cache, proxy, and admin modules before the Pingora cutover. - Added the runtime-facts and policy-proofs planning model. The goal is typed,
bounded, redacted evidence for Fluxheim decisions such as config promotion,
route policy, cache admission, load-balancer selection, and admin mutation
without putting a database in the request path.
Changed
- Updated project version surfaces to
1.6.0. - Updated documentation language so the
1.5.xline is treated as closed and
future load-balancer health-check work is no longer described as a later
1.5.xitem. - Refreshed
ROADMAP.mdso1.6.xis consistently documented as the
Pingora-exit line, shared Wasm extensibility is moved to1.7, and HTTP/3
remains after the runtime boundary is stable. - Hardened
scripts/validate-pingora-dependency-policy.shso documented
Pingora removal targets are enforced against the current Fluxheim version
instead of acting as a set-membership inventory only. - Tightened release-gate scripts by requiring modularity exceptions to be
listed as structured table rows and by giving the UDP smoke negative
assertion a longer observation window.
Notes
- This is not yet a Pingora-removal release. It establishes the baseline,
modularity gate, and security model for the staged 1.6.x migration. - The legacy modularity exception inventory is intentionally large at the
start of the line. The purpose is to make oversized files visible and reduce
them release by release rather than hide the debt.
Checksums And Signatures
- Commit:
e7a877c0c5795038b061918cb72ac769ea09b98a - Local gate: GitHub CI green before tag; local release metadata checks passed
- CodeQL/code scanning: no open release-blocking alerts before tag
- Source archive checksums:
b1ad465cc4cf2f974026652463c9a5f9642f5bb00501bae861ce14a8e24290f8 fluxheim-1.6.0.tar.gzb8ea622c0ac422e8cc21653ed3e4f8e75470e63947b7a6f055a91d64b294cbcf fluxheim-1.6.0.zip
- Binary checksums:
- x86_64:
06e79e0f55f8a1d3eec9706d515eada500dd9467037e1433189b49383806e9ae fluxheim-1.6.0-full-x86_64-linux.tar.gz9d53b83faa5660a4a076a3f7242af9d8fc7d8e400dfc56f4c560564866571877 fluxheim-1.6.0-cache-x86_64-linux.tar.gz76fb55f9b92be790a0e0f1b87fc90a1c89ef2c34c7b3b1a7c9bd9e4dc65be760 fluxheim-1.6.0-proxy-x86_64-linux.tar.gz84a560583c989729141f395c62861b6c2c539a54f11f2be7f9afa37dbd8d2046 fluxheim-1.6.0-php-x86_64-linux.tar.gzb95a1287dd4f75249de5acca81a5ba32198c9b8aa9fd7e00e3a25f66f216657d fluxheim-1.6.0-load-balancer-x86_64-linux.tar.gza79d6314494a79904dfec8303b687469714de0314b0ce1e1fc65ffedeb442b23 fluxheim-1.6.0-config-tester-x86_64-linux.tar.gz
- aarch64:
400a0052eab623d18648737ecf2b040784c277634ade69c5c39c48eaf8f5bf2a fluxheim-1.6.0-full-aarch64-linux.tar.gzc93641096cdc73b1dfa51befe3c546d9360ad68e382fcc6b921b3753812f5a68 fluxheim-1.6.0-cache-aarch64-linux.tar.gz3e75cd88746dcf5f49a5ef54c0dce1b4f6253aa87afa424197b9f8940252933a fluxheim-1.6.0-proxy-aarch64-linux.tar.gzac5dfb98ad9899acafeaf32507ad14fef00fd09e1e49845b85a26107372b293a fluxheim-1.6.0-php-aarch64-linux.tar.gza9d8c920e89b42d606956b21951864fb2d83328f86fb93c05f2b8550d0cd690b fluxheim-1.6.0-load-balancer-aarch64-linux.tar.gz01048c9c8c42d4f59690de54f58e0ff419060646be1ee76681f65006f27b5d86 fluxheim-1.6.0-config-tester-aarch64-linux.tar.gz
- macos:
54cf354be32f54f8bdc6af45330749bbbcd183db32d992922b29e1bdd0bcdb09 fluxheim-1.6.0-dev-aarch64-macos.tar.gz
- x86_64:
- SBOM checksums:
9e35709c936277d9215df6ba99f008a70fee7380ee8691c04a26307e83ebfb3e fluxheim.spdx.jsonc7c50c3f6a175da9169d67f4e18abeed645dfdc6639633282659acdd2fac18ee fluxheim.cyclonedx.json
- Reproducible build:
be9bf213c90d99751102edba6c5a280aa61407cf936a5cf5f8640e3863a3467ax86_64869eaea4d8923417185d5c76037870921dd221984a164bfadef06c85f7b5acecaarch641752b5ab8ed9dceb592899449aee5440ff1ad73772869338dddb2a2ba1c9ada1macos
- Full Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:4c6862453e272acae0f554566d697adaaf6aa85d6f17bea928eeec44bd5c2f34 - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:076ff3e24df120075b5778c63888ba2ca4370bbde890789f6e19b7c6ebec551e - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:18c7798e227d36b751b52014341c0a5d3563393e8e0778e65cd6505de50f1280 - Debian:
ghcr.io/valkyoth/fluxheim@sha256:10e999b52b6d17d39d03429a70933046780c4c8121bf85b9d376769fca614814
- Wolfi:
- Cache Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:75f2845a1477ce83d67a09688e66d6735ffca9681ee955b6ab96d18b9ec152bf - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:999cf2a1c057f40709920210068a2aabcd537f48d556b878550d6ae5594adc33 - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:7dd894d3d986db530a4a3757219abc2b7c6490a1f16152ae67e4d0b600080fb4 - Debian:
ghcr.io/valkyoth/fluxheim@sha256:1c9d946730eaa79f2b147c570690779222ca130fce894dd6dbaf40a09000d719
- Wolfi:
- Proxy Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:26906c17a0137414959cfd7229eb9fa75d7ccdbd6e214add856799ef93c3e333 - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:74db31fa8d36f9669befb87321abd5c71a31232355c4c8ae62c41f43419950dd - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:61f65b0969861b7c8bb115aab0db42cb99c32410eb269bf8046e196c1fcd5e92 - Debian:
ghcr.io/valkyoth/fluxheim@sha256:140b43f59d748985a0e47d2df539ecf4898726bc247a2a872830ab1e606f4c04
- Wolfi:
- PHP Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:6172dc9d37e50167c576eceaf828369c2a03683e869eaa6b3d18c5207998f554 - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:2cf37a853e712c444f6747f33f17d5516c69f900c0ff994cd7761087bd70deda - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:1adefe8bd370790bc868e5930fc325c565de5b013e12284e30f6297e8c013732 - Debian:
ghcr.io/valkyoth/fluxheim@sha256:3ab02af49fe41092aa0878100daae8bb0aea9e6853bdfd071b13457ed8f52165
- Wolfi:
- Tag signature:
Good "git" signature for 1921261+eldryoth@users.noreply.github.com with ED25519 key SHA256:EoLRQ5k4J5pYz3UMFmkrV798gYFNkToGS2xEPvebqB4
Fluxheim 1.5.23
Fluxheim 1.5.23 Release Notes
Fluxheim 1.5.23 starts the cache-aware origin-protection line with a narrow,
operator-controlled origin-fill budget for Fluxheim-owned cache fill paths.
Added
- Added
[cache.origin_protection],[vhosts.cache.origin_protection], and
route-scopedorigin_protection. - Added
max_concurrent_fillsto bound concurrent protected origin fills per
vhost or route cache policy. The first protected path is range slice fill. - When a protected range slice is missing and the origin-fill budget is
saturated, Fluxheim returns a bounded503instead of falling through to the
normal origin path. - Added cache status fields and metrics for origin-protection rollout:
fluxheim_cache_origin_protection_enabled_policies,
fluxheim_cache_origin_protection_max_concurrent_fills, and the bounded
cache policy activity eventorigin_protected. - Extended
fluxheim cache-keyandfluxheim cache-lookuppreviews with
origin-protection policy state plus
--expect-origin-protection-enabledand
--expect-origin-protection-max-concurrent-fillsrelease-gate checks.
Changed
- Consolidated slice-fill, peer-fill, and origin-fill cache concurrency permits
into one shared limiter implementation so future hardening of the cache-fill
DoS budget primitive applies uniformly.
Notes
- Origin protection is disabled by default.
- Existing cache locks still coalesce same-key fills. Origin protection is a
separate vhost/route budget across distinct protected fills. - This release intentionally does not rewire Pingora's generic proxy cache miss
lifecycle. Broader miss/revalidation integration belongs to the follow-up
cache/runtime boundary work.
Checksums And Signatures
- Commit:
d67aba9eec119829f4e0cd8f7b4e32cd0796109a - Local gate: GitHub CI green before tag; local release metadata checks passed
- CodeQL/code scanning: no open release-blocking alerts before tag
- Source archive checksums:
f63897c91c7e358fab5b366618ab4f12b31bca2746a224ba05bdfcd2c326cd3d fluxheim-1.5.23.tar.gz0ae48723311f58bbf34337d6c96cfb32b10acb2f75353754759eda8b145431bd fluxheim-1.5.23.zip
- Binary checksums:
- x86_64:
46667ae5ca978e417424e8993826caf9f6012e8e786b3e66f45f04eaa763d35e fluxheim-1.5.23-full-x86_64-linux.tar.gz47d6e7f1a6a9d4621c412b283f9570cc41b6d4449852443de40fbb5a8eabf0d6 fluxheim-1.5.23-cache-x86_64-linux.tar.gz0d1e2426491629346bb47e8b184c941dd7b01a5e4b225cce3b66774373a618b4 fluxheim-1.5.23-proxy-x86_64-linux.tar.gzbd6ab74e902d3d258ca5b6ed9dea8d45d071a4390969c1d01d8b7d893649a052 fluxheim-1.5.23-php-x86_64-linux.tar.gz0c36707dfacc6ffcf4cee479e83d38c83c430c9fe4acf6d34e7554581415be48 fluxheim-1.5.23-load-balancer-x86_64-linux.tar.gze596775fca01564d94beeae31511f5903b3e268dc2a50540c6858107ba125ea7 fluxheim-1.5.23-config-tester-x86_64-linux.tar.gz
- aarch64:
4b84bcea1d350ab790d7644965284dba8707130c5164fc99281fefb22d23650d fluxheim-1.5.23-full-aarch64-linux.tar.gz659038e46d2abcc1ed1d00d0afd0b8088b4c4f51e8957bbf2cf7c19f1d55ae23 fluxheim-1.5.23-cache-aarch64-linux.tar.gzdb3b464d9ff00871cd9b4151af943bf97d3f8c435dc983cfa1fc8cd9abc05a1b fluxheim-1.5.23-proxy-aarch64-linux.tar.gz4bea06ce48647a74083fe339f5580f18fc1d15cc851e45ea234034c248849c16 fluxheim-1.5.23-php-aarch64-linux.tar.gzeff4ef4410533d6a6fc9a2afabe08e25215a5e8cae082fc9398c6ec54384fcf4 fluxheim-1.5.23-load-balancer-aarch64-linux.tar.gz85aae2076417b9fe926d120e8ac4fb43bcbf07e319f59fa6971b93cf7ec29a9d fluxheim-1.5.23-config-tester-aarch64-linux.tar.gz
- macos:
606a397cf25fcd931d86afc49ff5e9197424216070182428172e259d4ef62ef4 fluxheim-1.5.23-dev-aarch64-macos.tar.gz
- x86_64:
- SBOM checksums:
2467cd8122f76a438197fa1fa3593c522e99203cb0f8e533f2ab6dc485e72aed fluxheim.spdx.json75095881f3a27ce2283d3ab6e72ad9286cdc09976ebb23b7abe248fcff399cae fluxheim.cyclonedx.json
- Reproducible build:
e21f5d0bf494f020444788e6277f8ec2937e826ea914bf0b095eff1640b20263x86_64c81bdb8a238475077eaa60ea858a425c9e394d2c1fc7caaaa39f8f125732f917aarch64eeb64a9ab57f98b7f2dabc42d814529ac8ca42cd274a690242b22c6f3e520b25macos
- Full Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:1a738837e17e33d172408bf07acaabcc1411e884a6232e9901ed27d46dc3b708 - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:8d84fb0560a365d8978abd065fc053242025ed7dda04a56414d6171d135c2421 - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:36ce151bad497a70f0bc244110f502765202c1d6f9908e21605ef3f4778ac7cd - Debian:
ghcr.io/valkyoth/fluxheim@sha256:9733ba05497a73cf6bb6e6bd34943fc6558125c0633e176c0bcd733194c8615c
- Wolfi:
- Cache Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:8094d859339953f6e62945f0d5d894b8101fde9398f265dc1d1c7c1f692955ce - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:0c46337322fb0776951310a61a0f79dad6274bdbc33586d2326b30f4cc5ab16e - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:2debd1b750c5b5cf8443a8bfc61cc062caccd8292ba462778622eb18c17fa49c - Debian:
ghcr.io/valkyoth/fluxheim@sha256:d91de7eafc242380af568839473b3e298f8424674a6f4279575f925725c066bc
- Wolfi:
- Proxy Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:8d9dc4b3ba2744388189669087db0b22ca49fd2c0d1f03f6cea19f984f8bba90 - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:3a2d490f171e6429efa5e19d3cf42aa6af51a7ca16d9ca0797598f0bc4edd300 - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:49e9b08ec497d8c5b9da8da569b51460bbb820bb844f537a9b1cfb1aa765c5bb - Debian:
ghcr.io/valkyoth/fluxheim@sha256:220b656437d0ff7db1fadc35eb0ba734b84b663330c9c0b7c153942f52a64592
- Wolfi:
- PHP Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:39ddcf5bfea9ea2b2a5153335f9e32cde826b898a82aedf61fe6745244e8dbc4 - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:1388aabf2da3650d4cb033138723c7240bb662ac528a5910fb8a5a58e2a979da - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:8a74abc322d3b6a1574880c69feadd3dfb93b62220b4d6ac657c292a92bcbfb2 - Debian:
ghcr.io/valkyoth/fluxheim@sha256:51cdfba9c74974a80ee0efd5f84b03ba7d3b733f0c5cbaf331a3e7a30974eceb
- Wolfi:
- Load Balancer Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:0787d6ec282760c633e1e2307b8bf8da7dfb3eae15bd7ea7cf2d64195d278b61 - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:c30a8a1deb2c77f231a31d4842b43d57fe4be157d7706b091ab224d4091fdb05 - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:447b4e3d4ffb369eacf8e97743b341e387be739bac3a28bda100b63ac0d0e18e - Debian:
ghcr.io/valkyoth/fluxheim@sha256:00ad8c7dea87af9dce0565da51e6d36ee4fca5d596f848053df01db784ef10ab
- Wolfi:
- Tag signature:
Good "git" signature for 1921261+eldryoth@users.noreply.github.com with ED25519 key SHA256:EoLRQ5k4J5pYz3UMFmkrV798gYFNkToGS2xEPvebqB4
Fluxheim 1.5.22
Fluxheim 1.5.22 Release Notes
Fluxheim 1.5.22 continues the crate-boundary preparation work for the later
1.6.x Pingora-removal line. Runtime behavior is intended to remain unchanged;
the focus is keeping cache/load-balancer domain logic behind Fluxheim-owned
interfaces before the HTTP runtime is replaced.
Changed
- Load-balancer persistence key extraction now consumes a Fluxheim-owned
request view trait instead of depending directly on Pingora request headers. - The existing Pingora
RequestHeadersupport remains as an adapter at the
load-balancer API boundary. - Managed-cookie persistence tests now run against a local Fluxheim request
view, proving the persistence module can validate cookies without a Pingora
request object. fluxheim-websymlink-detection tests now use repository-local,
component-validated test paths from the shared test-support helpers. This
resolves CodeQL path-expression alerts in test setup/cleanup code without
changing static-web runtime behavior.- Cleartext TCP health checks now use a Fluxheim-owned Tokio connect probe.
TLS TCP health checks intentionally keep the existing Pingora transport
connector so SNI/TLS handshake behavior stays unchanged in1.5.22. - Cache request bypass, client revalidation, and range-selection decisions now
run through a Fluxheim-owned cache request view. The root proxy cache module
keeps a small PingoraRequestHeaderadapter, so cache behavior is intended
to remain unchanged while the cache crate owns more policy logic. - Cache response admission decisions for status, content type, response
no-store policy, Vary handling, and range responses now live in the cache
crate. The proxy cache module still exposes the same adapter functions for
the existing Pingora response path. - Cache storage interface result enums for purge type and miss completion now
live in the cache crate. PingoraPurgeTypeandMissFinishTypeconversion
stays in the root adapter layer. - Range and slice cache-key component construction now uses a cache-crate
helper, leaving the proxy cache module to adapt only Pingora's cache-key
container. - UDP beta passive health now ignores local downstream drop conditions such as
per-source response-rate limiting and oversized upstream responses. Only
genuine upstream connectivity/timeout failures can contribute to passive
ejection, and passive-ejection warning logs are rate-limited.
Compatibility
- No configuration changes.
- No load-balancer persistence behavior changes are intended for source-IP,
URI, header, cookie, or managed-cookie persistence. pingora-load-balancingandpingora-cacheremain in the build graph for
1.5.22; actual dependency removal is reserved for the1.6.xline.
Checksums And Signatures
- Commit:
7015707b9d77b67ae70d48694fec96f08103b060 - Local gate: GitHub CI green before tag; local release metadata checks passed
- CodeQL/code scanning: no open release-blocking alerts before tag
- Source archive checksums:
7714149d689203e79922a7438aecd4f860c0920876e6da84d2ff7048838c53ea fluxheim-1.5.22.tar.gz5382d877dd2827220fe3e9eb2301e08452d5619b68cb459536b3526c6f342578 fluxheim-1.5.22.zip
- Binary checksums:
- x86_64:
3dcdfb258e3d0f6322c1128a78a2f1a595e4284101869377499911114b49eb91 fluxheim-1.5.22-full-x86_64-linux.tar.gzb7e7568bb350332825ebd40123c18ce7324848c85296c548d83b4ae19ce26738 fluxheim-1.5.22-cache-x86_64-linux.tar.gz3018277e5dc7942db7b47097eebedebfdd22428db390ebdb0a5aab687925365c fluxheim-1.5.22-proxy-x86_64-linux.tar.gze15d4ac9eba3b6a19194bdbe3272ad70e36d6e3754bd90cf3358e9d4e5a2ea6e fluxheim-1.5.22-php-x86_64-linux.tar.gz33a50a565c2365d13e0a78d337630ff86465cfbadf70723b662931394a544ffc fluxheim-1.5.22-load-balancer-x86_64-linux.tar.gz324e7c48fd63df5f726d8db31a88c3d823462806cfa8e4fbe1820356fd8004f6 fluxheim-1.5.22-config-tester-x86_64-linux.tar.gz
- aarch64:
587452cee55cd422c6f61586a012ed08428563e1985627ec69d368b151528304 fluxheim-1.5.22-full-aarch64-linux.tar.gz65bff78fbf710093a3c0a3d0bb933db8c780f299afd4b57328145920ea32a8d3 fluxheim-1.5.22-cache-aarch64-linux.tar.gzdf0c07d7292efbcd4f3d947f74aa5afefa1d249af8c412bf4ecccff4d4237fc9 fluxheim-1.5.22-proxy-aarch64-linux.tar.gz35c993751113c89a837b6b768c86ae1667c6923431168b6633415d0aae9f58fa fluxheim-1.5.22-php-aarch64-linux.tar.gz4e640850db94935b5f179011de29894bf4ac3bd041dd810f1ec590142604c2c4 fluxheim-1.5.22-load-balancer-aarch64-linux.tar.gz1bf3ef0fec4263123f6ca1b7865f0bb0b66fdb9787e889380e6235aa7c9e1077 fluxheim-1.5.22-config-tester-aarch64-linux.tar.gz
- macos:
012881d65aea2ff34b283772a6e6cdafba9c1973adc51342d09d9283f6ce5f14 fluxheim-1.5.22-dev-aarch64-macos.tar.gz
- x86_64:
- SBOM checksums:
51d63c4b04cff2fdc66490f49957295432b5c00e4c52e1933fe98b9b36c0b0ed fluxheim.spdx.jsondbcf34fe55b37a0018f274ed822c2c1dc7f07485436fe5199f84f67598f26a6f fluxheim.cyclonedx.json
- Reproducible build:
6afa46e0273b906f6e2a6b9d4defcb57e04ca881603a155dd1e50ae4f1e14555x86_644b3a61fd7cfdda7aeb6f0724eefbd525eabfc18daeb2e718aea0dac0fe05fc94aarch64ac42491093fc4f2c9c0412e018534a8137edb1b1175db10889b86e5dbc35e942macos
- Full Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:2bd1abff3252bc95977b01e9571671d0fa033d622874ccf73686e3b17caeb51f - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:8d0039f81e471663831200780c34b4941044a30580322fcd0b3fa0090ad9e139 - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:0a6d59ae92dbdf165334d94b7c84909c08b8e8b142dbaeee57442546d5105c7f - Debian:
ghcr.io/valkyoth/fluxheim@sha256:189d8fa9d8e36a963dee965ae20f637b412a97e3ec23ebafad7ce7c7359be3fe
- Wolfi:
- Cache Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:49a1f6489c8567f85588481a01d02243ab6d8798f2b2acceb6ff305b83117e36 - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:332643bfdcc9441bff81bde08448ab9f32751b0e9665596b9d74b0d9126d1bf3 - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:47a057c5aaf1a15114a45e54e5a689102a7ca3ac83ad7b6f7cda77d9e56107aa - Debian:
ghcr.io/valkyoth/fluxheim@sha256:e9cb1739ef543f4f1f8bbeea8c1a0725f8c59d32b8a5a9c7958e027b2c98aa83
- Wolfi:
- Proxy Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:2dd8e485a93ca4a13cd830a19be1540c2f9cb535ab046c0e6ce9d3813cc51681 - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:10eec7895d90036c3e7bd3d9bbe0928f9fa824ba5335926726609a1af97ba8a8 - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:cbb99ded198ea7c2d784bf9447a6840ce22c900edd5bf90a54bcf60dfcef735a - Debian:
ghcr.io/valkyoth/fluxheim@sha256:0b903b9df6f8d4391aa839f2ad45819854d183cc9fd03439cf7c895864bcd25d
- Wolfi:
- PHP Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:0e065ca7bbd29a8bdd99cf4e06ca7f4339dd9920a805c8ec2a1a8b4c708a8335 - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:664c80a8e8e9851372dbd81e7c5b5c8c428fec1d4a8da8edfd56c37effa4b2dd - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:019975106bb007353fde90a0c1b771e321de08787857ad8c32b7edde739e0596 - Debian:
ghcr.io/valkyoth/fluxheim@sha256:5c24ff9a0c3a15b062a8781d78a236a051c0777d4ee1a8ad6d217604f1384f93
- Wolfi:
- Load Balancer Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:3e49f6f77e9995fd9fe8797f7cb362585d4a6b46fe6a83c2d6f9e759d36b1053 - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:132f0f34d27799ae574cb1cfceb97ce268c551424904013cc5a704c2985121f4 - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:04d5c340af54863b34920a5a06a69ff1a4424e52908f355e323374adf35cb884 - Debian:
ghcr.io/valkyoth/fluxheim@sha256:44eeec586042018aef12a3d704dfca4d983803c3584a7a32bbbd13cd5b83ec15
- Wolfi:
- Tag signature:
Good "git" signature for 1921261+eldryoth@users.noreply.github.com with ED25519 key SHA256:EoLRQ5k4J5pYz3UMFmkrV798gYFNkToGS2xEPvebqB4
Fluxheim 1.5.21
Fluxheim 1.5.21 Release Notes
Fluxheim 1.5.21 continues the UDP beta production-readiness line. The UDP
feature remains compile-gated behind udp-proxy, but DNS-style
request/response forwarding now has explicit pressure and observability
controls for safer testing.
Added
- Added
udp.routes.max_sessions_per_sourceto cap concurrent in-flight UDP
datagram sessions per source IP. - Added
udp.routes.max_responses_per_source_per_secondto cap UDP responses
per source IP per one-second window. - Added UDP Prometheus metrics:
fluxheim_udp_datagrams_total,fluxheim_udp_drops_total, and
fluxheim_udp_active_sessions. - Added admin UDP status at
GET /_fluxheim/udp/status. - Added UDP passive upstream health controls:
passive_health_enabled,passive_health_failures, and
passive_health_ejection_secs.
Changed
dns-load-balanceUDP routes now log a security warning when a beta route
listens on a non-loopback address.- UDP request/response pools skip passively ejected upstreams while at least
one ready member remains, with fallback behavior when the full pool is
unhealthy. - UDP beta docs and smoke tests now describe and exercise the explicit
per-source pressure controls. - UDP smoke coverage now verifies exact-cap responses are accepted and
oversized downstream datagrams are dropped before reaching upstreams. - The stable release gate can run the UDP beta smoke with
FLUXHEIM_GATE_UDP=1; setFLUXHEIM_UDP_SMOKE_ITERATIONSfor longer local
soak runs. - UDP response-rate limiting no longer scans the full tracked-source map on
every response. The route now uses a current-window generation and clears it
only when the second changes. - UDP passive-health fallback selection now scans at most the configured
upstream count instead of the total weighted slot count when members are
ejected.
Compatibility
- Existing UDP beta configs continue to load; the new fields have bounded
defaults. udp-proxyis still not part of the normal release profiles.
Checksums And Signatures
- Commit:
bf0526b4fb1b37cfc33cf72ad41a47e3fa0056db - Local gate: GitHub CI green before tag; local release metadata checks passed
- CodeQL/code scanning: no open release-blocking alerts before tag
- Source archive checksums:
d128c0284cc99c88388e00e27725564be6de00c850ff03b512ba87f5e9584de4 fluxheim-1.5.21.tar.gz4e36064675ac371da3f6a4fffccdd05d987891f02090cbd44e15d12092296301 fluxheim-1.5.21.zip
- Binary checksums:
- x86_64:
37edf500c563d55b4e69f1d82224e4b8a55d3583ef14121a719190276d026392 fluxheim-1.5.21-full-x86_64-linux.tar.gzcde0905803d07d46249d3e395a579a8d039a7e640558015b62a83942bf68f0bd fluxheim-1.5.21-cache-x86_64-linux.tar.gzf2aff758cef9d714b2eb76390be07b2e293619a90d4a28bf757fa3ba44022e08 fluxheim-1.5.21-proxy-x86_64-linux.tar.gzbf5b91da53fb75538b6064f09c942ae6b907da5276561cdd89911f5f75674132 fluxheim-1.5.21-php-x86_64-linux.tar.gz3fb5df5ed378e138b9a5f3fca3aa82f3ec5bb0b44420a483d55ba09fcfea40b4 fluxheim-1.5.21-load-balancer-x86_64-linux.tar.gzf8eff05670b45d3c8ff3fefe9c5299bd88bdea041b021c56e8928654445f76f3 fluxheim-1.5.21-config-tester-x86_64-linux.tar.gz
- aarch64:
2c43737a3c2b51b1558b59dd1ef8c37c2c16c77e0e258f2dcba132cd6257baf3 fluxheim-1.5.21-full-aarch64-linux.tar.gzfc915ef30ff614c3d3167de1bac5dc8f094afa4c715d013c9904f5467c18900f fluxheim-1.5.21-cache-aarch64-linux.tar.gz560d7b5a88419d51cdf844112d22a2d203a6fe787b61112b776150c72907c1d9 fluxheim-1.5.21-proxy-aarch64-linux.tar.gzf9fb9d59cd655bfd00b940e943e950c3056faa348aaa840230e1a579c651b7a7 fluxheim-1.5.21-php-aarch64-linux.tar.gzaa6dac83302318f57a6fcad6c5f11903e03397864856d8715d623bf460bccd46 fluxheim-1.5.21-load-balancer-aarch64-linux.tar.gz2b3c336c6f20bf5309d32cec885db258a2df3b554bc45a9cd6a2e85b998a5e6b fluxheim-1.5.21-config-tester-aarch64-linux.tar.gz
- macos:
533f8252989f9a8d455f6f82259e965f1add011f8ab2ba744cb92277e305784c fluxheim-1.5.21-dev-aarch64-macos.tar.gz
- x86_64:
- SBOM checksums:
108dc44377694cbe7c4bf840c257adfb907f52bb58921b1b8042803d62e41999 fluxheim.spdx.json24e1663976f7e61ad2596ca97bd5ce6227c9c06f6d45c547075f870f5351e746 fluxheim.cyclonedx.json
- Reproducible build:
a1dad755b60e8f667ac98ff9352754ef706dc4b34e7900e5983b1100f052f38dx86_642716cbf04f68988867a6672c7ec57cb4808ee7d4630e2b889b7a05aff77abe18aarch648210aea73ded9732fb325255e743121405f20dece920634f347cc209c4765193macos
- Full Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:a12cb63ecefa0e092dc9ba514415df3b4620099cc870e19d37a45cb64b0869ff - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:16e7b8a6098d89e97e9f1a597917b7cdab1c349a60520b1a1faf06637709debc - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:227ddeb1c775d312add505d2c67ba18ce23532ca1d60b3ee5ff3085fc9bc5eb9 - Debian:
ghcr.io/valkyoth/fluxheim@sha256:1c1f851e33c24a40630627fcc002e8e22536afc4e0cdc0da255ddf64e7575552
- Wolfi:
- Cache Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:7bacfde825a546f8a25de3c1dbd7cac547d78a1b76afc153f9d62db31c4e115b - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:141c42b8c376b711e1d1f6ee3165b83c9a73e5de5bf9cc73fb2599e218b558cc - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:38ed5c049d5d88889a86b9c552427e204605d8c342154edb676f332c522ba018 - Debian:
ghcr.io/valkyoth/fluxheim@sha256:7e1a4bbbfb58495abead6d925d39592b056c949fb0eaf9538772360d09b0fe57
- Wolfi:
- Proxy Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:4114ce3111ea00761a0d90940a96b9c8ef1034dd12f363e2f4ed637db3ee1fdb - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:0743771e19a8c87f3372442a35eb18505fb40220849eab56ee6bf04d5e12c3ac - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:4c130f0d5488dfa9ad98817e7697f47cdadbce5eb0354a2c4846711a1d0f18c0 - Debian:
ghcr.io/valkyoth/fluxheim@sha256:93cc24371dc6997f1f996a52e4dac31e3a3478ce86f71e7e1fe6cda8eccc8b65
- Wolfi:
- PHP Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:e33c2645fcdc16bc4ea0bee1272d90f5cd90273c40d626fc64eb868e591cb8d9 - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:3c20c579182e4cb65e9eec11f890ba45ea93fb08f9d17d0b4af21ecf4f59e129 - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:118af8a61276086b56355f9ed766398d692bf1ecbc77ec49c5d98cbab446978c - Debian:
ghcr.io/valkyoth/fluxheim@sha256:0f8d7f6c3884aa22c1a1961285972339ea60c2c369f6405d6afefa19830b2b0f
- Wolfi:
- Load Balancer Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:61775fea830a5aa7036f3d4cdbeda235788f62c9019662c55b64717bf8933084 - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:46fa14eb73aad7a4714192649bfc19f43ea05963918be74dbc1a6d0a1dafad93 - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:172fd21c2b76d84c8493ba9de6d52fcb1e934a91c323d888e044928c753a06d7 - Debian:
ghcr.io/valkyoth/fluxheim@sha256:52015279849002ce6bb11f29191c51fe720cfa682ef0ea85dfa7ef568d90219d
- Wolfi:
- Tag signature:
Good "git" signature for 1921261+eldryoth@users.noreply.github.com with ED25519 key SHA256:EoLRQ5k4J5pYz3UMFmkrV798gYFNkToGS2xEPvebqB4
Fluxheim 1.5.20
Fluxheim 1.5.20 Release Notes
Fluxheim 1.5.20 starts the web, PHP-FPM, and cache boundary-preparation line
and carries forward the post-1.5.19 trusted-proxy validation fix.
Changed
- Started the
fluxheim-cachecrate boundary by moving shared cache-header
request/response directive parsing intocrates/fluxheim-cache. The root
crate keepscrate::cache_headersas a compatibility re-export, so runtime
behavior and call sites are unchanged. - Moved pure cache admin request/result/preview DTOs into
crates/fluxheim-cache::api, with rootcrate::cache_apiand
crate::proxyre-exports kept for compatibility. Pure runtime totals and
activity-reset DTOs also moved. - Moved cache object metadata, activity stats, tier stats, object lookup, and
vhost/route runtime stats intocrates/fluxheim-cache::api. Root
crate::cacheandcrate::cache_apikeep compatibility re-exports so admin,
CLI, metrics, and proxy call sites are unchanged. - Moved cache storage-plan DTOs into
crates/fluxheim-cache::plan, keeping
rootcrate::cachere-exports while the Pingora storage adapters remain in
the root cache runtime. - Moved cached object DTOs and
CacheStoreErrorinto
crates/fluxheim-cache::object, keeping rootcrate::cachere-exports for
memory-cache and test call sites. - Moved cache request/key DTOs into
crates/fluxheim-cache::request, with root
crate::cachere-exports and root cache-key builders preserving the existing
behavior. - Moved cache range/slice request DTOs, single-range parsing, client range
parsing, client-range resolution, and required-slice planning into
crates/fluxheim-cache::request, leaving rootcrate::proxy_cacheas the
Pingora request-header and cache-key adapter. - Moved Content-Range parsing into
crates/fluxheim-cache::request, so
range-cache admission and slice-object reconstruction share one pure parser. - Moved pure cache freshness helpers for remaining TTL and synthesized
Cache-Control freshness directives intocrates/fluxheim-cache::headers. - Moved Vary header parsing and configured request-header variance policy into
crates/fluxheim-cache::headers, keeping rootcrate::proxy_cachefocused
on Pingora request hashing and adapter logic. - Moved Vary request hash material framing into
crates/fluxheim-cache::headers; rootcrate::proxy_cachenow only adapts
Pingora request headers and calls the Pingora hash function. - Moved cacheable response Content-Type matching into
crates/fluxheim-cache::headers, leaving root cache admission as the
status/header adapter. - Moved cache-bypass cookie and query-string matching, including
percent-decoded query comparisons, intocrates/fluxheim-cache::headers. - Moved cache stale-serving event and status/error allow policy into
crates/fluxheim-cache::headers, keeping Pingora error classification in
rootcrate::proxy_cache. - Moved response
AgeandCache-Controlmax-age/s-maxage parsers into
crates/fluxheim-cache::headers, leaving root response helpers as thin
Pingora header adapters. - Moved Cache-Control directive merge/replacement into
crates/fluxheim-cache::headers, leaving root response mutation as a
Pingora header adapter. - Moved range response
Content-RangeandContent-Lengthvalidation into
crates/fluxheim-cache::request, leaving root range-cache admission as the
Pingora status/header adapter. - Moved cache-key component formatting and the temporary HEAD cache bypass
predicate intocrates/fluxheim-cache::request, keeping root compatibility
wrappers for existing proxy callers. - Moved multipart slice range policy sizing into
crates/fluxheim-cache::request, leaving rootcrate::proxy_cacheas the
config adapter. - Moved cache Prometheus label classifiers into
crates/fluxheim-cache,
keeping rootcrate::metricsas recorder wiring. - Moved cache purge-index state, purge-entry DTOs, storage-local purge result
counters, and cache-key path matching helpers into
crates/fluxheim-cache::purge_index. Rootcrate::cachekeeps the existing
compatibility type names while the Pingora storage implementations remain in
the root runtime adapter. - Started the
fluxheim-webcrate boundary by moving static directory-listing
data/rendering helpers intocrates/fluxheim-web. The rootcrate::web
module re-exports the same types and renderer while keeping Pingora response
serving in the root adapter. - Moved static byte-range parsing into
crates/fluxheim-web, keeping
crate::webcompatibility re-exports for the existing static response
planner and tests. - Moved static response planning, conditional request evaluation, weak ETag
construction, and range response plan DTOs intocrates/fluxheim-web.
crate::webkeeps the existingStaticRequestConditionscompatibility
adapter so proxy call sites and cache-refresh semantics are unchanged. - Moved safe relative path and directory-listing path helpers into
crates/fluxheim-web, leaving root static serving responsible for filesystem
canonicalization and symlink checks. - Moved configured web-root symlink detection into
crates/fluxheim-web,
keeping rootStaticFileServerconstruction as the filesystem adapter. - Moved static cache identity formatting into
crates/fluxheim-web, keeping
rootStaticFileas the filesystem metadata adapter. - Started the
fluxheim-php-fpmcrate boundary by moving PHP-FPM timeout
classification and bounded error-outcome helpers into
crates/fluxheim-php-fpm, with the root PHP-FPM module re-exporting the same
names for existing runtime and test code. - Moved managed PHP-FPM restart-backoff and sanitized
PATHfallback helpers
intocrates/fluxheim-php-fpm, again keeping the root module as the
compatibility surface for existing code. - Moved managed PHP-FPM config rendering and its config-value validators into
crates/fluxheim-php-fpm, leaving root PHP-FPM process supervision as the
compatibility adapter. - Moved PHP-FPM effective timeout calculation, retry attempt/deadline policy,
retryable status matching, and retryable error classification into
crates/fluxheim-php-fpm, with rootcrate::php_fpmretaining the
StatusCodecompatibility adapter. - Moved PHP-FPM endpoint selection and endpoint DTOs into
crates/fluxheim-php-fpm, with rootcrate::php_fpmkeeping compatibility
re-exports for the proxy runtime and tests. - Moved PHP-FPM response-header name/value safety guards into
crates/fluxheim-php-fpm, keeping root response parsing as the Pingora
header adapter. - Moved PHP-FPM response split,
Statusparsing, ASCII trimming, and header
colon splitting intocrates/fluxheim-php-fpm, leaving root response parsing
as the Pingora response-header adapter. - Moved managed PHP-FPM instance-name generation and metric-pool sanitization
intocrates/fluxheim-php-fpm, leaving root process supervision as the
Unix runtime adapter. - Started the
fluxheim-geoipcrate boundary by movingGeoContextand the
optional local MMDB runtime intocrates/fluxheim-geoip, with root
crate::geo_contextandcrate::geoipcompatibility re-exports. - Started the
fluxheim-compressioncrate boundary by moving response
compression encoder lifecycle and output-limit accounting into
crates/fluxheim-compression, while keeping Pingora header selection and
response mutation in the root adapter. - Moved Accept-Encoding token and qvalue parsing into
crates/fluxheim-compression, keeping root response-header selection as the
Pingora adapter. - Moved compression response policy string matching for Cache-Control directives
and Content-Type eligibility intocrates/fluxheim-compression, leaving root
response-header iteration as the adapter. - Moved active Content-Encoding classification and compression input-size bounds
intocrates/fluxheim-compression, keeping root response headers/config as
adapters. - Started the
fluxheim-observabilitycrate boundary by moving W3C Trace
Context parsing, generation, and traceparent normalization into
crates/fluxheim-observability, with rootcrate::trace_contextkept as a
compatibility re-export. - Moved the shared OTLP HTTP agent and symlink-safe custom CA bundle loader into
crates/fluxheim-observabilitybehind itsotlp-httpfeature, while keeping
the rootcrate::otlp_httpmodule as the metrics/tracing adapter. - Moved OTLP HTTP endpoint parsing into
crates/fluxheim-observability,
keeping the Prometheus metrics payload conversion in the root metrics adapter. - Moved the Prometheus-to-OTLP metrics payload builder into
crates/fluxheim-observabilitybehind itsotlp-metricsfeature, leaving
root metrics OTLP as exporter lifecycle and HTTP post wiring. - Moved access-log helper logic for request-id validation/generation,
shared low-cardinality status classes, response byte counting, and Unix
nanosecond timestamps intocrates/fluxheim-observability, while the root
access-log module keeps Pingora request-header integration and JSON event
assembly and Prometheus metrics reuses the shared status-class helper. - Moved shared JSON string escaping for access logs and runtime JSON logs into
crates/fluxheim-observability, keeping both root log schemas unchanged. - Moved proxy metrics outcome, method, and status-class label bucketing into
crates/fluxheim-observability, keeping rootcrate::metricsas the
Prometheus registry/recorder adapter. - Moved general Prometheus label classifiers for host-routing, admin-auth,
compression, edge-policy, load-balancer event/queue/upstream, stream, ACME,
PHP/PHP-FPM, and metrics-OTLP exporter events intocrates/fluxheim-observability,
further narrowing rootcrate::metricsto recorder wiring. - Mov...
Fluxheim 1.5.19
Fluxheim 1.5.19 Release Notes
Fluxheim 1.5.19 moves the Fluxheim-owned load-balancer core into the internal
fluxheim-load-balancer workspace crate and includes security hardening found
during the v1.5.19 review cycle.
Security Fixes
- Fixed fallback proxy cache auth ordering so cache fallback handling cannot
run before the configured authorization decision. - Rejected ambiguous dot-segment proxy request paths before route selection,
route-local policy checks, cache keying, or upstream forwarding. - Treated incoming method casing as equivalent for route method filters so
lowercase HTTP/1 method tokens cannot miss method-scoped route policy. - Restricted accepted inbound request IDs to an identifier-safe alphabet so
URL-like or email-like values are regenerated before reaching logs, traces,
templates, or upstream headers. - Released response-compression output buffers after each emitted chunk while
preserving the cumulativemax_output_bytescap. - Made route prefix matching and prefix stripping path-segment aware so sibling
paths such as/repoadmincannot enter a/reporoute or rewrite to
unintended upstream paths. - Percent-encoded URI-special bytes in route regex capture substitutions before
applying rewrite templates, preserving slash-spanning captures while removing
raw matrix/userinfo/list delimiters from rewritten upstream paths. - Normalized
Set-CookieDomainandPathattribute values before response
rewrites, covering leading-dot domains, quoted attribute values, and trailing
ASCII whitespace so alternate cookie syntax cannot bypass configured rewrite
rules. - Hardened range slice-cache origin fill so dynamic-only upstream discovery
cannot fall back to the default loopback upstream, unsafe dot-segment origin
paths are rejected, and multipart range requests are bounded by range count
and response-wrapper overhead. - Resolved exact local-static purge identities through the same route rewrite
logic used by static serving, includingrewrite_prefix. - Applied decoded route matching to edge policy checks, closing mismatches
between encoded request paths and policy enforcement. - Preserved private cache-control directives for status-specific TTL handling
so restrictive origin cache headers are not weakened by cache policy. - Hardened PHP-FPM path handling by denying scripts after resolved-path
normalization and covering directory-index resolution under denied PHP path
prefixes. - Fixed proxy-only route decode feature wiring so shared path safety remains
available in proxy builds without cache. - Isolated upstream CA bundle material in peer reuse keys to avoid reusing
upstream TLS peers across distinct trust material. - Added a default stream proxy connection cap to avoid unbounded accepted TCP
stream connections. - Detached self-healing probes from public proxy traffic paths.
- Preserved restrictive PHP cache headers when PHP-FPM responses are converted
into Fluxheim responses. - Rejected PHP-FPM
PHP_VALUEandPHP_ADMIN_VALUEstyle ini-control
parameters so configured PHP params cannot rewrite php-fpm runtime policy. - Cleaned pending PHP request-body spool files on retry/error paths.
- Added
php.max_in_flight, defaulting to8, to cap concurrent PHP-FPM
requests before request body buffering and FastCGI dispatch. - Added
proxy.load_balance.passive_health.min_healthy_backends, defaulting to
1, so passive outlier ejection cannot fail-closed an entire load-balanced
pool by default. Operators can set it to0to retain strict fail-closed
passive-health behavior. - Hardened managed-cookie load-balancer persistence so invalid affinity
cookies no longer create server-side persistence-table entries, while newly
issued signed cookies immediately record one bounded table entry for the
selected backend so the next request remains pinned. - Rejected verified HTTP proxy upstream TLS configs that target an IP-addressed
upstream without explicitupstream_sni, preventing the Pingora connector
from falling into empty-SNI certificate-verification bypass behavior. - Hardened HTTP load-balancer discovery so private, loopback, link-local,
metadata, multicast, reserved, and documentation IP-literal backends are
rejected by default unless the operator explicitly enables
proxy.upstreams_http_allow_private_backends. - Added
proxy.downstream_read_timeout_secs, defaulting to 60 seconds, and
wired it into vendored Pingora HTTP/2 downstream request-body reads so
slow-body clients cannot hold proxy forwarding tasks indefinitely while
withholding DATA frames or END_STREAM. - Applied the downstream read timeout before PHP-FPM request-body collection and
drain paths, covering PHP routes that read the body before FastCGI execution
begins. - Revalidated managed PHP-FPM binary paths immediately before spawning child
processes and rejected symlinked binaries at config validation so local path
swaps cannot replace the supervised executable between reload and spawn. - Hardened downstream HTTP/2 flow-control defaults by capping per-stream send
buffering at 256 KiB, keeping DATA frames at 16 KiB, fixing the receive
window at 64 KiB, and reducing pending-accept reset-stream pressure. - Removed encrypted filesystem disk-cache fill heap amplification for the local
provider by committing streamed cache bodies through bounded AEAD chunks, and
bounded the OpenBao Transit whole-object fallback heap budget. - Hardened DNS-refreshed upstream discovery against DNS rebinding pivots by
rejecting private, loopback, link-local, multicast, reserved, documentation,
metadata, and unspecified resolved addresses unless
proxy.upstream_dns_allow_private_backends = trueis set. - Hardened HTTP and DNS discovery backend filtering by applying the IPv4
private address policy to IPv4-mapped and IPv4-compatible IPv6 literals
before they can be accepted as upstream addresses. - Hardened split-config trusted-proxy handling by extending
server.trusted_proxiesfragments instead of replacing the main list, and by
rejecting catch-all or near-global trusted-proxy ranges such as0.0.0.0/0
and::/0. - Hardened split-config proxy handling by applying field-level
[proxy]
fragment merges so a later timeout-only proxy fragment cannot silently clear
upstream TLS verification, auth request, mirror, or load-balancer policy. - Completed recursive split-config merges for
[proxy.auth_request],
[proxy.mirror], and[proxy.load_balance]so partial nested fragments
cannot reset established auth, shadow-traffic, persistence, health-check,
retry, or load-balancer selection policy back to defaults. - Hardened split-config handling for
[compression],[cache],
[cache_purger],[web], and[stream]so partial fragments cannot
silently drop previously configured compression limits, cache encryption,
static-file safety policy, or stream routes. - Hardened split-config admin handling by applying field-level
[admin]
fragment merges so a later ops-socket or health-only admin fragment cannot
silently disable the admin API or clear token and snapshot-store settings. - Hardened cache peer-fill request construction so peer lookups use the
selected vhost's canonicalHost, while client-controlledHostheaders
and absolute-form URI authorities cannot pivot peer requests to another
vhost. - Added an inbound peer-fill recursion guard so requests marked with
X-Fluxheim-Peer-Fill: 1cannot launch another outbound peer-fill fetch in
cyclic peer topologies. - Decoded percent-encoded cache bypass query names and values before comparing
bypass_query_paramsandbypass_query_values, closing encoded preview or
private-mode cache bypass evasion. - Aligned configured cache Vary request headers with the 16-field runtime Vary
cap and rejected effective origin-plus-configured Vary overflows at cache
admission instead of dropping variance. - Hardened auth-request response header handling so allowed auth response
headers cannot override Fluxheim's upstream request header policy on name
collisions. - Hardened auth-request forwarded context handling so allow-listed
X-Original-URI,X-Forwarded-For,X-Real-IP,X-Forwarded-Host, and
X-Forwarded-Protovalues are synthesized from Fluxheim's trusted request
context instead of copied from spoofable client headers. - Matched auth-request split
Cookiehandling to the origin request path by
joining repeatedCookiefields with;instead of,before sending
the authorization subrequest. - Hardened Unix admin-token and file-log opening by using rustix
architecture-correctNOFOLLOWflags instead of hand-coded constants. - Hardened trusted-proxy
X-Forwarded-Forparsing so any malformed hop rejects
the forwarded chain and falls back to the direct peer IP instead of silently
attributing traffic to a trusted proxy hop. - Normalized IPv4-mapped IPv6 client addresses before trusted-proxy,
access-policy, rate-limit, and GeoIP decisions so IPv4 CIDR policy also
applies on dual-stack listeners that report IPv4 peers as::ffff:.... - Restricted WebSocket-enabled proxy routes to the
websocketupgrade token so
valid but unrelated protocol upgrades such ash2care not forwarded to
upstreams. - Stripped HTTP/1
ConnectionandUpgraderequest headers when
proxy.websocket = false, preventing normal proxy routes from tunneling
upgraded protocols by accident. - Removed vendored Pingora upstream TLS underscore-to-hyphen hostname
verification rewriting so certificates are checked against the exact
configured SNI or alternative name. - Stripped client-controlled hop-by-hop request headers before forwarding to
upstreams, includingConnection-listed extension headers an...
Fluxheim 1.5.18
Fluxheim 1.5.18 Release Notes
Fluxheim 1.5.18 moves configuration ownership into the internal
fluxheim-config crate and hardens downstream HTTP/2 response handling.
What Changed
- Added
crates/fluxheim-configas the internal owner of config structs,
parsing, validation, config-source loading, and config tests. - Kept root
crate::configandcrate::config_*compatibility shims so
runtime modules and operator-facing behavior stay stable. - Preserved existing config syntax, config tester behavior, release profiles,
RPM/container packaging, and artifact names. - Added a config-crate
test-supportfeature so root tests continue to use
repository-local process paths while production defaults remain under
/run/fluxheim. - Added
proxy.downstream_total_response_timeout_secs, an absolute HTTP/2
response-write lifetime bound that is not reset by partial writes or client
WINDOW_UPDATEframes. - Clarified and tested that
server.limits.max_request_headerscounts
duplicate request header values, including split HTTP/2Cookiecrumbs,
before routing.
Compatibility
- Existing config files remain valid.
- Existing feature profiles and release artifact names are unchanged.
- Omitted
proxy.downstream_total_response_timeout_secskeeps the secure
300-second default. - The root
fluxheimcrate remains the binary/orchestration crate. fluxheim-configis an internal workspace crate and is not published to
crates.io.
Not Included
- No load-balancer crate extraction yet.
- No cache/web/PHP crate extraction yet.
- No removal of
pingora-load-balancingorpingora-cacheyet. - No HTTP proxy runtime replacement, Wasm runtime, HTTP/3/QUIC, WAF, or
production UDP/GSLB promotion in this release.
Checksums And Signatures
- Commit:
afb3e843748800109e9c6b4d239b41264fc436f4 - Local gate: GitHub CI green before tag; local release metadata checks passed
- CodeQL/code scanning: no open release-blocking alerts before tag
- Source archive checksums:
26a12cbf74b3a5e299eca7ed9a763402be3bf96cda121823d7430e1ed9592320 fluxheim-1.5.18.tar.gz294d7327c0da32a0ba241362408ab1f9c7acf18a545f755b9b7c6535f4406e49 fluxheim-1.5.18.zip
- Binary checksums:
- x86_64:
cfc80240ae11c062b202204a2de35e522820c999d82a0f9d4ee9fb1db3f3a2da fluxheim-1.5.18-full-x86_64-linux.tar.gz3d87306df2c2b3a9ec0830825003a417b35ee5d7625ce57932935e331994dc08 fluxheim-1.5.18-cache-x86_64-linux.tar.gz2a2b33580a39daecb28dd1175717707b11baa0a9bc061dbf5749c60fc2f0f638 fluxheim-1.5.18-proxy-x86_64-linux.tar.gz98dee508902cab5547c57065875351b0566150e8a749ce96dfc7c9a335b03033 fluxheim-1.5.18-php-x86_64-linux.tar.gz6300ebf0aabfe025bc03bd84b383b97e4e2d02659988a90a5bd9257ab17d68c2 fluxheim-1.5.18-load-balancer-x86_64-linux.tar.gz0d5db8e1bb438bb6e862f6cb8aa3db2d9ede697e5df52b51bf601be2c41df0e2 fluxheim-1.5.18-config-tester-x86_64-linux.tar.gz
- aarch64:
d8586682bfbffb4d7a721947cad56a0ce477a8ef008f0fe1f26a2e73a64da89c fluxheim-1.5.18-full-aarch64-linux.tar.gz9b1cb492c00422587d702635e61e9eb915e781a842d68430fba0c7a2f00fd5c4 fluxheim-1.5.18-cache-aarch64-linux.tar.gz47d2dd746a5edc74a1627c076b2b70e0f46cdf2cd174d41c3a85c9a34e2bae7b fluxheim-1.5.18-proxy-aarch64-linux.tar.gz017e54a513105a1bd7eb3c8a5ea5031b151224c0dc7fc8880f6278bb2b25212b fluxheim-1.5.18-php-aarch64-linux.tar.gz44c4456166ee2576b08be001843d416db0a496a14048e8f54ed867f4626d1775 fluxheim-1.5.18-load-balancer-aarch64-linux.tar.gz8d8751024302f8948608774da311adf7e6a99d132787e222ffab692709abf543 fluxheim-1.5.18-config-tester-aarch64-linux.tar.gz
- macos:
2e7221d4d5413839a767a818e798846ac17f466470d4342c55c19f2dc1a4c8e8 fluxheim-1.5.18-dev-aarch64-macos.tar.gz
- x86_64:
- SBOM checksums:
a142df15155b77febebe9afdea9fcff857637ca5fffe470ce9fa553315ef9cd5 fluxheim.spdx.json7c1e10a6fd505078308a8c53760be71c905f956dc168b16dcf55401e39d53097 fluxheim.cyclonedx.json
- Reproducible build:
54f063d56e4cf5c3a1e84df2c12eaadf22e44843473da5763977dc57b0e9f075x86_64c5afb09966a8afffc2564c92de5a1e5564f9bddf18bec4096822b62cacf5239daarch64808a1cfa5a002cdfaff2c087de08c9b8880a2b3dd328a2ad873e9c3eef3d3642macos
- Full Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:6acc8c8870c86b356490aa68eaf34724e54b674bb643e19fa4747e9adb2879a2 - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:396ad71e09a57664c330c182c7758565bac301c0f5fd625bb2e6eb4518dc62f7 - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:2bad8926f1d7570aeab77bda412d5cfb08325ce6fa98a134184f97e104b67e43 - Debian:
ghcr.io/valkyoth/fluxheim@sha256:8237b237442e0c63a640e5fbc0d658ac86cc98f5f6ba8c41bb032e6706e25b16
- Wolfi:
- Cache Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:204fac399b9eb81a92c7a903932f13f7a0ccf691c7f4103b6c0098be3c02c019 - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:1f244ba9355790ff3b68cb1cbff5c7d5fde1769ca5568df7c383b715975c24a2 - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:6515ffc8712b7818cb4f1b8d29f24d2f53c8fa71478875b4761c8c9cb2945cdd - Debian:
ghcr.io/valkyoth/fluxheim@sha256:0685eec8efe08db1facd9a678f05916a0314e19992b2f8cdcc65f42186da2b5c
- Wolfi:
- Proxy Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:02aced54fd7eeffa93461eefe5c67a3ae0ea9bba44bbc5d43d3ab9fa97cf89d7 - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:c24cdc3149673fde0048b1390c48ad4ede5b097832f6c05ee38b49b31b0e33e1 - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:02cf29d923f108f95b473e41aa36bf38bde0dabc0de0c6069e0880f00bb1b9a6 - Debian:
ghcr.io/valkyoth/fluxheim@sha256:3ed49695afcf26e4be663207c2e7be3324b7b43431780a2bb9880191359e52ce
- Wolfi:
- PHP Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:080b3c147e9374cd811e2649dad4a4566bb0357b54d16343ce769e4d8b0d54d7 - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:9e1d9ffe69c8d4ec203e292241002227d8b404ba8bebba2c1fa1d5e3ef840c6e - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:172337f83fee1b0976b8498e9db7f7d55f8e314f49952b4f896963e05c5711fc - Debian:
ghcr.io/valkyoth/fluxheim@sha256:02493d1e9dd942e3b200c7d5e0339914e5fcd41d083e1befd908765d1e75b73a
- Wolfi:
- Load Balancer Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:1642b3f1f024d59c5bcdc1c6d183bce3a2efb48941f97c361ca41f41f8a517bb - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:0bba4f3644310c4c915f2bc9402e21264a9a68b067460b037a0f67c13c156328 - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:37ffb9f2d4d0bd6c75a3124d6eca22edb814152584b43aa7b7af189a7e5ca3c7 - Debian:
ghcr.io/valkyoth/fluxheim@sha256:043abf15dd0fa6bbaf7bea9bc5a60b1410ea40da0b6546e6e7eb6710e5584fb6
- Wolfi:
- Tag signature:
Good "git" signature for 1921261+eldryoth@users.noreply.github.com with ED25519 key SHA256:EoLRQ5k4J5pYz3UMFmkrV798gYFNkToGS2xEPvebqB4
Fluxheim 1.5.17
Fluxheim 1.5.17 Release Notes
Fluxheim 1.5.17 starts the workspace and shared-crate foundation line.
This release is intentionally structural. It creates the first internal
workspace crate without changing operator-facing config, runtime behavior, or
release profiles. The goal is to make later config, load-balancer, cache, web,
PHP-FPM, Wasm, and runtime extractions smaller and safer.
What Changed
- Converted the repository into a Cargo workspace.
- Added
crates/fluxheim-commonas the first internal shared crate. - Moved the Fluxheim-owned
FluxErrorandFluxResultboundary into
fluxheim-common. - Moved shared forward-path safety validation into
fluxheim-common. - Moved repository-local test path helpers behind the
fluxheim-common
test-supportfeature. - Kept root compatibility adapters at
crate::flux_errorand
crate::path_safety, plus the test-onlycrate::test_supportadapter, so
existing modules and tests continue to compile without broad churn. - Kept Pingora-specific error conversion at the root adapter boundary instead
of moving Pingora dependencies into the common crate. - Updated
regexfrom1.12.3to1.12.4. - Added a release-gate crate freshness check for compatible non-Pingora updates
and stricter release metadata checks for release notes, README,
build/container docs, and RPM version alignment. - Copied workspace crates into all container build stages so release images
build correctly after the workspace split. - Made
scripts/stable_release_gate.sh releaserequire the root image smoke
plus representative Debian and Alpine variant image smokes before tagging. - Fixed the vendored OpenSSL FIPS support build script so Rust 1.96 clippy
accepts the crate under release-D warningschecks.
Compatibility
- No config syntax changes.
- No runtime behavior changes.
- Existing feature profiles and release artifact names are unchanged.
- The root
fluxheimcrate remains the binary/orchestration crate. fluxheim-commonis an internal workspace crate and is not published to
crates.io.
Not Included
- No config crate extraction yet.
- No load-balancer crate extraction yet.
- No cache/web/PHP crate extraction yet.
- No removal of
pingora-load-balancingorpingora-cacheyet. - No HTTP proxy runtime replacement, Wasm runtime, HTTP/3/QUIC, WAF, or
production UDP/GSLB promotion in this release.
Checksums And Signatures
- Commit:
8aecc0127d8f66fa52eed0d130edc352f9eb029b - Local gate: GitHub CI green before tag; local release metadata checks passed
- CodeQL/code scanning: no open release-blocking alerts before tag
- Source archive checksums:
2aec0e974cb2676e8a123b0b815f8e4b14cb57c9e242d584a9602464b94ff0a8 fluxheim-1.5.17-release.tar.gzf2448dc18c29750c55b7a2bbfe0282865a87893f82ee813603f1aae5e1cc6d6e fluxheim-1.5.17-release.zip
- Binary checksums:
- x86_64:
b5be030e537f5e7badaaa54aed12c45989e0320f793261836a3ca37c6dab5a9a fluxheim-1.5.17-release-full-x86_64-linux.tar.gz020b2b7bdd135335ae1b5838289cce6d30ab489590ff297992fb4db8ce425614 fluxheim-1.5.17-release-cache-x86_64-linux.tar.gz884f762245a748e6c823dc8969aa9a3dab59a61dace2a57407eec4896afe5a1e fluxheim-1.5.17-release-proxy-x86_64-linux.tar.gz1f44ff87ac4e99120f18f2f62c4daddfa7a935a2367dc15474e797cb45bfc60d fluxheim-1.5.17-release-php-x86_64-linux.tar.gz0f5b5c2fad0e97176253ddb58b60da4a7d7325783693d15e9d566bb41efc5eef fluxheim-1.5.17-release-load-balancer-x86_64-linux.tar.gz0cc5f7ca199e36ec4f467ed4d9a5893f6688d7fc5f1e192bf9f5f24b0d312d3b fluxheim-1.5.17-release-config-tester-x86_64-linux.tar.gz
- aarch64:
0952b1b637b8ba765f866c117a87104de22616bfe26f7ed5f9ed6b9d38a2d3b2 fluxheim-1.5.17-release-full-aarch64-linux.tar.gzf33d8804aed28992f609a3fec62f3c391c8c6b81749902056def11fb0d52b015 fluxheim-1.5.17-release-cache-aarch64-linux.tar.gz0e9534e7aed2cb551faefb7b8eddee2c1dc1a21c92f5902468cca0c6842cfb90 fluxheim-1.5.17-release-proxy-aarch64-linux.tar.gz427c420ec5eb626bb4e6f177ec7e6c483d603965c0d2a152ca556bd58bda7dfe fluxheim-1.5.17-release-php-aarch64-linux.tar.gzacd25f0b60203b0ff8ed7e19798dd763dbc6baef728ea1a05bef6b1511705c77 fluxheim-1.5.17-release-load-balancer-aarch64-linux.tar.gze397a5870f81ebd86ef59ab37f49c704446106b237e13f28ffda341295a0acee fluxheim-1.5.17-release-config-tester-aarch64-linux.tar.gz
- macos:
28759509ca4d152f46a06fe051a61c1e92e5942f8ee90e96c782cec994858706 fluxheim-1.5.17-release-dev-aarch64-macos.tar.gz
- x86_64:
- SBOM checksums:
a7ac5f2d3e2b90a49d9682b3cb8f602808514303c552362374764df11c8e0495 fluxheim.spdx.jsonff7ad99eb6ea3233b5bc5858bd2408a817350ce6a0cfceccc9e27928434fc030 fluxheim.cyclonedx.json
- Reproducible build:
ebfb8bfb1bbc76c61c68e3b9dcfa8bb7bd99e5fc36385e89b17e269c454f3f41x86_6479eb5b8841ed1525df4d79c6f24b06c101002ed7a3916cd61fd96ff112d9af89aarch64966dcbaf2b59e524f803780133dda5112990a53d526a7934b7339a8f9b99149emacos
- Full Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:271d887fa844f7add56595259e4f28cf15357a2199d1cd895bd55477f98466ed - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:9b8e5c087101a95384d101e42fb3c0d2810a6fba8642f27d0e8c183276c01821 - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:b61e58b1e50a59f3a16e4affeb4bec7e83bf3eab0763089892988faa58cfea98 - Debian:
ghcr.io/valkyoth/fluxheim@sha256:ec3fd363af5f47dcfd8b9bad3be193173ae24cc4eacf1507872ca673a90637cb
- Wolfi:
- Cache Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:450490f53615aad99d1cdbb6cb8ef37f3097321d4791fc567e88e449d632f7f3 - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:1b5349a6a55e516b1f0eb7ccc5cf1ef63ec43fa4acda704d8e502191dbb408ac - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:8dfc760ba3fd383b62ac860cc6fc1ee2cafef6846eb46324ab6b7286d4f91e98 - Debian:
ghcr.io/valkyoth/fluxheim@sha256:2154f69de4ac7bbde5535ef6d83608c1fe5c4ed954c71a019b6f58e47493e4f2
- Wolfi:
- Proxy Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:8290267db9f19fa72bfd49f4b677775bf37b6dde425ba274ca90b10cf990fce2 - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:2e20c36edb118c9f34b7f78a108f411edc8d6fea6c672c8ded97a79898b6261c - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:113b0f218e4c6b28e16f7a63f718e74338f148ec5161eb37ae228d07dd9e908e - Debian:
ghcr.io/valkyoth/fluxheim@sha256:405da9d92e5b0900cf50531d1ef28513320c0d39c3b86be62dafa91d0684ffb4
- Wolfi:
- PHP Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:c388797094e980645f652e00ccba5c24c1a49b2d6d3f8357d1711daa3ad29333 - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:babb366231bbbf02386444c3a05fe6113633abf6470aa800567b1315917f932d - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:638d728a47b5ec466f88cd490c94a9bfc3c6efb57d2e0d26e85fb5c654704cd9 - Debian:
ghcr.io/valkyoth/fluxheim@sha256:3c04823e3ab91b426230262a1f293d66e8e593a7ee328b689656c169c03302a4
- Wolfi:
- Load Balancer Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:5c57f8a57ea10a6100ae4f6900b979e2d3e7b42aade3cafc7ccada9b52207973 - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:6c0fd37d7fef6d63616caee9b12bb1791c5c08c537deda4835388ecd01aba7ba - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:9dff76aed7d8564d9257bcc796fb789b1a7607f84ff1fbccdd907be61f31341b - Debian:
ghcr.io/valkyoth/fluxheim@sha256:463478446395c3ba04d40cf0227d9a9a09bf8c743223a37400601ac29942936d
- Wolfi:
- Tag signature:
Good "git" signature for 1921261+eldryoth@users.noreply.github.com with ED25519 key SHA256:EoLRQ5k4J5pYz3UMFmkrV798gYFNkToGS2xEPvebqB4
Fluxheim 1.5.16
Fluxheim 1.5.16 Release Notes
Fluxheim 1.5.16 starts the UDP/GSLB exploration line.
This release adds the first reviewed boundary for UDP work: a separate beta
[udp] configuration namespace, an opt-in udp-proxy feature gate, and a
small scoped UDP runtime for DNS-style request/response forwarding and
syslog-style one-way forwarding. It does not turn TCP stream routes into mixed
TCP/UDP routes and it does not ship production UDP/GSLB support yet.
What Changed
- Added
udp-proxyas a beta feature gate. - Added
[udp]withenabledandroutesfields. - Added
[[udp.routes]]with bounded route mode, listeners, upstreams,
optional weights, optional aliases, idle/session timeouts, datagram caps, and
session caps.max_sessionsdefaults to4096;0remains an explicit
unlimited setting. - Added beta UDP listener/runtime support for
dns-load-balanceand
syslog-forward. - Added
response_timeout_secsfor UDP routes. It defaults to3seconds and
keeps unanswered DNS-style datagrams from occupying route slots for the full
idle timeout. - Removed the unused beta
max_session_secsUDP field before release. Current
beta modes handle one datagram at a time;response_timeout_secsis the
effective cap for DNS-style upstream waits. - Hardened beta UDP forwarding so oversized upstream responses are dropped
instead of being forwarded as truncated datagrams. - Rate-limited high-volume UDP drop warnings for oversized downstream
datagrams andmax_sessionspressure. - Added explicit reserved route modes for future scoped UDP modules:
quic-pass-throughandgame-proxy. - Added config validation for duplicate route names, duplicate listeners,
duplicate upstreams, invalid listener/upstream authorities, invalid timeout
values, oversized datagrams, excessive session caps, and invalid
weight/alias lists. - Added unit coverage with real local UDP sockets for request/response and
one-way forwarding behavior. - Added
scripts/smoke_udp_proxy.sh, an optional local smoke that starts
Fluxheim with a UDP-only config and proves DNS-style response forwarding plus
syslog-style one-way delivery. - Refreshed low-risk dependency and workflow pins:
base64-ng1.0.8,http
1.4.2, manifestlog0.4.32, and exact current GitHub Action tags for
checkout and Docker image workflows. Pingora was intentionally left unchanged. - Kept
udp-proxyout of the normalfull,proxy,cache,php, and
load-balancerrelease profiles until the runtime data plane is added and
reviewed.
Compatibility
- Existing HTTP proxy, cache, TCP stream proxy, and load-balancer configs are
unchanged. - Configs that set
udp.enabled = truefail with a clear
udp.enabled requires building Fluxheim with the udp-proxy featureerror in
normal production builds. - The UDP namespace is intentionally separate from
[stream]; TCP stream
routing remains TCP-only. - UDP-only beta configs can validate without HTTP/TLS listeners when built
withudp-proxy.
Not Included
- No production UDP/GSLB support yet.
- No generic catchall UDP proxy.
- No authoritative DNS server or full GSLB control plane.
- No public-Internet DNS reflector hardening yet.
dns-load-balanceshould be
bound to loopback or internal interfaces unless the surrounding network
provides ingress filtering; response rate limiting remains future work. - No QUIC pass-through or game-server UDP session proxying yet.
- No WAF, VPN/firewall appliance behavior, HTTP/3 ingress, or
Wasm/iRules/Lua scripting in this release.
Checksums And Signatures
- Commit:
2317f400ab629e4f349528df843e1d4ee3887b27 - Local gate: GitHub CI green before tag; local release metadata checks passed
- CodeQL/code scanning: no open release-blocking alerts before tag
- Source archive checksums:
4fdbe3dd5d99776a0d7eb70b04890785b8273b243b571733510ee5f1342f833a fluxheim-1.5.16.tar.gz7652deef9e38aed455bf77d4ad5374dd7e59e24a654179470fc1500072aded7a fluxheim-1.5.16.zip
- Binary checksums:
- x86_64:
5d49fd8f457b551d609091c18407f0cb91f15f8a0a90ef9f28024cdeafe8c2f2 fluxheim-1.5.16-full-x86_64-linux.tar.gzb01b97dd959eef05dab2f372b99c1f67b784801faa4be578fbc6cea94bed5ba7 fluxheim-1.5.16-cache-x86_64-linux.tar.gz48972e284761eb1a40bbf9181f374535d4c4f112f1abda4fbb9fe4a4f1a40222 fluxheim-1.5.16-proxy-x86_64-linux.tar.gzd28b873f28945cfa2fa2960110f9d020190ac3c438fc96aa8d78a866c73b0885 fluxheim-1.5.16-php-x86_64-linux.tar.gz191d621626eded6bc4621dcd59f39ddef60c4effadb3d37c14b81a83de3975f1 fluxheim-1.5.16-load-balancer-x86_64-linux.tar.gz8970d0fe2cb18faa6333c00a7731368f3e01eb49a3187b1534b66d8162a00cf5 fluxheim-1.5.16-config-tester-x86_64-linux.tar.gz
- aarch64:
2e1ad38570154e1a1bfe70d3ad2c567f972f5783541a07d6adfbf78e4691619b fluxheim-1.5.16-full-aarch64-linux.tar.gzc6090f12ff7c603c26e080c89e97c98d80c5eeb994262b5aec42833445a7ba0f fluxheim-1.5.16-cache-aarch64-linux.tar.gzfc45fef67664a281cc8e58da275537b1f7108f2a6079465cb2a62a51f1da5762 fluxheim-1.5.16-proxy-aarch64-linux.tar.gz541d67b74cc18fedc8d18d94dec9e573ffd5a2ad6ecfc32b0ea48c85a7b28e66 fluxheim-1.5.16-php-aarch64-linux.tar.gz785291a89dee9c51a248de4a75c41604a3c1fa79e52547597959cbcd0e26bb2c fluxheim-1.5.16-load-balancer-aarch64-linux.tar.gzd9e4a58628602ae2825dddb53cdfe8aa3366d375b54ea8f17c07d696c1a5dacd fluxheim-1.5.16-config-tester-aarch64-linux.tar.gz
- macos:
c7b31df1f7bfd5e5339f6a845757da59ee7953814b3bc320c3dbde6f936fbf10 fluxheim-1.5.16-dev-aarch64-macos.tar.gz
- x86_64:
- SBOM checksums:
ec2074d032ce064ef7c377d7b8e75592b60c35cb18a1f0f2b91daf43d50c0ad0 fluxheim.spdx.json9143362bdf5274204e0fcede86f7881481cf8a186633bdbe78db7dc9ca7fbcfb fluxheim.cyclonedx.json
- Reproducible build:
abaf5daa060faa3c5f34f0b1216ae7f3f25202a12a6b2edb6b0973b29fbe7e9ex86_64d82462cb6ea39e567b9d526bdb0431368ccb2f86906c24109a6f9c3c4a00ab2caarch64d2a676eedbfcb48e78365020ad96d0f5db6d1769e8aedd89d1fe74377693abb7macos
- Full Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:0d6de4685d300b15492c3099ca149195f59bbc8b192f8c80b7c2d1d72029e210 - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:e41fbc532ba0fdc5ecffa6aff7bb0e21e188d9f0aec449fbcb196b758b73e197 - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:4f9c863e01c8cfb4e04efd3f761d478fb3eb9c34393892c6fb0191a5b60b1dca - Debian:
ghcr.io/valkyoth/fluxheim@sha256:621ab66186cedaff4885270d91bdc290d22cfbc3691498b04f9916d887eb49f8
- Wolfi:
- Cache Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:0b616a70a716dfb569db017825c23554a4819a3412b1363af6e55ef957d4f0ce - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:8185980bc380870d79dc09ce6e0da85aa442afe09942fe8437b598ed3af9880a - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:8a0a548da76c8e34df233afdb277f2af5b97b25a653054b9fff14d209ecaf10c - Debian:
ghcr.io/valkyoth/fluxheim@sha256:82e08f13eb70256bbc56c1de233ec2cdd23af7385df9d79d21b10a911810d2b6
- Wolfi:
- Proxy Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:287cdd12dd51482af3d52b98b7e5f0194a8852a9492e4c1175666d41d82c2dc4 - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:bec8cf76be87b0c3dde7356e017ede8686e311297ef6e52b1c62c3ac2fee8802 - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:88edc20a987ee4cc8460d3a80118d0f054d328489cc2649b8650c7bd56d26b02 - Debian:
ghcr.io/valkyoth/fluxheim@sha256:2618b670a621d83bc80544cba6b8acce467a63a2864836c621b60a4d1548e65a
- Wolfi:
- PHP Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:9ea00069fe707c3c0e99bdb1edf6c21ed164443231236080a693cfa3467e596b - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:33d17779954a3ae77b9a9f53364e31e2eb8fe980c7bce82dc2b319f2ece7f14b - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:4cbc3483ebced4d4d70f2978a8c6a86782cbeab6707e74917ad31c4976e1b48c - Debian:
ghcr.io/valkyoth/fluxheim@sha256:0ccc8714400d3ba7bfaf0af17d2f24052f1a23b5d7e25bdedba0fc4b1c02d4c5
- Wolfi:
- Load Balancer Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:4c2b5e29762c7da67448e85b6c96a1d8cdc312805889da7704dbd5e514970f66 - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:06ef2670f9f0777474543da40ac1e7fa3132376314a3825dbfcfa905b95b8ace - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:96ccdbe5240a2a9cd3e97355171af6ed9c147abc88f4c07c38c64730f88b62a5 - Debian:
ghcr.io/valkyoth/fluxheim@sha256:36e0033263a74ece44e81521895c4a6449c0a8b24afa340b0c24ba80c85c7a07
- Wolfi:
- Tag signature:
Good "git" signature for 1921261+eldryoth@users.noreply.github.com with ED25519 key SHA256:EoLRQ5k4J5pYz3UMFmkrV798gYFNkToGS2xEPvebqB4
Fluxheim 1.5.15
Fluxheim 1.5.15 Release Notes
Fluxheim 1.5.15 starts the database/protocol-aware health-check line.
This release adds bounded Redis PING, MySQL/MariaDB handshake, and
PostgreSQL SSLRequest active health checks for load-balancer pools where TCP
connect is not enough and an HTTP/gRPC endpoint is not available.
Publishing note: the signed git tag v1.5.15 remains the canonical code tag
for this release. The GitHub Release page is published under
v1.5.15-release because the original immutable GitHub Release object for
v1.5.15 was accidentally deleted; GitHub reserves immutable release tag names
and does not allow the original release page to be restored through the normal
release UI/API.
What Changed
- Added
protocol = "redis"forproxy.load_balance.health_check. - Redis checks open a bounded TCP connection to the selected backend, send one
fixed RESPPINGframe, and require a simple-string+PONGresponse. - Redis checks now read until CRLF within the existing 64-byte response cap, so
fragmented+PONG\r\nresponses do not falsely mark healthy Redis backends
down. - Added
protocol = "mysql"forproxy.load_balance.health_check. - MySQL checks open a bounded TCP connection to the selected backend, read one
MySQL server greeting packet, and require a protocol-10 handshake without
sending a login packet or SQL query. - Added
protocol = "postgres"forproxy.load_balance.health_check. - PostgreSQL checks open a bounded TCP connection to the selected backend, send
the PostgreSQL SSLRequest pre-auth handshake, and require a one-byteSor
Nresponse without sending a StartupMessage or SQL query. - Redis, MySQL, and PostgreSQL checks use
connect_timeout_secsand
read_timeout_secs, inherit the normal consecutive success/failure
thresholds, and report their protocol in runtime status. - Redis, MySQL, and PostgreSQL checks reject HTTP/gRPC matchers, request
headers, port overrides, connection reuse, host overrides, and parallel
checking. - Added
examples/load-balancer-redis-health.tomlas a validated Redis health
probe example. - Added
examples/load-balancer-mysql-health.tomlas a validated
MySQL/MariaDB health probe example. - Added
examples/load-balancer-postgres-health.tomlas a validated
PostgreSQL health probe example. - Added
scripts/smoke_redis_health_check.sh, an optional Podman smoke that
starts Valkey, verifies Fluxheim increments Valkey's RedisPINGcommand
counter, then stops Valkey and checks that Fluxheim marks the backend
unhealthy. - Added
scripts/smoke_mysql_health_check.sh, an optional Podman smoke that
starts MariaDB, verifies Fluxheim increments MariaDB's unauthenticated
handshake counter, then stops MariaDB and checks that Fluxheim marks the
backend unhealthy. - Added
scripts/smoke_postgres_health_check.sh, an optional Podman smoke that
starts PostgreSQL, verifies Fluxheim creates a pre-auth connection observed
by PostgreSQL connection logging, then stops PostgreSQL and checks that
Fluxheim marks the backend unhealthy.
Compatibility
- Existing TCP/TLS, HTTP, gRPC, JSON, weighted degraded, and exec health checks
remain compatible. - Redis, MySQL, and PostgreSQL checks are health probes only. They do not
authenticate, run Redis commands beyondPING, send MySQL login packets,
send PostgreSQL StartupMessages, inspect keys or schemas, execute queries, or
make Fluxheim a database proxy. - The MySQL/MariaDB probe intentionally disconnects before authentication. On
non-loopback database connections, repeated idle probes can count toward the
server host-cache error budget (max_connect_errors) and block the Fluxheim
host untilFLUSH HOSTSor equivalent cleanup. Use conservative intervals,
raisemax_connect_errors, or use an authenticatedexeccheck such as
mysqladmin pingfor credentialed readiness. - ACME managed-certificate install recovery now logs cleanup and backup-restore
failures instead of silently discarding those errors. - Delay-mode rate limiting and load-balancer persistence warning generation
received small defensive hardening so local invariants are explicit at the
panic-sensitive call sites. - Redis TLS, MySQL TLS/authenticated readiness, PostgreSQL TLS/authenticated
readiness, SMTP/LDAP send-expect, and authenticated agent checks remain
future work.
Checksums And Signatures
- Commit:
3bc7f5010a97fee80efd00bde2fe912fbb45b3b0 - Local gate: GitHub CI green before tag; local release metadata checks passed
- CodeQL/code scanning: no open release-blocking alerts before tag
- Source archive checksums:
a9cdec906b113e61b36a63c14609780f88d66728b79eebddf5b41d9dce25c2fc fluxheim-1.5.15-release.tar.gz4524d535a35d363a8cb2fdd6a2baa22fa688a9c149e4439239e59a46d8a39966 fluxheim-1.5.15-release.zip
- Binary checksums:
- x86_64:
423ea3f48a1f977b4eb4ab79d39a6ec4a277021510c935c59174333b55312021 fluxheim-1.5.15-release-full-x86_64-linux.tar.gzd50928d6a92a89d916396e5d5b25f7586f5719e71730652addb7d9d04c5adc54 fluxheim-1.5.15-release-cache-x86_64-linux.tar.gzdc8f86cd4fd11a3ee3823cea6b0b6efa07a5bbdd4f82b90570f8eb62f44275bf fluxheim-1.5.15-release-proxy-x86_64-linux.tar.gz3ba946e6652a0ed5e0d69a54163748d0fceb9c28097432bb747a18a9b49dc0e1 fluxheim-1.5.15-release-php-x86_64-linux.tar.gz12eeeda33ed39ce651b316a043708766888f012fe09d8da117feaa9b6f6541ff fluxheim-1.5.15-release-load-balancer-x86_64-linux.tar.gzd5b2366ffac9c3eb104c4f060a3aaba7a7ba750c468658f2a95eed19d285097b fluxheim-1.5.15-release-config-tester-x86_64-linux.tar.gz
- aarch64:
7599b124903122aae325ddffe4d250b1f32f236611f4bc67f746483be16aace9 fluxheim-1.5.15-release-full-aarch64-linux.tar.gz1564b9b28fc498c9aaf5ad3f7fdfc3f915f76975a99f8a4df88b3bfc7e43e7dd fluxheim-1.5.15-release-cache-aarch64-linux.tar.gzc851fdada917ad09ba5f9e597fb0179b8f8a57b01012d03fed90ebb31712b009 fluxheim-1.5.15-release-proxy-aarch64-linux.tar.gz9418078f4b9bde10aeeeec0d0a76687aa32c8f2ef5743f401ea601fb051c9a63 fluxheim-1.5.15-release-php-aarch64-linux.tar.gzc78688fc4a8677426157528fef70f616e92a4c26c1b0f924a7f608831c5fca65 fluxheim-1.5.15-release-load-balancer-aarch64-linux.tar.gz2d3c5781809598a08c0a07f6edcb6e6814fd540f160bf215f3d5948b0a26511a fluxheim-1.5.15-release-config-tester-aarch64-linux.tar.gz
- macos:
75ef869c5a56d9fb59f29d2d02857bc40c9ec0ffb220a1cd113f88cc71be7876 fluxheim-1.5.15-release-dev-aarch64-macos.tar.gz
- x86_64:
- SBOM checksums:
17d9af6d19ee2f4fa9ca1538013a3a585b5a18ef24ef70cb7c77e2a84e19506f fluxheim.spdx.json61b3c9bd0bf5f6de7b40d09859749af268a9686e4c322dd710157065f3ad9c36 fluxheim.cyclonedx.json
- Reproducible build:
96d9ab1b4d59fdeb0438ff2c2bcb296c5e78fac1ce0525c7a1aa4bbd5d3e96c0x86_64f35ce81a560f0a6b62cbe6cd2f3bb642bcb4748a459cbef814ba4403620e33c4aarch643c1710bc0d0f9c7bc4f50f12d07aba3ca1dc2ccce4a5c80b7167b954f00ef26emacos
- Full Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:1c5341434d0c2274148e2bba889d1caabd5c02e6b456ecbf3de9445d817d71fc - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:22498e680ef9d2dd2f7942f8a272a1c22f44eab99c38adeba6c8b6dc080e1198 - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:549f461872692b648fc75bcae84df12cdec6d5bbd28b8487d1a0799acbd8c363 - Debian:
ghcr.io/valkyoth/fluxheim@sha256:a8de04da8dddb4776d301484cd6733e665a33efc827e1c1d826e92ee27afd926
- Wolfi:
- Cache Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:4430d1c1f32214db5960a7838350e32d9c738a9a7d287283ae4f8042bd7befdf - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:0cb825993e93d6885e5e80846becc1472a60f385a9e76f6191ca6f3d76e42add - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:7774613968d23a89a3add8354791366f16acfad8da8ad69b0f693cf60643a17f - Debian:
ghcr.io/valkyoth/fluxheim@sha256:a0bd8f74323c9c6161188cba6ac5f05a94ae8e1c9dcc3b0bc3d1ed838e3c39b9
- Wolfi:
- Proxy Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:a842de5a233748fe1dc473d447519b095a4343d2fe5ce2f9dfa29800749e7b24 - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:4718d0e3ea00dfc3bc09d360f2e12288c12aabbdd40960877c490b4985e110a0 - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:60c4d55c88dc70175af81278c3279a360887bdd23ceae84b2a1fbaf6be7f611d - Debian:
ghcr.io/valkyoth/fluxheim@sha256:5fad889700e9cecdb348d34d6938ca2c41b0ed505776ab213e3022b92c098f31
- Wolfi:
- PHP Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:2569e9dc65ee1684e31c757539c60829037045950efd51b4f50682cc5f41c198 - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:08b9bd504f4d40518251ccfa98edd4737885a007cf7204b2bb568c7e8172290b - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:96457dbadbe32795ee841d8f7c3e866fa3bb71227b1f9d5f5f1e0149e8d0d645 - Debian:
ghcr.io/valkyoth/fluxheim@sha256:48702d67e990d4afa89866656d73501a3e59af718144402eaa226f0acc4b87eb
- Wolfi:
- Load Balancer Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:1e29a57985856923c0f4ca684e5aaf7bf6c34938978dafc4c19442953525c10a - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:c47776f68b4d2de241487333c6e4ca72ef7101db9fb338aa9d8a428ff9b89362 - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:09eefafe60519ab3539df0ae6f167922655444da0b0fc4759017bbe5985d29e2 - Debian:
ghcr.io/valkyoth/fluxheim@sha256:5934523c90aa1409f6e2d202feb37410ba6e0201ee26c3135c17c2665f5675bc
- Wolfi:
- Tag signature:
Good "git" signature for 1921261+eldryoth@users.noreply.github.com with ED25519 key SHA256:EoLRQ5k4J5pYz3UMFmkrV798gYFNkToGS2xEPvebqB4