Repository navigation
The first stable release, with a "Report a problem" button, server errors on the replay and a long list of privacy and upload fixes.
Upgrading: run php artisan migrate (a column for the impersonator's type and an index for a workspace's list). Config keys were renamed to name their unit (idle_minutes, flush_seconds, on_error.ask_timeout_seconds, ingest.requests_per_minute); a published config with the old names keeps working, but config()->set() at runtime needs the new names (#42).
SessionReplay.send()for a "Report a problem" button, with aReplayReportedevent to tell support (#39)- Server errors on the replay, marker details, and Open in logs through
SessionReplay::logUrlUsing() - Failed
fetchand XHR requests and client-side page changes are marked in apps without Livewire - Copy link to this moment under the player, and the
on_error.askquestion as a toast - A
ReplaySessionpolicy (Filament Shield's, say) authorizes the viewer when no gate is defined (#41) - The impersonator can be a model (#40), and a
session-replay:sessionbrowser event for error trackers (#43) - Privacy fixes: hidden and file inputs always masked, URLs redacted in errors, stricter defaults for a misspelt
consentormode(#38),visibleUsing()kept to its scope - Sturdier uploads and times: the daily limit is obeyed, half-failed batches are stored in full, and times follow the app's timezone
Docs: https://packstub.dev/docs/session-replay
-
A page reached with
wire:navigateis recorded as a fresh snapshot, like a page load: smaller recordings and quicker seeking -
Stylesheets that finish loading after the page was recorded are stored once too
-
on_error.livewire_error_modal: theon_error.askquestion can take the place of Livewire's error modal -
The question is now a native
<dialog>, always above the page, Livewire's modal included
Recording only when something goes wrong. Run php artisan migrate for the new replay_session_assets table.
-
mode = on_error: the browser keeps the last minute in memory and uploads it only after an error -
on_error.ask: a small dialog asks the person before sending, with an option to send anonymously -
The kept window survives a failed upload and goes up on the next page load (
on_error.keep_pending) -
Shared snapshots: pages that look the same for everyone can be stored once (
snapshots.share_routes) -
Failed uploads are retried for about four minutes instead of 14 seconds
-
The player works in Firefox 140 ESR. Thanks @VincentBean.
-
except_routes: route names that never get the recorder; password-reset and verification pages left out by default -
privacy.anonymous: record signed-in people without storing who they are -
privacy.store_user_agent = falsedrops the browser's user agent -
A published
exceptlist with keyed entries no longer throws
First beta of Session Replay for Laravel: record what people do in your app with rrweb and watch it back. Names and config may still change before 1.0.
@sessionReplayrecords each tab across page loads, with sampling, opt-in consent and one recording per person and workspace- Private by default: every input masked, no IP address stored, sensitive query parameters redacted
- Errors, failed Livewire requests, Web Vitals, rage clicks and page views as markers on the timeline
- Small recordings: stylesheets stored once, batches gzipped in the browser, kept on any filesystem disk
- A built-in list and player behind the
viewSessionReplaygate, and a<x-session-replay::player>component - Replay links in Laravel's log context; the viewer in English, German, Spanish, Romanian and Russian
Docs: https://packstub.dev/docs/session-replay
What's Changed
- Check every wire:navigate page like a page load by @icaliman in #19
- Recorder privacy fixes before 1.0 by @icaliman in #21
- Mark failed fetch/XHR requests and router page views by @icaliman in #23
- privacy.unmask_text_selector: keep the app's interface readable with mask_all_text by @icaliman in #25
- Harden ingest and the viewer: concurrent first batches, atomic batches, scoped visibleUsing, player under wire:navigate by @icaliman in #27
- Player: copy link to this moment by @icaliman in #28
- Server errors on the replay timeline, and a log link that opens at the moment by @icaliman in #30
- Docs: before production and what to check when nothing shows up by @icaliman in #26
- Run the recorder bundle once per tab with wire:navigate by @icaliman in #20
- SessionReplay.send() for a report button, on_error.ask as a toast, on_error.max_buffer_mb by @icaliman in #31
- Before 1.0: masked captions and meta text, stylesheets pruned by reference by @icaliman in #35
- A marker where excluded pages were skipped, and no replay link in their log lines by @icaliman in #36
- Marker details in the player, with a report id and an Open in logs link for server errors by @icaliman in #37
- Before 1.0: config lists, strict consent, unit names, report marker, policies by @icaliman in #44
- Before 1.0: config rename on boot, browser times in the app timezone, recorder stops, player strings, autoplay by @icaliman in #45
- 1.0: drop the beta note and the @beta constraint by @icaliman in #34
Full Changelog: v1.0.0-beta.5...v1.0.0