Privacy-first product analytics — funnels and composable dashboards.
No cookies. No fingerprinting. No PII. Under 3KB gzipped.
npm install @counted/sdkimport { Analytics } from "@counted/sdk";
const analytics = new Analytics({ projectKey: "A-US-..." });
analytics.track("page_view", { path: "/" });npm install @counted/reactimport { AnalyticsProvider, useAnalytics } from "@counted/react";
function App() {
return (
<AnalyticsProvider projectKey="A-US-...">
<MyApp />
</AnalyticsProvider>
);
}
function SignupButton() {
const { track } = useAnalytics();
return <button onClick={() => track("signup_click")}>Sign Up</button>;
}- Event tracking — track any event with custom properties
- Composable dashboards — build your own view with metrics, time series, and breakdowns
- Privacy by design — no cookies, no IP storage, no fingerprinting, GDPR/CCPA-friendly with no consent banner
- Lightweight SDK — under 3KB gzipped, no dependencies
- Set cookies or use localStorage for tracking
- Store IP addresses or any PII
- Fingerprint browsers (no canvas, WebGL, font probing)
- Auto-track without explicit opt-in
- Sell or share data with third parties
With Docker Compose:
git clone https://github.com/iceglober/counted.git
cd counted/self-host
cp .env.example .env
# Edit .env with your auth secret
docker compose up -dSee self-host/README.md for the full guide, production checklist, and backup instructions.
For development setup, see CONTRIBUTING.md.
| Package | Description | Size |
|---|---|---|
@counted/sdk |
Vanilla JS event tracking | ~3KB |
@counted/react |
React provider + hook | ~1KB |
@counted/claude-code |
Claude Code plugin | ~1KB |
@counted/opencode |
OpenCode plugin | ~1KB |
@counted/gemini-cli |
Gemini CLI agent hooks | ~1KB |
@counted/codex-cli |
Codex CLI agent hooks | ~1KB |
counted |
Python SDK | — |
counted |
Go SDK | — |
counted |
Rust SDK | — |
@counted/migrate |
Aptabase migration CLI | — |
# Option A: drop-in compat (zero API changes)
npm remove @aptabase/web
npm install @counted/sdk
# Change import: '@aptabase/web' → '@counted/sdk/aptabase'
# Option B: native API
npm remove @aptabase/react
npm install @counted/react
# AptabaseProvider → AnalyticsProvider
# useAptabase → useAnalytics
# trackEvent → trackSee CONTRIBUTING.md.
MIT — see LICENSE.