Lightweight session replay and observability for Mobile and Web Apps
Focus with pixel-perfect video capture and real-time incident detection.
True FPS video playback capturing every rendered pixel. Unlike competitors, we capture everything—including Mapbox (Metal), custom shaders, and GPU-accelerated views.
See crashes, errors, and rage taps as they happen in real-time with instant crash reporting.
Automatic detection of Application Not Responding events with full thread dumps and main thread analysis.
Visualize how users navigate your app. Identify high-friction drop-off points and optimize conversion funnels.
Visualize user engagement with precision. See where they tap, swipe, and scroll to optimize UI placement.
Monitor performance and stability across different regions. Spot infrastructure issues before they affect your global audience.
Track user retention and loyalty segments. Understand how releases impact your power users versus bounce rates.
Smart email notifications for crashes, ANRs, and error spikes. Role-based access for engineering teams.
Full integration guides and API reference: https://rejourney.co/docs/reactnative/overview
- Single-node Docker Compose self-hosting: https://rejourney.co/docs/selfhosted
- Enterprise-grade K3s hosting (architecture docs): https://rejourney.co/docs/architecture/distributed-vs-single-node
- Cloud architecture + Tailscale diagrams — deployment overview, public vs tailnet admin path.
- ClickHouse API endpoint stats migration — analytics scale-out plan and backfill/cutover runbook.
- Network exposure and Tailscale — which
rejourney.cohosts stay public; kube API on tailnet. - Admin tools without public URLs — pgweb, Redis Commander, Netdata, Traefik, Uptime Kuma via
kubectl port-forward.
Want to contribute to Rejourney? See our Contributing Guide: https://rejourney.co/docs/community/contributing
Local development mirrors production through local-k8s/. For a fresh checkout, copy local-k8s/env.example to .env.k8s.local, fill the required local secrets, then run npm run ci:local to install, validate, build, deploy, migrate, and start the local stack. After that first bootstrap, use npm run dev for the hot-reload daily workflow.
docker-compose.selfhosted.yml is the official single-node self-hosted deployment path.
Rejourney is designed to stay out of the way: small package footprint, low browser intensity, and mobile capture work that keeps the main thread clear. The landing-page benchmark gallery is directly linkable at rejourney.co/#benchmark-gallery.
Live Chromium benchmark across the three web fixtures: Next.js, SvelteKit, and Nuxt. Each SDK ran against a live project endpoint for 3 iterations per framework. Lower is better for every metric below.
Evidence: benchmark report, raw results, Rejourney live network captures, PostHog network captures.
| Section | Winner | Margin |
|---|---|---|
| Bundlephobia gzipped package size | Rejourney | 3.9x smaller than posthog-js |
| Median live SDK upload body | Rejourney | 3.0x smaller than PostHog |
| Browser task duration | Rejourney | 1.1x lower median task time |
| Script execution time | Rejourney | 2.0x lower median script time |
| Final JS heap | Rejourney | 1.4x lower median heap |
Bundlephobia fixed-version package size. Gzip is the transfer-size segment; minified is the full bar represented in the gallery.
| Package | Version | Minified | Gzipped | Source |
|---|---|---|---|---|
@rejourneyco/browser |
0.1.0 |
52.3 kB | 15.9 kB | Bundlephobia |
posthog-js |
1.374.2 |
187.5 kB | 61.5 kB | Bundlephobia |
| App | Rejourney upload | PostHog upload | Rejourney task | PostHog task | Rejourney script | PostHog script | Rejourney heap | PostHog heap |
|---|---|---|---|---|---|---|---|---|
| Next.js | 21.29 KiB | 45.35 KiB | 417.96 ms | 449.91 ms | 160.46 ms | 185.06 ms | 15.81 MiB | 16.19 MiB |
| SvelteKit | 8.38 KiB | 24.99 KiB | 268.72 ms | 304.03 ms | 19.35 ms | 42.02 ms | 6.63 MiB | 9.17 MiB |
| Nuxt | 8.40 KiB | 26.57 KiB | 305.51 ms | 322.24 ms | 21.12 ms | 41.17 ms | 11.33 MiB | 15.44 MiB |
Rejourney Mobile uses an async capture pipeline with run loop gating, so capture work can happen off the app's critical rendering path and automatically pause during high-interaction periods.
| Package | Version | Minified | Gzipped | Winner |
|---|---|---|---|---|
@rejourneyco/react-native |
1.0.17 |
39.7 kB | 13.2 kB | 10.2x smaller minified JS bundle |
@sentry/react-native |
8.7.0 |
403 kB | 135.3 kB | - |
Sources: @rejourneyco/react-native on Bundlephobia, @sentry/react-native on Bundlephobia.
Device: iPhone 15 Pro (iOS 26)
Environment: Expo SDK 54, React Native New Architecture
Test App: Merch App production build with Mapbox Metal and Firebase
Test Workload: 46 complex feed items, Mapbox GL View, 124 API calls, 31 subcomponents, active gesture tracking, and real-time privacy redaction.
| Metric | Avg (ms) | Max (ms) | Min (ms) | Thread |
|---|---|---|---|---|
| Main: UIKit + Metal Capture | 12.4 | 28.2 | 8.1 | Main |
| BG: Async Image Processing | 42.5 | 88.0 | 32.4 | Background |
| BG: Tar+Gzip Compression | 14.2 | 32.5 | 9.6 | Background |
| BG: Upload Handshake | 0.8 | 2.4 | 0.3 | Background |
| Total Main Thread Impact | 12.4 | 28.2 | 8.1 | Main |
Total Main Thread Impact is the only work in this table that blocks app rendering.
Engineering decisions and architecture: https://rejourney.co/engineering
Client-side components (SDKs, CLIs) are licensed under Apache 2.0. Server-side components (backend, dashboard) are licensed under SSPL 1.0. See LICENSE-APACHE and LICENSE-SSPL for details.




