Skip to content

See what your users saw — phone, web & every TV.

One tap sends the screenshot, console, network, breadcrumbs and device, with replay when you turn it on. With triage on, a model reads it as it lands, an agent can turn it into a pull request, and you decide every step.

Every screen you ship

One SDK family. Ten platforms. Including 7 TV & connected-device OSes nobody else covers.

Mobile & tablet
Web
Web
reporter open · ⌘⇧B
app.acme.com/checkout
Filed today.live · 412 reports
  • WEBWeb9 s agoPlace order does nothing2
  • IOSiOS22 s agoAvatar upload spins forever2
  • WEBWeb1 min agoTypo on receipts modal1
  • ANDROIDAndroid2 min agoCart total off by one cent3
  • TVRN3 min agoPush notification overflows2
Inside one report

84KBexample

  • screenshotwebp (png fallback) · annotated58 KB
  • replayrrweb · when enabled19 KB
  • network22 requests4 KB
  • console14 lines2 KB
  • metadataapp · device · route1 KB
Drop in once

One call.

import { init } from '@traceitx/web';

init({ apiKey: 'txx_live_…' });

From then on ⌘⇧B — or your own button — opens the reporter. React, React Native, iOS and Android SDKs work the same way.

Signed delivery

Goes where you work.

Every report is one envelope. Receive it on your own webhook endpoint as an HMAC-SHA256-signed POST, work it in the dashboard, or both.

Unattended too

Errors file themselves.

An uncaught error or an unhandled rejection files a report with nobody pressing anything — the exception and stack, the breadcrumb trail, the route, app and device. No screenshot, console or network on these.

09:41:02  navigate  /checkout
09:41:06  tap       Place order ×3
E TypeError: cart.lines is undefined
   at CheckoutForm (CheckoutForm.tsx:148)
source: error · filed automatically · 09:41:07
Masked on the device

Secrets never leave.

Wrap a field in <Sensitive> and its pixels are blacked out in the screenshot before anything is sent. In console, breadcrumbs and request bodies, card numbers are scrubbed on their own; the reporter has a redact tool for everything else.

anatomy · six layers

One envelope. Six layers,
captured at the same instant.

Every report is a stack — snapshot, console, network, metadata, plus replay when you enable it and, on the web, the focused component — captured the instant the bug happens, on every screen you ship. Typed and named, so whoever picks it up starts from evidence, not a guess.

envelope · example · 84 KB

Nobody has to read one screenshot and guess. A teammate or an agent reads the whole stack — typed and named — and finds the line that broke. Hover a plane to inspect it.

  • 01snapshot · annotated · webp (png fallback) · PII masked
  • 02replay · when enabled per app · 15 / 30 / 60 s
  • 03console · last 100 lines · warn / error / unhandled
  • 04network · method · url · status · duration · bodies per app
  • 05component · web only · the element in focus · React names it
  • 06metadata · app · sdk · device · locale · route
Metadata app · device · route
app     acme-web 2.3.1
sdk     @traceitx/web 0.6.6
device  iPad · iPadOS 18.1 · 1024×1366
locale  en-GB · Europe/London
route   /checkout
Component react tree · route
focus   App › CheckoutPage › CheckoutForm › PlaceOrderButton
route   /checkout
source  touch
Network 22 reqs · 1× 500
GET  /api/cart        200  82ms
POST /api/checkout    500  41ms
GET  /api/cart        200  62ms
Console 14 lines · 3 errors
W useEffect missing dep: cart
E TypeError: cart.lines is undefined
E unhandled rejection: 500
Replay rrweb · 30 s · when enabled
00:00  /cart  scroll
00:18  navigate /checkout
00:27  tap Place order  ×3
00:30  reporter opened
Snapshot webp · 1024×1366
annotations 1 box · “Place order does nothing.”
size 58 KB
masked 2 regions
replay

The thirty seconds before the bug.

Turn it on for an app and the SDK keeps a rolling buffer of what the user saw and did. Nothing leaves the device until they report — then the buffer ships inside the same envelope and plays back in the dashboard, next to the console and the network log.

Web: the page, re-rendered

rrweb records DOM changes, scrolling and input into a rolling buffer — 15, 30 or 60 seconds, set per app in the dashboard. Off until you enable it, and nothing is uploaded until someone files a report.

Native: the screen as a labelled wireframe

iOS and Android replay layout, real text and what changed over time — deliberately not pixels. No screen-recording permission, no video file, and a payload small enough to send from anywhere.

Played next to the evidence

Scrub the timeline in the dashboard with the breadcrumb trail beside it — taps, navigations, console errors, failed requests — so the moment the report was opened is where you start.

sessions beta

Playback health for sessions, not just the ones that complain.

