Installation
Install trakoo and the SDK packages required by each provider.
Install the core package first, then add only the provider SDKs your app uses.
Core package
pnpm install trakoonpm install trakooyarn add trakoobun add trakootrakoo’s public API is split by environment:
import { createClientAnalytics } from 'trakoo/client';
import { createServerAnalytics } from 'trakoo/server';
import { PostHogClientProvider } from 'trakoo/providers/client';
import { PostHogServerProvider } from 'trakoo/providers/server';
Use trakoo/providers/client in browser bundles and trakoo/providers/server in server-only code.
Provider SDKs
| Provider | Client support | Server support | Extra install |
|---|---|---|---|
| PostHog | Yes | Yes | posthog-js posthog-node |
| OpenPanel | Yes | Yes | @openpanel/web @openpanel/sdk |
| Bento | Yes, CDN script | Yes | @bentonow/bento-node-sdk for server |
| Pirsch | Yes, CDN script | Yes | No extra package |
| EmitKit | No | Yes | @emitkit/js |
| Visitors | Yes, CDN script | No | No extra package |
| Proxy | Yes | Server ingest helpers | No extra package |
pnpm install posthog-js posthog-nodepnpm install @openpanel/web @openpanel/sdkpnpm install @bentonow/bento-node-sdkThe browser provider loads Bento from its CDN. Install the SDK only when using BentoServerProvider.
# No extra package requiredtrakoo’s Pirsch providers call Pirsch directly or load the browser script at runtime.
pnpm install @emitkit/jsEmitKit is server-side only. Use the Proxy Provider if you need browser events to reach EmitKit.
# No extra package requiredVisitorsClientProvider loads https://cdn.visitors.now/v.js at runtime.
Environment variables
Keep browser tokens public and server keys private.
VITE_POSTHOG_KEY=your-posthog-project-key
VITE_POSTHOG_HOST=https://app.posthog.com
VITE_OPENPANEL_CLIENT_ID=your-openpanel-client-id
VITE_BENTO_SITE_UUID=your-bento-site-uuid
VITE_VISITORS_TOKEN=your-visitors-tokenNEXT_PUBLIC_POSTHOG_KEY=your-posthog-project-key
NEXT_PUBLIC_POSTHOG_HOST=https://app.posthog.com
NEXT_PUBLIC_OPENPANEL_CLIENT_ID=your-openpanel-client-id
NEXT_PUBLIC_BENTO_SITE_UUID=your-bento-site-uuid
NEXT_PUBLIC_VISITORS_TOKEN=your-visitors-token
OPENPANEL_CLIENT_ID=your-openpanel-client-id
OPENPANEL_CLIENT_SECRET=your-openpanel-client-secret
POSTHOG_API_KEY=your-posthog-server-key
BENTO_SITE_UUID=your-bento-site-uuid
BENTO_PUBLISHABLE_KEY=your-bento-publishable-key
BENTO_SECRET_KEY=your-bento-secret-key
EMITKIT_API_KEY=emitkit_xxx
PIRSCH_ACCESS_KEY=pa_xxxPUBLIC_POSTHOG_KEY=your-posthog-project-key
PUBLIC_POSTHOG_HOST=https://app.posthog.com
PUBLIC_OPENPANEL_CLIENT_ID=your-openpanel-client-id
PUBLIC_BENTO_SITE_UUID=your-bento-site-uuid
PUBLIC_VISITORS_TOKEN=your-visitors-token
OPENPANEL_CLIENT_ID=your-openpanel-client-id
OPENPANEL_CLIENT_SECRET=your-openpanel-client-secret
POSTHOG_API_KEY=your-posthog-server-key
BENTO_SITE_UUID=your-bento-site-uuid
BENTO_PUBLISHABLE_KEY=your-bento-publishable-key
BENTO_SECRET_KEY=your-bento-secret-key
EMITKIT_API_KEY=emitkit_xxx
PIRSCH_ACCESS_KEY=pa_xxxVerify imports
Create a small file and let TypeScript confirm the package resolves:
import { createClientAnalytics } from 'trakoo/client';
import { PostHogClientProvider } from 'trakoo/providers/client';
const analytics = createClientAnalytics({
providers: [
new PostHogClientProvider({
token: 'test'
})
]
});
analytics.track('test_event', {});
If your project compiles, continue to the Quick Start.
