# bruin-data/dac architecture

> Architecture diagram of the GitHub repository bruin-data/dac, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/bruin-data/dac
- Repository: https://github.com/bruin-data/dac

## Overview

DAC turns YAML or TSX dashboard definitions into validated dashboards, resolves widget queries, and serves interactive dashboards through a Go API and React UI. Users can also validate/query projects, manage connections, export dashboards, and import Metabase content. The README documents semantic metrics and dimensions, TSX-driven layouts, multiple database providers through Bruin, and static output. Several subsystems are represented from the README or source index rather than inspected implementation; edges are limited to relationships visible in excerpts or documented there.

Main entry points: [`cmd`](https://github.com/bruin-data/dac/tree/main/cmd) (DAC Commands), [`pkg/dashboard/loader.go`](https://github.com/bruin-data/dac/blob/main/pkg/dashboard/loader.go) (YAML and TSX Loading), [`frontend/src/components/DashboardView.tsx`](https://github.com/bruin-data/dac/blob/main/frontend/src/components/DashboardView.tsx) (Dashboard View), [`pkg/server/api.go`](https://github.com/bruin-data/dac/blob/main/pkg/server/api.go) (Dashboard API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_cli["CLI and Projects"]
  node_cli["DAC Commands"]
  node_project["Project Config<br/>[config.go]"]
  node_telemetry["Usage Telemetry<br/>[telemetry.go]"]
end

subgraph group_domain["Dashboard Domain"]
  node_loader["YAML and TSX Loading<br/>[loader.go]"]
  node_tsx["TSX Evaluation<br/>[jsloader.go]"]
  node_model["Dashboard Model<br/>[model.go]"]
  node_validator["Dashboard Validation<br/>[validator.go]"]
  node_semantic["Semantic Queries<br/>[semantic_query.go]"]
end

subgraph group_runtime["Query and Serving"]
  node_api["Dashboard API<br/>[api.go]"]
  node_server["HTTP Server<br/>[server.go]"]
  node_jobs["Widget Query Jobs<br/>[semantic.go]"]
  node_backend["Bruin Query Backend<br/>[bruin.go]"]
  node_cache["Query Cache<br/>[cache.go]"]
end

subgraph group_frontend["Dashboard UI"]
  node_app["React Application<br/>[App.tsx]"]
  node_client["API Client<br/>[client.ts]"]
  node_view["Dashboard View<br/>[DashboardView.tsx]"]
  node_queryhook["Widget Data Hook<br/>[useWidgetQuery.ts]"]
  node_streamhook["Dashboard Data Hook"]
  node_widgets["Widget Rendering"]
  node_filterbar["Dashboard Filters<br/>[FilterBar.tsx]"]
  node_themes["Theme Registry"]
  node_admin["Connection Admin<br/>[Admin.tsx]"]
end

subgraph group_extensions["Integrations and Export"]
  node_importer["Metabase Import<br/>[convert.go]"]
  node_export["Static Dashboard Export<br/>[render.go]"]
  node_slides["Slide Export<br/>[export.go]"]
end

node_user(("Dashboard Author"))
node_bruinsvc["Bruin CLI"]
node_browser(("Dashboard User"))

node_user -->|"runs commands"| node_cli
node_cli -->|"reads settings"| node_project
node_cli -->|"loads dashboards"| node_loader
node_cli -->|"executes queries"| node_backend
node_cli -.->|"imports dashboards"| node_importer
node_loader -.->|"evaluates TSX"| node_tsx
node_loader -.->|"creates model"| node_model
node_user -->|"views dashboards"| node_browser
node_browser -->|"opens UI"| node_app
node_app -->|"routes to"| node_view
node_app -->|"provides template"| node_themes
node_view -->|"requests widget data"| node_queryhook
node_view -.->|"streams dashboard data"| node_streamhook
node_view -.->|"renders widgets"| node_widgets
node_view -->|"renders filters"| node_filterbar
node_queryhook -->|"fetches widget data"| node_client
node_streamhook -->|"streams dashboard data"| node_client
node_client -->|"calls HTTP API"| node_api
node_admin -->|"manages connections"| node_client
node_server -->|"registers routes"| node_api
node_api -->|"loads dashboards"| node_loader
node_api -.->|"resolves query jobs"| node_jobs
node_jobs -.->|"executes widget queries"| node_backend
node_backend -->|"runs bruin query"| node_bruinsvc
node_api -.->|"compiles semantic queries"| node_semantic
node_loader -.->|"validates dashboards"| node_validator
node_export -->|"loads dashboards"| node_loader
node_export -->|"resolves widget jobs"| node_jobs
node_export -->|"executes widget queries"| node_backend
node_slides -.->|"exports query results"| node_backend
node_cli -->|"reports usage"| node_telemetry

click node_cli "https://github.com/bruin-data/dac/tree/main/cmd"
click node_project "https://github.com/bruin-data/dac/blob/main/pkg/config/config.go"
click node_importer "https://github.com/bruin-data/dac/blob/main/pkg/importer/metabase/convert.go"
click node_loader "https://github.com/bruin-data/dac/blob/main/pkg/dashboard/loader.go"
click node_tsx "https://github.com/bruin-data/dac/blob/main/pkg/dashboard/jsloader.go"
click node_model "https://github.com/bruin-data/dac/blob/main/pkg/dashboard/model.go"
click node_validator "https://github.com/bruin-data/dac/blob/main/pkg/dashboard/validator.go"
click node_semantic "https://github.com/bruin-data/dac/blob/main/pkg/dashboard/semantic_query.go"
click node_api "https://github.com/bruin-data/dac/blob/main/pkg/server/api.go"
click node_server "https://github.com/bruin-data/dac/blob/main/pkg/server/server.go"
click node_jobs "https://github.com/bruin-data/dac/blob/main/pkg/server/semantic.go"
click node_backend "https://github.com/bruin-data/dac/blob/main/pkg/query/bruin.go"
click node_cache "https://github.com/bruin-data/dac/blob/main/pkg/query/cache.go"
click node_app "https://github.com/bruin-data/dac/blob/main/frontend/src/App.tsx"
click node_client "https://github.com/bruin-data/dac/blob/main/frontend/src/api/client.ts"
click node_view "https://github.com/bruin-data/dac/blob/main/frontend/src/components/DashboardView.tsx"
click node_queryhook "https://github.com/bruin-data/dac/blob/main/frontend/src/hooks/useWidgetQuery.ts"
click node_streamhook "https://github.com/bruin-data/dac/blob/main/frontend/src/hooks/useDashboardData.ts"
click node_widgets "https://github.com/bruin-data/dac/tree/main/frontend/src/components/widgets"
click node_filterbar "https://github.com/bruin-data/dac/blob/main/frontend/src/themes/bruin/FilterBar.tsx"
click node_themes "https://github.com/bruin-data/dac/blob/main/frontend/src/themes/TemplateProvider.tsx"
click node_admin "https://github.com/bruin-data/dac/blob/main/frontend/src/components/Admin.tsx"
click node_export "https://github.com/bruin-data/dac/blob/main/pkg/render/render.go"
click node_slides "https://github.com/bruin-data/dac/blob/main/pkg/slides/export.go"
click node_telemetry "https://github.com/bruin-data/dac/blob/main/pkg/telemetry/telemetry.go"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_cli,node_project,node_telemetry,node_browser toneBlue
class node_loader,node_tsx,node_model,node_validator,node_semantic toneAmber
class node_api,node_server,node_jobs,node_backend,node_cache toneMint
class node_app,node_client,node_view,node_queryhook,node_streamhook,node_widgets,node_filterbar,node_themes,node_admin toneRose
class node_importer,node_export,node_slides,node_user,node_bruinsvc toneIndigo
```

## Components

### CLI and Projects

- [DAC Commands](https://github.com/bruin-data/dac/tree/main/cmd): `cmd`
- [Project Config](https://github.com/bruin-data/dac/blob/main/pkg/config/config.go): `pkg/config/config.go`
- [Usage Telemetry](https://github.com/bruin-data/dac/blob/main/pkg/telemetry/telemetry.go): `pkg/telemetry/telemetry.go`

### Dashboard Domain

- [YAML and TSX Loading](https://github.com/bruin-data/dac/blob/main/pkg/dashboard/loader.go): `pkg/dashboard/loader.go`
- [TSX Evaluation](https://github.com/bruin-data/dac/blob/main/pkg/dashboard/jsloader.go): `pkg/dashboard/jsloader.go`
- [Dashboard Model](https://github.com/bruin-data/dac/blob/main/pkg/dashboard/model.go): `pkg/dashboard/model.go`
- [Dashboard Validation](https://github.com/bruin-data/dac/blob/main/pkg/dashboard/validator.go): `pkg/dashboard/validator.go`
- [Semantic Queries](https://github.com/bruin-data/dac/blob/main/pkg/dashboard/semantic_query.go): `pkg/dashboard/semantic_query.go`

### Query and Serving

- [Dashboard API](https://github.com/bruin-data/dac/blob/main/pkg/server/api.go): `pkg/server/api.go`
- [HTTP Server](https://github.com/bruin-data/dac/blob/main/pkg/server/server.go): `pkg/server/server.go`
- [Widget Query Jobs](https://github.com/bruin-data/dac/blob/main/pkg/server/semantic.go): `pkg/server/semantic.go`
- [Bruin Query Backend](https://github.com/bruin-data/dac/blob/main/pkg/query/bruin.go): `pkg/query/bruin.go`
- [Query Cache](https://github.com/bruin-data/dac/blob/main/pkg/query/cache.go): `pkg/query/cache.go`

### Dashboard UI

- [React Application](https://github.com/bruin-data/dac/blob/main/frontend/src/App.tsx): `frontend/src/App.tsx`
- [API Client](https://github.com/bruin-data/dac/blob/main/frontend/src/api/client.ts): `frontend/src/api/client.ts`
- [Dashboard View](https://github.com/bruin-data/dac/blob/main/frontend/src/components/DashboardView.tsx): `frontend/src/components/DashboardView.tsx`
- [Widget Data Hook](https://github.com/bruin-data/dac/blob/main/frontend/src/hooks/useWidgetQuery.ts): `frontend/src/hooks/useWidgetQuery.ts`
- [Dashboard Data Hook](https://github.com/bruin-data/dac/blob/main/frontend/src/hooks/useDashboardData.ts): `frontend/src/hooks/useDashboardData.ts`
- [Widget Rendering](https://github.com/bruin-data/dac/tree/main/frontend/src/components/widgets): `frontend/src/components/widgets`
- [Dashboard Filters](https://github.com/bruin-data/dac/blob/main/frontend/src/themes/bruin/FilterBar.tsx): `frontend/src/themes/bruin/FilterBar.tsx`
- [Theme Registry](https://github.com/bruin-data/dac/blob/main/frontend/src/themes/TemplateProvider.tsx): `frontend/src/themes/TemplateProvider.tsx`
- [Connection Admin](https://github.com/bruin-data/dac/blob/main/frontend/src/components/Admin.tsx): `frontend/src/components/Admin.tsx`

### Integrations and Export

- [Metabase Import](https://github.com/bruin-data/dac/blob/main/pkg/importer/metabase/convert.go): `pkg/importer/metabase/convert.go`
- [Static Dashboard Export](https://github.com/bruin-data/dac/blob/main/pkg/render/render.go): `pkg/render/render.go`
- [Slide Export](https://github.com/bruin-data/dac/blob/main/pkg/slides/export.go): `pkg/slides/export.go`

### Other components

- **Dashboard Author**
- **Bruin CLI**
- **Dashboard User**

## Connections

- Dashboard Author → DAC Commands: runs commands (evidence: `README.md`)
- DAC Commands → Project Config: reads settings (evidence: `cmd/query.go`)
- DAC Commands → YAML and TSX Loading: loads dashboards (evidence: `cmd/query.go`)
- DAC Commands → Bruin Query Backend: executes queries (evidence: `cmd/query.go`)
- DAC Commands → Metabase Import: imports dashboards
- YAML and TSX Loading → TSX Evaluation: evaluates TSX
- YAML and TSX Loading → Dashboard Model: creates model
- Dashboard Author → Dashboard User: views dashboards (evidence: `README.md`)
- Dashboard User → React Application: opens UI (evidence: `frontend/src/App.tsx`)
- React Application → Dashboard View: routes to (evidence: `frontend/src/App.tsx`)
- React Application → Theme Registry: provides template (evidence: `frontend/src/App.tsx`)
- Dashboard View → Widget Data Hook: requests widget data (evidence: `frontend/src/components/DashboardView.tsx`)
- Dashboard View → Dashboard Data Hook: streams dashboard data
- Dashboard View → Widget Rendering: renders widgets
- Dashboard View → Dashboard Filters: renders filters (evidence: `frontend/src/components/DashboardView.tsx`)
- Widget Data Hook → API Client: fetches widget data (evidence: `frontend/src/hooks/useWidgetQuery.ts`)
- Dashboard Data Hook → API Client: streams dashboard data (evidence: `frontend/src/hooks/useDashboardData.ts`)
- API Client → Dashboard API: calls HTTP API (evidence: `frontend/src/api/client.ts`)
- Connection Admin → API Client: manages connections (evidence: `frontend/src/components/Admin.tsx`)
- HTTP Server → Dashboard API: registers routes (evidence: `pkg/server/server.go`)
- Dashboard API → YAML and TSX Loading: loads dashboards (evidence: `pkg/server/api.go`)
- Dashboard API → Widget Query Jobs: resolves query jobs
- Widget Query Jobs → Bruin Query Backend: executes widget queries
- Bruin Query Backend → Bruin CLI: runs bruin query (evidence: `README.md`)
- Dashboard API → Semantic Queries: compiles semantic queries
- YAML and TSX Loading → Dashboard Validation: validates dashboards
- Static Dashboard Export → YAML and TSX Loading: loads dashboards (evidence: `pkg/render/render.go`)
- Static Dashboard Export → Widget Query Jobs: resolves widget jobs (evidence: `pkg/render/render.go`)
- Static Dashboard Export → Bruin Query Backend: executes widget queries (evidence: `pkg/render/render.go`)
- Slide Export → Bruin Query Backend: exports query results
- DAC Commands → Usage Telemetry: reports usage
