Skip to main content

Build data pipelines the way you build software: version each transform, declare its dependencies, and Duckstring resolves the execution DAG automatically.

Project description

Duckstring

There is no DAG.

Duckstring treats data transformations as software packages. Upstream dependencies are declared per Pond (unit operation), defining the DAG without the need for its direct management.

Ponds are upgraded and deployed to Duckstring's pull-based Catchment (orchestrator) atomically - like upgrading a package - with the earlier version continuing to execute until there are no consumers dependent on it. Upstream defines constraints on what it can consume, downstream defines when it's needed, and the Catchment optimally executes the sequence of Ponds supplying it with the best currency and frequency as possible.

You should not need to manage the DAG. You should not need global governance. You should know yourself and your suppliers and trust that you'll get what you need when you need it.

Core Concepts

The main elements:

  • Catchment: Control environment (FastAPI + UI + CLI)
  • Pond: Versioned container with declared upstream dependencies
  • Ripple: Unit operation within a Pond (e.g. a single transformation producing a table)
  • Trickle: DBSP-based incremental engine operating within a Ripple

Ponds are typed or referred to in context:

  • Source: A parent Pond
  • Sink: A child Pond
  • Inlet: A Pond with external dependencies and no Sources
  • Outlet: A Pond with no Sinks (e.g. outputs final data products)

To see the orchestration model in action without installing anything, try the Duckstring Playground.

Quickstart

pip install duckstring

# Start a local Catchment (the runtime + web UI) — leave it running
duckstring catchment init --name dev

Then, in another terminal:

# Create the demo pipeline (transactions, products → sales → reports) and deploy it
mkdir demo && cd demo
duckstring pond demo
duckstring pond deploy --all -y

# Run it end to end, once
duckstring trigger pulse reports

# Look around
duckstring status                          # live state of every Pond
duckstring query reports monthly_summary   # peek at an output table

The Catchment also serves a live web UI at http://127.0.0.1:7474 — the Pond graph, freshness, run history, and the full trigger/control surface.

Execution

Ponds execute on demand signals sent to an Outlet, in two flavours — push runs the lineage forward to a target freshness; pull propagates demand upstream so every Pond re-runs as its Sources update, naturally throttled to the bottleneck. Each comes as a one-shot or a standing trigger:

Once Continuously
Push Pulse Tide
Pull Tap Wave

A Tide keeps an Outlet no staler than a bound (duckstring trigger tide reports 1d); a Wave keeps it as fresh as the pipeline can supply. See Triggers for the full semantics.

Going further

Full documentation lives at docs.duckstring.com:

There are future plans for a hosted Catchment service at duckstring.com. If you're interested, please get in touch.

License

Apache 2.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

duckstring-0.3.0.tar.gz (498.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

duckstring-0.3.0-py3-none-any.whl (555.3 kB view details)

Uploaded Python 3

File details

Details for the file duckstring-0.3.0.tar.gz.

File metadata

  • Download URL: duckstring-0.3.0.tar.gz
  • Upload date:
  • Size: 498.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for duckstring-0.3.0.tar.gz
Algorithm Hash digest
SHA256 4bf19d3da6d1ee0235a336cbb11361997f532e2605ac4cad429d3626bfa1c87d
MD5 38c37fedba9d826d64fb177ee31b63f4
BLAKE2b-256 7c956fc0997e48f6e065a2bf79ee0daba0d814e1eba63ebdbd48776cbb458975

See more details on using hashes here.

Provenance

The following attestation bundles were made for duckstring-0.3.0.tar.gz:

Publisher: release.yml on duckstring-dev/duckstring

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file duckstring-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: duckstring-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 555.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for duckstring-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c4043fbfef2216c122cb81d2954625b0dafba5279bef24fe89fe95aea22e8bcd
MD5 ccdac890aca87a9e583bbbb0806e35d0
BLAKE2b-256 59dab597f7c035fc6e6a739903d766cdeedc2e832f82b91782456d9a03d92b58

See more details on using hashes here.

Provenance

The following attestation bundles were made for duckstring-0.3.0-py3-none-any.whl:

Publisher: release.yml on duckstring-dev/duckstring

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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