Skip to main content

Agora ETL

Async-first ETL framework for Python.

License Python PyPI

agora-etl is the core Agora runtime: a builder-first ETL framework organized around a Source → Middleware chain → Sink(s) model.

The core package owns runtime semantics, public contracts, CLI diagnostics, checkpointing, DLQ behavior, scheduling primitives, health/metrics surfaces, and plugin discovery. Backend integrations such as Redis, Kafka, PostgreSQL, cron scheduling, distributed coordination, and Anthropic live in the official agora-etl-plugins package.

Keep the package story simple:

  • agora-etl owns runtime semantics and public framework contracts
  • agora-etl-plugins owns official backend implementations and backend runbooks
  • agora-etl-rs accelerates selected hot paths through the core acceleration boundary

Source of truth

Use this README for install, quickstart, and package boundary orientation. For canonical docs beyond that:

Install

pip install agora-etl

Optional core extras:

pip install "agora-etl[file]"       # pyarrow + faster JSONL/file paths
pip install "agora-etl[rs]"         # optional Rust acceleration boundary
pip install "agora-etl[benchmark]"  # local benchmarking helpers

Official integrations:

pip install "agora-etl-plugins[redis]"
pip install "agora-etl-plugins[kafka]"
pip install "agora-etl-plugins[postgres]"
pip install "agora-etl-plugins[all]"

agora-etl-plugins 0.4.x targets agora-etl>=0.4.1,<1.

Quickstart

import asyncio

from agora import DeliveryConfig, IterableSource, Pipeline
from agora.core.dlq import SQLiteDLQSink


records = [
    {"id": 1, "city": "Ho Chi Minh City", "confidence": 0.92},
    {"id": 2, "city": "Da Nang", "confidence": 0.41},
    {"id": 3, "city": "Hanoi", "confidence": 0.88},
]


async def main() -> None:
    summary = await (
        Pipeline(IterableSource(records))
        .filter(lambda row: row["confidence"] >= 0.5, name="confidence_gate")
        .build(
            config=DeliveryConfig(
                dlq=SQLiteDLQSink(".agora_dlq.db"),
                batch_size=100,
            ),
        )
        .run()
    )
    print(summary)


asyncio.run(main())

build() without an explicit sink uses the default stdout sink. The example:

  • emits in-memory records
  • filters low-confidence rows
  • writes accepted records to stdout
  • routes failed records to a local SQLite DLQ
  • returns a PipelineRunSummary with counts, timing, and runtime signals

Capability snapshot

Area What core provides
Pipeline builder Immutable Pipeline, BoundPipeline, .pipe(), .build(), .fan_out(), .route(), and .explain().
Runtime lanes Linear, buffered, Python batch, and Arrow batch execution with one shared data-plane vocabulary.
Reliability Checkpoint stores, DLQ sinks, replay semantics, retry policies, sink failure policies, and conservative checkpoint advancement.
Workers Schedule, ScheduledPipeline, WorkerPool, graceful shutdown, health endpoints, and distributed-coordination hooks.
Observability Run summaries, runtime metrics, tracing, Prometheus rendering helpers, health snapshots, and doctor diagnostics.
Extensibility Public plugin entry-point groups, manifest compatibility diagnostics, registries, and stable core facades.
AI runtime support Provider contracts, AI middleware, cache contracts, budget/cost governance, and provider capability guards.

Runtime guarantees

Agora's public runtime contract is documented in Runtime Guarantees. The high-level model:

  • source order is preserved at the sink boundary
  • checkpoint advancement waits for handled outcomes
  • sink delivery is fail-closed by default
  • DLQ replay acknowledges only after durable replay success
  • batch, Arrow, and process-isolated paths keep the same correctness contract
  • at-least-once delivery is the model; exactly-once behavior requires external idempotency or transactional systems

Execution lanes and data planes

Agora selects the execution lane from explicit source, middleware, and sink contracts:

  • python_rows
  • python_batches
  • arrow_batches

Use .explain() before a run to inspect lane selection and sink downgrade decisions:

