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. Trakoo does not auto-install provider SDKs.
Core package
pnpm install trakoonpm install trakooyarn add trakoobun add trakootrakoo’s public API is split by environment:
import { defineEvents, noProperties, typed } from 'trakoo';
import { createClientAnalytics } from 'trakoo/client';
import { createServerAnalytics } from 'trakoo/server';
import { PostHogClientProvider } from 'trakoo/providers/client';
import { PostHogServerProvider } from 'trakoo/providers/server';
The root trakoo entry point contains environment-neutral event helpers and shared types. Factories live on trakoo/client and trakoo/server. Use trakoo/providers/client in browser bundles and trakoo/providers/server in server-only code; there is no combined provider entry point.
Provider SDKs
The aggregate trakoo/providers/client and trakoo/providers/server entry points are safe to import without every provider SDK installed. Provider construction is also safe. An SDK is loaded only when its provider initializes; initialization without that optional peer throws a clear package-specific error.
| 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 { defineEvents, noProperties } from 'trakoo';
import { createClientAnalytics } from 'trakoo/client';
import { PostHogClientProvider } from 'trakoo/providers/client';
const events = defineEvents({
testEvent: {
name: 'test_event',
category: 'engagement',
properties: noProperties()
}
});
const analytics = createClientAnalytics({
events,
providers: [
new PostHogClientProvider({
token: 'test'
})
]
});
await analytics.track('test_event');
If your project compiles, continue to the Quick Start.
