Apache Superset is a Data Visualization and Data Exploration Platform
# Superset Monorepo
Superset is an agent-first development platform, with an Electron desktop IDE, Next.js web apps, and an Expo mobile app as the main customer-facing surfaces. It's a Turborepo monorepo, deployed apps are in apps/ and supporting packages are in packages/, and we use tRPC for the api.
You're working inside a Superset workspace, an isolated git-worktree copy of this repo. "Workspace" in a user message means that, not an editor workspace.
## Project Structure
All projects in this repo should be structured like this:
```
app/
βββ page.tsx
βββ dashboard/
β βββ page.tsx
β βββ components/
β β βββ MetricsChart/
β β βββ MetricsChart.tsx
β β βββ MetricsChart.test.tsx # Tests co-located
β β βββ index.ts
β β βββ constants.ts
β βββ hooks/ # Hooks used only in dashboard
β β βββ useMetrics/
β β βββ useMetrics.ts
β β βββ useMetrics.test.ts
β β βββ index.ts
β βββ utils/ # Utils used only in dashboard
β β βββ formatData/
β β βββ formatData.ts
β β βββ formatData.test.ts
β β βββ index.ts
β βββ stores/ # Stores used only in dashboard
β β βββ dashboardStore/
β β βββ dashboardStore.ts
β β βββ index.ts
β βββ providers/ # Providers for dashboard context
β βββ DashboardProvider/
β βββ DashboardProvider.tsx
β βββ index.ts
βββ components/
βββ Sidebar/
β βββ Sidebar.tsx
β βββ Sidebar.test.tsx # Tests co-located
β βββ index.ts
β βββ components/ # Used 2+ times IN Sidebar
β β βββ SidebarButton/ # Shared by SidebarNav + SidebarFooter
β β βββ SidebarButton.tsx
β β βββ SidebarButton.test.tsx
β β βββ index.ts
β βββ SidebarNav/
β β βββ SidebarNav.tsx
β β βββ index.ts
β βββ SidebarFooter/
β βββ SidebarFooter.tsx
β βββ index.ts
βββ HeroSection/
βββ HeroSection.tsx
βββ HeroSection.test.tsx # Tests co-located
βββ index.ts
βββ components/ # Used ONLY by HeroSection
βββ HeroCanvas/
βββ HeroCanvas.tsx
βββ HeroCanvas.test.tsx
βββ HeroCanvas.stories.tsx
βββ index.ts
βββ config.ts
components/ # Used in 2+ pages (last resort)
βββ Header/
```
1. **One folder per component**: `ComponentName/ComponentName.tsx` + `index.ts` for barrel export
2. **Co-locate by usage**: If used once, nest under parent's `components/`. If used 2+ times, promote to **highest shared parent's** `components/` (or `components/` as last resort)
3. **One component per file**: No multi-component files
4. **Co-locate dependencies**: Utils, hooks, constants, config, tests, stories live next to the file using them
### Exception: shadcn/ui Components
The `src/components/ui/` and `src/components/ai-elements` directories contain shadcn/ui components. These use **kebab-case single files** (e.g., `button.tsx`, `base-node.tsx`) instead of the folder structure above. This is intentionalβshadcn CLI expects this format for updates via `bunx shadcn@latest add`.
## Database
Drizzle ORM, schema in `packages/db/src/`. Follow `.agents/skills/db-migrations/SKILL.md` to generate
migrations. Never hand-edit `packages/db/drizzle/` (SQL, `meta/_journal.json`, snapshots) without
explicit user confirmation, and never apply migrations against a shared or production database.
## Releases
Desktop, host-service, and cli share one version; cut releases on a dedicated branch. Runbook:
`scripts/release/README.md`. A *canary* is a separate thing: `bash scripts/release-canary.sh
[commit]` builds the rolling internal `desktop-canary` prerelease, not a versioned release.
## Orchestrating agents and workspaces
When work wants a fresh isolated environment, a parallel agent, or a long-running job, reach for the
`superset` CLI instead of hand-rolling git worktrees or doing it all serially in this one. It's
already on `PATH` in Superset terminals, and we dogfood it.
Replace the capitalized placeholders before running these:
```bash
superset ws create --project PROJECT_ID --branch BRANCH --agent claude --prompt "..."
superset agents create --workspace WORKSPACE_ID --agent claude --prompt "..."
superset ws list
superset terminals read --workspace WORKSPACE_ID --terminal TERMINAL_ID
superset ws delete WORKSPACE_ID
```
In order: an isolated workspace with an agent already working in it, another agent in an existing
workspace, what's running, what an agent is doing right now, and cleanup when you're done.
`superset <command> --help` covers the rest (tasks, automations, hosts, settings). Pass `--json` for
parsable output; it's on by default under agent environments.
## Further reading
- `.agents/skills/`: CDP UI verification, DB migrations, ticket format, and more. Read the matching
`SKILL.md` when a task fits its description.
- `docs/agent-tooling.md`: where commands, skills, and per-agent-CLI config live.
- `apps/desktop/AGENTS.md`: desktop specifics (notices, persisted renderer state).
- `apps/mobile/AGENTS.md`: mobile structure and iOS-only scope.