Skip to main content

Reverse ETL for the code-first data stack

Project description

drt logo

drt — data reverse tool

Reverse ETL for the code-first data stack.

CI PyPI License Python

drt syncs data from your data warehouse to external services — declaratively, via YAML and CLI. Think dbt rundrt run. Same developer experience, opposite data direction.

pip install drt-core          # core (DuckDB included)
pip install drt-core[bigquery]  # + BigQuery
drt init
drt run --dry-run
drt run

Why drt?

Problem drt's answer
Census/Hightouch are expensive SaaS Free, self-hosted OSS
GUI-first tools don't fit CI/CD CLI + YAML, Git-native
dbt/dlt ecosystem has no reverse leg Same philosophy, same DX
LLM/MCP era makes GUI SaaS overkill LLM-native by design

Quickstart

1. Install

pip install drt-core[bigquery]

2. Initialize a project

mkdir my-drt-project && cd my-drt-project
drt init

This creates:

my-drt-project/
├── drt_project.yml   # project config
└── syncs/            # put your sync definitions here

drt init prompts for source type: bigquery, duckdb, or postgres.

3. Create a sync

# syncs/notify_slack.yml
name: notify_slack
description: "Notify Slack on new users"
model: ref('new_users')
destination:
  type: rest_api
  url: "https://hooks.slack.com/services/YOUR/WEBHOOK/URL"
  method: POST
  headers:
    Content-Type: "application/json"
  body_template: |
    { "text": "New user: {{ row.name }} ({{ row.email }})" }
sync:
  mode: full
  batch_size: 100
  rate_limit:
    requests_per_second: 5
  on_error: skip

4. Run

drt run --dry-run        # preview, no data written
drt run                  # run all syncs
drt run --select notify_slack  # run one sync
drt status               # check recent sync results

CLI Reference

drt init                    # initialize project
drt list                    # list sync definitions
drt run                     # run all syncs
drt run --select <name>     # run a specific sync
drt run --dry-run           # dry run
drt validate                # validate sync YAML configs
drt status                  # show recent sync status

Connectors

Type Name Install
Source BigQuery pip install drt-core[bigquery]
Source DuckDB pip install drt-core[duckdb]
Source PostgreSQL pip install drt-core[postgres]
Destination REST API (core)
Destination Slack Incoming Webhook (core)
Destination GitHub Actions (workflow_dispatch) (core)
Destination HubSpot (Contacts / Deals / Companies) (core)

Roadmap

Version Focus
v0.1 BigQuery / DuckDB / Postgres sources · REST API / Slack / GitHub Actions / HubSpot destinations · CLI · dry-run
v0.2 Incremental sync, state persistence improvements
v0.3 Scheduling (cron-style), Google Sheets connector
v0.4 MCP Server (uvx drt mcp run), AI Skills
v1.x Rust engine (PyO3)

Ecosystem

drt is designed to work alongside, not against, the modern data stack:

dlt (load) → dbt (transform) → drt (activate)

Contributing

See CONTRIBUTING.md.

License

Apache 2.0 — see LICENSE.

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

drt_core-0.1.0.tar.gz (34.5 kB view details)

Uploaded Source

Built Distribution

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

drt_core-0.1.0-py3-none-any.whl (41.1 kB view details)

Uploaded Python 3

File details

Details for the file drt_core-0.1.0.tar.gz.

File metadata

  • Download URL: drt_core-0.1.0.tar.gz
  • Upload date:
  • Size: 34.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for drt_core-0.1.0.tar.gz
Algorithm Hash digest
SHA256 21050059a25f6fb384c6803d4c0da2307ffe1689fe4079fb12bccc95b5f3aa76
MD5 9c7b83a3b20dea6bca950659f4ebeb8d
BLAKE2b-256 15d3b426782a038a5dca5f0d9e51d03eec80d79b72dc9738b36ec86f99bb7a93

See more details on using hashes here.

Provenance

The following attestation bundles were made for drt_core-0.1.0.tar.gz:

Publisher: publish.yml on drt-hub/drt

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

File details

Details for the file drt_core-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: drt_core-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 41.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for drt_core-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c7ed9d43d5231f17c520ef93a9e87397ee6cb506d1410b14bd092e0f19cd6d0f
MD5 2ae491091ed1b89a19730867f2db389d
BLAKE2b-256 f8628cf7cbc38e9fc735d53373a527afa307bb58e55f1fd24fd0d7d512a20789

See more details on using hashes here.

Provenance

The following attestation bundles were made for drt_core-0.1.0-py3-none-any.whl:

Publisher: publish.yml on drt-hub/drt

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