Skip to content

Commit ac54c3e

Browse files
committed
Add bounded wasm header hooks
1 parent 53eaffb commit ac54c3e

37 files changed

Lines changed: 943 additions & 126 deletions

File tree

CHANGELOG.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,28 @@ Fluxheim follows semantic versioning once `1.0.0` is released. Before `1.0.0`,
77
minor versions may still change configuration shape, feature names, and runtime
88
behavior when the change improves security or project direction.
99

10+
## 1.7.2 - 2026-07-05
11+
12+
### Added
13+
14+
- Add native HTTP/1 Wasm `request-headers` and `response-headers` hooks using
15+
bounded integer host calls instead of exposing raw request headers, response
16+
headers, bodies, filesystem, network, or admin APIs to plugins.
17+
- Add a small `fluxheim_policy_v1` host-call surface for symbolic request
18+
context, approved synthetic request header mutation, approved response header
19+
mutation, and approved response header removal.
20+
- Add live listener tests proving an origin observes a plugin-added
21+
`x-policy-tier` request header, the client observes a plugin-added
22+
`x-fluxheim-policy-branch` response header, and origin `x-powered-by` can be
23+
removed before delivery.
24+
25+
### Security
26+
27+
- Reject forbidden or oversized-preview Wasm header mutations by failing closed
28+
under the existing plugin fail-mode and admission-budget behavior.
29+
- Keep sensitive headers such as `Authorization`, `Cookie`, and `Set-Cookie`
30+
outside the current Wasm host-call ABI.
31+
1032
## 1.7.1 - 2026-07-04
1133

1234
### Added

Cargo.lock

Lines changed: 19 additions & 19 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "fluxheim"
3-
version = "1.7.1"
3+
version = "1.7.2"
44
edition = "2024"
55
rust-version = "1.96.1"
66
license = "EUPL-1.2"

README.md

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ Fluxheim is licensed under the European Union Public Licence 1.2.
137137
| GeoIP/Geo-Context policy || `1.4.5`; optional `geoip` feature with local MMDB support for MaxMind GeoIP2/GeoLite2 and CIRCL Geo Open datasets, plus vhost/route country and ASN ACLs. |
138138
| Pingora-free runtime || `1.6.34`; normal Fluxheim builds no longer compile Pingora crates. Server/listener/TLS, HTTP/1, HTTP/2, WebSocket, cache, load-balancer, admin, metrics, stream, and background-service paths run through Fluxheim-owned Rust crates. |
139139
| HTTP/3/QUIC || Planned as a Fluxheim-owned `1.8` protocol milestone using the Rust `quinn`/`h3` stack after the `1.7` Wasm extensibility line. |
140-
| WASM extensibility | 🧪 | Active `1.7.x` line. `1.7.0` added the optional `wasm` feature, strict plugin-file loading, bounded Wasmtime execution, and real-Wasm smoke coverage. `1.7.1` adds config-level plugin registry validation, typed loader manifests, authenticated registry status visibility, deterministic attachment ordering, process/plugin/attachment admission limits, Wasm-aware reload classification, metrics, and live native HTTP/1 access-decision hooks. Header mutation, routing/load-balancer decisions, and VCL-like cache policy hooks remain staged for later `1.7.x`. |
140+
| WASM extensibility | 🧪 | Active `1.7.x` line. `1.7.0` added the optional `wasm` feature, strict plugin-file loading, bounded Wasmtime execution, and real-Wasm smoke coverage. `1.7.1` adds config-level plugin registry validation, deterministic attachment ordering, admission limits, metrics, and live native HTTP/1 access-decision hooks. `1.7.2` adds bounded native HTTP/1 request/response header hooks. Routing/load-balancer decisions and VCL-like cache policy hooks remain staged for later `1.7.x`. |
141141

