dlt is an open-source Python library for the extract-and-load stage, inferring schemas, normalising nested data, and handling incremental loading — installed with pip and run wherever Python already runs.
pip install dlt, write a Python file, run it anywhere Python runs; there is no service to operate. Scheduling comes from whatever already runs your code (Airflow, Dagster, Prefect, or cron), and dltHub is the managed layer adding runtime, scheduling, and observability, billed in credits per runtime hour.
How dlt answers the questions Batch ELT turns on.
| How it works | |
| Authoring model | Python library: pip install and a Python file |
| Incremental sync | Cursor state per resource; append, replace or merge, including SCD2 |
| Sync frequency | Whatever your scheduler runs; dltHub adds scheduling and backfill |
| Schema drift | Evolves by default; contracts can freeze or discard, per table or column |
| Running it | |
| Scheduling | None in the library; run it from Airflow, Dagster, Prefect or dltHub |
| Connections | |
| Source coverage | REST APIs, SQL databases, object storage; SaaS templates in Python |
| Destinations | Warehouses, SQL databases, object storage with Delta or Iceberg, vector DBs |
| Custom connectors | Python: writing a source is the normal path |
| Transformations | None in the load; dbt runner, SQL client or Python after loading |
| Cost | |
| Billing unit | Free library; dltHub credits: one credit per runtime hour |
vs dlt: Source-available · Self-hosted · Managed · Hybrid · Operational complexity: High · Kotlin, Java, Python
vs dlt: Source-available · Managed · Self-hosted · Hybrid · Batch · Streaming · Rust
vs dlt: Commercial · Managed · Hybrid