Hotwire Turbo is a server-driven navigation and HTML streaming framework that intercepts link clicks and form submissions to fetch pages in the background and replace content without full browser reloads. It provides a Turbo Frame component that scopes page regions into independent contexts, enabling partial page updates where only a specific area of the page navigates or loads content. The framework includes a page cache and morph system that stores recently visited pages for instant restoration and applies minimal DOM changes on refresh, preserving scroll position and element state.
The framework distinguishes itself through real-time HTML streaming capabilities that deliver live page updates over WebSocket or Server-Sent Events using CRUD-like actions, without requiring custom JavaScript. It offers a hybrid native app bridge that wraps server-rendered HTML in native iOS or Android shells, managing a single WebView across multiple screens for seamless transitions between web and native sections. Turbo also provides a view transition animator that activates animated page transitions using the browser's View Transition API with configurable direction.
The framework supports lazy-loading frame content that defers fetching until a frame scrolls into the viewport, link prefetching on hover to reduce perceived navigation latency, and a CSS-based progress bar for visual feedback during navigation. It includes event-driven lifecycle hooks that fire granular events during navigation, rendering, and streaming for custom JavaScript interception, along with observability hooks that expose fetch request and response details. Turbo can be installed via CDN script tag, npm package, or Rails gem, and offers configuration options for disabling Turbo on specific elements, scoping navigation to a path, and extending stream actions with custom behavior.