The 1mn SDK
A first-party, embeddable browser SDK — pageviews, events, errors, web vitals, and in-app feedback that becomes tickets.
The 1mn SDK is a tiny (~8KB), zero-dependency browser SDK — PostHog/Sentry-like — that you drop into your product. It captures pageviews, custom events, identified users, grouped JavaScript errors, web vitals, and in-app feedback.
Enable it
From the Users or Feedback tab, click Enable 1mn SDK. If GitHub is connected, 1mn spawns a coding task that adds the snippet to your repo and wires identify() / reset() into your auth pages as a pull request. Otherwise you copy a snippet to paste yourself. The dashboard flips to live on the first event.
What it powers
- Users — a directory of identified users and an events chart.
- Errors — captured exceptions feed the error-triage loop.
- Feedback —
onemn.feedback()(and the drop-in<FeedbackWidget>from@1mn/react) turns customer feedback into draft tickets on your board. Comment on one to engage the agent. - Recordings — with session replay on, real visitor sessions are recorded and watched by the Recordings Reviewer loop, which reviews each one and files a draft ticket when it spots a real problem.
API
onemn.capture('event_name', { any: 'props' });
onemn.identify('user-id', { email: 'a@b.com' });
onemn.set({ plan: 'pro' });
onemn.reset();
onemn.feedback('message', { optional: 'props' });
onemn.optOut(); // stop recording + analytics for this visitor
onemn.optIn(); // resumeSession replay
The SDK can record real visitor sessions with rrweb so you can play them back in the dashboard — and so the Recordings Reviewer loop can watch them and surface UX problems for you. Replay rides the same SDK as analytics: the frozen ~8KB snippet you already installed lazy-loads a separate recorder module (~40KB) only when you turn recording on and the session is sampled in, so a product with replay off pays nothing for it.
Turn it on
There's nothing to paste — recording is a server-side flag on your key.
- Enable the 1mn SDK if you haven't (the Recordings tab shows an Enable 1mn SDK card until you do).
- On the Recordings tab, click Enable session recordings.
- From that moment, sampled-in visitors are recorded and appear on the tab as they browse.
Recording is off by default on every key, and enabling it writes replay.enabled for that key. The existing snippet reads the flag on load; no redeploy is needed.
Sampling
Replay is bandwidth- and storage-heavy, so you record a fraction of sessions, not all of them. The sample rate defaults to 0.1 (10%) and is adjustable from 0 to 1 in the recording Settings on the Recordings tab.
The decision is made once per session, at session start — a coin flip that's deterministic on the session id, so a session is recorded whole or not at all (never half), and the SDK never downloads the recorder for a session it would drop.
Privacy & masking
Recording captures real people, so the defaults are conservative:
-
Inputs are masked by default (
maskAllInputs) — passwords, emails, and card fields never leave the browser as text. Masking is opt-out per field, never opt-in. -
Hide sensitive regions by adding a class to the element:
onemn-block— block an entire region from the recording.onemn-mask— mask the text inside an element while keeping its layout.
<div class="onemn-block"> <!-- payment form: never recorded --> </div> <span class="onemn-mask">{{ user.fullName }}</span> -
No request or response bodies are captured — only page content and interactions.
-
Visitors can opt out. Call
onemn.optOut()to stop recording (and analytics) for a visitor;onemn.optIn()resumes.
Consent is your responsibility
Masking reduces what's captured, but recording real visitors still carries a consent obligation in the EU, UK, and Canada. Telling your visitors you record sessions — and honoring opt-outs — is on you.
Retention & limits
- 90-day retention. Recordings are automatically deleted after 90 days.
- Per-app cap. Each product has a rolling cap on recorded sessions; once it's hit, new sessions stop recording (existing ones are kept) until the window rolls forward. Lower your sample rate if you're hitting the cap early.
- Recording bytes are stored server-side and played back auth-gated in the dashboard — raw storage URLs are never exposed to your visitors.
Once sessions are recording, the Recordings Reviewer loop turns them into reviews and draft tickets.
Deployments — Cloudflare
Connect Cloudflare to track deployments on your tickets and give coding runs ambient wrangler access for deploys, tail, and rollbacks.
Billing & subscription
How 1mn's flat $49/month per-workspace subscription works, plus the separate prepaid advertising budget and bring-your-own-Claude option.