Sentiero is an open-source session recording gem for Ruby. Drop it into any Rack app (Rails, Sinatra, Hanami, Roda) and understand your users without compromising their privacy.
Session replay in the built-in dashboard: timeline, activity sidebar, and Web Vitals.
Self-hosted, framework-agnostic, and genuinely free. No artificial limits, no data leaves your servers.
Full DOM recording powered by rrweb. Captures clicks, scrolls, navigations, and DOM mutations. Events are gzip-compressed, batched (time and count thresholds), and retried automatically on network failure.
Built-in admin viewer mounts inside your app. Browse and search sessions, replay with activity sidebar, color-coded event timeline, playback speed (1x to 16x), keyboard shortcuts, and multi-window tab switching.
Click positions rendered spatially on the DOM snapshot during replay. Scroll depth indicator shows how far the user scrolled. All computed client-side from loaded events, no extra server cost.
Track specific interactions with window.Sentiero.addCustomEvent() or declarative data-sentiero-track-* HTML attributes. Supports click, change, submit, focus, and blur events with optional JSON payloads.
Opt-in recording of JavaScript errors and unhandled promise rejections. Errors appear as markers in the replay timeline at the exact moment they occurred, with message, source file, line number, and stack trace.
Opt-inMemory store for development. Redis with sorted sets and optional TTL for production. ActiveRecord for Rails apps. Or implement the store interface and bring your own backend. Configurable resource limits prevent unbounded growth.
Also included
Aggregate insight across every recorded session, computed on your own server and shipped in the open-source gem. No separate tier.
Click density across all sessions for a page, attributed per URL so multi-page sessions don't blur together.
Per-page scroll-depth distribution with fold lines, so you can see how far visitors actually get.
Field-level interaction and drop-off, with human-readable field labels resolved from the DOM. Values stay masked.
Chain custom events into a funnel and watch where users fall out, step by step.
Filter sessions by browser, device, URL, metadata, error presence, or duration, and combine filters freely.
CSV/JSON export of analytics data, plus self-contained HTML replays you can attach to a bug report. No server needed.
Privacy-conscious defaults out of the box. All form inputs are masked. Password masking is enforced at the code level and cannot be disabled. Anything potentially invasive must be explicitly enabled by you.
Values typed into text fields, textareas, and selects are replaced with asterisks before reaching the server. Password masking is hardcoded in both Ruby and JavaScript and cannot be overridden.
Block entire sections with data-rr-block, mask text with data-rr-mask, or ignore mutations with data-rr-ignore. Selectively unmask specific inputs with data-sentiero-unmask when needed.
Error capture, navigation tracking, metadata collection, and custom event tracking are all off by default. Enable them individually as needed.
No third-party data processors, no SaaS middlemen, no phone-home. Your data stays in your infrastructure. GDPR compliance is simpler when you're both controller and processor.
Built-in helpers let users disable recording. Global Privacy Control is supported and respected by default: the recorder reads navigator.globalPrivacyControl client-side, so if a browser signals "don't track me," the recorder won't start.
Using Roda, Sinatra, or plain Rack? The core sentiero gem works with any Rack-compatible framework. See the docs for framework-specific setup.
The community edition is MIT-licensed and feature-complete. It is not a trial, not a demo, and not a crippled version of a paid product. Session recording, replay, heatmaps, custom events, error capture, privacy controls, and export all ship in the open-source gem, with no artificial limits.
Every recording, replay, and privacy feature works without a license key, usage cap, or time limit. Free forever, in production, with no paywalled features.
Bug fixes, features, and security patches happen in the open. Contributions are welcome. The roadmap reflects what users actually need.
Cross-session analytics (heatmaps, scroll depth, form analytics, conversion funnels, and segmentation) ship in the gem. No tier, no license key, no usage cap.
Two questions most people have. Here are the honest answers.
rrweb is the in-browser record and replay primitive. Sentiero builds the whole product around it: transport, storage, a replay dashboard, cross-session analytics (funnels, frustration signals, engagement, Web Vitals, conversions), and error tracking.
The bigger gap is privacy. rrweb gives you masking primitives; Sentiero adds a real privacy layer on top: enforced password masking, mask-all-inputs by default, Global Privacy Control respected by default, user opt-out, server-side sanitizers, IP anonymization, and retention plus erasure tooling.
Hosted tools are quick to switch on, but your session data lives on someone else's servers and pricing scales with seats and sessions. Sentiero is self-hosted and embeddable: it mounts inside your own Ruby app, so recordings never leave your infrastructure.
It is open source and free with no seat caps, no session caps, and no paywalled features. The honest tradeoff: you run and scale it yourself, on the storage backend you already operate.
Add Sentiero to your Gemfile, mount the routes, and you're recording sessions in under a minute. Free, open source, privacy-first.