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

Uploaded CPython 3.10+Windows x86-64

rivers-0.1.3-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.3-cp310-abi3-musllinux_1_2_aarch64.whl (33.8 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

rivers-0.1.3-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.3-cp310-abi3-manylinux_2_28_aarch64.whl (27.4 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.10+macOS 11.0+ ARM64

rivers-0.1.3-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.3-cp310-abi3-win_amd64.whl.

File metadata

  • Download URL: rivers-0.1.3-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.3-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 a8ab0e8e865afbdc43ff636459d3a72d4a10c9465778459f738009502342e078
MD5 3ae785767e4d214cf564a7aa0e66d9ca
BLAKE2b-256 4b090b174b4e398028d57dc5c8e7e61c74c4b513d7a24f7b7b55b3fb0f796078

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rivers-0.1.3-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ff8b92e9d70670d06cc41ea802d769bc718c0b4033c7de98ed410704c95032d5
MD5 79356fea29180c333a30c90f695eaf9b
BLAKE2b-256 8be741951381f00455fbccc63cb145302f6cd5ed14f8a413f7bae39fc6711e2a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rivers-0.1.3-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 50111c3e17f1250a0e6ec8d08b69a067648ed2dab7286d98b25478ef71af33a2
MD5 1a9cdd14c2f1be152a70124842c96925
BLAKE2b-256 3c68664952dd4eb716b263e09153fc2ef11ee007dfb3eaa67a2facc8506c8690

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rivers-0.1.3-cp310-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1c5d43f6fa3f324c6cf73384a96320044d6a8426bf422c4301621e36c6492ca7
MD5 762ad2fa8e03036f683fabb5fe5f59f7
BLAKE2b-256 156c598e3f2ba2aef1986a0cadb83d7b6a1d0ab8cc5b983d2107738a5dda642d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rivers-0.1.3-cp310-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a028b14602fdb005bd0bdbc3bde07e605f43e9e00e264009d458acea61ba794e
MD5 c153af240129ec54b109a604bd380d4f
BLAKE2b-256 89abd49b2a0b24b53ee212f3b2b4027d9d14edf6504998bd066b3fd3583fe749

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rivers-0.1.3-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8a5f7a04483e0978070626491ac1e67eee963e9c569dff40e72243560c6ffd07
MD5 bd0b9b78af7aa3f65b0b5a7e9bfe4890
BLAKE2b-256 27b6439f500308089da7e5bd9f404ff4139a66a775906502a803f07e824c4ff0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rivers-0.1.3-cp310-abi3-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 a1970d8a1a5b0f9da552bad56c836a29f986fd730c4951b59bcd309924fb7f26
MD5 397e9f4e9c487ff1257c33e3907522be
BLAKE2b-256 945a2878da37125b4eb2e003eb18c0242cfcc6ecf6ad2d96eb69718a9d68c7d9

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