{"id":49688115,"url":"https://github.com/bruin-data/dac","last_synced_at":"2026-05-24T01:01:09.490Z","repository":{"id":354665077,"uuid":"1183363889","full_name":"bruin-data/dac","owner":"bruin-data","description":"DaC is a dashboard-as-code tool. Build interactive dashboards using YAML and JSX. Built-in semantic layer. Get your agents to build standardized, reviewable dashboards.","archived":false,"fork":false,"pushed_at":"2026-05-21T18:28:00.000Z","size":11151,"stargazers_count":666,"open_issues_count":8,"forks_count":29,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-05-21T23:45:47.415Z","etag":null,"topics":["ai-agents","business-intelligence","dashboard","semantic-layer"],"latest_commit_sha":null,"homepage":"https://getbruin.com/docs/dac/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bruin-data.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-03-16T14:33:13.000Z","updated_at":"2026-05-21T20:41:12.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/bruin-data/dac","commit_stats":null,"previous_names":["bruin-data/dac"],"tags_count":21,"template":false,"template_full_name":null,"purl":"pkg:github/bruin-data/dac","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bruin-data%2Fdac","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bruin-data%2Fdac/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bruin-data%2Fdac/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bruin-data%2Fdac/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bruin-data","download_url":"https://codeload.github.com/bruin-data/dac/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bruin-data%2Fdac/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33417489,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-23T22:14:44.296Z","status":"ssl_error","status_checked_at":"2026-05-23T22:14:43.778Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-agents","business-intelligence","dashboard","semantic-layer"],"created_at":"2026-05-07T11:00:37.361Z","updated_at":"2026-05-24T01:01:09.478Z","avatar_url":"https://github.com/bruin-data.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"# DAC\n\nDAC is a Dashboard-as-Code tool for defining, validating, and serving dashboards from YAML and TSX.\n- Dynamic charts, tabs, loops and conditionals with TSX.\n- Built-in AI agent via Codex: chat with your dashboard live and get it updated.\n- Supports all the major databases: Postgres, MySQL, Snowflake, BigQuery, Redshift, Databricks, and more via [Bruin](https://github.com/bruin-data/bruin)\n- Built-in semantic layer: define metrics and dimensions once in `semantic/`, reference them from any widget. DAC generates the SQL.\n\nIt is built for AI agents to build dashboards in a reliable and reviewable way.\n\n![DAC dashboard demo](resources/dac_optimized.gif)\n\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eTSX\u003c/th\u003e\n\u003cth\u003eYAML\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\n\u003cpre lang=\"tsx\"\u003e\u003ccode\u003eexport default (\n  \u0026lt;Dashboard name=\"Simple Dashboard\" connection=\"my_db\"\u0026gt;\n    \u0026lt;Row\u0026gt;\n      \u0026lt;Metric\n        name=\"Total Revenue\"\n        col={4}\n        sql=\"SELECT SUM(amount) AS value FROM sales\"\n        column=\"value\"\n        prefix=\"$\"\n        format=\"number\"\n      /\u0026gt;\n    \u0026lt;/Row\u0026gt;\n  \u0026lt;/Dashboard\u0026gt;\n)\u003c/code\u003e\u003c/pre\u003e\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n\u003cpre lang=\"yaml\"\u003e\u003ccode\u003ename: Sales Overview\nconnection: warehouse\n\nrows:\n  - widgets:\n      - name: Revenue\n        type: metric\n        sql: SELECT SUM(amount) AS value FROM sales\n        column: value\n        prefix: \"$\"\n        col: 4\u003c/code\u003e\u003c/pre\u003e\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\n## Install\n\nInstall the latest stable DAC release:\n\n```bash\ncurl -LsSf https://getbruin.com/install/dac | sh\n```\n\nInstall the latest edge build from `main`:\n\n```bash\ncurl -LsSf https://getbruin.com/install/dac | sh -s -- --channel edge\n```\n\nDAC uses your existing Bruin connections and currently shells out to `bruin query` for query execution. The install script installs the Bruin CLI first when `bruin` is not already available on your `PATH`.\n\n## Quickstart\n\nCreate a new starter project:\n\n```bash\ndac init my-dashboards\ncd my-dashboards\ndac validate --dir .\ndac validate --dir . --with-database\ndac serve --dir . --open\n```\n\nThe starter includes a SQL-backed YAML dashboard, a semantic YAML dashboard, and a semantic model under `semantic/`.\n\n`dac init` also installs DAC's bundled dashboard authoring skill for Claude and Codex:\n\n```bash\nls .claude/skills/create-dashboard/SKILL.md\nls .codex/skills/create-dashboard\n```\n\nFor existing projects, run `dac skills install --dir .`.\n\nIf you cloned the repository and have `dac` installed, you can also run one of the bundled example projects:\n\n```bash\ndac serve --dir examples/basic-yaml\n```\n\n## Examples\n\nThe repository includes four self-contained example projects under [`examples/`](examples):\n\n| Example | What it shows |\n| --- | --- |\n| [`examples/basic-yaml`](examples/basic-yaml) | A standard YAML dashboard with filters, SQL queries, and query files. |\n| [`examples/basic-tsx`](examples/basic-tsx) | A TSX dashboard that uses load-time queries to generate layout from the database. |\n| [`examples/semantic-yaml`](examples/semantic-yaml) | A YAML dashboard that reads semantic models from `semantic/` and compiles widgets in the backend. |\n| [`examples/semantic-tsx`](examples/semantic-tsx) | A TSX dashboard using external semantic models and backend semantic query compilation. |\n\n## Project Layout\n\n```text\n.\n├── cmd/         CLI entrypoints\n├── pkg/         Dashboard loading, semantic engine, server, query backends\n├── frontend/    React frontend embedded into the DAC binary\n├── docs/        VitePress documentation source\n├── examples/    Runnable example projects for YAML, TSX, and semantic dashboards\n├── resources/   README and documentation assets\n└── testdata/    Internal fixtures used by tests\n```\n\n## Development\n\n```bash\nmake deps\nmake test\nmake build\nmake dev\n```\n\nThe main development commands are defined in the [`Makefile`](Makefile). Use `make` targets rather than ad-hoc `go build` or `npm run build` commands so frontend embedding and build flags stay consistent.\n\n## Telemetry\n\nDAC sends anonymous usage events to help us understand which commands are used and where they fail. Each event includes the command name, run duration, OS/architecture, DAC version, and an anonymous install ID stored at `~/.dac/telemetry.json`.\n\nWe do not collect:\n\n- SQL queries, query results, or row counts\n- Dashboard or widget contents, names, or file paths\n- Connection names, hosts, credentials, project IDs, or dataset names\n- Any environment variables or shell history\n\nTo disable telemetry, set either of these environment variables:\n\n```bash\nexport TELEMETRY_OPTOUT=1\n# or the industry-standard:\nexport DO_NOT_TRACK=1\n```\n\nBuilds without a telemetry write key (the default for `make build`) are silent and send nothing.\n\n## Documentation\n\n- Docs source: [`docs/`](docs)\n- Example projects: [`examples/`](examples)\n- Contribution guide: [`CONTRIBUTING.md`](CONTRIBUTING.md)\n- Security policy: [`SECURITY.md`](SECURITY.md)\n\n## License\n\nAGPL-3.0-only. See [`LICENSE`](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbruin-data%2Fdac","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbruin-data%2Fdac","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbruin-data%2Fdac/lists"}