Metadata-Version: 2.4
Name: getdango
Version: 0.0.1
Summary: Local-first data platform - Laptop to cloud data stack in one weekend
Author-email: Dango Team <hello@getdango.dev>
License: Apache-2.0
Project-URL: Homepage, https://getdango.dev
Project-URL: Documentation, https://docs.getdango.dev
Project-URL: Repository, https://github.com/getdango/dango
Project-URL: Issues, https://github.com/getdango/dango/issues
Keywords: data,analytics,dbt,duckdb,metabase,etl,local-first
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Information Technology
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Database
Classifier: Topic :: Scientific/Engineering :: Information Analysis
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: duckdb~=1.1.0
Requires-Dist: dbt-core~=1.8.0
Requires-Dist: dbt-duckdb~=1.8.0
Requires-Dist: dlt[duckdb]~=1.2.0
Requires-Dist: click>=8.1.7
Requires-Dist: pyyaml>=6.0.1
Requires-Dist: pydantic>=2.0.0
Requires-Dist: python-dotenv>=1.0.0
Requires-Dist: jinja2>=3.1.4
Requires-Dist: watchdog>=5.0.0
Requires-Dist: rich>=13.7.0
Requires-Dist: inquirer>=3.4.0
Requires-Dist: requests>=2.31.0
Requires-Dist: httpx>=0.27.0
Requires-Dist: fastapi>=0.109.0
Requires-Dist: uvicorn[standard]>=0.27.0
Requires-Dist: python-multipart>=0.0.9
Requires-Dist: websockets>=12.0
Requires-Dist: aiofiles>=23.2.0
Requires-Dist: psutil>=5.9.0
Provides-Extra: dev
Requires-Dist: pytest>=8.0.0; extra == "dev"
Requires-Dist: pytest-cov>=5.0.0; extra == "dev"
Requires-Dist: black>=24.0.0; extra == "dev"
Requires-Dist: ruff>=0.6.0; extra == "dev"
Requires-Dist: mypy>=1.11.0; extra == "dev"
Provides-Extra: facebook-ads
Requires-Dist: dlt[facebook_ads]>=1.2.0; extra == "facebook-ads"
Provides-Extra: google-ads
Requires-Dist: dlt[google_ads]>=1.2.0; extra == "google-ads"
Provides-Extra: google-analytics
Requires-Dist: dlt[google_analytics]>=1.2.0; extra == "google-analytics"
Provides-Extra: google-sheets
Requires-Dist: dlt[google_sheets]>=1.2.0; extra == "google-sheets"
Provides-Extra: matomo
Requires-Dist: dlt[matomo]>=1.2.0; extra == "matomo"
Provides-Extra: mux
Requires-Dist: dlt[mux]>=1.2.0; extra == "mux"
Provides-Extra: airtable
Requires-Dist: dlt[airtable]>=1.2.0; extra == "airtable"
Provides-Extra: hubspot
Requires-Dist: dlt[hubspot]>=1.2.0; extra == "hubspot"
Provides-Extra: salesforce
Requires-Dist: dlt[salesforce]>=1.2.0; extra == "salesforce"
Provides-Extra: pipedrive
Requires-Dist: dlt[pipedrive]>=1.2.0; extra == "pipedrive"
Provides-Extra: freshdesk
Requires-Dist: dlt[freshdesk]>=1.2.0; extra == "freshdesk"
Provides-Extra: zendesk
Requires-Dist: dlt[zendesk]>=1.2.0; extra == "zendesk"
Provides-Extra: jira
Requires-Dist: dlt[jira]>=1.2.0; extra == "jira"
Provides-Extra: workable
Requires-Dist: dlt[workable]>=1.2.0; extra == "workable"
Provides-Extra: asana
Requires-Dist: dlt[asana_dlt]>=1.2.0; extra == "asana"
Provides-Extra: stripe
Requires-Dist: dlt[stripe]>=1.2.0; extra == "stripe"
Provides-Extra: shopify
Requires-Dist: dlt[shopify_dlt]>=1.2.0; extra == "shopify"
Provides-Extra: notion
Requires-Dist: dlt[notion]>=1.2.0; extra == "notion"
Provides-Extra: inbox
Requires-Dist: dlt[inbox]>=1.2.0; extra == "inbox"
Provides-Extra: mongodb
Requires-Dist: dlt[mongodb]>=1.2.0; extra == "mongodb"
Provides-Extra: kafka
Requires-Dist: dlt[kafka]>=1.2.0; extra == "kafka"
Provides-Extra: kinesis
Requires-Dist: dlt[kinesis]>=1.2.0; extra == "kinesis"
Provides-Extra: github
Requires-Dist: dlt[github]>=1.2.0; extra == "github"
Provides-Extra: slack
Requires-Dist: dlt[slack]>=1.2.0; extra == "slack"
Provides-Extra: chess
Requires-Dist: dlt[chess]>=1.2.0; extra == "chess"
Provides-Extra: strapi
Requires-Dist: dlt[strapi]>=1.2.0; extra == "strapi"
Provides-Extra: personio
Requires-Dist: dlt[personio]>=1.2.0; extra == "personio"
Provides-Extra: marketing
Requires-Dist: dlt[facebook_ads]>=1.2.0; extra == "marketing"
Requires-Dist: dlt[google_ads]>=1.2.0; extra == "marketing"
Requires-Dist: dlt[google_analytics]>=1.2.0; extra == "marketing"
Requires-Dist: dlt[google_sheets]>=1.2.0; extra == "marketing"
Requires-Dist: dlt[matomo]>=1.2.0; extra == "marketing"
Requires-Dist: dlt[mux]>=1.2.0; extra == "marketing"
Requires-Dist: dlt[airtable]>=1.2.0; extra == "marketing"
Provides-Extra: crm
Requires-Dist: dlt[hubspot]>=1.2.0; extra == "crm"
Requires-Dist: dlt[salesforce]>=1.2.0; extra == "crm"
Requires-Dist: dlt[pipedrive]>=1.2.0; extra == "crm"
Requires-Dist: dlt[freshdesk]>=1.2.0; extra == "crm"
Requires-Dist: dlt[zendesk]>=1.2.0; extra == "crm"
Requires-Dist: dlt[jira]>=1.2.0; extra == "crm"
Requires-Dist: dlt[workable]>=1.2.0; extra == "crm"
Requires-Dist: dlt[asana_dlt]>=1.2.0; extra == "crm"
Provides-Extra: ecommerce
Requires-Dist: dlt[stripe]>=1.2.0; extra == "ecommerce"
Requires-Dist: dlt[shopify_dlt]>=1.2.0; extra == "ecommerce"
Provides-Extra: all-sources
Requires-Dist: dlt[facebook_ads]>=1.2.0; extra == "all-sources"
Requires-Dist: dlt[google_ads]>=1.2.0; extra == "all-sources"
Requires-Dist: dlt[google_analytics]>=1.2.0; extra == "all-sources"
Requires-Dist: dlt[google_sheets]>=1.2.0; extra == "all-sources"
Requires-Dist: dlt[matomo]>=1.2.0; extra == "all-sources"
Requires-Dist: dlt[mux]>=1.2.0; extra == "all-sources"
Requires-Dist: dlt[airtable]>=1.2.0; extra == "all-sources"
Requires-Dist: dlt[hubspot]>=1.2.0; extra == "all-sources"
Requires-Dist: dlt[salesforce]>=1.2.0; extra == "all-sources"
Requires-Dist: dlt[pipedrive]>=1.2.0; extra == "all-sources"
Requires-Dist: dlt[freshdesk]>=1.2.0; extra == "all-sources"
Requires-Dist: dlt[zendesk]>=1.2.0; extra == "all-sources"
Requires-Dist: dlt[jira]>=1.2.0; extra == "all-sources"
Requires-Dist: dlt[workable]>=1.2.0; extra == "all-sources"
Requires-Dist: dlt[asana_dlt]>=1.2.0; extra == "all-sources"
Requires-Dist: dlt[stripe]>=1.2.0; extra == "all-sources"
Requires-Dist: dlt[shopify_dlt]>=1.2.0; extra == "all-sources"
Requires-Dist: dlt[notion]>=1.2.0; extra == "all-sources"
Requires-Dist: dlt[inbox]>=1.2.0; extra == "all-sources"
Requires-Dist: dlt[mongodb]>=1.2.0; extra == "all-sources"
Requires-Dist: dlt[kafka]>=1.2.0; extra == "all-sources"
Requires-Dist: dlt[kinesis]>=1.2.0; extra == "all-sources"
Requires-Dist: dlt[github]>=1.2.0; extra == "all-sources"
Requires-Dist: dlt[slack]>=1.2.0; extra == "all-sources"
Requires-Dist: dlt[chess]>=1.2.0; extra == "all-sources"
Requires-Dist: dlt[strapi]>=1.2.0; extra == "all-sources"
Requires-Dist: dlt[personio]>=1.2.0; extra == "all-sources"
Dynamic: license-file

