When Ruby on Rails emerged in the early 2000s, it offered something radical: convention over configuration, a cohesive developer experience, and the ability to launch applications fast. It was full-stack in every sense—handling database queries, business logic, and HTML generation under one harmonious roof. But in the two decades that followed, full-stack development splintered. The frontend shifted to JavaScript-heavy single-page applications (SPAs), while the backend turned into a service-oriented blur of APIs, GraphQL layers, and state synchronization nightmares – Hotwire.
Enter Hotwire, a modern antidote to JavaScript overload, quietly bundled into Rails 7+ as its default frontend strategy. Hotwire, short for HTML Over The Wire, proposes something countercultural yet practical: using HTML as the primary data format, sent from the server to update pages without JavaScript frameworks or REST APIs. In an era over-engineered with React and Redux stacks, Hotwire dares to say—you don’t need a SPA to build fast, interactive apps.
This article examines the architectural philosophy of Hotwire, how it integrates with Rails 7+, and why it could be the most consequential shift in full-stack Ruby development since Rails itself. For developers, product teams, and engineering leaders looking to rethink their tech stacks, Hotwire isn’t just an update—it’s a recalibration.
Understanding Hotwire: The Basics
Hotwire is a collection of technologies developed by the team at Basecamp (the original creators of Rails), consisting of three primary components:
1. Turbo
Turbo replaces the need for most JavaScript in page navigation, form submissions, and real-time updates. It includes:
- Turbo Drive – speeds up page transitions by intercepting links and replacing HTML via AJAX.
- Turbo Frames – enables partial page updates by targeting specific elements.
- Turbo Streams – allows real-time updates via WebSockets, automatically updating DOM elements without manual JavaScript.
2. Stimulus
A lightweight JavaScript framework that complements Hotwire. It’s behavior-oriented, meaning you only write JavaScript for behaviors, not rendering or state management.
3. Strada (Emerging)
Still in its early stages, Strada aims to bridge Hotwire with native mobile apps by enabling shared behavior between web and native UIs.
Combined, these tools offer a modern frontend experience with minimal JavaScript, leaning on the strengths of server-rendered HTML and real-time DOM manipulation.
Why Rails 7+ Made Hotwire the Default
Rails 7+ represents a philosophical milestone in the Rails community. For years, developers were caught in a tug-of-war between the Rails ethos and the JavaScript-first web. With Rails 7, DHH and the core team doubled down on integrated simplicity.
Rails 7 Changes That Support Hotwire:
- No webpack required – Rails uses
importmap
,esbuild
, orjsbundling-rails
for JavaScript. - Turbo and Stimulus are preconfigured – Zero setup required.
- CableReady + Turbo Streams – Real-time features baked into Rails ActionCable.
Rails 7+ now encourages a full-stack approach where the backend speaks HTML directly to the frontend again—not JSON or GraphQL, unless explicitly desired.
The Case for Hotwire: Why It Matters in 2025
1. Frontend Fatigue is Real
The past decade saw an arms race in frontend complexity. Teams adopted SPAs with Redux, hooks, server-side rendering (SSR), hydration, and caching strategies. The result? High-maintenance frontends with slow build times and fragile state management.
Hotwire is refreshingly different. It sidesteps most of this complexity, offering interactivity with HTML and a sprinkle of JavaScript. For many apps—especially dashboards, admin panels, and CRUD systems—this is not just sufficient; it’s ideal.
2. Full-Stack Cohesion
One of Ruby on Rails’ historical advantages was its coherence. Developers could build entire apps without context-switching between tools and languages. Hotwire restores that focus. You write Ruby templates. You generate HTML. You wire up behavior with Stimulus if needed. There’s no frontend/backend disconnect.
This unified approach enables:
- Faster development cycles
- Smaller teams
- Lower cognitive overhead
3. Real-Time Without the Overhead
Previously, building real-time features required using JavaScript libraries (like Socket.IO or Phoenix LiveView) or polling backends via AJAX. With Hotwire’s Turbo Streams and ActionCable, you can push DOM changes to the frontend via standard Rails broadcasting patterns. No JS frameworks required.
How Hotwire Works in Practice
Let’s walk through common patterns that illustrate the simplicity and power of Hotwire.
Example 1: Page Navigation with Turbo Drive
Turbo Drive intercepts regular anchor tags and performs AJAX-like navigation while preserving browser history and scroll position:
erbCopyEdit<%= link_to "Profile", user_path(@user) %>
You don’t write fetch()
calls or handle browser states manually. Turbo handles this behind the scenes.
Example 2: Partial Updates with Turbo Frames
Turbo Frames allow you to target updates to specific parts of the page.
View:
erbCopyEdit<turbo-frame id="user_42">
<%= render @user %>
</turbo-frame>
When an update occurs (via form submission or Turbo Stream), only that frame updates—no full-page reload.
Example 3: Real-Time Updates with Turbo Streams
Turbo Streams push updates over WebSockets:
Broadcast from Controller:
rubyCopyEditTurbo::StreamsChannel.broadcast_prepend_to "messages", target: "chat", partial: "messages/message", locals: { message: @message }
Frontend:
erbCopyEdit<turbo-stream action="prepend" target="chat">
<template><%= render @message %></template>
</turbo-stream>
The browser updates in real-time, no JavaScript necessary.
When to Use Hotwire vs. JavaScript Frameworks
While Hotwire simplifies most frontend work, it’s not always the right tool. It excels in:
- CRUD dashboards
- Internal apps
- Content-heavy sites
- Admin interfaces
- MVPs or prototypes
You might still prefer React, Vue, or Svelte if your application involves:
- Complex client-side state
- Canvas rendering or games
- Offline-first capabilities
- Deep integrations with third-party JS SDKs
In such cases, Hotwire can coexist with JS frameworks. You can wrap React components inside Turbo Frames or disable Turbo for specific routes using:
erbCopyEdit<%= link_to "Advanced UI", path, data: { turbo: false } %>
Developer Experience in the Hotwire Era
1. Less Configuration, More Convention
Hotwire inherits Rails’ opinionated style. You don’t spend time wiring up routing libraries or state managers. You build features. The stack gets out of your way.
2. First-Class Debugging Tools
Turbo and Stimulus emit detailed lifecycle events, which you can listen to using browser devtools. Combine that with the Rails console, and full-stack debugging feels seamless.
3. Component-Oriented Architecture with ViewComponent
To structure frontend logic cleanly, developers are pairing Hotwire with ViewComponent, a gem that lets you write reusable, testable view components in Ruby. This allows you to organize UI logic without diving into JS-heavy frameworks.
Performance and Scalability Considerations
Hotwire apps are fast by design, but performance still depends on how you write them.
Tips:
- Cache partials aggressively
- Use stream throttling if pushing real-time updates
- Monitor database N+1 queries since more renders happen server-side
- Avoid bloated HTML payloads by using Turbo Frames wisely
Turbo does more work on the server than SPAs, but you avoid the cost of hydration, bundling, and API latency.
Hotwire in the Real World
Who’s Using Hotwire’s in 2025?
- Basecamp: The original testbed, using Hotwire end-to-end for project management features.
- HEY: A modern email client built entirely with Hotwire and Rails.
- Startups and consultancies: Many small teams now default to Hotwire for admin tools and SaaS backends, thanks to its productivity boost.
Developers report cutting frontend code by 40-60%, reducing bug surface, and simplifying onboarding.
What’s Next for Hotwire and Rails?
Looking ahead, Hotwire’s roadmap includes:
- Improved mobile integrations with Strada for hybrid apps
- Enhanced DevTools for inspecting frame changes
- Turbo Native 2.0, bridging mobile and web workflows
- Deeper integration with ViewComponent and TailwindCSS
The goal? Make Rails a true one-stack solution again—full-stack, fast, and joyful.
Final Thoughts: Hotwire Is More Than a Feature
Hotwire isn’t just a new gem or tool. It’s a return to form—a reassertion of the Rails way in a web development world that lost its way in complexity. By rejecting the over-engineering of the modern JavaScript stack, Hotwire invites us back to what Rails was always about: productivity, elegance, and simplicity.
If you’re a Ruby developer wondering how to stay relevant in 2025, or a startup engineer choosing a stack that lets you move fast without breaking your future, Hotwire isn’t just worth trying—it’s worth betting on.
Read:
CVE‑2025‑43857 in net‑imap: What Ruby Developers Need to Know
How to Fix Common Ruby Gem Installation and Configuration Issues
Is It Still Worth to Learn Ruby in 2025?
Unveiling Ruby: Insights from Stack Overflow and Developer Survey
FAQs
1. What exactly is Hotwire, and how does it relate to Rails 7+?
Hotwire is a modern frontend framework introduced by the creators of Rails. It stands for HTML Over The Wire and includes tools like Turbo and Stimulus to build fast, interactive web apps without writing complex JavaScript. Rails 7+ integrates Hotwire as the default frontend approach, replacing heavy JavaScript frameworks for many use cases.
2. How does Hotwire improve performance and development speed compared to traditional SPAs?
Hotwire avoids rendering on the client by sending pre-rendered HTML from the server, drastically reducing JavaScript complexity. This leads to:
- Faster page loads
- Smaller frontend bundles
- Quicker development cycles
- Fewer bugs from state mismanagement
It allows small teams to build full-featured apps with less overhead.
3. When should I choose Hotwire over React, Vue, or Angular?
Hotwire is ideal for:
- CRUD apps
- Internal tools and dashboards
- Admin panels
- Content-heavy or real-time interfaces
Use traditional JS frameworks if your app requires:
- Complex local state
- Canvas or drag-and-drop interfaces
- Offline capabilities
- Full client-side routing
4. Can I use JavaScript frameworks alongside Hotwire in a Rails app?
Yes. Rails 7+ allows hybrid setups. You can:
- Use Turbo Frames to isolate or disable Hotwire for certain pages
- Embed React/Vue components within Rails views
- Load JS components conditionally
This flexibility makes gradual adoption easy.
5. What’s the learning curve like for developers new to Hotwire?
Hotwire has a gentle learning curve, especially for Ruby and Rails developers. It uses familiar concepts:
- HTML rendering on the server
- Minimal JavaScript with Stimulus
- Clear conventions over configuration
Most developers report being productive with Hotwire within days, not weeks.