Week 09/10/11 - Understanding importmap-rails, Herb v0.9, and more!
Discover the latest Hotwire insights, tutorials, and releases in this week edition of Hotwire Weekly!

Welcome to Hotwire Weekly!
Welcome to another issue of Hotwire Weekly! Happy reading! 🚀✨
📚 Articles, Tutorials, and Videos

What's new in Herb v0.9 - Marco Roth announces Herb v0.9 with Action View tag helper support, Prism AST node integration for deeper Ruby understanding, a strict parsing mode, 24 new linter rules, and language server enhancements like code folding and document highlights.
Smooth UI animations on server-rendered HTML - Adrien Siami shows how to create SPA-like animations in server-rendered Rails apps by combining Turbo's morphing with the View Transitions API. Adding a single meta tag and view-transition-name properties to elements enables smooth sliding and fading effects without custom animation code.
htmx Infinite Scroll - Brooke Kuhlmann demonstrates building an infinite scrolling photo gallery using htmx and Ruby, leveraging hx-get, hx-trigger, and hx-swap to load content dynamically as users scroll while preserving browser history and search functionality.
How to navigate with Turbo Frames - Sid Krishnan explains how Turbo decides between frame navigation and full-page navigation, clarifies why the "Content Missing" error occurs, and provides practical solutions for both static and dynamic navigation scenarios.
Video Preview on Hover with Stimulus - Rails Designer walks through building video previews that play on hover using Stimulus, cycling through different video segments on mouseenter while preserving the original playback state on mouseleave.
Understanding importmap-rails - Rails Designer explains how importmap-rails leverages the web standard of import maps to resolve JavaScript module imports without a build step, with practical examples using Turbo Stream actions and Stimulus controllers.
pwa.support and the Mediocre State of PWAs - Dave Copeland created pwa.support to document how Progressive Web Apps function across browsers and operating systems, concluding that there's still no combination that provides a truly app-like experience despite years of development.
A bulletproof wait_for_turbo test helper - Ben Sheldon shares a wait_for_turbo test helper that eliminates flaky system tests by pausing until the page reaches a stable state, handling edge cases like the brief moment between a form submit redirect response and the actual navigation.
You Know Hotwire Basics. Now What? - Julian Rubisch addresses the common plateau developers hit after learning Hotwire fundamentals, and outlines how to bridge the gap between tutorial knowledge and solving real-world production problems.
Hotwire Club: Turbo Frames - Form Submission Loading States - Julian Rubisch published a new challenge for The Hotwire Club demonstrating how to provide visual feedback during form submissions within Turbo Frames by leveraging Turbo 8's data-turbo-submits-with attribute and CSS styling of the frame's [busy] attribute.
Remote Ruby: LiveComponent with Cameron Dutro - Cameron Dutro joins the Remote Ruby podcast to introduce LiveComponent, a library that adds client-side state and targeted re-rendering to Rails ViewComponent using Hotwire and Stimulus with minimal JavaScript.
GoRails: CSS Anchor Positioning Basics - Collin Jilbert published a new episode on GoRails teaching how to use CSS anchor positioning to build tooltips that automatically adjust their position near viewport edges, eliminating the need for JavaScript-based positioning solutions.
GoRails: Invoker Commands API - Collin Jilbert published a new episode on GoRails covering the Invoker Commands API.
Goodbye innerHTML, Hello setHTML: Stronger XSS Protection in Firefox 148 - Tom Schuster, Frederik Braun, and Christoph Kerschbaumer on the Mozilla Hacks blog introduce the standardized Sanitizer API with a new setHTML() method in Firefox 148 that sanitizes untrusted HTML before DOM insertion, providing a safer alternative to innerHTML that strips malicious code while preserving safe elements.
Why is WebAssembly a second-class language on the web? - Ryan Hunt on the Mozilla Hacks blog argues that WebAssembly's indirect access to web APIs through JavaScript glue code limits its adoption, and proposes WebAssembly Components as a standardized format to give it native web API binding.
External import maps, today! - Lea Verou demonstrates that external import maps can be emulated today using a classic blocking script that dynamically injects an <script type="importmap"> element into the DOM, while arguing the platform still needs deeper integration to reduce architectural debt.
🧰 Libraries and Tools
Live Component - LiveComponent is a client-side rendering and state management library for ViewComponent.
Web Haptics - Haptic Feedback for the mobile web.
Ruflet - Ruby port of Flet for building web, desktop, and mobile apps in Ruby.
rails_vite - Simple Vite integration for Rails,
🎉 Releases
herb v0.9.0 - Powerful and seamless HTML-aware ERB toolchain.
view_component v4.5.0 - A framework for building reusable, testable & encapsulated view components.
Rails Blocks March 2026 - UI components for your Rails app.
tailwindcss-ruby v4.2.1 - A self-contained tailwindcss executable, wrapped up in a ruby gem.
cubism v0.2.1 - Lightweight Resource-Based Presence Solution with CableReady.
vite_ruby v3.9.3 - Use Vite in Ruby and bring joy to your JavaScript experience.
shakapacker v9.6.0 and v9.6.1 - Use Webpack to manage app-like JavaScript modules in Rails.
lexxy v0.8.2.beta - A modern rich text editor for Rails.
anycable v1.6.11 - Realtime server for reliable two-way communication to power-up any backend.
islandjs-rails v2.0.0 - React components in Rails ERB templates.
node-turbo v1.3.0 - A library for Node.js to assist with the server side of Turbo.
Feel free to follow us on Twitter/X, Bluesky, Linkedin, or on Mastodon!
See you next week!