Embedded Analytics
Putting dashboards, charts, and metrics inside your own product UI.
"Embedded analytics" means showing analytics to your customers, inside your app — not "we build internal dashboards." That changes the calculus on licensing (most BI tools charge for embedding), multi-tenancy, and theming. See also BI & Dashboards and Charts.
Headless / API-first (you build the UI)
- ★ Cube (cube.dev) — semantic layer + REST/GraphQL/SQL API; you write the chart UI (Recharts, Tremor, etc.). Apache 2.0 core; paid Cube Cloud. The default OSS pick for embedded analytics in 2026.
- dbt Semantic Layer / MetricFlow — define metrics once in dbt; query via JDBC / GraphQL. Free; paid for dbt Cloud's hosted Semantic Layer.
- GoodData.CN — semantic layer + visualization SDK; open core.
- Steampipe / Spice.ai OSS — SQL APIs over many sources; usable as a query backend for embedded charts.
Embed an existing BI dashboard
- Metabase Embedding — signed JWT iframe embeds; "static" embedding free in OSS; "interactive" embedding requires paid Pro / Enterprise.
- Apache Superset — supports embedded dashboards via the Embedded SDK; permissive license but ops-heavy.
- Lightdash Embedded — paid feature; iframe + JWT.
- Evidence — static-rendered Markdown dashboards; trivially embeddable as iframes since they're just hosted HTML.
- Tableau Embedded, Looker Embedded, Sisense, ThoughtSpot Embedded — paid SaaS; large enterprise.
- Explo, Luzmo (formerly Cumul.io) — purpose-built embedded analytics SaaS; paid; nicer multi-tenancy than retrofitting BI tools.
Component / SDK approach
- ★ Tremor + your own data layer — Tailwind-native dashboard components; pair with Cube or your API. See Charts.
- Plotly Dash Enterprise / Dash Embedded — paid; embeds Dash apps.
- Vizro — Python; render-as-iframe.
- Streamlit +
streamlit.components.v1— embed Streamlit apps in your product (be aware of session model).
Multi-tenancy patterns
- Row-level security in your warehouse — Postgres RLS, Snowflake row policies, BigQuery authorized views.
- Per-tenant filter injection — Cube and dbt Semantic Layer expose query-level filters; supply
tenant_idfrom the user JWT. - Pre-aggregations / cubes — Cube's pre-aggregations cache results per tenant; dramatically faster than re-running on the warehouse.
- JWT signing for iframe embeds — Metabase / Superset / Lightdash all support short-lived signed tokens carrying tenant context.
When to build vs. buy
- 3 dashboards, 1 chart each: build with Recharts + your API. Don't pull in BI infra.
- Many dashboards, drilldowns, you keep adding: Cube + Tremor / Recharts.
- Customers want to build their own dashboards: Metabase / Superset embedded, or paid Explo / Luzmo.
- Customers want to write SQL: unusual; consider an internal Metabase per tenant, or query API + the code-playgrounds editor.
Pick this if…
- Default embedded analytics, OSS: Cube + Recharts / Tremor.
- You already have BI dashboards and want to share them: Metabase or Superset embedded.
- Code-first reports embedded as iframes: Evidence.
- You'll pay for a polished multi-tenant experience: Explo or Luzmo.
- Metrics consistent across embed and internal BI: Cube or dbt Semantic Layer as the source of truth.