142142
See [Production Readiness](docs/production-readiness.md) for the precise
143143
stable-core promise and deployment checks. See
@@ -258,7 +258,7 @@ Individual module features:
258258
| `php-fpm` | No | PHP-FPM FastCGI bridge for WordPress-style PHP applications. Implies `proxy` and `web`; not included in default/focused images. |
259259
| `privacy-mode` | No | Zero-retention static/proxy build profile. |
260260
| `security` | Yes | Compile-time security profile marker plus release hardening checks. Runtime enforcement lives in the concrete config, TLS, filesystem, admin, and request-handling modules. |
261-
| `wasm` | No | Optional `1.7.x` WebAssembly policy runtime. `1.7.1` supports live native HTTP/1 access-decision hooks with deterministic ordering, fail-closed security decisions, admission limits, metrics, and real-Wasm tests. Later `1.7.x` releases add header, routing/load-balancer, and cache-policy hooks. |
261+
| `wasm` | No | Optional `1.7.x` WebAssembly policy runtime. `1.7.2` supports live native HTTP/1 access-decision hooks and bounded request/response header hooks with deterministic ordering, fail-closed security decisions, admission limits, metrics, and real-Wasm tests. Later `1.7.x` releases add routing/load-balancer and cache-policy hooks. |
262262
| `wasm-proxy-abi` | No | Reserved compatibility preview for a reviewed safe subset of proxy-oriented Wasm ABI calls; depends on `wasm` and remains off by default. |
263263
| `wasm-wasi` | No | Reserved WASI capability preview; depends on `wasm` and remains off by default with no filesystem/network/process capabilities unless explicitly granted in a later release. |
264264
| `tls` | No | Internal TLS marker used by TLS/ACME code; select a concrete backend for serving. |
@@ -351,8 +351,8 @@ Release tags use the same profile/OS suffixes on both registries. The first
351351
`1.7.x` image tags include `v1.7.0-wolfi`, `v1.7.0-cache-wolfi`,
352352
`v1.7.0-proxy-wolfi`, `v1.7.0-load-balancer-wolfi`, and `v1.7.0-php-wolfi`;
353353
follow-up `1.7.x` releases use the same suffix pattern, for example
354-
`v1.7.1-wolfi`, `v1.7.1-cache-wolfi`, `v1.7.1-proxy-wolfi`,
355-
`v1.7.1-load-balancer-wolfi`, and `v1.7.1-php-wolfi`.
354+
`v1.7.2-wolfi`, `v1.7.2-cache-wolfi`, `v1.7.2-proxy-wolfi`,
355+
`v1.7.2-load-balancer-wolfi`, and `v1.7.2-php-wolfi`.
356356

357357
Release note for `1.5.15`: the signed git tag `v1.5.15` is the canonical code
358358
tag. The GitHub Release page is published under `v1.5.15-release` because the
@@ -477,13 +477,13 @@ crates and moved request handling onto Fluxheim-owned Rust runtime boundaries.
477477
- `1.7.x` is the shared Wasm extensibility line. It starts with strict plugin
478478
file loading, bounded Wasmtime execution, config-level plugin registry
479479
validation, deterministic attachment ordering, process/plugin/attachment
480-
admission ceilings, Wasm-aware reload classification, metrics, and live
481-
native HTTP/1 access-decision hooks. Later `1.7.x` releases add request and
482-
response header hooks, routing/load-balancer decisions, mirror/persistence
483-
decisions, VCL-like cache policy hooks, optional proxy-ABI/WASI previews, and
484-
runnable examples for F5 iRules-style policy, nginx Lua/OpenResty-style
485-
header policy, HAProxy Lua/SPOE-style routing/load-balancer policy, and
486-
VCL-like cache policy.
480+
admission ceilings, Wasm-aware reload classification, metrics, live native
481+
HTTP/1 access-decision hooks, and bounded request/response header hooks.
482+
Later `1.7.x` releases add routing/load-balancer decisions,
483+
mirror/persistence decisions, VCL-like cache policy hooks, optional
484+
proxy-ABI/WASI previews, and runnable examples for F5 iRules-style policy,
485+
nginx Lua/OpenResty-style header policy, HAProxy Lua/SPOE-style
486+
routing/load-balancer policy, and VCL-like cache policy.
487487

488488
Detailed cache behavior, config examples, operational limits, and smoke-test
489489
coverage are documented in [Cache Backends](docs/cache-backends.md),

crates/fluxheim-acme/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "fluxheim-acme"
3-
version = "1.7.1"
3+
version = "1.7.2"
44
edition = "2024"
55
rust-version = "1.96.1"
66
license = "EUPL-1.2"

crates/fluxheim-cache/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "fluxheim-cache"
3-
version = "1.7.1"
3+
version = "1.7.2"
44
edition = "2024"
55
rust-version = "1.96.1"
66
license = "EUPL-1.2"

crates/fluxheim-common/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "fluxheim-common"
3-
version = "1.7.1"
3+
version = "1.7.2"
44
edition = "2024"
55
rust-version = "1.96.1"
66
license = "EUPL-1.2"

crates/fluxheim-compression/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "fluxheim-compression"
3-
version = "1.7.1"
3+
version = "1.7.2"
44
edition = "2024"
55
rust-version = "1.96.1"
66
license = "EUPL-1.2"

crates/fluxheim-config/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "fluxheim-config"
3-
version = "1.7.1"
3+
version = "1.7.2"
44
edition = "2024"
55
rust-version = "1.96.1"
66
license = "EUPL-1.2"

crates/fluxheim-geoip/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "fluxheim-geoip"
3-
version = "1.7.1"
3+
version = "1.7.2"
44
edition = "2024"
55
rust-version = "1.96.1"
66
license = "EUPL-1.2"

0 commit comments

Comments
 (0)