See what the user did before it broke.
The browser SDK records each session and tags it with the same session ID as the errors from that tab, so you can watch the steps that led to an error.
Free plan. No credit card required.
Something went wrong
- 0:18shop.example.com/checkoutPage
- 0:39shop.example.com/api/pricesNetwork · 200 · 1840ms
- 0:41shop.example.com/api/checkoutNetwork · 500 · 2310ms
- 0:41replay errorReplay Error
Example session. The password field is masked, as it is by default.
What a replay records.
A replay rebuilds the page from the changes it recorded. It is a record of the page, not a video of the screen.
The page, rebuilt
A full snapshot of the page when recording starts and every 60 seconds, then every change to it.
Every interaction
Mouse moves, clicks, touches, scrolls, window resizes, and changes to form inputs.
The path through your app
Each page the user visited, in order, so you see how they reached the failure.
Failed and slow requests
Fetch calls and resource timings, with URL, status, and duration. Failed and slow ones stand out.
Errors from the same tab
Errors carry the tab's session ID, so the replay lists the errors that happened while it recorded.
Release and user
Each replay keeps the release and environment from init, and the user you pass to identify().
Private by default. Stricter in one line.
Masking runs in the browser, before anything is uploaded. Start strict, then open up what you need.
- All text, inputs, and media are masked by default.
- Password, payment card, and one-time-code fields are always left out.
- blockSelector keeps whole elements out of the recording.
- No canvas, no console output, and no request or response bodies.
replay: { enabled: true }****** **** *******
*****
****************
********
*************
Image blocked
**** **
maskAllText: false, maskAllInputs: falseCreate your account
dana@example.com
Password
*************
Free for 14 days
Sign up

Example recording.
From an error to its session.
The browser SDK gives each tab one session ID and puts it on errors, Web Vitals, and the replay.
- Filter the session list to sessions with errors.
- The session's activity lists its pages, errors, and failed requests.
- The errors API returns the replay session IDs for an issue.
- Search replays by URL, release, or failed requests from the CLI or MCP.
Session replays
Search sessions by URL, environment, or session ID…
| Session | Environment | Duration | Errors | Started |
|---|---|---|---|---|
| shop.example.com/checkout | production | 1m 40s | 2 | 14:05 |
| shop.example.com/checkout | production | 3m 12s | 1 | 13:58 |
| shop.example.com/cart | production | 48s | 1 | 13:41 |
| shop.example.com/account | production | 2m 05s | 3 | 13:22 |
Example sessions
Let your coding agent find the session.
The CLI and MCP server search replays and return compact summaries, so an agent reads the timeline before any raw recording.
- Filter by URL, release, environment, and failed requests.
- Inspect one session as a timeline of pages, errors, and requests.
- The same calls run over MCP as replays.search and replays.inspect.
- Raw recording events are a separate request.
$ squasher replays search --url /checkout --min-network-failed 1 \ --from 2026-09-24T13:00:00Z --to 2026-09-24T15:00:00Z $ squasher replays inspect 7f13c2a9-4d1e-4b8a-9c02-51e6d0a4b7f3 \ --include page,network,replay_errorExample commands
Record your first session.
Replay ships in the browser SDK. Set the privacy you want before real customers arrive, or paste one prompt into your coding agent.
Install the browser SDK
Replay is part of @squasher-ai/browser. There is no separate package.
npm install @squasher-ai/browserChoose your privacy settings
Replay is on for every session by default. Lower the sample rate and mask text before real customers arrive.
Browser SDK guideimport { init } from "@squasher-ai/browser"; init({ apiKey: process.env.NEXT_PUBLIC_SQUASHER_API_KEY!, projectId: process.env.NEXT_PUBLIC_SQUASHER_PROJECT_ID!, replay: { enabled: true, sampleRate: 0.25, privacy: { blockSelector: "[data-private]" }, },});Watch one session
Click through your app. Then open Explore, choose Sessions, and play it back.
Session replay docs
Install Squasher for this project. If Squasher skills or MCP are not configured in this agent environment, run `bash <(curl -fsSL https://squasher.ai/install.sh) --agents -y`. Then read https://skills.squasher.ai/squasher-onboard/SKILL.md, map every runnable app/service/worker/frontend/agent in the repo, choose the matching Squasher SDK, log drain, OTLP, or Agent SDK path, initialize with SQUASHER_API_KEY and SQUASHER_PROJECT_ID from environment variables, send one real verification event, and report the files changed plus the verification step. Do not hardcode or reveal real API keys.bash <(curl -fsSL https://squasher.ai/install.sh) --agents -yReplays on every plan.
Every plan records replays. Plans differ in how many sessions a month and how long they are kept.
Session replays a month
- Free
- 5,000
- Pro
- 10,000
- Team
- 40,000
- Scale
- 150,000
Replay retention
- Free
- 7 days
- Pro
- 30 days
- Team
- 30 days
- Scale
- 90 days
More replays
- Free
- Not available
- Pro
- $0.75 / 1K replays
- Team
- $0.65 / 1K replays
- Scale
- $0.60 / 1K replays
Only new sessions count. More pages or segments in the same session do not.
Questions, answered.
What is session replay?
Session replay records what a user did in your web app: the pages, clicks, scrolls, and input changes. You play it back later to see the steps that led to a bug, without asking the user to reproduce it.
Is a session replay a screen recording?
No. The browser SDK records the page structure and every change to it with the open-source rrweb library, and the player rebuilds the page from that record. No video is captured, and canvas elements are not recorded.
What does Squasher mask by default?
Everything, by default: all page text, every input value, and images, video, SVG, and canvas, in the browser before upload. Password, payment card, and one-time-code fields are always left out, and page and request URLs drop their query strings. Set maskAllText: false only on pages without personal data.
How do I record only some sessions?
Set replay.sampleRate between 0 and 1. Each session is kept or skipped once, when the recorder starts. The default is 1, which records every session. To turn replay off, set replay: { enabled: false }.
Does it record network requests and console output?
It records fetch calls and browser resource timings: the URL, method, status, and duration. It does not record request or response headers or bodies. Console output is not part of the replay.
How long are replays kept?
Replay retention is 7 to 90 days, depending on your plan. After that, Squasher deletes the recording and keeps a short summary of the session, such as its URLs and counts.
Which frameworks does session replay support?
Any web app that runs the browser SDK, @squasher-ai/browser: single-page apps, multi-page sites, and custom frontends. In a Next.js app, start the browser SDK in the client bundle. The server SDKs do not record replays.
Does session replay slow down my site?
The recorder library loads on demand after init. It batches changes in memory and uploads them in the background every 5 seconds, with a final upload when the page is hidden. To record fewer sessions, lower replay.sampleRate.
Go squash some bugs.
Connect one service and send one real event. The crew takes it from there.
Free plan. No credit card required.