Session Vitals is an always-on, opt-in, sampled collector for media apps. Per session it records startup time, rebuffers, bitrate, dropped frames and player errors, with memory and responsiveness alongside. Reports and crashes carry the session id, so the Sessions view can open from a complaint.

  • Off by default. Opt in per app, with a sample rate you can dial down from the server without a release.
  • Web today, attaching to every <video> and <audio> on the page. iOS, Android and TV natives follow on the same protocol.
  • In beta: collection and ingest ship first; the Sessions view in the dashboard, pictured, is the next step. Ask us to enable it on your apps.
how it works

From a bug to a root cause
in three steps.

No screenshots pasted into chat. No “can you reproduce it?”. Whoever fixes the bug — a teammate or an agent — gets one structured envelope to reason over.

  1. 01

    Drop in the SDK

    One call, one key. From then on the SDK keeps a rolling buffer of console, network and breadcrumbs — and a short replay when you turn it on — and nothing leaves the device until someone reports.

    $ pnpm add @traceitx/web
    
    import { init } from '@traceitx/web';
    init({ apiKey: 'txx_live_…' });
    • hotkey ⌘⇧B armed
    • replay buffer rolling when enabled
    • console + network hooked
  2. 02

    A user reports

    They press the hotkey or your button, draw a box on the screenshot and type a sentence. The SDK packs the envelope with everything else: console, network, breadcrumbs, component, device, and replay when it is on.

  3. 03

    It lands, ready to fix

    Seconds later the report is in the dashboard and on your webhook as a signed POST — every layer attached. Triage starts from evidence, not a guess.

AI in the loop

Triaged by a model. Fixed by an agent.
Decided by you.

With triage on, every report is read the moment it lands. Ask questions across the whole project. And when a ticket is ready, dispatch a coding agent that works in a sandbox and hands you a pull request.

Triage on arrival

Turn triage on for a project and a model reads each report — title and description, console and network errors, breadcrumbs, crash data, device — and suggests a priority with its confidence, summarises what it read, and flags likely duplicate cards. You accept or dismiss. Nothing is set without a person.

Ask AI across the project

A chat dock over your project, one keystroke away. Ask what broke this week, which devices are affected, or what a card actually says. Answers cite the board cards they came from.

Dispatch an agent from the board

Connect a GitHub repository, pick a card, run. The agent edits an isolated checkout in a sandboxed container with a read-only GitHub token — it cannot push — can ask you a question mid-run, and sends its changes back; the pull request is opened for you. Runs are metered in credits.

SDKs

Every platform, one envelope.

Five SDKs, identical schema. Switch frameworks without rewriting your triage prompts.

PackageInstallRequires

sdk-react

React · TypeScript
// npm
npm i @traceitx/react
React 18+

sdk-ios

Swift · iOS / iPadOS / tvOS
// SPM
.package(url: "github.com/scriptx-com/traceitx-releases"
iOS / tvOS 15+

sdk-android

Kotlin · Android
// Maven
implementation "com.traceitx:core:$traceitxVersion"
implementation "com.traceitx:reporter-ui:$traceitxVersion"
API 24+

sdk-react-native

React Native · Hermes · New Architecture
// npm
npm i @traceitx/react-native
RN 0.84+ · tvOS 0.85+

sdk-web

Vanilla JS · Vue · Svelte · Angular
// npm · or a <script type="module"> tag
npm i @traceitx/web
Any framework
Why TraceItX

Built for every screen, and for the agent that fixes it.

TraceItXSentryInstabugShake
One report with everything attached: component, screenshot, console, network, breadcrumbs, device (replay when enabled) yes no no partial
Phone, tablet & web yes yes yes yes
TV & connected devices (tvOS, Android TV, Fire TV, Roku, Tizen, webOS, Vega OS) yes no no no
In-app reporter: record + annotate yes no yes yes
Session replay on web and native (wireframe, not pixels, on native) yes partial partial partial
AI triage on arrival (per project): priority, confidence, summary, duplicates yes partial partial no
Ask AI across the project, answers cite board cards yes no no no
Agent runs: a sandboxed coding agent opens the pull request from a ticket yes partial partial no
Session Vitals (beta, web, per app): sampled playback health, memory and responsiveness per session yes no no no
Pass-through: signed webhooks, you own the data yes no no no

Comparison reflects TraceItX's focus, not a feature-for-feature audit. ◐ marks a partial or paid add-on equivalent. Sentry/Bugsnag excel at error monitoring; TraceItX is the in-app report with the evidence attached, triaged and fixed from the dashboard — including on the living-room screen.

Simple, transparent pricing — start free. See plans →

Shipping today

Ship better, faster.

Start free — 1,000 monthly active installs and unlimited reports, no card required. Upgrade to Starter at $19/mo when you go to production. Read the protocol, drop in the SDK, file your first signed report in under five minutes.

Unlimited seats15 min to first reportNo credit card