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

Uploaded CPython 3.10+Windows x86-64

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

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

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

Uploaded CPython 3.10+manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.10+macOS 11.0+ ARM64

rivers-0.1.2-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.2-cp310-abi3-win_amd64.whl.

File metadata

  • Download URL: rivers-0.1.2-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.2-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 326343c0a8e845b43cb602d02d1b0b376094635bf2ecca013c9e3e918bb15668
MD5 8e5c400dec2b3c4d440709e117d4c44e
BLAKE2b-256 ab1702b42086086050cf76eaf04118bffcb77118f62a12c63b17865ced2b7739

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rivers-0.1.2-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 503412f6c3ba9156791f5464bb9d853171fc978c9ffdf02a97f0b073ebfb520c
MD5 a6a91203cd0f29f9c39c2b15acec6d8c
BLAKE2b-256 cccba9ec5515df34515708c40baafb976e913d6332a4c0950111723dea308abe

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rivers-0.1.2-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 999d59e66fb787771a91dc6f65f46a7f2d8cf94dc26f38822bdc0c65f2e07bc4
MD5 5f713238c6b2d77736816704f6509ae0
BLAKE2b-256 ec5c0d8d623515676b0c61e75fc51c77a091fa358aa2b2b9357251b812391ede

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rivers-0.1.2-cp310-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 27be12cbad45abf5119859a35451a05ec21d9b9537a95aa27abf75664aabdfdf
MD5 426fb72f6240e9f6cd4d41572950c19e
BLAKE2b-256 32b672d8be6854c496b9cfa0f77e40b2a3d17043cc2e24af01022209bdd3a38d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rivers-0.1.2-cp310-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 bb786e11349d54ac631b15d139cae21bae82b9b15938c0a8ce49a4058ca946a9
MD5 9c0e35eaa401e4f62bd34d0d17ee8863
BLAKE2b-256 7b6e605e0c1b3803fb017c2e5bd846b51fefbdb2bf81de9474889fa9eb93f8a3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rivers-0.1.2-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3ff3933e284299fc4f7e2e903117862395e21db636ca42adaa1e31b4157c5d04
MD5 d2d34d4b20b8e5fd2dd49eb72c684e2e
BLAKE2b-256 43a12c56e60991ee21147e08178761802f20270b77c839d5554671ac6dc53afd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rivers-0.1.2-cp310-abi3-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 fdabd669a4a27c8c54db917c8a814518d3236677eae66f87abcc7e9cb60b15d6
MD5 be0c1ae9b271ba1a918b8a22d5b468d8
BLAKE2b-256 4ff1264c725bc21e4624685ee7fee7ee8a7816dd65a8945e4aee79ce5cceb95f

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