Snakeway v0.10.0
Highlights
Observability
- OpenTelemetry support fleshed out
- Request tracing with span context propagation
- Async telemetry initialization
Configuration overhaul (snakeway-conf)
- Deferred upstream DNS resolution to connection time instead of startup
- ACME directories now require pre-provisioning (no auto-creation)
- Reworked device config loading, validation, and lowering
- Eliminated duplicate validation
WASM device API
- on_stream_request_body hook added with BodyChunk/BodyResult types
- wit-bindgen upgraded, WIT bindings updated
Everything else
Repository restructuring
- Moved source code into a crates/ workspace layout: snakeway, snakeway-conf, snakeway-core, snakeway-wit,
snakeway-tests
- Moved integration tests from tests/integration/ to crates/snakeway-tests/
- Adopted workspace-level package metadata in Cargo.toml
Core library buildout (snakeway-core)
- All business logic extracted/moved into snakeway-core
- New runtime state management, server module, and types
- Device pipeline rework: device trait extracted, explicit re-exports, WASM device improvements
- Identity device added
- Device path scoping (devices can now be scoped to specific URL paths)
- ServiceId optimized from String to
Arc<str>
- Hotpath profiling instrumentation added
- CL.TE smuggling check moved to early_request_filter
- Removed redundant header lowercasing (HTTP library already canonicalizes)
Testing and CI
- Fleshed out integration test suite with HTTP replay tests (raw .http fixture files over TCP)
- Refactored ConfigBuilder for integration tests
- Added Criterion microbenchmarks in snakeway-core/benches/ with a public bench_api module
- Added sccache to CI, test count badges, coverage badges
- Multi-platform build/release workflow (x86_64 + aarch64 musl)
- Nextest configuration added
Dependency upgrades
- wasmtime/wasi 42 -> 43, wit-bindgen 0.50 -> 0.56
- criterion 0.5 -> 0.8, rand 0.9 -> 0.10, sha2 0.10 -> 0.11
- tokio 1.48 -> 1.52, reqwest -> 0.13, tokio-tungstenite -> 0.29
Packaging and distribution
- Dockerfile added
- .dockerignore added
- Packaging/distribution infrastructure (Phase 6)
- CLAUDE.md and 8 skill files added
- Docusaurus docs resynced, versioning enabled
- Justfile significantly expanded (+343 lines), decomposed into modular recipes
- LLM_DISCLOSURE.md added
- Public API renamed (run_cli -> run)