{
  "markdown": "<h1 align=\"center\">\n  <img src=\"./app/public/mako-icon.svg\" alt=\"Mako Logo\" width=\"40\" height=\"35\" style=\"vertical-align: middle; margin-right: 10px;\">\n  Mako\n</h1>\n\n<p align=\"center\"><strong>The AI-native SQL Client.</strong></p>\n\n> **The Cursor for Data.** Connect to any database, query with AI, and build live dashboards -- all from your browser.\n\nStop wrestling with complex SQL and slow, bloated database tools. Write queries in plain English, get instant results, and turn them into interactive dashboards with cross-filtering and scheduled refresh.\n\n![Mako App Interface](./.github/screenshots/app-screenshot.png)\n\n## 🚀 Why Mako?\n\nA modern SQL client built for the AI era, replacing slow desktop tools with a fast, collaborative, AI-powered experience.\n\n- **✨ AI Query Generation**: Write queries in natural language. Our schema-aware AI generates optimized SQL instantly.\n  - _Replaces: DataGrip, DBeaver, Postico_\n- **📊 AI Dashboards**: Build interactive dashboards from conversation. Cross-filtering, scheduled data refresh, Parquet materialization -- powered by DuckDB in the browser.\n  - _Replaces: Metabase, Looker, manual BI pipelines_\n- **🧱 dbt Transforms**: Build, run, and schedule dbt Core projects in-app -- file IDE, jobs, run history, lineage, and GitHub sync.\n  - _Replaces: dbt Cloud_\n- **⚛️ React Apps**: Ask the agent to build live React apps wired to your data through secure, credential-free bindings.\n  - _Replaces: Lovable, v0, internal-tool builders_\n- **🕓 Version History**: Every console and dashboard save is an immutable snapshot you can browse and restore.\n  - _Replaces: Lost SQL files, manual backups_\n- **🖥️ Mako Desktop**: Native app that bundles a local agent so `localhost` databases work out of the box.\n  - _Replaces: SSH tunnels and bastion hops for local DBs_\n- **👥 Team Collaboration**: Share connections, version-control queries, and work together in real-time.\n  - _Replaces: Passing credentials around, lost SQL files_\n- **⚡ Blazing Fast**: No Java or Electron bloat. Opens instantly in your browser and runs smooth.\n  - _Replaces: Slow desktop database tools_\n\n## 📸 Screenshots\n\n**AI-powered console** — ask in plain English, get a verified query and live results.\n\n![AI-powered console](./.github/screenshots/ai-console.webp)\n\n**Transforms (dbt)** — build, run, and schedule dbt Core projects with a file IDE, jobs, run history, and lineage.\n\n![dbt Transforms IDE](./.github/screenshots/transforms-dbt.webp)\n\n**Apps** — build live React apps wired to your data, rendered in a sandboxed preview.\n\n![React Apps live preview](./.github/screenshots/apps.webp)\n\n## 🔌 Integrations\n\n### Databases\n\n| Integration           | Status  | Description                                          |\n| --------------------- | ------- | ---------------------------------------------------- |\n| **PostgreSQL**        | ✅ Live | Connect to PostgreSQL for relational data queries    |\n| **MongoDB**           | ✅ Live | Connect to MongoDB for flexible document-based data  |\n| **BigQuery**          | ✅ Live | Analyze large datasets with Google BigQuery          |\n| **ClickHouse**        | ✅ Live | Fast OLAP queries on ClickHouse                      |\n| **MySQL**             | ✅ Live | Query MySQL databases with natural language          |\n| **Redshift**          | ✅ Live | Query Amazon Redshift data warehouses                |\n| **Cloud SQL**         | ✅ Live | Connect to Google Cloud SQL (Postgres)               |\n| **Cloudflare D1**     | ✅ Live | Query Cloudflare D1 SQLite databases                 |\n| **Cloudflare KV**     | ✅ Live | Browse and query Cloudflare Workers KV               |\n\n### Data Connectors\n\nSync external SaaS data into Mako's data warehouse for querying and dashboards.\n\n| Integration    | Status  | Description                                      |\n| -------------- | ------- | ------------------------------------------------ |\n| **Stripe**     | ✅ Live | Track payments, subscriptions, and billing data  |\n| **PostHog**    | ✅ Live | Analyze product analytics and user behavior      |\n| **Close.com**  | ✅ Live | Sync CRM data (leads, opportunities, activities) |\n| **Claap**      | ✅ Live | Sync recordings and workspace data               |\n| **Calendly**   | ✅ Live | Sync events, invitees, and event types           |\n| **GraphQL**    | ✅ Live | Query any GraphQL API with custom endpoints      |\n| **REST**       | ✅ Live | Query any REST API with custom endpoints         |\n| **BigQuery**   | ✅ Live | Sync BigQuery datasets into the warehouse        |\n\n## 🏗️ Architecture\n\n```\n┌─────────────────────────────────────────────────────────┐\n│  Frontend (React + Vite)                                │\n│  ┌──────────┐ ┌──────────────┐ ┌─────────────────────┐ │\n│  │ Console  │ │  Dashboards  │ │   AI Chat (Vercel   │ │\n│  │ (Monaco) │ │  (DuckDB +   │ │    AI SDK)          │ │\n│  │          │ │   Mosaic)    │ │                     │ │\n│  └──────────┘ └──────────────┘ └─────────────────────┘ │\n│           ▲          ▲                   ▲              │\n│           │     Parquet/Arrow            │              │\n│           │     via OPFS cache           │              │\n└───────────┼──────────┼──────────────────┼──────────────┘\n            │          │                  │\n┌───────────┼──────────┼──────────────────┼──────────────┐\n│  API (Hono + Node.js)                                  │\n│  ┌──────────────────────────────────────────────────┐  │\n│  │ Unified Agent (expertise modes: Query /          │  │\n│  │   Dashboard / Sync Flow / React App / Transforms │  │\n│  │   / Explore, switched via enable_mode)           │  │\n│  └──────────────────────────────────────────────────┘  │\n│  ┌──────────────┐ ┌───────────────┐ ┌──────────────┐  │\n│  │  DB Drivers   │ │  Connectors   │ │  Dashboard   │  │\n│  │  (9 drivers)  │ │  (8 sources)  │ │  Engine      │  │\n│  │              │ │               │ │  (DuckDB     │  │\n│  │              │ │               │ │   + Parquet) │  │\n│  └──────────────┘ └───────────────┘ └──────────────┘  │\n│                          ▲                             │\n│                    ┌─────┴──────┐                      │\n│                    │  Inngest   │ (scheduled refresh,   │\n│                    │            │  incremental sync)    │\n│                    └────────────┘                      │\n└────────────────────────────────────────────────────────┘\n            │                │\n     ┌──────┴──────┐  ┌─────┴──────────┐\n     │  MongoDB    │  │  User DBs      │\n     │  (metadata, │  │  (PG, BQ, CH,  │\n     │   warehouse)│  │   MySQL, etc.) │\n     └─────────────┘  └────────────────┘\n```\n\n**Key technology choices:**\n- **DuckDB** (both server-side via `@duckdb/node-api` and browser-side via `@duckdb/duckdb-wasm`): powers dashboard SQL execution, Parquet artifact generation, and in-browser cross-filtering with OPFS caching\n- **Mosaic** (`@uwdata/mosaic-core`): coordinates cross-filtering across dashboard widgets\n- **Apache Arrow / Parquet**: server materializes query results into Parquet, served to browser as Arrow IPC for zero-copy rendering\n- **Inngest**: event-driven job queues for scheduled dashboard refresh and incremental data sync\n- **Hono**: lightweight, fast HTTP framework for the API\n- **Monaco Editor**: VS Code's editor for the SQL console\n- **Vercel AI SDK**: multi-provider LLM abstraction (OpenAI, Anthropic, Google)\n\n## 📊 Dashboard Engine\n\nDashboards are a core feature. The AI agent creates interactive dashboards from natural language:\n\n1. **Agent creates a dashboard spec** with widgets, layouts, and SQL queries\n2. **Server materializes** query results into Parquet artifacts (stored on filesystem, GCS, or S3)\n3. **Browser loads** Parquet data into DuckDB-WASM, cached in OPFS for instant reloads\n4. **Mosaic cross-filtering** lets users click on one chart to filter all others\n5. **Inngest cron** keeps data fresh with scheduled re-materialization and stale-run detection\n\n### Dashboard Artifact Storage\n\nDashboard materialization stores Parquet artifacts on the backend. Three storage backends:\n\n- `filesystem` -- default; stores files on local disk\n- `gcs` -- Google Cloud Storage\n- `s3` -- S3-compatible bucket\n\n```env\nDASHBOARD_ARTIFACT_STORE=filesystem\n\n# Optional shared settings\nDASHBOARD_ARTIFACT_PREFIX=dashboards\nDASHBOARD_ARTIFACT_DIR=/absolute/path/to/artifacts  # filesystem only\n```\n\n#### Google Cloud Storage\n\n```env\nDASHBOARD_ARTIFACT_STORE=gcs\nGCS_DASHBOARD_BUCKET=your-bucket-name\nDASHBOARD_ARTIFACT_PREFIX=dashboard-artifacts/prod\n```\n\nSee the [docs](https://docs.mako.ai) for full GCS/S3 provisioning instructions.\n\n## 🛠️ Quick Start\n\n1. **Clone & Install**\n\n   ```bash\n   git clone https://github.com/mako-ai/mako.git\n   cd mako\n   pnpm install\n   ```\n\n2. **Configure Environment**\n   Copy `.env.example` (if available) or create `.env`:\n\n   ```env\n   # Local development connects to the shared `dev` database, an Atlas DB that is\n   # refreshed nightly from production. Grab the `dev` connection string from the\n   # team vault. (`staging` backs non-migration PR previews; never point local at\n   # `production`.)\n   DATABASE_URL=mongodb+srv://<user>:<password>@<cluster>.mongodb.net/dev\n   ENCRYPTION_KEY=your_32_character_hex_key_for_encryption\n   WEB_API_PORT=8080\n   BASE_URL=http://localhost:8080\n   CLIENT_URL=http://localhost:5173\n   ```\n\n3. **Start Services**\n\n   ```bash\n   # Start the local notebook Python kernel so notebook `code` cells run\n   # locally. Requires the KERNEL_* vars from .env.example in your .env.\n   # (The dev database is hosted MongoDB Atlas, set via DATABASE_URL.)\n   pnpm run docker:up\n\n   # Start the full stack (API + App + Inngest)\n   pnpm run dev\n   ```\n\n4. **Analyze**\n   - Open **http://localhost:5173** to access the app.\n   - Add a Data Source (e.g., Stripe or Close.com).\n   - Use the chat interface to ask questions about your data.\n\n## 🌐 IP Whitelisting\n\nIf your database requires IP whitelisting, add the following static IP to your allowlist:\n\n```\n34.79.190.46\n```\n\nThis IP is used by Mako's cloud service for all outbound database connections.\n\n## 💻 Development Commands\n\n| Command                 | Description                                                   |\n| ----------------------- | ------------------------------------------------------------- |\n| `pnpm run dev`          | Start API, frontend, and Inngest dev server                   |\n| `pnpm run app:dev:scan` | Start the frontend with React Scan and render debug logging   |\n| `pnpm run sync`         | Run the interactive sync tool                                 |\n| `pnpm run migrate`      | Run database migrations                                       |\n| `pnpm run docker:up`    | Start the local notebook Python kernel (run notebook code cells) |\n| `pnpm run test`         | Run test suite                                                |\n| `pnpm run build`        | Build all packages                                            |\n| `pnpm run docs:dev`     | Start documentation site locally                              |\n\n## 🔎 React Performance Profiling\n\nUse React Scan when working on render churn, streaming chat responsiveness, Monaco console performance, or explorer/result table interactions:\n\n```bash\npnpm run app:dev:scan\n```\n\nThis enables the React Scan Vite plugin via `VITE_REACT_SCAN=true` and turns on Mako's render-debug logs via `VITE_RENDER_DEBUG=true`. React Scan highlights components that re-render in the browser, while render-debug logs summarize why hot components such as `Chat`, `ResourceTree`, `Console`, and `ResultsTable` changed.\n\nKeep React Scan off during normal development. The plugin and debug hooks are gated behind env flags so regular `pnpm run app:dev` runs without profiling overlays or extra debug logging.\n\n## 🤝 Community & Support\n\n- **Documentation**: [docs.mako.ai](https://docs.mako.ai)\n- **GitHub**: [mako-ai/mako](https://github.com/mako-ai/mako)\n- **Website**: [mako.ai](https://mako.ai)\n\n---\n\n<p align=\"center\">\n  Built with ❤️ by the Mako Team. Open Source and self-hostable.\n</p>\n",
  "bytes": 12044,
  "sha": "4036140d22d32ca2737311c36c79606532a1e51a5173778ca109a1ed990dbe28",
  "repo_slug": "mako-ai/mako",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_mako_ai_mako_49420c6c/readme"
}