explaingit

hotwired/turbo

7,314JavaScriptAudience · developerComplexity · 3/5Setup · easy

TLDR

JavaScript library from 37signals that makes server-rendered web apps feel instant by intercepting link clicks and updating only the changed parts of the page, with no full reloads and no custom JavaScript needed.

Mindmap

mindmap
  root((Turbo))
    Components
      Turbo Drive
      Turbo Frames
      Turbo Streams
      Turbo Native
    What it does
      Instant navigation
      Partial page updates
      Live server push
    Tech Stack
      JavaScript
      HTML
      WebSocket
    Audience
      Rails developers
      Server-side apps
Click or tap to explore — scroll the page freely

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

Things people build with this

USE CASE 1

Add fast, app-like navigation to a traditional Rails or Django app without building a JavaScript SPA.

USE CASE 2

Push live database updates to all connected users in real time using Turbo Streams over WebSockets.

USE CASE 3

Split a page into independent sections that each load or refresh on their own without disturbing the rest of the page.

USE CASE 4

Wrap a server-rendered web app inside a native iOS or Android shell with smooth transitions using Turbo Native.

Tech stack

JavaScriptHTMLWebSocket

Getting it running

Difficulty · easy Time to first run · 30min

In plain English

Turbo is a JavaScript library that makes web applications feel faster without requiring developers to write large amounts of custom JavaScript. It was created by 37signals, the company behind Basecamp and Hey, and is part of a broader toolkit called Hotwire. The core idea is that instead of rebuilding an entire page every time a user clicks a link or submits a form, Turbo intercepts those actions and updates only the parts of the page that actually changed. This produces a fast, fluid experience without the complexity of building a fully JavaScript-driven application from scratch. Turbo is made up of four main components. Turbo Drive handles link clicks and form submissions, preventing full page reloads so navigation feels instant. Turbo Frames let you divide a page into independent sections, each of which can load separately or update on its own without disturbing the rest of the page. Turbo Streams push live updates directly to the page, either through a persistent WebSocket connection or in response to form actions, using ordinary HTML rather than custom JavaScript logic. Turbo Native connects a server-rendered web application to native iOS and Android apps, allowing the same backend to power both the web and mobile versions with smooth transitions between the two. All of these techniques work by sending HTML from the server to the browser, rather than sending raw data and letting the browser reconstruct the page. For situations where that approach is not enough and more interactive behavior is needed, Turbo is designed to pair with Stimulus, another Hotwire library that handles specific JavaScript interactions in a structured way. The project is open source and documentation is available at turbo.hotwired.dev.

Copy-paste prompts

Prompt 1
I have a Rails app and want navigation to feel instant without building a React SPA. Show me how to set up Turbo Drive to intercept link clicks and form submissions and update the page without a full reload.
Prompt 2
Using Turbo Streams, show me how to broadcast a new comment to all connected users the moment it's saved to the database, without any page reload.
Prompt 3
I want a sidebar section to load independently from the main content in my server-rendered app. Show me how to set up a Turbo Frame for this.
Prompt 4
How do I use Turbo Native to wrap my Hotwire web app in a native iOS app shell with smooth page-to-page transitions?
Open on GitHub → Explain another repo

← hotwired on gitmyhub — every repo by this author, as a profile.

Verify against the repo before relying on details.