finds.dev← search

// the find

marcoroth/turbo_power

★ 518 · TypeScript · MIT · updated Jul 2026

Custom Actions power-pack for Turbo Streams

TurboPower extends Turbo Streams with ~50 additional actions covering DOM manipulation, attribute management, browser history, storage, notifications, and more. It's the missing stdlib for Hotwire Rails apps that keep bumping into the limits of the built-in append/prepend/replace/remove actions. If you're building a Rails app with Turbo and find yourself reaching for a StimulusReflex-style operation, this is the answer without the ActionCable dependency.

The action surface is genuinely wide — history.pushState, scrollIntoView, CSS class toggling, localStorage — things you'd otherwise wire up with a dedicated Stimulus controller for each. Test coverage is thorough and organized by action category, not just happy-path integration tests. The Rails companion gem (turbo_power-rails) means server-side ergonomics match the JS side, so you're not hand-crafting custom stream templates. Bundle size stays small because each action is just a function registered into Turbo.StreamActions — no runtime overhead beyond what you already have.

The 'morph' action delegates to turbo-morph which itself depends on the idiomorph algorithm, meaning you're pulling in a dependency chain that isn't obvious from the README — if idiomorph has a bug with your DOM structure, the debugging path gets awkward. No server-side support outside Rails and Django; if you're on a different backend you're writing your own stream tags by hand. The playground exists but it's a local Vite mock, not a hosted demo, so evaluating behavior before committing requires running it locally. The set_cookie action builds a raw cookie string rather than using a proper cookie API, which means getting attributes like SameSite or Secure right is on you.

View on GitHub →

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →