Getting Started
Everything lives in one npm package. Install it once; which subpath you import from picks your framework.
bash
npm install @datastripes/dashboard
Package layout
| Import | Contents | Needs |
|---|---|---|
| @datastripes/dashboard | Core engine: schema, query engine, grid engine, store, widget logic, licensing | nothing |
| @datastripes/dashboard/react | <DatastripesDashboard> component, toolbar, widget wizard, settings | react, react-dom ^19 |
| @datastripes/dashboard/vue | DatastripesDashboard SFC | vue ^3.4 |
| @datastripes/dashboard/angular | DatastripesDashboardComponent | @angular/core, @angular/common ^18 || ^19 |
| @datastripes/dashboard/elements | <datastripes-dashboard> custom element | nothing |
The UI frameworks are optional peer dependencies — installing the package never pulls one in. Every entry shares one copy of the core engine at runtime.
The core-only example
Everything a framework wrapper does — querying, filtering, grid layout, licensing — is just calls into the core. You can use it with no UI at all, e.g. to pre-compute a dashboard's results server-side before hydrating a framework component with them.
ts
import {
DashboardStore,
JsQueryEngine,
parseDashboardConfig
} from '@datastripes/dashboard';
const config = parseDashboardConfig({
version: '1.0.0',
settings: { title: 'Sales', layout: { columns: 12, rowHeight: 60, gutter: 16 } },
globalFilters: [],
calculatedFields: [],
columnLabels: {},
widgets: [
{
id: 'kpi_revenue',
type: 'kpi_card',
title: 'Total Revenue',
grid: { x: 0, y: 0, w: 3, h: 2 },
dataQuery: { metrics: [{ field: 'amount', aggregation: 'sum', alias: 'amount' }] },
renderConfig: { format: 'currency' }
}
]
});
const store = new DashboardStore({
config,
data: myRows, // Array>
engine: new JsQueryEngine()
});
console.log(store.getState().results.kpi_revenue);
// { rows: [{ amount: 48213 }], total: 1 }
Where to go next
- Using React, Vue, Angular, or plain HTML?
- Need the full DashboardConfig shape, or the widget / chart catalog?
- Shipping to real users? Read Licensing first — the default behavior caps datasets at 1,000 rows.