dataenginex
The Python library that powers DataEngineX Studio — an open-source, self-hosted, local-first Data + ML + AI workbench for individuals and small teams. Use the library directly when you want code; install DataEngineX Studio when you want a UI.
Install
pip install dataenginex # lean base — DuckDB, structlog, Pydantic, Click, pyarrow
from dataenginex.engine import DexEngine
engine = DexEngine("dex.yaml") # loads config, inits SQLite store, wires backends
engine.run_pipeline("clean_users") # execute a pipeline
models = engine.model_registry.list_models()
response = engine.agents["assistant"].chat("summarise the latest run")
Optional integrations install only what you need:
| Extra | What you get | Example use case |
|---|---|---|
[postgres] |
asyncpg |
Persist lineage events to Postgres |
[qdrant] |
qdrant-client |
Production vector store (falls back to in-memory) |
[queue] |
arq (+ redis transitively) |
Async background jobs |
[cloud] |
boto3, google-cloud-storage, google-cloud-bigquery |
S3 / GCS / BigQuery sources & sinks |
[ml] |
scikit-learn, sentence-transformers |
Train classical ML models, generate embeddings |
[tracking] |
mlflow |
Experiment tracking via MLflow |
[data] |
pyspark |
PySpark connector + dbt CLI connector (run dbt models as pipeline steps) |
[delta] |
deltalake |
Delta Lake connector |
[pytorch] |
torch |
PyTorch ML models |
LiteLLM must be installed separately due to a
python-dotenvpin conflict:pip install 'litellm>=1.83.3' --no-deps
What it does
dex.yaml describes a project. DexEngine reads it and wires the pieces:
| Subsystem | Built-in default | Optional backend |
|---|---|---|
| Data engine | DuckDB | PySpark ([data]) |
| Storage | Local parquet + DuckDB | S3, GCS, BigQuery ([cloud]) |
| Lineage | JSON / SQLite | Postgres ([postgres]) |
| Scheduler | croniter | — |
| ML training | scikit-learn wrapper ([ml]) |
— |
| ML tracking | JSON-based | MLflow ([tracking]) |
| LLM providers | Ollama, OpenAI, Anthropic | Any OpenAI-compatible URL |
| Vector store | in-memory | Qdrant ([qdrant]) |
| Retrieval | BM25 + dense + hybrid + graph | — |
| Persistence | SQLite, WAL mode (.dex/store.duckdb) |
— |
| Logging | structlog | — |
| Privacy | PrivacyGuard — PII detection, masking strategies, outbound call audit | — |
| Connectors | CSV, Parquet, DuckDB, REST, HTTP, Kafka | PySpark ([data]), dbt CLI ([data]), Delta ([delta]), PostgreSQL ([postgres]) |
Local-first by default. A fresh pip install dataenginex requires no external services — DuckDB is embedded; nothing reaches the network unless you explicitly configure it (or call a hosted LLM).
Project structure
src/dataenginex/
├── ai/ # LLM providers, routing, agents, retrieval, tools, memory, workflows
├── api/ # Pydantic response models, GraphQL schema (no HTTP server)
├── application/ # Domain services (governance, projects, runs, resources)
├── bootstrap/ # Engine wiring and startup
├── cli/ # `dex` CLI: validate, version, init
├── config/ # dex.yaml schema, loader, env-var resolution
├── core/ # Core abstractions and shared utilities
├── data/ # Connectors (CSV, Parquet, DuckDB, REST, HTTP, Kafka), transforms
├── domains/ # Domain logic (ai, analytics, data, execution, governance, ml, plugins, security)
├── duckdb/ # DuckDB connection and helpers
├── engine.py # DexEngine — entry point
├── engines/ # Engine implementations and registry (DuckDB, Spark, base)
├── foundation/ # Base ABCs, plugin contracts, errors, events, resources
├── interfaces/ # Gateway, embedded, external service interfaces
├── lakehouse/ # Bronze/Silver/Gold lakehouse storage and catalog
├── middleware/ # structlog, Prometheus metrics
├── ml/ # ML training, registry, serving, drift, features
├── orchestration/ # Scheduler, background workers, queue backends
├── orm/ # SQLAlchemy ORM models
├── plugins/ # Entry-point plugin discovery
├── providers/ # Backend implementations (connectors, vector, tracking)
├── runtime/ # Compiler, registry, ML runtime, sandbox
├── secops/ # PII detection, masking, audit
├── spark/ # PySpark connector (SQL, streaming, ML, catalog, lineage)
├── store.py # DexStore — DuckDB (WAL) persistence
└── warehouse/ # Warehouse operations
Development
git clone https://github.com/TheDataEngineX/dataenginex && cd dataenginex
uv sync
uv run poe check-all # lint + typecheck + tests
uv run poe test-cov # tests + coverage
uv run poe lint-fix # auto-fix lint issues
dex validate dex.yaml # validate a config file
dex version # show version + environment
Want the full workbench?
dataenginex is the library. The web UI is dex-studio — it imports dataenginex directly, no HTTP hop.
Ecosystem
| Repo | Purpose |
|---|---|
| dataenginex | This library (PyPI) |
| dex-studio | Web UI — FastAPI + Jinja2 + HTMX |
| infradex | Kubernetes deployment via ArgoCD |
Documentation
| Guide | Description |
|---|---|
| CHANGELOG | Release history |
| Release Notes | Package release details |
License: MIT • Python: 3.13+ • Status: Pre-1.0 • Version: 0.7.0
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dataenginex-0.7.0.tar.gz.
File metadata
- Download URL: dataenginex-0.7.0.tar.gz
- Upload date:
- Size: 887.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ac92d2b86e2e79db540d8a79909dbf20b7c403a27f9eee49ad8f6e951644e200
|
|
| MD5 |
b2921bf2d05f87cd84a43a181155d831
|
|
| BLAKE2b-256 |
f15b4ba14f1b5b423f9ff23a847072d524a4a64ee7f25e6112e026a4fda667ba
|
Provenance
The following attestation bundles were made for dataenginex-0.7.0.tar.gz:
Publisher:
release.yml on TheDataEngineX/dataenginex
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dataenginex-0.7.0.tar.gz -
Subject digest:
ac92d2b86e2e79db540d8a79909dbf20b7c403a27f9eee49ad8f6e951644e200 - Sigstore transparency entry: 2607963906
- Sigstore integration time:
-
Permalink:
TheDataEngineX/dataenginex@e11e55a9cc50df71305cbca94b6b54562fbf509b -
Branch / Tag:
refs/heads/main - Owner: https://github.com/TheDataEngineX
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e11e55a9cc50df71305cbca94b6b54562fbf509b -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file dataenginex-0.7.0-py3-none-any.whl.
File metadata
- Download URL: dataenginex-0.7.0-py3-none-any.whl
- Upload date:
- Size: 504.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
38678da9522f72a95eb27a0eee6651ce75dc22cd8ca5f95e80b6013676ed450b
|
|
| MD5 |
de06289cf7d008d31dc440bde84eda5f
|
|
| BLAKE2b-256 |
d09a7d1759e191c31026ba7b5c5e5b2e9e389661a92f8c828a9390960f9e23de
|
Provenance
The following attestation bundles were made for dataenginex-0.7.0-py3-none-any.whl:
Publisher:
release.yml on TheDataEngineX/dataenginex
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dataenginex-0.7.0-py3-none-any.whl -
Subject digest:
38678da9522f72a95eb27a0eee6651ce75dc22cd8ca5f95e80b6013676ed450b - Sigstore transparency entry: 2607964009
- Sigstore integration time:
-
Permalink:
TheDataEngineX/dataenginex@e11e55a9cc50df71305cbca94b6b54562fbf509b -
Branch / Tag:
refs/heads/main - Owner: https://github.com/TheDataEngineX
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e11e55a9cc50df71305cbca94b6b54562fbf509b -
Trigger Event:
workflow_dispatch
-
Statement type: