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.4.0.tar.gz (593.2 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.4.0-py3-none-any.whl (668.1 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for duckstring-0.4.0.tar.gz
Algorithm Hash digest
SHA256 ea366fae83fc32bf5026e212cd1d21562f8a81870acd52a841ac3ebf17e38bdb
MD5 10e011a8fd2d07490d95ee13b8440065
BLAKE2b-256 6806ae2836e57f7eeeaba9d4109817bd7a82910ac8a10446c157372d89063c03

See more details on using hashes here.

Provenance

The following attestation bundles were made for duckstring-0.4.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.4.0-py3-none-any.whl.

File metadata

  • Download URL: duckstring-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 668.1 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.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0a0bbe1adf0ca0fead8233fe419c0ea5a4a19aec76b30290e795bef1ed86bf35
MD5 6b254634417551402eb5d9a03df3d335
BLAKE2b-256 8c02be6c2685c3dcb606bf45e9f52261a8cca5909e09ec8798341d71550563c5

See more details on using hashes here.

Provenance

The following attestation bundles were made for duckstring-0.4.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