0.9.0 — 25 September 2026
This release renames the product from TraceItX to Everframe across the hosted service and dashboard. It has no changes to SDK behaviour, and most of the remaining work is internal restructuring with no effect on integrations. Your existing projects, reports and stored data carry over unchanged.
Service and dashboard
- Everframe rebrand. The admin dashboard and hosted API now use the Everframe name. Existing data, stored report attachments and saved settings are preserved, so no action is needed on your side.
SDK distribution
- New Everframe package coordinates. JavaScript packages are published under
@everframe, Android artifacts underdev.everframe, CocoaPods asEverframe, and SwiftPM fromscriptx-com/everframe. The production ingest endpoint ishttps://everframe.dev.
0.8.2 — 21 September 2026
Reports and crashes now arrive with a short, high-resolution window of CPU and memory usage leading up to the failure, while playback sessions stop carrying the idle CPU/memory samples that made long sessions expensive for no benefit. The web and React SDKs now take their report hotkey from the dashboard, and the SDK surface has been simplified so the platforms behave the same way. On the service side, the dashboard gets a full-page report and error workbench, playback sessions are attributed to the person watching, an error-monitoring stack lands with symbolication and release regression detection, and a read-only MCP endpoint lets coding agents pull the evidence for a bug themselves.
SDKs
All platforms
- Reports and crashes now include a resource window: CPU and memory sampled at two-second resolution around the moment of the failure, so the evidence is aligned to what went wrong.
- Session Vitals no longer ships periodic CPU/memory samples. Playback sessions carry only playback events; the resource window above replaces the old low-resolution stream. The service also discards samples from older SDK versions, so nothing needs to be redeployed to benefit.
- The public SDK surface has been simplified so the platforms have parity with each other, and the size limit for extra data attached to a report has been raised.
- Report titles can be longer.
- The screenshot capture deadline has been extended so captures on heavy screens, such as TV home pages, no longer fail.
- Android, iOS and React Native: structured error details now respect both the emitted JSON and JavaScript byte limits.
Web and React
- The report hotkey is now configured from the dashboard and applied live by the SDK, including when the configuration is refreshed. The default binding is
Mod+Shift+B, and the matcher accepts any two-to-four-key chord. - Playback sessions are attributed to the person watching: the web and React SDKs send the same identity they already use for reports along with the vitals summary.
Android
- Fixed the on-screen keyboard overlapping the report form.
Service and dashboard
Report and error workbench
- The report drawer is replaced by a full-page workbench. The device sits on a stage at its real aspect ratio inside a phone, tablet, TV or browser frame, with a switch between annotated screenshots and the replay. Beside it, a developer panel offers Trail (every breadcrumb, filterable and searchable, following playback), Network (with request and response bodies where captured, and each row expanding to its full URL), Console, Context, Resources and Thread.
- A four-lane timeline (taps, screens, network, logs and errors) sits under the stage with a playhead and a compact trail strip. Report time starts at the first event, the recording is shown as a band on the axis, and seeks land paused so you can inspect a moment.
- The panel docks right or bottom with a fold, remembers its state, and supports a focus mode and keyboard shortcuts (arrows seek,
/search,1–6switch tabs,j/kmove between siblings). On short screens the page flows naturally, the timeline starts folded behind a Timeline toggle, and the stage keeps a usable minimum size. - Screenshots are capped at 1120px wide (never upscaled); the lightbox and fullscreen remain for reading larger captures.
- The error-group page shows one occurrence at a time: pick the latest or step through older and newer ones, see the exception and stack (with Copy), and view the trail relative to the crash, the replay frozen at the crash, network, console and context. The Occurrences tab adds an OS / release / route breakdown above the table. A generic cause view is available, and causes are recovered when a source map arrives late.
Reports and Errors lists
- Both lists gain search (a word from the title, or the start of an id) plus Platform and Version filters backed by distinct-value facets with counts, so you can pick a version and then widen the date range.
- The Reports list adds Platform and Version columns, a replay icon in Attachments, a test-ping badge beside the title, and an inline Add to board button.
Error monitoring
- Error monitoring is integrated into the service: explicit capture, private web, Hermes and R8 artifacts for symbolication, grouping promotion once frames are mapped, release regression detection, and webhook routing.
Playback sessions and people
- The Sessions section is renamed Playback. Each playback session is attributed to the person watching, across both identity tiers (verified token and self-declared user), and rendered exactly as people appear on reports, including the unverified badge.
- The playback list has a person column and per-person filter; session detail shows the person; a person’s profile lists their playback sessions beside their reports.
- A person can now be erased: their identity is detached from all sessions and reports, which remain intact and anonymous.
Hosted MCP server
- A read-only MCP endpoint lets a coding agent fetch bug evidence directly. Eight tools, each scoped to one project:
list_projects,get_report,get_screenshot,get_error_group,get_ticket,get_ticket_attachment,searchandresolve_link. Paste any dashboard URL intoresolve_linkand the agent gets the matching report, error group or ticket without knowing any ids. Images are listed and fetched on demand, never dumped into the conversation. - Connection uses browser-based authorisation with a consent screen; a grant acts as the person who approved it and is re-checked on every call. There are no write tools, user-submitted text is wrapped in an explicit untrusted-content boundary, content types are decided by sniffing bytes, and refresh tokens rotate with whole-family revocation on reuse.
Companion
- The Companion tab attaches to one device at a time. Attaching to a second device while connected is refused with a dialog naming the current one; Detach is the only way to move. The attached device is dropped from the list.
- Fixed Detach staying disabled after a successful detach, which previously required a page reload before re-attaching.
- Centred dialogs now use an even glow on all sides instead of a shadow that dropped below the bottom edge.
SDK configuration
- The SDK configuration overview is redesigned into Report Entry, Communication, Session Context and Evidence Trail groups with live previews, a phone-friendly accordion layout, and a hotkey recorder for arbitrary two-to-four-key chords.
For developers
- Breaking (web and React): the SDK-side
config.hotkeyoption and the publicregisterHotkeyhelper are removed. The report hotkey is now the dashboard’sreportHotkeyBindingsetting (defaultMod+Shift+B) and is authoritative; the SDK negotiates and applies it, including on live configuration refreshes. - SDK surface parity: the public API was simplified so all platforms expose the same surface. Review the updated SDK documentation when upgrading, as some calls have changed.
- Session Vitals: the SDKs no longer emit CPU/memory
sampleentries. The sample type remains accepted by ingest so chunks from older SDKs still validate; the service drops samples after validation and writes nothing for a sample-only chunk. - New endpoints:
DELETE /api/admin/projects/:projectId/people/:identityId(admin-only) erases a person, setting the identity to null on every referencing record.GET /projects/:id/events/facetsreturns distinct platform and version values with counts, scoped like the events feed but never by date.
- MCP: the endpoint is at
/mcpover stateless Streamable HTTP. Authorisation implements the OAuth 2.1 subset MCP clients expect — RFC 9728 protected-resource metadata, RFC 8414 authorisation-server metadata, RFC 7591 dynamic client registration, RFC 7636 PKCE (S256 only), RFC 7009 revocation, and RFC 8252 native-app rules including loopback port variation. Clients that cannot run the browser flow can use an API token (txx_api_prefix) as a bearer credential.
0.8.1 — 10 September 2026
Release 0.8.1 is a stability and compatibility release. Native replay no longer crashes on iPad when a layer holds an opaque backing object, Android replay records normally on screens that mount hidden background WebViews, and the web and React SDKs now handle older TV browsers — fewer stalls during recording, correct screenshots on apps with hidden scrollbars, and successful report preparation on runtimes missing modern browser APIs. On the dashboard side, the retired native view-tree recorder’s image-asset settings are gone and the remaining video replay setting is now correctly labelled as applying to both iOS and Android.
SDKs
iOS / tvOS
- Fixed a crash inside replay snapshot collection that could bring down the host app when a layer’s contents were an opaque backing object rather than an image. Snapshot diagnostics now record only the runtime type name for unsupported contents; image classification, fallback rendering and privacy behaviour are unchanged.
Android
- Native replay no longer records zero frames when a screen keeps an always-mounted background WebView (for example a hidden 1×1 measurement view). WebViews that are proven hidden —
GONE, fully transparent, or fully clipped — no longer block capture, and visibility is rechecked at each capture boundary so a view that becomes visible or moves into an overlay cannot slip past the checks. Visible and partially transparent WebViews, explicitly marked sensitive views, inputs, surfaces and uncertain animation or overlay cases remain excluded from capture.
Web and React
- Large reductions in recording overhead on constrained TV browsers. Replay buffer accounting no longer re-serialises the buffer repeatedly, deep DOM snapshots use a bounded fallback instead of tripping the size cap, and snapshot work is cheaper overall. On an LG TV running Chrome 53, buffer accounting work fell by roughly 64%, sampled full-snapshot work by roughly 29%, and worst observed frame gaps dropped from about 1.0–1.1 s to about 0.8 s. These are small on-device experiments, not guarantees.
- Screenshots now preserve an app’s own scrollbar styling instead of reintroducing native scrollbars, so previews look like the real screen.
- Compatibility fixes for older runtimes that previously produced grey screenshot previews or failed report preparation: Blob bytes are read via
FileReaderwhenarrayBufferis unavailable, DOM cloning and matrix/transform handling fall back to legacy-safe paths, hashing no longer requiresBigInt, and schema validation correctly detects when its optimised parser is unsupported. - Time pruning keeps working after an incomplete checkout while preserving the only playable anchor, so replays remain playable.
Service and dashboard
- The Replay images card has been removed from app settings, along with its configuration end to end. It controlled the retired native view-tree recorder and no longer had any effect.
- The remaining frame-rate control is now labelled Native video replay (iOS and Android); it always applied to both platforms, but the old wording described it as iOS-only.
For developers
- Removed configuration: replay image assets. The image-asset settings for the retired native view-tree recorder are gone from the dashboard, the hosted API, and the shared, Android and iOS SDK configuration models, including the related public exports. If you referenced these options in your integration code, remove them. SDK versions that still request an image override receive none and fall back to their built-in defaults, so no action is required to keep older builds working.
- No schema removal in this release. The now-unused replay-image column remains physically present so that the previous API version keeps working during migrate-before-restart deployments and after a rollback. Nothing in current code reads or writes it.
- Native video replay is unchanged. The shared frame-rate setting continues to apply to both iOS and Android; only the label changed.
- Bundled browser patches. The web and React SDKs now ship the patched versions of their recording dependencies together with the corresponding dependency notices. Capture and replay code remains lazily loaded, so this does not change your initial bundle cost.
0.8.0 — 7 September 2026
Session Vitals lands in this release across every platform: the SDKs now report video playback quality, memory and responsiveness continuously, and the dashboard gains a Sessions tab with per-session timelines and aggregate metrics. iOS, tvOS and Android reports can now carry a native video replay of the moments before the report was filed, replacing the older tree-based replay on those platforms. The dashboard splits the old Events feed into Reports and Errors with team-shared unseen state and a rebuilt error-triage page, and billing now computes and collects VAT on checkout. Session Vitals is off by default and enabled per app from the dashboard, so upgrading the SDK alone changes nothing you have not opted into.
SDKs
Session Vitals (all platforms). When enabled for an app, the SDKs collect a lightweight session record: video playback quality (startup time, buffering, bitrate and quality changes, player lifecycle events) alongside memory, CPU and responsiveness sampling. Sampling pauses while the app is backgrounded or the page is hidden, sessions rotate after 30 minutes idle, and the collector is byte-capped and never throws — if the transport fails, your app is unaffected. Reports and crashes now carry the session id and the last 60 seconds of vitals, so a filed report links straight to the session it came from.
Playback tracking is per player, so a page or screen with a main player, a picture-in-picture player and an ad player reads as three distinct timelines rather than one merged stream. Where a player library sits above the platform’s media element, an optional integration supplies what the element cannot see: source URL and streaming protocol, DRM key system, the bitrate ladder, current quality, and a startup breakdown (manifest, licence, first fragment, first frame).
- Web and React — automatic tracking of plain media elements, plus opt-in integrations for hls.js and Shaka Player. Neither library is added as a dependency or peer dependency; you hand us your existing instance.
- React Native — a library-agnostic player bridge with adapters for react-native-video (v7) and THEOplayer. CPU and memory sampling and session ids were already inherited from the native SDKs; this adds playback.
- Android — a native collector with CPU and memory sampling, and playback tracking for Media3/ExoPlayer through a new companion artifact.
- iOS and tvOS — a native collector and AVPlayer playback tracking, shipped inside the existing framework: no new package, product or target to add.
Native video replay on iOS, tvOS and Android. Reports from these platforms can now include an MP4 replay of the seconds before the report, played back inline in the dashboard with seek-to-event markers. Capture is masked for sensitive views, runs at a dashboard-selected 5 or 10 fps, is bounded in size and duration, and is stored encrypted on device until upload succeeds — surviving process restart and retrying through network failures. Opening the reporter freezes the footage, so time spent writing or annotating a report does not eat into what gets submitted. On tvOS, replay is validated end to end through the companion reporting flow.
Web reporter captures the page before it takes focus. Previously the reporter dialog moved focus to its own title field before photographing the page, so focus rings were missing from screenshots, anything the host page closes on blur (comboboxes, autocomplete, menus, popovers) collapsed out of the shot, and the recorded focused element described the reporter’s own input instead of the user’s. Most visible when opening the reporter with the keyboard shortcut. The page is now captured with focus intact.
Service and dashboard
- Sessions. A new Sessions tab lists sessions with health columns (startup, rebuffer percentage, errors, peak memory) and filters for integration, time range and errors. Session detail shows a lane timeline with buffering regions, memory and CPU, per-player cards (source, DRM, startup breakdown, quality range, health), a bitrate line per player, custom entries, and the events linked to that session. A Metrics view charts session counts, rebuffer ratio, startup p50/p95 and error rate over time, optionally grouped by app version or platform.
- Reports and Errors are now separate. The project Events feed splits into Reports (user-filed) and Errors (automatically captured crashes and errors, grouped by fingerprint). Both carry a team-shared unseen flag — one per report, one per group, not per user — surfaced as badges on the project rail. Error groups have a resolve/reopen lifecycle, so a new occurrence on a resolved group reopens it and badges as a regression. Existing links to individual events keep resolving, and nothing badges on deploy: everything already in the database is marked seen.
- Rebuilt error-group page. Built around triage: a one-line headline taken from the message rather than the exception type, the full message and stack trace rendered as code, stack frames parsed into function/file/line with app frames highlighted and framework runs folded, breadcrumbs leading up to the error, contextual occurrence rows, an environment/app/reporter aside with a crash card for native crashes, and a 14-day occurrence sparkline.
- List pages share one anatomy. Errors, Reports, Sessions and People now use the same title row, filter toolbar with a
Clear filterscontrol, table styling and reading order. Tables get a distinct header band, visible row hover and focus, and right-aligned tabular numerals for numeric columns. - Numbered pagination. The four list pages replace opaque Previous/Next cursors with real numbered page links that state position in rows (“301–350 of 2,081”). Page number and size live in the URL, so pages are shareable and Back returns where you left. Very large lists show a capped total (for example “10,000+”). Reports and Sessions freeze the walk’s base instant so rows arriving mid-walk cannot shift pages under you.
- AI-ready report envelope. Report detail gains an AI Envelope tab with copy-ready Markdown containing the title, description, AI overview, runtime variables, extra captured data and every breadcrumb, plus seven-day signed attachment and replay links that stay usable outside an authenticated dashboard session. A standalone, origin-restricted replay viewer accompanies it.
- Session Vitals controls. Each app’s Overview gains a Session Vitals card (on/off, plus 100/50/10% sampling presets), and each project gains a vitals retention setting. An hourly sweeper removes vitals past the retention window.
- Billing. Both checkout flows — subscriptions and credit packs — now enable Stripe Tax, collect the customer’s address and name, and collect VAT IDs so EU business customers can be reverse-charged instead of paying Lithuanian VAT they cannot reclaim. Subscription changes were reworked: upgrades prorate and charge immediately, downgrades take effect at the end of the current period, cancellation now distinguishes “will end on a date” from “ended”, and cards needing reauthorization are handled.
- Mobile layout fixes across the dashboard.
For developers
Enabling Session Vitals. Vitals are off until switched on per app in the dashboard, and the dashboard is the source of truth: local SDK configuration can only opt out or lower the sample rate, never enable what the dashboard has off. Per-app settings are vitalsEnabled and vitalsSampleRate; per-project retention is configurable from 1 to 365 days, defaulting to 30. Data is ingested at POST /api/ingest/vitals under its own rate limits, and a disabled app is silently dropped rather than erroring. Configuration is only emitted to SDKs that advertise the vitals feature, so older SDKs are unaffected.
Web and React.
trackPlayer(opts)returns a handle and never throws; pass{ hls }or{ shaka }to attach the corresponding integration. Plain media elements are tracked automatically with no call at all.trackVitals(name, data)writes a custom entry onto the session timeline. Payloads are capped at 2 KB serialised and truncated rather than dropped.- React adds
useTrackPlayer(ref, opts). Declare it before the effect that callsloadSource()/load()so the integration’s startup baseline is attached before the library emits its first event. - Neither hls.js nor Shaka is a dependency or peer dependency; any 1.x/4.x/5.x instance you already have works.
Modalgains adeferAutoFocusoption, used by the reporter to leave focus on the host page until after capture.
React Native.
trackPlayer(),trackVitals()anduseTrackPlayer()mirror the web surface, backed by a new player bridge.- A
vitalsconfig object acceptsenabled,sampleRateandcaptureSourceQuery. An out-of-rangesampleRateis dropped with a development warning rather than failing SDK start. - Adapters ship as separate entry points:
integrations/react-native-video(targets v7’s headlessVideoPlayer; error capture is opt-in viacaptureErrors) andintegrations/theoplayer. Neither library is a dependency — the adapters use structural types only.
Android.
traceitx-coremoves to0.8.0and gainstrackPlayer/trackVitals.- Media3/ExoPlayer tracking lives in a new artifact,
com.traceitx:media3:0.8.0, used asTraceItX.trackPlayer(exoPlayer). It is built against Media3 1.8.0; 1.11 is not yet supported because it requirescompileSdk 36. - Native video replay requires Android 10 (API 29). Reporting works as before on older supported versions, without replay.
- The Android tree-replay producers are retired in favour of native video. Previously recorded tree replays remain readable in the dashboard.
iOS and tvOS.
TraceItX.shared.trackPlayer(_:name:)tracks anAVPlayer. Everything ships insideTraceItXKit— there is no new xcframework, subspec, SwiftPM product or Xcode target to add.VitalsConfigexposesenabled,sampleRateandcaptureSourceQuery.- The iOS tree replay implementation is removed and replaced by native video replay. Web rrweb replay is unchanged.
Admin API paging. The Errors, Reports, Sessions and People list endpoints accept a page parameter and return total plus totalIsLowerBound. Totals are capped at 10,000. The existing cursor parameter continues to work unchanged; sending both page and cursor in one request returns a 400.
0.4.5 — 12 June 2026
iOS packaging fix: the distributed xcframeworks now carry a proper version string, so apps embedding the iOS SDK pass App Store validation. Binary-only repackage — no API changes.
0.4.4 — 2 June 2026
The 0.4.x line, June 2026. Reliability and screenshot-fidelity improvements across the JS SDKs, including a new screenshot engine that preserves nested scroll positions without touching the live page, so captures match exactly what the user was looking at.
0.3.0 — 27 May 2026
Simpler reporter API for the JS SDKs: useTraceItX().open() is now the single
entry point and resolves with the submit outcome (submitted, queued, or
cancelled), so you can react to what happened after a report is sent. This
was a breaking change — see the migration notes in the release.
0.2.0 — 25 May 2026
The big one. Full annotation tooling landed across every platform:
- Annotation tools — pen, blur, and arrow with undo/redo, on web, Android, and iOS.
- Tablet two-pane reporter — screenshot and form side by side on larger screens.
- React Native Fabric (RN ≥ 0.80, including tvOS) supported out of the box.
0.1.0 — 21 May 2026
First public release — capture, the AI-ready envelope, and signed webhook delivery across the initial SDKs.
Want to follow along? Watch the releases on GitHub or check service status.
