fluvio-community/fluvio
π¦ event stream processing for developers to collect and transform data in motion to power responsive data intensive applications.
Healthy across the board
Permissive license, no critical CVEs, actively maintained β safe to depend on.
Has a license, tests, and CI β clean foundation to fork and modify.
Documented and popular β useful reference codebase to read through.
No critical CVEs, sane security posture β runnable as-is.
- βLast commit 3d ago
- β16 active contributors
- βDistributed ownership (top contributor 47% of recent commits)
- βApache-2.0 licensed
- βCI configured
- βTests present
Computed from maintenance signals β commit recency, contributor breadth, bus factor, license, CI, tests
Informational only. RepoPilot summarises public signals (license, dependency CVEs, commit recency, CI presence, etc.) at the time of analysis. Signals can be incomplete or stale. Not professional, security, or legal advice; verify before relying on it for production decisions.
Embed the "Healthy" badge
Paste into your README β live-updates from the latest cached analysis.
[](https://repopilot.app/r/fluvio-community/fluvio)Paste at the top of your README.md β renders inline like a shields.io badge.
βΈPreview social card
This card auto-renders when someone shares https://repopilot.app/r/fluvio-community/fluvio on X, Slack, or LinkedIn.
Ask AI about fluvio-community/fluvio
Grounded in the actual source code. Pick a starter question or write your own.
Onboarding doc
Onboarding: fluvio-community/fluvio
Generated by RepoPilot Β· 2026-06-24 Β· Source
π―Verdict
GO β Healthy across the board
- Last commit 3d ago
- 16 active contributors
- Distributed ownership (top contributor 47% of recent commits)
- Apache-2.0 licensed
- CI configured
- Tests present
<sub>Computed from maintenance signals β commit recency, contributor breadth, bus factor, license, CI, tests</sub>
β‘TL;DR
Fluvio is a distributed event streaming engine written in Rust that enables real-time collection, transformation, and processing of data in motion. It combines a lean Kafka-like broker architecture with Stateful DataFlow (SDF), a declarative stream processing framework, allowing developers to build composable, stateful data pipelines without operational complexity. Large workspace monorepo (Cargo.toml lists 50+ members) structured as: crates/fluvio* (core broker, CLI, control plane), crates/fluvio-smartmodule* (WASM runtime), crates/fluvio-spu* (stream processing unit), crates/fluvio-connector* (integrations), crates/smartmodule-development-kit (user-facing SDK), examples/ (runnable demos), and .github/workflows/ (CI/CD orchestration).
π₯Who it's for
Rust developers and data engineers who need to build real-time data pipelines, stream processing applications, and event-driven systems. Specifically targets those who want a lightweight alternative to Kafka+Flink stack with native Rust support and integrated SmartModule (WASM-based) transformations.
π±Maturity & risk
Actively developed and production-ready. The repo shows significant Rust codebase (3.9M LOC), extensive CI/CD workflows (15+ GitHub Actions), version 0.50.2 (approaching 1.0), regular commits, and comprehensive crate ecosystem. However, the 0.x version suggests API stability is still being solidified, but the scale and infrastructure indicate serious backing.
Moderate risk: large Rust monorepo with 50+ member crates creates tight coupling and complex dependency graph (Cargo.lock present). The transition note in README ('transitioning to fluvio-community hosted build') suggests recent organizational changes. Single-language ecosystem (Rust-only) limits contribution pool. Monitor GitHub Issues for blockers and check recent CI status in workflows.
Active areas of work
Active development on: cluster deployment (cd_dev.yaml, cd_release.yml workflows), connector publishing pipeline (connector-publish.yml), SmartModule SDK enhancements, and release automation (publish_crates.yml for crate publication). Recent focus on macOS CI parity (ci_mac.yaml, cd_dev_mac.yaml) and unused dependency detection (ci_unused_deps.yml).
πGet running
git clone https://github.com/fluvio-community/fluvio.git
cd fluvio
curl -fsS https://raw.githubusercontent.com/fluvio-community/fluvio/master/install.sh | FVM_VERSION=dev bash
export PATH="$HOME/.fluvio/bin:$PATH"
fluvio cluster start
fluvio topic create hello-fluvio
fluvio produce hello-fluvio
Daily commands:
For local development: make (see Makefile in root). For cluster: fluvio cluster start (requires fvm installed via install.sh). For specific crates: cargo build -p <crate-name> (e.g., cargo build -p fluvio-cli). CI uses cargo test and cargo build variants across workflows.
πΊοΈMap of the codebase
Cargo.tomlβ Workspace root defining all member crates, dependencies, and the fundamental structure of the Fluvio distributed streaming system.crates/fluvio/Cargo.tomlβ Core Fluvio SDK crateβentry point for all client-side streaming operations and the primary public API.crates/fluvio-cli/Cargo.tomlβ Command-line interface for cluster administration and topic management; essential for operators and developers.crates/fluvio-cluster/Cargo.tomlβ Cluster provisioning and lifecycle management; required to understand deployment and scaling architecture.crates/fluvio-controlplane/Cargo.tomlβ Control plane orchestration and metadata managementβthe brain of the distributed system.crates/cdk/src/main.rsβ SmartModule Development Kit entry point; critical for custom data transformation and stream processing extensions.README.mdβ High-level project overview, design goals, and quick-start guide that frames all architectural decisions.
π οΈHow to make changes
Add a new SmartModule filter/transformation
- Generate SmartModule scaffold using CDK:
cdk generate --name my-filter(crates/cdk/src/generate.rs) - Implement filter/map logic in generated Rust source following WASM constraints (
crates/cdk/src/cmd.rs) - Test locally with
cdk testwhich invokes the build and test harness (crates/cdk/src/test.rs) - Deploy to Fluvio Hub with
cdk deploywhich publishes WASM artifact and metadata (crates/cdk/src/deploy.rs) - Use in consumer pipeline by referencing SmartModule in topic subscription config (
examples/02-consume/Cargo.toml)
Add a new source or sink connector
- Use template generator:
cargo generate --git https://github.com/fluvio-community/fluvio --path connector/cargo_template(connector/cargo_template/cargo-generate.toml) - Implement Source or Sink trait in main.rs, handling configuration and data flow (
connector/json-test-connector/src/main.rs) - Define connector metadata and config schema in Connector.toml (
connector/json-test-connector/Connector.toml) - Build Docker image and publish to Fluvio Hub via CI workflow (
.github/workflows/connector-publish.yml) - Reference in cluster config to automatically deploy and connect to topics (
connector/json-test-connector/sample-config.yaml)
Add a new CLI command
- Define command struct and implement subcommand handler in CLI module (
crates/fluvio-cli/Cargo.toml) - Use shared CLI utilities for output formatting and configuration (
crates/fluvio-cli-common/Cargo.toml) - Register command in main CLI dispatcher and add help documentation (
crates/fluvio-cli/src/main.rs) - Add integration test exercising command against running cluster (
.github/workflows/ci.yml)
Extend the control plane with a new resource type
- Define resource schema and metadata type in controlplane-metadata (
crates/fluvio-controlplane-metadata/Cargo.toml) - Implement store and replication logic in control plane core (
crates/fluvio-controlplane/Cargo.toml) - Add admin API handlers to expose CRUD operations (
crates/fluvio-cli/Cargo.toml) - Add CLI subcommand to manage the new resource type (
crates/fluvio-cli/Cargo.toml)
π§Why these technologies
- Rust β Memory safety without garbage collection, zero-cost abstractions, and performance critical for streaming at scale; enables safe concurrency for distributed consensus.
- WebAssembly (WASM) β SmartModules run transformations in sandboxed context without JVM overhead; language-agnostic and portable across platforms while maintaining security isolation.
- Kubernetes / Helm β Cloud-native deployment model; integrates with ecosystem tooling for orchestration, scaling, and lifecycle management of distributed cluster.
- gRPC / Protocol Buffers β Efficient, typed RPC for control plane and data plane communication; multiplexing and streaming natively supported for low-latency protocols.
- Raft / paxos β Distributed consensus for metadata replication and leader election; ensures control plane consistency across cluster membership changes.
βοΈTrade-offs already made
-
SmartModule as WASM rather than native plugins
- Why: Eliminates need to recompile/redeploy broker; safer sandboxing prevents connector crashes from crashing broker.
- Consequence: WASM startup overhead per-transformation and limited to WebAssembly capabilities; cannot use arbitrary native libraries without wrapping.
-
Log-structured storage (immutable append-only) rather than mutable tables
- Why: Simplifies replication, recovery, and enables time-travel queries; natural fit for streaming use case.
- Consequence: Disk space grows unbounded; requires explicit
πͺ€Traps & gotchas
- FVM bootstrap version: README explicitly warns to use
FVM_VERSION=devduring install.sh due to ongoing community transition; using stable version will fail. 2) Rust edition 2024: Requires Rust 1.82+; older toolchains will fail on workspace import. 3) Monorepo build interdependencies: Many crates depend on fluvio-protocol; changing protocol struct definitions requires cascading crate rebuilds. 4) macOS-specific CI: .github/workflows/ci_mac.yaml and cd_dev_mac.yaml exist but may drift from Linux CI; always test both. 5) Connector deployer chain: fluvio-connector-deployer depends on successful publication of fluvio-connector-common; publishing order matters (see connector-publish.yml). 6) SmartModule WASM runtime: fluvio-smartengine requires WASM runtime setup; local dev may need wasm32 target:rustup target add wasm32-unknown-unknown.
ποΈArchitecture
π‘Concepts to learn
- SmartModule (WASM-based inline transformations) β Core innovation in Fluvio that allows users to deploy data transformations (map, filter, aggregate) as sandboxed WASM bytecode directly on brokers without external processing overhead; essential for understanding fluvio-smartmodule-derive and fluvio-smartengine
- Stateful DataFlow (SDF) β Fluvio's declarative stream processing paradigm that unifies data streaming and processing in one model; learning this is critical for understanding crates/fluvio-stream-dispatcher and how stateful operations work across partitions
- Stream Processing Unit (SPU) partitioning model β Fluvio divides work across multiple SPU brokers by topic partition; critical for understanding crates/fluvio-spu and why fluvio-controlplane-metadata tracks partition leadership and replica assignment
- Metadata control plane (StreamController) β The fluvio-sc crate implements the control plane that manages cluster state, topic metadata, and partition election; understanding this is essential for cluster operations and debugging state inconsistencies
- Protocol buffers + Rust derive macros β fluvio-protocol-derive provides proc macros to auto-generate serialization/deserialization for protocol messages; understanding this is key to adding new message types and avoiding protocol mismatches between broker versions
- Connector framework (sink/source abstractions) β crates/fluvio-connector-* define how external systems (Kafka, databases, cloud queues) integrate with Fluvio; essential for understanding data flow beyond the core broker and for implementing custom connectors
- Consumer offset tracking and offset management β Fluvio clients track consume position per partition; understanding fluvio-storage offset persistence and fluvio-kv-storage is critical for building reliable consumers and debugging message loss issues
πRelated repos
vectordotdev/vectorβ Rust-based data streaming tool with connector ecosystem; similar use case (data pipeline orchestration) but lighter-weight than Fluvio, good reference for Rust stream patternsapache/kafkaβ The architectural inspiration for Fluvio's broker model; Fluvio explicitly positions as 'Kafka-like' but with lower operational overhead and Rust native implementationflink/flinkβ Inspiration for Fluvio's Stateful DataFlow processing model; Fluvio's SDF framework is a declarative alternative to Flink's DataStream API with WASM-based transformstonic-rs/tonicβ gRPC framework used by Fluvio for inter-broker communication and client protocols (implied by fluvio-protocol use of protobuf patterns); understanding Tonic is essential for networking contributionsinfinyon/infinyon-labsβ Official InfinyOn companion repo; hosts SmartModule examples, connectors, and reference implementations that integrate with this Fluvio core
πͺPR ideas
To work on one of these in Claude Code or Cursor, paste:
Implement the "<title>" PR idea from CLAUDE.md, working through the checklist as the task list.
Add integration tests for GitHub Actions setup workflow in .github/actions/setup-fluvio/action.yml
The setup-fluvio action is a critical shared utility used across multiple CI workflows (ci.yml, cd_dev.yaml, benchmarks.yml). Currently, there are no visible integration tests validating that this action correctly installs and configures Fluvio across different platforms. Adding tests would catch regressions early and ensure reliability across the CI/CD pipeline.
- [ ] Create .github/actions/setup-fluvio/tests directory with integration test scripts
- [ ] Add tests for Linux (x86_64 and aarch64) and macOS setups using matrix strategy
- [ ] Verify the action correctly sets up PATH, installs required dependencies, and validates Fluvio version
- [ ] Document test execution in DEVELOPER.md
- [ ] Add a test workflow .github/workflows/test-setup-action.yml to run these tests on PRs
Add missing CI workflow for Connector development and validation
The repo has connector templates and tooling (connector/cargo_template, connector/docker, connector-publish.yml) but lacks a dedicated CI workflow to validate connector builds during PR testing. Currently, only connector publication is automated, not validation. This would catch breaking changes to the connector SDK early.
- [ ] Create .github/workflows/ci_connectors.yml to build and test connector templates
- [ ] Add validation steps for connector/cargo_template builds with cargo build and cargo test
- [ ] Include Dockerfile validation using docker build for connector/docker
- [ ] Test the connector development kit (crates/fluvio-connector-common, fluvio-connector-derive) with unit tests
- [ ] Run on pull_request events to catch SDK regressions before merge
Add architecture documentation and module dependency graph to DEVELOPER.md
The workspace contains 60+ crates with complex interdependencies (smartmodule, connector, protocol, storage, etc.). New contributors struggle to understand which crates to modify for different features. DEVELOPER.md exists but lacks detailed architecture documentation and a dependency map specific to the crate structure.
- [ ] Document the core architectural layers: protocol, storage, control-plane, SPU (Stream Processing Unit), smartmodule, and connector layers
- [ ] Create a dependency graph section showing key crate relationships (e.g., fluvio-cli depends on fluvio, fluvio-smartmodule, fluvio-connector-*)
- [ ] Add a table mapping common tasks to relevant crate directories (e.g., 'Add a new admin command' β crates/fluvio-cli)
- [ ] Document the release-tools workflow and version management crates (fluvio-version-manager, check-crate-version)
- [ ] Link to each crate's Cargo.toml with brief purpose descriptions
πΏGood first issues
- Add integration tests for
fluvio topic deletecommand in crates/fluvio-cli/tests/; currently only topic create/list have test coverage (visible gap in examples/03-echo and examples/04-admin-watch missing delete workflow). - Document the SmartModule SDK lifecycle in crates/smartmodule-development-kit/README.md with a concrete end-to-end example (filter β map β aggregate); current docs jump to API without motivation.
- Implement missing platform variants in actions/zig-install.sh and actions/zig-uninstall.sh for ARM architectures (aarch64-darwin, aarch64-linux); build-scripts/aarch64-linux-musl-zig-cc exists but install action doesn't use it.
βTop contributors
Click to expand
Top contributors
- @fraidev β 47 commits
- @morenol β 19 commits
- @dependabot[bot] β 14 commits
- @digikata β 3 commits
- @Sehz β 3 commits
πRecent commits
Click to expand
Recent commits
889caeaβ ci(deps): bump docker/login-action from 3 to 4 (#4659) (dependabot[bot])75221b5β build(deps): bump quinn-proto from 0.11.12 to 0.11.14 (#4662) (dependabot[bot])d5c025bβ chore: fix clippy warnings (#4667) (morenol)a7289e4β chore: Add fvm_version input and update environment variables (#4651) (morenol)ebe2c42β fix: handle invalid Direction display (#4649) (Olexandr88)0c41665β build(deps): bump wasmtime from 34.0.1 to 38.0.4 (#4618) (dependabot[bot])c6bd325β docs: fix broken API documentation links (#4648) (Olexandr88)1321465β build(deps): bump bytes from 1.11.0 to 1.11.1 (#4646) (dependabot[bot])d9c3879β build(deps): bump bytes in /smartmodule/regex-filter (#4647) (dependabot[bot])7bacd1aβ build(deps): bump bytes from 1.10.1 to 1.11.1 in /smartmodule/examples (#4645) (dependabot[bot])
πSecurity observations
The Fluvio project demonstrates a reasonable security posture as a large, active open-source Rust project. The primary concerns are: (1) an exposed secrets file in test connectors that should be gitignored, (2) the inherent complexity and supply chain risks of a 50+ crate monorepo workspace, and (3) missing or incomplete configuration metadata. The use of Rust as the primary language provides memory safety benefits. Recommended actions include immediate removal of secrets.txt from version control, implementation of dependency auditing tools (cargo-audit, cargo-deny), and establishment of a formal supply chain security process. The incomplete repository URL should also be corrected.
- Medium Β· Exposed Secrets File in Connector Test Directory β
connector/sink-test-connector/secrets.txt. The file 'connector/sink-test-connector/secrets.txt' appears to contain secrets or sensitive credentials. Having plaintext secrets files in the repository, even for testing purposes, poses a security risk if the repository is public or if credentials are accidentally committed. Fix: Remove secrets.txt from version control. Use environment variables, secrets management tools, or .gitignore entries for sensitive files. Implement pre-commit hooks to prevent accidental secrets commits. - Medium Β· Large Monorepo with Mixed Dependencies β
Cargo.toml (workspace configuration). The workspace contains 50+ member crates with shared dependency management. This increases the attack surface as vulnerabilities in transitive dependencies could affect multiple components. The 'resolver = 2' setting helps but doesn't eliminate the risk. Fix: Implement regular dependency audits using 'cargo audit'. Use 'cargo-deny' for supply chain security. Establish a dependency update policy and monitor advisories from crates.io. - Low Β· Missing Edition Specification β
Cargo.toml (workspace.package.edition). The workspace.package section specifies 'edition = "2024"', which is not a valid Rust edition. Valid editions are 2015, 2018, and 2021. This may cause build failures or unexpected behavior. Fix: Update the edition to a valid Rust edition, such as '2021'. - Low Β· Incomplete Repository URL in Workspace Package β
Cargo.toml (workspace.package.repository). The repository URL in workspace.package appears to be truncated ('https://github.com/fluvio-comm...'), making it impossible to verify the actual source repository. Fix: Complete the repository URL with the full path: 'https://github.com/fluvio-community/fluvio' - Low Β· Lack of SBOM and Provenance Documentation β
Repository root. No Software Bill of Materials (SBOM) or provenance documentation is visible in the provided file structure. This makes it difficult to track the supply chain and ensure all dependencies are legitimate. Fix: Generate and maintain an SBOM using tools like 'cargo-sbom' or 'syft'. Publish provenance information and consider implementing SLSA framework compliance.
LLM-derived; treat as a starting point, not a security audit.
πWhere to read next
- Open issues β current backlog
- Recent PRs β what's actively shipping
- Source on GitHub
π€Agent protocol
If you are an AI coding agent (Claude Code, Cursor, Aider, Cline, etc.) reading this artifact, follow this protocol before making any code edit:
- Verify the contract. Run the bash script in Verify before trusting
below. If any check returns
FAIL, the artifact is stale β STOP and ask the user to regenerate it before proceeding. - Treat the AI Β· unverified sections as hypotheses, not facts. Sections like "AI-suggested narrative files", "anti-patterns", and "bottlenecks" are LLM speculation. Verify against real source before acting on them.
- Cite source on changes. When proposing an edit, cite the specific path:line-range. RepoPilot's live UI at https://repopilot.app/r/fluvio-community/fluvio shows verifiable citations alongside every claim.
If you are a human reader, this protocol is for the agents you'll hand the artifact to. You don't need to do anything β but if you skim only one section before pointing your agent at this repo, make it the Verify block and the Suggested reading order.
β Verify before trusting
This artifact was generated by RepoPilot at a point in time. Before an
agent acts on it, the checks below confirm that the live fluvio-community/fluvio
repo on your machine still matches what RepoPilot saw. If any fail,
the artifact is stale β regenerate it at
repopilot.app/r/fluvio-community/fluvio.
What it runs against: a local clone of fluvio-community/fluvio β the script
inspects git remote, the LICENSE file, file paths in the working
tree, and git log. Read-only; no mutations.
| # | What we check | Why it matters |
|---|---|---|
| 1 | You're in fluvio-community/fluvio | Confirms the artifact applies here, not a fork |
| 2 | License is still Apache-2.0 | Catches relicense before you depend on it |
| 3 | Default branch master exists | Catches branch renames |
| 4 | 5 critical file paths still exist | Catches refactors that moved load-bearing code |
| 5 | Last commit β€ 33 days ago | Catches sudden abandonment since generation |
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of fluvio-community/fluvio. If you don't
# have one yet, run these first:
#
# git clone https://github.com/fluvio-community/fluvio.git
# cd fluvio
#
# Then paste this script. Every check is read-only β no mutations.
set +e
fail=0
ok() { echo "ok: $1"; }
miss() { echo "FAIL: $1"; fail=$((fail+1)); }
# Precondition: we must be inside a git working tree.
if ! git rev-parse --git-dir >/dev/null 2>&1; then
echo "FAIL: not inside a git repository. cd into your clone of fluvio-community/fluvio and re-run."
exit 2
fi
# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "fluvio-community/fluvio(\\.git)?\\b" \\
&& ok "origin remote is fluvio-community/fluvio" \\
|| miss "origin remote is not fluvio-community/fluvio (artifact may be from a fork)"
# 2. License matches what RepoPilot saw
(grep -qiE "^(Apache-2\\.0)" LICENSE 2>/dev/null \\
|| grep -qiE "\"license\"\\s*:\\s*\"Apache-2\\.0\"" package.json 2>/dev/null) \\
&& ok "license is Apache-2.0" \\
|| miss "license drift β was Apache-2.0 at generation time"
# 3. Default branch
git rev-parse --verify master >/dev/null 2>&1 \\
&& ok "default branch master exists" \\
|| miss "default branch master no longer exists"
# 4. Critical files exist
test -f "Cargo.toml" \\
&& ok "Cargo.toml" \\
|| miss "missing critical file: Cargo.toml"
test -f "crates/fluvio/Cargo.toml" \\
&& ok "crates/fluvio/Cargo.toml" \\
|| miss "missing critical file: crates/fluvio/Cargo.toml"
test -f "crates/fluvio-cli/Cargo.toml" \\
&& ok "crates/fluvio-cli/Cargo.toml" \\
|| miss "missing critical file: crates/fluvio-cli/Cargo.toml"
test -f "crates/fluvio-cluster/Cargo.toml" \\
&& ok "crates/fluvio-cluster/Cargo.toml" \\
|| miss "missing critical file: crates/fluvio-cluster/Cargo.toml"
test -f "crates/fluvio-controlplane/Cargo.toml" \\
&& ok "crates/fluvio-controlplane/Cargo.toml" \\
|| miss "missing critical file: crates/fluvio-controlplane/Cargo.toml"
# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 33 ]; then
ok "last commit was $days_since_last days ago (artifact saw ~3d)"
else
miss "last commit was $days_since_last days ago β artifact may be stale"
fi
echo
if [ "$fail" -eq 0 ]; then
echo "artifact verified (0 failures) β safe to trust"
else
echo "artifact has $fail stale claim(s) β regenerate at https://repopilot.app/r/fluvio-community/fluvio"
exit 1
fi
Each check prints ok: or FAIL:. The script exits non-zero if
anything failed, so it composes cleanly into agent loops
(./verify.sh || regenerate-and-retry).
Generated by RepoPilot. Verdict based on maintenance signals β see the live page for receipts. Re-run on a new commit to refresh.
Embed this chat in your README β
Drop this iframe anywhere β the widget runs against the same live analysis cache as the main app.
<iframe src="https://repopilot.app/embed/fluvio-community/fluvio" width="100%" height="500" style="border:1px solid #d0d7de; border-radius:8px;" allow="microphone" loading="lazy" ></iframe>