QueryPanel vs Luzmo
Self-service embedded analytics with built-in AI and product-facing customization.
Luzmo positions itself as an embedded analytics platform purpose-built for product teams. The current product story leans on self-service analytics, built-in AI, native-feeling components, multi-tenancy, and a fast path to launch for teams that want a managed analytics surface rather than owning every piece of the workflow in code.
Comparison at a glance
This table summarizes typical positioning. Every vendor changes over time—validate details against current documentation and your security review.
| Dimension | Luzmo | QueryPanel |
|---|---|---|
| In-app experience for end users | Luzmo emphasizes a native-feeling embedded product experience with self-service analytics, AI, branded dashboards, and multi-tenant access. | First-class `@querypanel/react-sdk` components—`QuerypanelEmbedded` for a full dashboard, or `QueryPanelProvider` with `QueryInput` / `QueryResult` for a bespoke flow. They render in your React tree like any other product screen (layout, router, modals, tokens)—not a separate iframe "mini app" on another origin. Mint short-lived JWTs on your server; never ship your workspace private key to the browser. |
| Primary product shape | Managed embedded analytics suite with builder workflows, AI features, and configurable customer-facing reporting. | Headful React workspace plus headless Node `ask()` calls for teams that want customer questions, SQL, and charts in one product loop. |
| Trainable knowledge & steering | Definitions, dashboard behavior, and AI configuration live primarily inside the vendor platform and its query engine. | Gold SQL queries (curated examples the model prioritizes), database annotations (business context on tables/columns, re-embedded with schema), glossary (domain terms and definitions), and tenant-level definitions (isolation field, enforcement, and per-tenant sync context so every ask() is grounded in the right customer slice—not a one-size global prompt). |
| Natural language workflow | Luzmo promotes built-in AI and natural-language answers grounded in its own query engine and embedded product workflows. | Natural language to SQL and chart generation are first-class API and embedded SDK workflows you can validate in your own backend path. |
| Developer ownership | Lower front-end assembly work when the vendor-managed analytics surface already matches the product direction you want. | More code-adjacent control: React components in your app, Node SDK in your API routes, and SQL execution in your environment. |
| Multi-tenant SaaS fit | Luzmo markets multi-tenancy, row-level security, and branded embedded analytics directly to product teams. | Tenant id and isolation metadata travel with the embedded JWT and generation request so customer questions stay scoped from the start. |
| Best first win | Launch branded dashboards, AI chat, and self-service analytics with a vendor-managed implementation path. | Ship a tenant-scoped AI analytics route where customers ask questions and receive SQL-backed charts inside your React product shell. |
Four layers your team—and your tenants—can train for better answers
Natural language is only as good as the context the model sees. QueryPanel's knowledge system lets you steer retrieval and SQL with curated examples, business meaning on the schema, shared glossary terms, and tenant-aware definitions—so customer-facing analytics matches how your product actually defines revenue, usage, and risk.
Gold queries
Save vetted SQL for recurring questions. Gold examples are retrieved with schema context and treated as the strongest pattern signal when they match the end user's intent—so joins, filters, and metrics follow what your team already proved in production.
Database annotations
Attach free-text business meaning to tables and columns. Annotations are merged into embedded schema chunks (“Business Context”) so search and generation see how revenue, activation, or ARR are really defined in your warehouse—not only raw column names.
Glossary
Define terms customers actually say (“active seat”, “net MRR”, “expansion”). Glossary entries are embedded alongside schema so the model resolves ambiguous language the way your finance and product teams mean it.
Tenant-level definitions
Per-tenant isolation settings and tenant-scoped schema sync mean each customer’s ask() carries the right tenant id and rules—so retrieval and generated SQL respect dynamic per-tenant shape, not a single global tenant-agnostic prompt.
Manage gold SQL and glossary from the dashboard knowledge base; annotations attach business context to schema objects; tenant isolation and sync keep per-customer context aligned. See documentation for SDK routes and ingestion APIs.
When Luzmo is the better fit
Honest tradeoffs help your team pick faster—and match how buyers actually decide.
- You want a packaged embedded analytics suite with builder workflows, branded dashboards, and a vendor-managed path to self-service analytics.
- You want AI and dashboard-building features bundled into the platform instead of assembling the workflow across multiple tools.
- Your team prefers product configuration and platform features over owning the full SQL-generation and validation loop in application code.
When QueryPanel is the better fit
Especially strong for B2B SaaS shipping customer-facing analytics on Postgres and similar databases.
- You want a trainable knowledge system—gold queries, DB annotations, glossary, and tenant-aware definitions—so NL→SQL and charts reflect your business, not generic schema-only guesses.
- You want the customer UI to live directly in your React app via `@querypanel/react-sdk`, while your backend signs JWTs and your infrastructure executes SQL.
- You want natural-language questions to flow into tenant-aware SQL generation and charts inside your product routes, not only inside a managed analytics suite.
- You prefer a smaller developer-owned surface: React SDK in the frontend, Node SDK in API routes, existing auth model, and query execution that stays with your drivers.
- You want a headful React workspace first, then a headless zero-trust path when you need fully custom product flows.
Keep comparing the implementation details
Vendor fit depends on more than a feature matrix. These guides cover the security, embedding, and buying choices that usually decide a SaaS analytics rollout.
Ship the customer UI with React—not an iframe
Most teams lead with @querypanel/react-sdk: drop QuerypanelEmbedded on a normal product route, or compose QueryPanelProvider with QueryInput / QueryResult. It behaves like any other React subtree—your app shell, router, modals, and design tokens—not a separate cross-origin iframe "mini app" with its own layout chrome.
The browser talks to the QueryPanel API with a JWT you mint on your server (RS256). Never ship your workspace private key to the client.
import { QuerypanelEmbedded } from "@querypanel/react-sdk";
// Render like any other page — not an iframe. Mint tenantJwt (RS256) on your server
// with @querypanel/node-sdk; pass only the JWT to the client.
export function CustomerAnalytics({ tenantJwt }: { tenantJwt: string }) {
return (
<QuerypanelEmbedded
dashboardId="your-dashboard-id"
apiBaseUrl="https://api.querypanel.io"
jwt={tenantJwt}
allowCustomization
/>
);
}Headless Node SDK (optional, for your API)
Use @querypanel/node-sdk on your backend to attach database clients, sync schema, sign JWTs for the React embed, and call ask() from API routes when you want a fully custom pipeline. SQL still runs with your drivers. Full quickstart in documentation.
import { QueryPanelSdkAPI } from "@querypanel/node-sdk";
const qp = new QueryPanelSdkAPI(
process.env.QUERYPANEL_URL!,
process.env.PRIVATE_KEY!,
process.env.QUERYPANEL_WORKSPACE_ID!,
);
// After attachPostgres / syncSchema — tenant comes from your auth layer
const result = await qp.ask("Revenue by country last quarter?", {
tenantId: org.id,
database: "analytics",
});
// result.sql, result.params, result.rows, result.chart — you execute SQL with your driverStill evaluating Luzmo and QueryPanel?
Start on the free tier, embed one dashboard, and compare implementation time against your current shortlist.