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

Uploaded CPython 3.10+Windows x86-64

rivers-0.1.1-cp310-abi3-musllinux_1_2_x86_64.whl (35.5 MB view details)

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

rivers-0.1.1-cp310-abi3-musllinux_1_2_aarch64.whl (34.2 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

rivers-0.1.1-cp310-abi3-manylinux_2_28_x86_64.whl (28.8 MB view details)

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

rivers-0.1.1-cp310-abi3-manylinux_2_28_aarch64.whl (27.8 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ ARM64

rivers-0.1.1-cp310-abi3-macosx_11_0_arm64.whl (27.9 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

rivers-0.1.1-cp310-abi3-macosx_10_13_x86_64.whl (28.8 MB view details)

Uploaded CPython 3.10+macOS 10.13+ x86-64

File details

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

File metadata

  • Download URL: rivers-0.1.1-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 31.0 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.1-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 62211932cba89c6ef532d2fbbc0df082d7fe8a3dd3df1d1dd4cc44a58a010549
MD5 cada8b6694d72fb3e826d3a7a31bd18f
BLAKE2b-256 4c2f29f3dee5552ab83e61402a3e512f5bfee129421e6556f7c467ab327072b0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rivers-0.1.1-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 32ad4e4b0a80ca4dc2bdf5e70369dfdde9d50ca187a92efe0f9310b8aaa8daeb
MD5 b8f09963feaceb11b97d35d7242afa1e
BLAKE2b-256 1fd3b5995d295c7577d0d96307a3f5efc554f9d98df4ef3c5fb21a835807de7d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rivers-0.1.1-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 4d0a8ce2e4248f5ac989c37d644d08e65c350fe6f6a0e50a227cc18ceca722e6
MD5 ab3451e8d0805681ca28810790a38481
BLAKE2b-256 c9b74b53a7cc33dd9195960b65cc8b89626868cf5988d22b3a3806bd9ea93b39

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rivers-0.1.1-cp310-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 585c61203f5013191bd28faa1bac2b79bcb8abe73ccd746967512d8da95f7825
MD5 22a2614303be16b197bc896106b09159
BLAKE2b-256 ddd74ea5665a758f72c7ad700922f1310395281cac69cc574236daa8f2e601c5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rivers-0.1.1-cp310-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 0942ca2d5bc1afe7e8e14106e4711bfe324ce34cbd4204689a3f066b627ebcbe
MD5 32ae5d6b0bb9dda7e230fa82aae8efb9
BLAKE2b-256 658a401bf0cf5d3ef0d74d3911685de0fa4ebc2d27bd9399b6ef9c549862c10e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rivers-0.1.1-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1546f27a351e22d943307bd561af13ac35f741a3be7419896e5f1c9d697eed08
MD5 b043051e9406928b363d128ffe697af4
BLAKE2b-256 7265fde799b8a7a46638d98bfaa58cc234ee8553ece781f24fa33f999a4eaaaf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rivers-0.1.1-cp310-abi3-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 3978028309f131b806722328256641677624f4f8db4b4c49a8c97f07e27289ef
MD5 5a6d082fb18846919add9aa87012ed65
BLAKE2b-256 c995ecae42ef64206982fe73acce82e3a75179b7a9a7d4d1d04356fb80e8b2a5

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