NEW · SESSION REPLAY

Watch the bug.
Generate the fix.

Replay every user session — DOM, console, network, Web Vitals, frustration signals — then click Generate Fix and ship a pull request without touching the keyboard.

Replay is one stream — your whole stack on one timeline

AI-narrated chapters
Generate-Fix from any session
Substrate I/O sync
Web Vitals on the timeline
Rage + dead-click detection
Source-mapped error stacks
Share at timestamp
Inline comments + @mentions

Try it

Press play. Watch a session unfold.

Real interactions — scrub the timeline, switch tabs, click Generate Fix. No video, no recording — built from the same primitives as the live player.

session · 0:30 · alex@acme.dev
Chrome · macOS
0:00 / 0:30
0

Press play to start the session…

See exactly what they saw

DOM replay synced with console, network, navigation, URL breadcrumbs, and Substrate I/O. PII masked by default; optional network-body capture with 4-layer secret redaction.

Surface the frustration

Rage clicks, dead clicks, slow Web Vitals, source-mapped error stacks — auto-detected and ranked. Filter the list to sessions that actually matter.

Collaborate on the fix

Share any moment with ?t=<ms> deep links. Drop comments anchored to a timestamp, @mention teammates, follow one user's journey across every session.

Ship the fix

Click Generate Fix. AI reads the trace, the replay, and your code, then opens a PR with 11 safety gates already passing.

Player details

Designed for reviewers, not viewers.

The small things that make a debugging tool feel professional.

Keyboard-first

Space / J / K / L shortcuts, ? for the cheatsheet, comma/period jump to the previous/next event boundary (not fixed ticks).

Source-mapped stacks

Stack frames resolve via your deployed .map files, rendering as src/checkout.tsx:42 with one-click open in GitHub.

URL breadcrumbs

Every SPA route change is captured via a history.pushState watcher and surfaces as a chip strip above the viewport with dwell times.

User journey pages

Click an end-user pill in any session to land on /replays/users/<id> — every session they&rsquo;ve ever had, with frustration-score sort.

vs. the rest

Replay parity. Plus three things nobody else does.

FeatureInariWatchSentryLogRocketDatadog
DOM replay
Console + network panels
Source-mapped error stacks
Network body capture with maskingpartial
URL breadcrumbs
Web Vitals on the timelinesplit
Rage / dead-click detectionpartial
Share at timestamppartial
Comments anchored to moments
Per-user session journeypartialpartial
AI-narrated chapters
Backend I/O on the same timeline
One-click PR from a replay

Compared 2026-04. Things change — if a competitor ships parity, we’ll update this table.

How it works

From install to merged PR.

Step

01

Drop in the SDK

Install the capture core + replay integration. Zero config. Records DOM, console, network, navigation, Web Vitals, and errors.

npm install @inariwatch/capture @inariwatch/capture-replay

import { init } from "@inariwatch/capture";
import { replayIntegration } from "@inariwatch/capture-replay";

init({
  dsn: process.env.NEXT_PUBLIC_INARIWATCH_DSN,
  projectId: process.env.NEXT_PUBLIC_INARIWATCH_PROJECT_ID,
  integrations: [replayIntegration()],
});

Step

02

Sessions auto-correlate

Every replay with an error gets linked to an alert (or creates one). Frustration signals surface to the top of the list.

// optional — identify the user
window.__INARIWATCH_USER__ = {
  id:    user.id,
  email: user.email,
};

Step

03

Click Generate Fix

AI reads the replay + the alert + your code, runs 11 safety gates, opens a PR. Auto-merge if every gate is green.

→ Diagnose → Read code → Generate fix → Self-review
→ Security scan → Substrate replay → Staging E2E
→ Open PR → Auto-merge → Watch for regressions

Built privacy-first

PII masked by default

Inputs, passwords, and labelled blocks are blocked from capture before they ever leave the browser. 25 heuristic rules + optional AI classifier.

Network bodies: opt-in only

OFF by default. When enabled, 4 layers of defence: URL denylist, JSON key masking, value-shape regex (JWT / AKIA / sk_live_), and header redaction.

Per-project retention

Configurable from 1 to 366 days. Daily cron sweeps expired sessions out of R2 and the database — GDPR right-to-erasure honoured as code.

End-user emails optional

Opt-in hashing per project. We never scrape the DOM — you set the user contract via window.__INARIWATCH_USER__ explicitly.

Stop guessing what broke.

Install the SDK, record one session, and let InariWatch open the PR. Free while in beta — no credit card.