Litemetrics Integration
Litemetrics is an open-source, self-hosted analytics SDK. Integrate tracking into any frontend and query analytics from any backend.
Integration Decision Tree
What needs tracking?
- Website (any framework) → Script tag or NPM tracker
- React app →
@litemetrics/react provider + hooks
- React Native / Expo →
@litemetrics/react-native provider
- Next.js → Script tag in layout OR React provider
Where does data go?
- Use Litemetrics Cloud/self-hosted server → Just add tracker
- Embed server in existing Express app →
@litemetrics/node
- Run standalone server → Docker or
@litemetrics/server
Need a dashboard?
- Embed in React app →
@litemetrics/ui (themeable components)
- Use standalone dashboard → Built into
@litemetrics/server
- Custom queries →
@litemetrics/client
Packages
| Package |
Purpose |
Install |
@litemetrics/tracker |
Browser tracking (pageviews, events, sessions) |
npm i @litemetrics/tracker |
@litemetrics/node |
Server-side collector + query API (Express) |
npm i @litemetrics/node |
@litemetrics/react |
React provider + hooks |
npm i @litemetrics/react |
@litemetrics/react-native |
React Native provider + navigation tracking |
npm i @litemetrics/react-native |
@litemetrics/client |
Read analytics data (typed HTTP client) |
npm i @litemetrics/client |
@litemetrics/ui |
Themeable React dashboard components |
npm i @litemetrics/ui recharts @tanstack/react-query |
@litemetrics/core |
Shared types (auto-installed as dependency) |
— |
Quick Start Examples
Add tracking to any website (script tag)
<script src="https://your-server.com/tracker.js"></script>
<script>
Litemetrics.createTracker({
siteId: 'your-site-id',
endpoint: 'https://your-server.com/api/collect',
});
</script>
Add tracking to a React app
import { LitemetricsProvider } from '@litemetrics/react';
<LitemetricsProvider
siteId="your-site-id"
endpoint="https://your-server.com/api/collect"
autoPageView
>
<App />
</LitemetricsProvider>
Add analytics server to Express
import { createCollector } from '@litemetrics/node';
const collector = await createCollector({
db: { url: 'http://localhost:8123' }, // ClickHouse
});
app.all('/api/collect', (req, res) => collector.handler()(req, res));
app.all('/api/stats', (req, res) => collector.queryHandler()(req, res));
Embed analytics dashboard in React
import { LitemetricsProvider, AnalyticsDashboard } from '@litemetrics/ui';
<LitemetricsProvider baseUrl="https://your-server.com" siteId="xxx" secretKey="sk_...">
<AnalyticsDashboard showWorldMap showPieCharts showExport />
</LitemetricsProvider>
Detailed Integration Guides
Read the appropriate reference file based on the integration target:
- Express / Node.js backend: See references/express-integration.md — collector setup, all API endpoints, CORS, MongoDB vs ClickHouse, config options
- Browser tracker: See references/tracker-integration.md — script tag, NPM, auto-tracking features, Next.js/Vue/Svelte examples, manual API
- React app: See references/react-integration.md — provider, hooks (usePageView, useLitemetrics, useTrackEvent), React Router
- React Native / Expo: See references/react-native-integration.md — provider, navigation tracking, app state tracking
- Dashboard UI components: See references/dashboard-ui-integration.md — AnalyticsDashboard, individual widgets, theming, dark mode, hooks
Environment Variables (Server)
| Variable |
Description |
Default |
DB_ADAPTER |
clickhouse or mongodb |
clickhouse |
CLICKHOUSE_URL |
ClickHouse URL |
http://localhost:8123 |
MONGODB_URL |
MongoDB URL (when adapter=mongodb) |
mongodb://localhost:27017/litemetrics |
ADMIN_SECRET |
Admin auth for site management |
— |
PORT |
Server port |
3002 |
Docker Deployment
# Docker Compose (ClickHouse + Litemetrics)
ADMIN_SECRET=your-secret docker compose up -d
# Standalone Docker
docker run -p 3002:3002 \
-e CLICKHOUSE_URL=http://your-clickhouse:8123 \
-e ADMIN_SECRET=your-secret \
litemetrics
Key Architecture Notes
- Smart client, dumb server: Session management, visitor IDs, batching all happen client-side in the tracker
- Multi-tenant: Single database with
site_id isolation
- ClickHouse default: Columnar storage optimized for analytics queries. MongoDB also supported.
- ~3KB tracker: The browser tracker is ~3KB gzipped with all auto-tracking features
- Auto events are tagged with
event_source=auto and a subtype (e.g. scroll_depth, button_click, link_click)
- Manual
track() events default to event_source=manual and event_subtype=custom. Older data may have event_source as null.
- Available metrics:
pageviews, visitors, sessions, events, conversions, top_pages, top_referrers, top_countries, top_cities, top_events, top_conversions, top_exit_pages, top_transitions, top_scroll_pages, top_button_clicks, top_link_targets, top_devices, top_browsers, top_os, timeseries, retention
Conversions (by Event Name)
Conversions are just custom events whose names are listed in the site's conversionEvents.
Update a site (admin secret required):
curl -X PUT https://your-server.com/api/sites/<siteId> \
-H "Content-Type: application/json" \
-H "X-Litemetrics-Admin-Secret: <admin_secret>" \
-d '{"conversionEvents":["Signup","Purchase"]}'
Query conversion metrics:
const conversions = await client.getStats('conversions', { period: '30d' });
const topConversions = await client.getStats('top_conversions', { period: '30d', limit: 10 });
Segmentation Filters
All getStats and getTimeSeries calls accept filters for geo/device/UTM/referrer/event metadata:
const clicks = await client.getStats('top_button_clicks', {
period: '7d',
filters: {
'device.type': 'mobile',
'event_source': 'auto',
'event_subtype': 'button_click',
},
});
Source: metehankurucu/litemetrics — distributed by TomeVault.
1---2name: litemetrics3description: Integrate Litemetrics analytics into projects. Use when the user wants to add analytics, tracking, pageview collection, event tracking, or an analytics dashboard to their website, web app, React app, React Native app, Next.js app, Vue app, Svelte app, or Node.js/Express server. Also use when the user mentions "litemetrics", "add analytics", "track pageviews", "track events", "analytics dashboard", "embed analytics", "self-hosted analytics", or wants to set up a Litemetrics server with ClickHouse or MongoDB. Use when this capability is needed.4---56# Litemetrics Integration78Litemetrics is an open-source, self-hosted analytics SDK. Integrate tracking into any frontend and query analytics from any backend.910## Integration Decision Tree11121. **What needs tracking?**13 - Website (any framework) → Script tag or NPM tracker14 - React app → `@litemetrics/react` provider + hooks15 - React Native / Expo → `@litemetrics/react-native` provider16 - Next.js → Script tag in layout OR React provider17182. **Where does data go?**19 - Use Litemetrics Cloud/self-hosted server → Just add tracker20 - Embed server in existing Express app → `@litemetrics/node`21 - Run standalone server → Docker or `@litemetrics/server`22233. **Need a dashboard?**24 - Embed in React app → `@litemetrics/ui` (themeable components)25 - Use standalone dashboard → Built into `@litemetrics/server`26 - Custom queries → `@litemetrics/client`2728## Packages2930| Package | Purpose | Install |31|---------|---------|---------|32| `@litemetrics/tracker` | Browser tracking (pageviews, events, sessions) | `npm i @litemetrics/tracker` |33| `@litemetrics/node` | Server-side collector + query API (Express) | `npm i @litemetrics/node` |34| `@litemetrics/react` | React provider + hooks | `npm i @litemetrics/react` |35| `@litemetrics/react-native` | React Native provider + navigation tracking | `npm i @litemetrics/react-native` |36| `@litemetrics/client` | Read analytics data (typed HTTP client) | `npm i @litemetrics/client` |37| `@litemetrics/ui` | Themeable React dashboard components | `npm i @litemetrics/ui recharts @tanstack/react-query` |38| `@litemetrics/core` | Shared types (auto-installed as dependency) | — |3940## Quick Start Examples4142### Add tracking to any website (script tag)4344```html45<script src="https://your-server.com/tracker.js"></script>46<script>47 Litemetrics.createTracker({48 siteId: 'your-site-id',49 endpoint: 'https://your-server.com/api/collect',50 });51</script>52```5354### Add tracking to a React app5556```tsx57import { LitemetricsProvider } from '@litemetrics/react';5859<LitemetricsProvider60 siteId="your-site-id"61 endpoint="https://your-server.com/api/collect"62 autoPageView63>64 <App />65</LitemetricsProvider>66```6768### Add analytics server to Express6970```ts71import { createCollector } from '@litemetrics/node';7273const collector = await createCollector({74 db: { url: 'http://localhost:8123' }, // ClickHouse75});7677app.all('/api/collect', (req, res) => collector.handler()(req, res));78app.all('/api/stats', (req, res) => collector.queryHandler()(req, res));79```8081### Embed analytics dashboard in React8283```tsx84import { LitemetricsProvider, AnalyticsDashboard } from '@litemetrics/ui';8586<LitemetricsProvider baseUrl="https://your-server.com" siteId="xxx" secretKey="sk_...">87 <AnalyticsDashboard showWorldMap showPieCharts showExport />88</LitemetricsProvider>89```9091## Detailed Integration Guides9293Read the appropriate reference file based on the integration target:9495- **Express / Node.js backend**: See [references/express-integration.md](references/express-integration.md) — collector setup, all API endpoints, CORS, MongoDB vs ClickHouse, config options96- **Browser tracker**: See [references/tracker-integration.md](references/tracker-integration.md) — script tag, NPM, auto-tracking features, Next.js/Vue/Svelte examples, manual API97- **React app**: See [references/react-integration.md](references/react-integration.md) — provider, hooks (usePageView, useLitemetrics, useTrackEvent), React Router98- **React Native / Expo**: See [references/react-native-integration.md](references/react-native-integration.md) — provider, navigation tracking, app state tracking99- **Dashboard UI components**: See [references/dashboard-ui-integration.md](references/dashboard-ui-integration.md) — AnalyticsDashboard, individual widgets, theming, dark mode, hooks100101## Environment Variables (Server)102103| Variable | Description | Default |104|----------|-------------|---------|105| `DB_ADAPTER` | `clickhouse` or `mongodb` | `clickhouse` |106| `CLICKHOUSE_URL` | ClickHouse URL | `http://localhost:8123` |107| `MONGODB_URL` | MongoDB URL (when adapter=mongodb) | `mongodb://localhost:27017/litemetrics` |108| `ADMIN_SECRET` | Admin auth for site management | — |109| `PORT` | Server port | `3002` |110111## Docker Deployment112113```bash114# Docker Compose (ClickHouse + Litemetrics)115ADMIN_SECRET=your-secret docker compose up -d116117# Standalone Docker118docker run -p 3002:3002 \119 -e CLICKHOUSE_URL=http://your-clickhouse:8123 \120 -e ADMIN_SECRET=your-secret \121 litemetrics122```123124## Key Architecture Notes125126- **Smart client, dumb server**: Session management, visitor IDs, batching all happen client-side in the tracker127- **Multi-tenant**: Single database with `site_id` isolation128- **ClickHouse default**: Columnar storage optimized for analytics queries. MongoDB also supported.129- **~3KB tracker**: The browser tracker is ~3KB gzipped with all auto-tracking features130- Auto events are tagged with `event_source=auto` and a subtype (e.g. `scroll_depth`, `button_click`, `link_click`)131- Manual `track()` events default to `event_source=manual` and `event_subtype=custom`. Older data may have `event_source` as null.132- Available metrics: `pageviews`, `visitors`, `sessions`, `events`, `conversions`, `top_pages`, `top_referrers`, `top_countries`, `top_cities`, `top_events`, `top_conversions`, `top_exit_pages`, `top_transitions`, `top_scroll_pages`, `top_button_clicks`, `top_link_targets`, `top_devices`, `top_browsers`, `top_os`, `timeseries`, `retention`133134## Conversions (by Event Name)135136Conversions are just custom events whose names are listed in the site's `conversionEvents`.137138Update a site (admin secret required):139140```bash141curl -X PUT https://your-server.com/api/sites/<siteId> \142 -H "Content-Type: application/json" \143 -H "X-Litemetrics-Admin-Secret: <admin_secret>" \144 -d '{"conversionEvents":["Signup","Purchase"]}'145```146147Query conversion metrics:148149```ts150const conversions = await client.getStats('conversions', { period: '30d' });151const topConversions = await client.getStats('top_conversions', { period: '30d', limit: 10 });152```153154## Segmentation Filters155156All `getStats` and `getTimeSeries` calls accept `filters` for geo/device/UTM/referrer/event metadata:157158```ts159const clicks = await client.getStats('top_button_clicks', {160 period: '7d',161 filters: {162 'device.type': 'mobile',163 'event_source': 'auto',164 'event_subtype': 'button_click',165 },166});167```168169---170> Source: [metehankurucu/litemetrics](https://github.com/metehankurucu/litemetrics) — distributed by [TomeVault](https://tomevault.io).171<!-- tomevault:4.0:skill_md:2026-05-22 -->