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

Uploaded CPython 3.10+Windows x86-64

rivers-0.2.0-cp310-abi3-musllinux_1_2_x86_64.whl (35.8 MB view details)

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

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

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

rivers-0.2.0-cp310-abi3-manylinux_2_28_x86_64.whl (29.2 MB view details)

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

rivers-0.2.0-cp310-abi3-manylinux_2_28_aarch64.whl (28.1 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ ARM64

rivers-0.2.0-cp310-abi3-macosx_11_0_arm64.whl (28.3 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

rivers-0.2.0-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.0-cp310-abi3-win_amd64.whl.

File metadata

  • Download URL: rivers-0.2.0-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 31.2 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.0-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 6242700a478fa4dc70f4c00351a040335080f353764557616da18c667c4de496
MD5 8bce48c0f315861888a9ab2a1311a973
BLAKE2b-256 25d18d6eba6e7cf9cfc7bc6b32c5ee116d774beed8722a925c1311505540ba38

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rivers-0.2.0-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c2db5b69b8871a5c2d3ac7b44a9b9bcdbd511c637bb39edd54ac0c33d15e5fc6
MD5 53819f4859b7a3768ac74dc91a28ffc9
BLAKE2b-256 61d555e1403128520869568092c7c75b1daf452d587022a0581149f3863e0e77

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rivers-0.2.0-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 23fc794f93c0338c772aba87943bee87746be862bb79e9c02b7523541fc856d6
MD5 a65080d14ea92ef1986d308bc335bc49
BLAKE2b-256 66e42bb00d866256d82aeb749d8cfabf87569dde0749e7ce2b847c61db5a2d69

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rivers-0.2.0-cp310-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 86f3345930fa7a65060ce18f8179d0642a1a216f78b76e3a4f95161760c653e9
MD5 97f22483d3dc92634e7b1d0c9cb4f25b
BLAKE2b-256 d2b523c444a2a6416292c4e61a711cc40672c49d88c5d19ba034ec2c22ecbb99

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rivers-0.2.0-cp310-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e7d1fa284e47bcbbc694c59ad94525f740e160e5e5701f1dbd850ae0caec20d7
MD5 061759baeeed0c7fb1dd7c721ab7db29
BLAKE2b-256 6ff9c71e7f11300fbe8ac48897bf49ceb265af6a8439e2cc0d309e14fcf429de

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rivers-0.2.0-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1356d89ff198c1feacb294885fa4f977be8e3e72b44dd6626c7ae3186860016a
MD5 9ddf24b0deddc57194af7e5c6f009cab
BLAKE2b-256 dc76c4535de18b6d4668f726fbd0b28e6fc33ed258ce7b2d769057903f9489d4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rivers-0.2.0-cp310-abi3-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 7eb359b69237fff48b4c8d02ea60f79c66c194ffe32cec5fad9d6a7e2e94f804
MD5 b228fca9e3e070fcd53db47d04cbfe10
BLAKE2b-256 7030fd12dafa5d55c9e134c71b75f4bebe7691e8b05ad46880a298bd782dd5db

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