feat(wasm): Add sandboxed UDF runtime - #34
Merged
Merged
Conversation
Add digest-pinned Wasmtime UDF filters and transforms, bounded execution, pipeline policies, operator delivery, SDK fixtures, documentation, CI security gates, and performance coverage. Co-Authored-By: claude-flow <ruv@ruv.net>
Use the standard integer multiple check accepted by the current stable Clippy lint set. Co-Authored-By: claude-flow <ruv@ruv.net>
rahulbsw
marked this pull request as ready for review
July 26, 2026 01:19
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds production-oriented, stateless WebAssembly UDF support to StreamForge
using the Wasmtime component model.
and mutable envelope transforms
logic preceding the corresponding UDF stage
or other unresolved imports
concurrency limits
rerunning successful destinations
settings, and rollout checksums
configuration schema, and roadmap updates
Why
StreamForge needs custom policy and transformation logic beyond the native DSL
without loading native plugins or granting ambient filesystem, network,
environment, clock, or random access. The component boundary provides a
versioned ABI while digest verification and explicit resource limits keep the
extension point bounded and auditable.
Wasmtime is pinned to the security-patched
36.0.10release. Dependency auditfailures now block CI, and CI compiles all guest examples and verifies fixture
digests.
User and developer impact
UDFs are opt-in. Configurations without a top-level
wasmregistry retain theexisting native path and do not initialize Wasmtime.
This aligns native destination processing with the documented order: value
transforms now precede native key/header/timestamp envelope mutations. Pipelines
that derived envelope fields from values removed by the value transform must
retain those inputs or update their envelope rules.
See
docs/WASM_UDFS.mdandudf-sdk/rust/README.mdfor configuration, ABI,build, deployment, security, and performance guidance.
Validation
cargo test --all --locked --offline --no-fail-fast: 525 passed, 30 ignored,0 failed
cargo clippy --all-targets --all-features --locked --offline -- -D warningscargo audit --no-fetch --ignore RUSTSEC-2024-0437: zero vulnerabilities;seven warnings inherited from
mainstreamforgeandstreamforge-validatedigest-pinned smoke component
wasm32-unknown-unknownformatting, and diff checks passed
controls remained within the 3% diagnostic budget
errors; the 30-second dirty-worktree result is diagnostic and not a
publication claim
Controlled same-revision A/B performance runs remain the release gate;
shared/local timings are retained as development evidence only.