Skip to main content

Orchestration platform for tasks and assets, fully backed by Rust.

Project description

rivers

Orchestration platform for tasks and assets, fully backed by Rust.

rivers is a Rust-powered orchestration platform built around data assets. Define pipelines in Python; rivers resolves the graph, plans execution - no Python interpreter on the control plane.

Documentation · Issues · Discussions

Key features

  • Asset-based orchestration — define data assets as Python functions; rivers resolves the dependency graph automatically.
  • Rust core — graph resolution, execution planning, partition logic, and the scheduler all run in compiled Rust.
  • Multiple asset types — single, multi-output, graph (composing Tasks into sub-DAGs), and external assets.
  • Partitioning — static, time-window (daily/hourly/custom cron), multi-dimensional, and runtime-extensible dynamic partitions.
  • Pluggable IO — built-in handlers for in-memory, pickle (any object store), and Delta Lake with merge support.
  • Parallel & distributed executionExecutor.parallel() for concurrent subprocess workers, Executor.kubernetes() for one-pod-per-step on K8s.
  • Schedules, sensors, and automation conditions — declarative triggers (cron, event-driven, dep-aware) executed by the rivers daemon.
  • Backfills — partition-range execution with multi-run, single-run, and per-dimension strategies.
  • Persistent storage — embedded SurrealDB + RocksDB for local dev, SurrealDB server for production.
  • Concurrency control — run-queue limits, tag concurrency, and step-level concurrency pools.
  • Single-binary dev experiencerivers dev <module> boots SurrealDB (embedded RocksDB), the scheduler, and the web UI on :3000 in one process.

Performance

Hot paths run in compiled Rust: graph resolution, partition mapping, execution planning, the scheduler. Python is the API surface only. Plan times stay sub-millisecond on graphs with thousands of nodes. The UI is Rust too — Leptos SSR + WASM on axum, state read straight from SurrealDB and pushed to the browser via Server-Sent Events.

Kubernetes-native

rivers ships with a Kubernetes operator and CRDs. Declare a repo as a CodeLocation:

apiVersion: rivers.io/v1alpha1
kind: CodeLocation
metadata:
  name: analytics
spec:
  image: ghcr.io/acme/pipelines
  tag: v0.2.0
  module: pipelines.analytics

The operator resolves the image to a digest, reconciles a Deployment + Service running rivers serve, registers it with the UI's discovery registry, and re-polls the registry to keep the digest fresh. Multi-arch images (linux/amd64, linux/arm64) and Helm charts are published to ghcr.io on every release with SLSA build-provenance attestations.

See the installation guide for the full setup — helm install commands, common values, and an architecture overview with the reconciliation and run sequence diagrams.

Install

pip install rivers

Optional extras for IO handlers:

pip install rivers[delta]     # Delta Lake support
pip install rivers[pyarrow]   # PyArrow table support
pip install rivers[polars]    # Polars DataFrame support

Quick example

import rivers as rs

@rs.Asset
def raw_data():
    return {"users": 100, "events": 5000}

@rs.Asset
def summary(raw_data: dict):
    return f"{raw_data['users']} users, {raw_data['events']} events"

repo = rs.CodeRepository(assets=[raw_data, summary])
result = repo.materialize()

print(repo.load_node("summary"))  # "100 users, 5000 events"

See the Getting Started guide for partitioning, jobs, IO handlers, and the K8s executor.

Contributing

Contributions are welcome. See CONTRIBUTING.md for development setup (just develop, just test, just pre-commit), code conventions, and the test matrix. The docs/ directory hosts both the user-facing guides and architectural notes for contributors.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

rivers-0.2.1-cp310-abi3-win_amd64.whl (31.4 MB view details)

Uploaded CPython 3.10+Windows x86-64

rivers-0.2.1-cp310-abi3-musllinux_1_2_x86_64.whl (36.0 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ x86-64

rivers-0.2.1-cp310-abi3-musllinux_1_2_aarch64.whl (34.7 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

rivers-0.2.1-cp310-abi3-manylinux_2_28_x86_64.whl (29.3 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ x86-64

rivers-0.2.1-cp310-abi3-manylinux_2_28_aarch64.whl (28.2 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ ARM64

rivers-0.2.1-cp310-abi3-macosx_11_0_arm64.whl (28.4 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

rivers-0.2.1-cp310-abi3-macosx_10_13_x86_64.whl (29.4 MB view details)

Uploaded CPython 3.10+macOS 10.13+ x86-64

File details

Details for the file rivers-0.2.1-cp310-abi3-win_amd64.whl.

File metadata

  • Download URL: rivers-0.2.1-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 31.4 MB
  • Tags: CPython 3.10+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.14.0

File hashes

Hashes for rivers-0.2.1-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 63168e1afe227ecb533b5742b4253492e66c264c36e48b85394f1cb0730117a3
MD5 f27134fc2e027147231d96b477d44168
BLAKE2b-256 a587b267594852593ce1f85ba8625a0ecace4cb0502290a1dfcf46324502b71f

See more details on using hashes here.

File details

Details for the file rivers-0.2.1-cp310-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for rivers-0.2.1-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c68d076cb723fed204680aeda425ccc55a7c79234c5aaa055d89e92a0ea02e12
MD5 ffa4318b64ea6a7b0bed6f59f597c3ff
BLAKE2b-256 3928990e126d599d67e7ad00c5933ae259fc91163ba6875cf149af1cb97197df

See more details on using hashes here.

File details

Details for the file rivers-0.2.1-cp310-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for rivers-0.2.1-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 c686ba0bef5376635412197920d56561a301c01566c6d7579cb1d89176c69909
MD5 3d19bf9c41cb2e2859a58efda4dac8d6
BLAKE2b-256 f17a8c86729343b7a4c16e9c633dcf6ebfcabafe739b57bac0bd6101fca47c77

See more details on using hashes here.

File details

Details for the file rivers-0.2.1-cp310-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for rivers-0.2.1-cp310-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 135663b62fd4a4141b6d1a14b2e8c54d2d2e1ef5c2c3bd5fb6d941518ee4a47e
MD5 66e3e886c6681618989eb976ae110022
BLAKE2b-256 8811fcd0fd52fdc6104bacbbef344258d3d14f8c8feca889eafcb1bfcd202b82

See more details on using hashes here.

File details

Details for the file rivers-0.2.1-cp310-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for rivers-0.2.1-cp310-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 1ec6c144df805f4a5ada6514afe05ef1d2ba3e6bfc98f73d0dfffb22784188ce
MD5 fce3321853ba0f39e9a6b5942af35267
BLAKE2b-256 990612100545c764496cc6c54093630dfd74a6b3fe5967558298bf880ff02dda

See more details on using hashes here.

File details

Details for the file rivers-0.2.1-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rivers-0.2.1-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bfe3fb50009f2174f9b60c3d8bd5900e37dcb409fcd241c04344d854e69cd5db
MD5 05b63ef88c315886dcc627c709f078b5
BLAKE2b-256 4741f2765d01690cebfecbbfddf5e1529fb00810957561ab3dfc4b3a9c280f71

See more details on using hashes here.

File details

Details for the file rivers-0.2.1-cp310-abi3-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for rivers-0.2.1-cp310-abi3-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 972738a78ee72d3668bb12f00d8ac758cb48eb5c1e067d9e2144931112291161
MD5 21d8390796d6b6829dc6713f347e42f4
BLAKE2b-256 5ba2ac7d00d2152f233d2d9fb270ed9ac83a522bf89850dd8a8622288d685b36

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page