from agora import Pipeline
from agora.sinks.file.csv import CsvSink


bound = Pipeline(source).build(CsvSink(path="out.csv", row_mapper=lambda row: row))
plan = bound.explain(max_records=1_000)

print(plan)
print(plan.to_dict())

PipelineExplain includes the selected lane, source data plane, writer input plane, middleware compatibility, sink plane, and downgrade markers.

Core vs plugins

Keep the package boundary clear:

Package Owns
agora-etl Runtime semantics, public contracts, CLI, docs, health, metrics, checkpointing, DLQ behavior, and plugin discovery.
agora-etl-plugins Official Redis, Kafka, PostgreSQL, cron, distributed coordination, Anthropic, backend DLQ, and backend-specific observability surfaces.
agora-etl-rs Optional acceleration primitives selected through the core acceleration boundary.

If a capability depends on Redis, Kafka, PostgreSQL, cron parsing, distributed lease ownership, or a hosted AI provider, it belongs in a plugin package rather than core.

CLI

The package installs the agora command:

agora --help
agora doctor
agora plugins list
agora dlq replay --help

Use agora doctor and agora plugins list --json in release gates and operator diagnostics when installed package behavior matters.

Documentation map

Reference sections:

Development

python -m venv .venv
.venv/bin/pip install -e ".[file,dev,benchmark]"
make ci

Useful focused checks:

make docs-check
make test-core
make contracts
make preservation

The GitHub CI matrix runs on Python 3.11, 3.12, and 3.13.

Security

Security reporting instructions live in SECURITY.md. Do not include exploitable details, credentials, payloads, production hostnames, or private stack traces in public issues.

License

Apache 2.0 — see LICENSE.

Download files

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

Source Distribution

agora_etl-0.4.6.tar.gz (640.6 kB view details)

Uploaded Source

Built Distribution

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

agora_etl-0.4.6-py3-none-any.whl (379.5 kB view details)

Uploaded Python 3

File details

Details for the file agora_etl-0.4.6.tar.gz.

File metadata

  • Download URL: agora_etl-0.4.6.tar.gz
  • Upload date:
  • Size: 640.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for agora_etl-0.4.6.tar.gz
Algorithm Hash digest
SHA256 2abc0d2bc36849cdb2beb5b94f68a2c2493bf6b04daec298f50971c91bd78141
MD5 7fe947a44490f95c6440220c55afa983
BLAKE2b-256 49d016da2108f1ccde750a02f3091dd20d82a868a27fff40f3973764ce9938ad

See more details on using hashes here.

Provenance

The following attestation bundles were made for agora_etl-0.4.6.tar.gz:

Publisher: release.yml on thanhtham010891/agora-etl

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

File details

Details for the file agora_etl-0.4.6-py3-none-any.whl.

File metadata

  • Download URL: agora_etl-0.4.6-py3-none-any.whl
  • Upload date:
  • Size: 379.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for agora_etl-0.4.6-py3-none-any.whl
Algorithm Hash digest
SHA256 36af02378087e3a3dece2eebf991b5fe069513b8d12fe9c07b8b86179fe69226
MD5 f0a7f0c850c43e756bbd23c6c5e46ea2
BLAKE2b-256 53172772181489a04155e3f8a0c69c7891f7e95418c628b6061bac243560f3bb

See more details on using hashes here.

Provenance

The following attestation bundles were made for agora_etl-0.4.6-py3-none-any.whl:

Publisher: release.yml on thanhtham010891/agora-etl

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

Release history Release notifications | RSS feed

This release

0.4.6 This release

2 files

0.4.5

2 files

0.4.4

2 files

0.4.3

2 files

0.4.2

2 files

0.4.1

2 files

0.4.0

2 files

0.3.3

2 files

0.3.2

2 files

0.3.1

2 files

0.3.0

2 files

0.2.2

2 files

0.2.1

2 files

0.2.0

2 files

0.1.9

2 files

0.1.8

2 files

0.1.7

2 files

0.1.6

2 files

0.1.5

2 files

0.1.4

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page