# 🍡 Dango

**Production-ready analytics platform in minutes, not weeks**

Dango deploys a complete data stack (DuckDB + dbt + Metabase) to your laptop with one command.

## Status

🚀 **MVP Development** - 75% Complete | Target Release: **November 29, 2025**

- ✅ **Implemented:** CLI (9 commands), 29 data sources, Web UI, dbt auto-generation
- ⏳ **Remaining:** Auto-triggers, demo project, bootstrap script, PyPI packaging
- 📅 **Timeline:** 4 weeks to v0.1.0 release (see [TIMELINE.md](TIMELINE.md))

## Quick Start (Coming Soon)

```bash
# One-line install
curl -sSL getdango.dev/bootstrap | bash -s my-analytics

# Interactive setup
cd my-analytics
dango init .

# Add data sources
dango source add  # Interactive wizard

# Start platform
dango start

# Load data
dango sync

# Open dashboards
open http://my-analytics.dango
```

## Features

### ✅ Implemented
- **CLI Framework:** 9 commands (`init`, `start`, `stop`, `status`, `info`, `config`, `source`, `sync`, `dashboard`)
- **Data Sources:** 29 sources integrated (27 dlt verified sources + CSV + REST API)
- **Web UI:** FastAPI backend with live pipeline monitoring
- **dbt Auto-Generation:** Automatically generate staging models from source schemas
- **Metabase Dashboards:** API-based dashboard provisioning
- **Incremental Loading:** CSV with metadata tracking and 4 dedup strategies
- **Config Validation:** Pydantic-based schema validation with friendly errors

