# Datanika [![License: AGPL-3.0](https://img.shields.io/badge/License-AGPL_3.0-blue.svg)](LICENSE) [![Python 3.12+](https://img.shields.io/badge/Python-3.12+-blue.svg)](https://www.python.org) [![Built with Reflex](https://img.shields.io/badge/Built_with-Reflex-purple.svg)](https://reflex.dev) [![dlt](https://img.shields.io/badge/Extract%20%2B%20Load-dlt-orange.svg)](https://dlthub.com) [![dbt-core](https://img.shields.io/badge/Transform-dbt--core-green.svg)](https://www.getdbt.com) **Open-source data pipeline platform β€” Extract, Load, Transform, and Orchestrate from a single UI.** Datanika combines [dlt](https://dlthub.com) (extract + load) with [dbt-core](https://www.getdbt.com) (transform) and adds visual pipeline management, scheduling, and monitoring β€” all in one Python-native platform. > Think Airbyte + dbt Cloud + Airflow β€” in one tool, self-hostable with Docker Compose. --- ## Features πŸ”Œ **36 Connectors** β€” PostgreSQL, MySQL, Oracle, MongoDB, BigQuery, Snowflake, Stripe, HubSpot, Salesforce, Kafka, ClickHouse, and more πŸ”„ **dbt Transformations** β€” SQL models, tests, snapshots, packages, and source freshness built in πŸ“Š **Visual Pipeline Builder** β€” DAG editor with dependency management ⏰ **Scheduling** β€” Cron-based with APScheduler, persistent across restarts πŸ“ˆ **Monitoring** β€” Run history, streaming logs, and dashboard stats πŸ” **Enterprise Security** β€” RBAC, SSO (SAML/OIDC), audit logging, encrypted credentials 🌍 **9 Languages** β€” English, German, French, Spanish, Russian, Greek, Chinese, Arabic, Serbian πŸ”Œ **REST API** β€” Full CRUD with OpenAPI/Swagger docs, rate limiting, and scoped API keys πŸ€– **AI-Agent Ready** β€” hosted + local [MCP server](#ai-agent-integration) (25 tools), `/llms.txt`, agent-guide.md, 5-tier capability API, compile+preview validation, typed error codes, `?wait=true`, `Idempotency-Key`, run cancellation πŸš€ **Pipeline Templates** β€” One-click starter templates (Stripeβ†’Postgres, Postgresβ†’BigQuery, CSVβ†’DuckDB) with prefilled connection configs πŸ”” **Notifications** β€” Slack, Telegram, email, and webhook alerts on run completion, plus an in-app notification center πŸ“¦ **Self-Hostable** β€” Single `docker compose up` β€” no Kubernetes required --- ## Quick Start ### Docker (recommended) ```bash git clone https://github.com/datanika-io/datanika-core.git cd datanika-core cp .env.example .env # Edit .env with your settings docker compose up -d ``` App available at http://localhost:3000 ### Development ```bash uv venv && source .venv/bin/activate uv pip install -e ".[dev]" docker compose up -d postgres redis # infrastructure only uv run reflex run # starts on :3000 + :8000 ``` --- ## Releases & versioning Datanika uses **`0.x` SemVer** with tagged releases (`v0.1.0`, …). While pre-1.0, breaking changes bump the **minor**. There is no `1.0` yet β€” that will mean a committed, stable public API contract. **Self-hosting? Pin a release instead of tracking `master`.** `master` is continuously deployed to our hosted app and moves several times a day. ```bash git checkout v0.1.0 # source docker compose up -d --build # build the image from that source ``` > ⚠️ **There is no publicly pullable image yet.** `ghcr.io/datanika-io/datanika-core` > exists but is **private**, so `docker pull` on any tag answers `denied` for everyone > outside the org β€” this README told you otherwise until 2026-09-03. It stays private on > purpose: the image grafts in our closed-source cloud plugin, so publishing it as built > today would publish that too. **Pin the source tag and build**; that path is exercised > by CI. > > **Building it yourself gives you the same artifact we would publish.** Since > 2026-09-04 the Dockerfile carries a `DATANIKA_IMAGE_EDITION` build arg, and the > core-only variant is built and asserted on every PR (`core-only-image` in CI) from a > context that does not contain the cloud tree at all β€” which is the context you have. > > ⚠️ **The Dockerfile expects a monorepo-shaped context**: it does > `COPY datanika/pyproject.toml`, so the build context is the **parent** directory and > this checkout has to be the `datanika/` inside it. Clone it under that name and build > from one level up: > > ```bash > git clone https://github.com/datanika-io/datanika-core.git datanika > docker build --build-arg DATANIKA_IMAGE_EDITION=core -f datanika/Dockerfile . > ``` > > The resulting image carries no `/cloud` tree and cannot import `datanika_cloud`. > Leave `DATANIKA_EDITION` unset β€” its default is `core`. Setting it to `cloud` on this > image fails immediately and loudly (`ModuleNotFoundError: No module named > 'datanika_cloud'`), which is deliberate: the alternative is a service that looks > healthy and enforces nothing. Publishing this under a public GHCR package is tracked > in [#1014](https://github.com/datanika-io/datanika-core/issues/1014). Every version's notes are on the [Releases page](https://github.com/datanika-io/datanika-core/releases). Security advisories cite the first patched release (e.g. `Patched: v0.1.0`), so a pinned tag tells you immediately whether you're affected. > The `datanika-mcp` sub-package is versioned and released independently (`mcp-v*` tags, > published to PyPI). --- ## Why Datanika? | | Datanika | Airbyte | Fivetran | dbt Cloud | |---|---|---|---|---| | Extract + Load | βœ… 36 connectors | βœ… 600+ [^1] | βœ… 700+ [^1] | ❌ | | Transformations | βœ… dbt built-in | ❌ | ❌ (add-on) | βœ… | | Scheduling | βœ… Cron + DAG | βœ… Basic | βœ… Basic | βœ… | | Pipeline DAG | βœ… Visual | ❌ | ❌ | ❌ | | Self-host | βœ… Docker | ⚠️ Needs K8s | ❌ SaaS only | ❌ SaaS only | | Open source | βœ… AGPL-3.0 | ⚠️ ELv2 | ❌ | ❌ | | Notifications | βœ… Slack/Telegram/Email/Webhook | βœ… | βœ… | βœ… | | Pricing | Free forever | Free tier limited | ~$250+/mo | ~$100+/mo | [^1]: Competitor connector counts as published by each vendor's own connector directory, **checked 2026-08-30**. Ours is derived from `ConnectionType` in code, not written by hand. We do not track other vendors' catalogues continuously β€” if this footnote's date looks old, check the source rather than trusting the number. --- ## Tech Stack | Component | Technology | |-----------|-----------| | Frontend | [Reflex](https://reflex.dev) (Python β†’ React) | | Backend | Starlette (via Reflex) | | Extract + Load | [dlt](https://dlthub.com) | | Transform | [dbt-core](https://www.getdbt.com) | | Database | PostgreSQL 16 | | Task Queue | Celery + Redis | | Scheduling | APScheduler | --- ## Roadmap - [x] 36 connectors (databases, SaaS APIs, files, streaming) - [x] dbt transformations, tests, snapshots, packages - [x] REST API v1 with OpenAPI/Swagger and typed per-connector inline schemas - [x] AI-agent compatibility (`/llms.txt`, agent-guide, 5-tier API, golden-path loop, `?wait=true`, `Idempotency-Key`, run cancel, MCP server) - [x] Pipeline templates (one-click setup) - [x] In-app notification center with Slack, Telegram, Email, Webhook channels - [x] SSO (SAML/OIDC) for Enterprise - [x] Usage-based billing (cloud plugin) - [x] 2,300+ tests across unit, security, and E2E (SQLite in-memory for speed) - [x] Kubernetes Helm chart β€” in-tree at [`deploy/helm/datanika/`](deploy/helm/datanika/); installs the same image as the Compose path. Bundled Postgres/Redis are single-replica and not production-grade β€” point it at managed databases (see the chart README) - [ ] Data lineage visualization --- ## AI Agent Integration Datanika speaks [MCP](https://modelcontextprotocol.io/), so AI agents (Claude Desktop, Claude Code, Cursor, …) can browse connections, preview data, compile transformations, and monitor runs natively. **25 tools β€” 17 read-only, 8 write.** There are two ways in. **Hosted β€” nothing to install.** Paste this wherever your client accepts a remote MCP server and authorize in the browser: ``` https://app.datanika.io/mcp ``` OAuth 2.1, no API key to handle. **Read-only unless you grant write at consent** β€” a client that asks for nothing gets read-only, and a pasted API key stays read-only here even if its own scopes allow writes. **Local β€” stdio.** Published on PyPI as [`datanika-mcp`](https://pypi.org/project/datanika-mcp/) and listed on the [official MCP registry](https://registry.modelcontextprotocol.io) as `io.datanika/datanika-mcp`: ```bash # read-only by default; add --allow-write to enable the 8 write tools uvx datanika-mcp --url https://app.datanika.io --api-key YOUR_KEY ``` See [`datanika-mcp/README.md`](datanika-mcp/README.md) for per-client config snippets and the full tool list, or [datanika.io/docs/mcp-server](https://datanika.io/docs/mcp-server) for the hosted walkthrough. Additional agent resources: - [`/llms.txt`](https://app.datanika.io/llms.txt) β€” discovery document - [`/api/v1/openapi.json`](https://app.datanika.io/api/v1/openapi.json) β€” OpenAPI spec with typed inline schemas - [`/api/v1/meta/agent-tiers`](https://app.datanika.io/api/v1/meta/agent-tiers) β€” 5-tier capability stack (JSON) - [`docs/api_versioning.md`](docs/api_versioning.md) β€” stability tiers and deprecation policy --- ## Open-Core Strategy Core platform is open-source (AGPL-3.0). Cloud version adds billing, quotas, and usage metering via the `datanika-cloud` plugin. --- ## Links - 🌐 **Website**: [datanika.io](https://datanika.io) - πŸš€ **Cloud Platform**: [app.datanika.io](https://app.datanika.io) - πŸ“– **Documentation**: [datanika.io/docs](https://datanika.io/docs) - πŸ”Œ **Connectors**: [datanika.io/connectors](https://datanika.io/connectors) - πŸ“‘ **API Reference**: [datanika.io/docs/api](https://datanika.io/docs/api) --- ## Security Found a vulnerability? See [SECURITY.md](SECURITY.md) for our disclosure policy, supported versions, and reporting instructions. --- ## Contributing We welcome contributors and design partners. Open an issue or contact info@datanika.io. --- ## License [AGPL-3.0](LICENSE)