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.1.4-cp310-abi3-win_amd64.whl (30.6 MB view details)

Uploaded CPython 3.10+Windows x86-64

rivers-0.1.4-cp310-abi3-musllinux_1_2_x86_64.whl (35.1 MB view details)

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

rivers-0.1.4-cp310-abi3-musllinux_1_2_aarch64.whl (33.8 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

rivers-0.1.4-cp310-abi3-manylinux_2_28_x86_64.whl (28.5 MB view details)

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

rivers-0.1.4-cp310-abi3-manylinux_2_28_aarch64.whl (27.4 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ ARM64

rivers-0.1.4-cp310-abi3-macosx_11_0_arm64.whl (27.5 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

rivers-0.1.4-cp310-abi3-macosx_10_13_x86_64.whl (28.4 MB view details)

Uploaded CPython 3.10+macOS 10.13+ x86-64

File details

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

File metadata

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

File hashes

Hashes for rivers-0.1.4-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 2774209e0a31fc921f477b3002996327b9ec9a2adebd2de52f96a6426b367747
MD5 0d51017b3eb47cb8b8ca3078c973e211
BLAKE2b-256 e57219a7a806908fcfa491c3a25024a78e09b406cbc9b4e6964df07d683f5dd6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rivers-0.1.4-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b0bae76199efce154e61dcf9e0393a376ae27b3c40451bda882a6e65e697d04b
MD5 4c7f08639e6beb582194c23e5eae4e80
BLAKE2b-256 d9a03e044b5fce04386e76fcdbf01590bdd85fcef878f0a8ba3cfeb50264a757

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rivers-0.1.4-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 518266b72c9bd1155f8aa3635728bba55b68ee198a8e215b6cfbb82e8a8d45c2
MD5 d1f9a167267aa0f1bbdc0ac384163d3f
BLAKE2b-256 e1dee61a8fca264ec2009e350219dca416524d63602b455b6a5f09b61dc8560f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rivers-0.1.4-cp310-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8230747c309e5bac9a553786c19361e197b8516220c225cf9e0a623e9101a774
MD5 3c74993d3db54b1be146fbe552b5c65b
BLAKE2b-256 afc5011cbd516a26e030a5078ff3fa8dbb3984dd1619f582791c15ccb9eadc79

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rivers-0.1.4-cp310-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 736c16fb3df5ef43180971134de591a89f7c883620ac1d2342e760d5f6381857
MD5 7f6a43076555cb037bb4dc6c63dd97e0
BLAKE2b-256 ae179b24a3e7dc48ff78c20e418877212449e0933ed678f1dceda6594aaa46d7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rivers-0.1.4-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 76b84b5efe95a92280a659bf417b93fbd0abf413f31e7dddcd396f6765611402
MD5 d19046eead76eae47227e5758261a612
BLAKE2b-256 a8c1b14fef8865b38d04a635b7dbc8a0a149dcc35706c47e7cca9ed98e2b1619

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rivers-0.1.4-cp310-abi3-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 dc73a254c9b6994568681a9d91423f687394471eafa8666481d7a041cf0d0315
MD5 7625625dc0093d35a201775aabe2845d
BLAKE2b-256 fcee0612b1159ca852ae6158b99b99c4c165dc0794050fa7c8abbbe4f9e51c3e

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