### 🚧 Coming in v0.1.0 (MVP Release: Nov 29)
- **Network Architecture:** `<project>.dango` domains with shared port 80
- **Auto-Triggers:** File watcher with 10-minute debounce → auto-sync → auto-dbt
- **Demo Project:** Sample data + pre-built dashboards (`dango demo create`)
- **Dashboard Persistence:** Export/import workflow for git
- **Metabase Auto-Setup:** Zero-config with auto-login and organization branding
- **dbt Modeling Wizard:** Template-based fact/dimension table creation
- **OAuth Helpers:** Guided flows for Facebook, Google
- **Bootstrap Install:** One-command setup via curl
- **PyPI Package:** Install via `pip install dango-data`

### 📋 Post-MVP (v0.2+)
- Orchestration with Prefect Cloud
- Cloud deployment options (Railway, Render, DigitalOcean)
- Advanced monitoring and alerting
- Multi-user collaboration features

## Architecture

**Data Layers:**
- `raw` - Immutable source of truth (with metadata)
- `staging` - Clean, deduplicated data
- `intermediate` - Reusable business logic
- `marts` - Final business metrics

**Tech Stack:**
- **DuckDB** - Analytics database (embedded, fast)
- **dbt** - SQL transformations
- **dlt** - API integrations (29 sources: 27 verified + CSV + REST)
- **Metabase** - BI dashboards
- **Docker** - Service orchestration
- **FastAPI** - Web UI backend
- **nginx** - Reverse proxy with domain routing

## Target Users

- Solo data professionals
- Fractional consultants
- SMEs needing analytics fast
- Anyone who wants a "real" data stack without the complexity

## Why Dango?

**Most tools force you to choose:**
- ❌ Local-first (limited features) OR Cloud (expensive, complex)
- ❌ No-code (inflexible) OR Full-code (steep learning curve)
- ❌ Fast setup (toy project) OR Production-grade (weeks of work)

**Dango gives you both:**
- ✅ Local-first AND production-ready
- ✅ Wizard-driven AND fully customizable
- ✅ Fast setup AND best practices built-in

## Development

```bash
# Clone repo
git clone https://github.com/getdango/dango
cd dango

# Install in development mode
pip install -e ".[dev]"

# Run CLI
dango --help

# Run tests (coming soon)
pytest
```

## Documentation

- **[MVP Roadmap](MVP_ROADMAP.md)** - Complete MVP specifications and timeline
- **[Timeline](TIMELINE.md)** - Visual 4-week roadmap to v0.1.0 release
- **[Implementation Progress](IMPLEMENTATION_PROGRESS.md)** - Development log
- **[Architecture](architecture.md)** - System design overview
- **[CSV Loading Design](CSV_LOADING_DESIGN_SUMMARY.md)** - Phase 1 decisions

## Contributing

We're in active MVP development! Contributions welcome after v0.1.0 releases (Nov 29, 2025).

See [CONTRIBUTING.md](CONTRIBUTING.md) (coming soon) for guidelines.

## License

Apache 2.0 - See [LICENSE](LICENSE) for details.

## Links

- **Homepage:** https://getdango.dev (coming soon)
- **Docs:** https://docs.getdango.dev (coming soon)
- **GitHub:** https://github.com/getdango/dango
- **Issues:** https://github.com/getdango/dango/issues

---

Built with ❤️ for the data community
