rails-hotwire
33
总安装量
3
周安装量
#11140
全站排名
安装命令
npx skills add https://github.com/pproenca/dot-skills --skill rails-hotwire
Agent 安装分布
claude-code
3
github-copilot
3
codex
3
gemini-cli
3
opencode
3
amp
2
Skill 文档
Community Rails Hotwire Best Practices
Comprehensive guide for building interactive Rails applications with Hotwire (Turbo + Stimulus), maintained by Community. Contains 53 rules across 9 categories, prioritized by impact to guide automated refactoring and code generation. Follows the DHH “One Person Framework” philosophy: the server renders HTML, Turbo makes it feel like an SPA, Stimulus adds the sprinkle of JS where needed.
When to Apply
Reference these guidelines when:
- Configuring Turbo Drive navigation, prefetching, and caching behavior
- Adding Turbo Frames for partial page updates and lazy loading
- Delivering Turbo Streams for surgical DOM mutations
- Broadcasting real-time updates over ActionCable
- Enabling Turbo 8 morphing for page refreshes
- Writing Stimulus controllers for client-side behavior
- Handling errors in Turbo navigation, frames, and WebSocket connections
- Choosing between Drive, Frames, Streams, Morphing, and Stimulus
- Testing Hotwire interactions in system and integration tests
Rule Categories by Priority
| Priority | Category | Impact | Prefix |
|---|---|---|---|
| 1 | Navigation & Drive | CRITICAL | drive- |
| 2 | Turbo Frames | CRITICAL | frame- |
| 3 | Turbo Streams | HIGH | stream- |
| 4 | Broadcasting & Real-Time | HIGH | bcast- |
| 5 | Morphing & Page Refresh | HIGH | morph- |
| 6 | Performance Optimization | MEDIUM-HIGH | perf- |
| 7 | Stimulus Patterns | MEDIUM-HIGH | stim- |
| 8 | Architecture Decisions | MEDIUM | arch- |
| 9 | Testing Hotwire | MEDIUM | test- |
Quick Reference
1. Navigation & Drive (CRITICAL)
drive-prefetch-links– Enable link prefetching for instant navigationdrive-form-submissions– Use Turbo Drive for form submissionsdrive-visit-actions– Control history with visit actionsdrive-cache-control– Configure Turbo cache for preview pagesdrive-selective-disable– Disable Turbo Drive on incompatible pagesdrive-progress-bar– Customize the Turbo progress bardrive-confirm-dialog– Use data-turbo-confirm for destructive actionsdrive-error-recovery– Handle Turbo navigation and fetch errors gracefully
2. Turbo Frames (CRITICAL)
frame-lazy-loading– Defer frame loading until viewport entryframe-scope-navigation– Scope navigation within framesframe-src-navigation– Use src for dynamic frame contentframe-break-out– Handle frame breakout for redirectsframe-promote-visits– Promote frame navigation to page visitsframe-dom-id– Use dom_id for frame identificationframe-empty-state– Provide meaningful frame loading states
3. Turbo Streams (HIGH)
stream-progressive-enhance– Always provide HTML fallback for streamsstream-action-selection– Choose the right stream action for DOM mutationsstream-multi-target– Use targets for multi-element updatesstream-http-delivery– Deliver streams via HTTP for form responsesstream-websocket-source– Connect WebSocket sources in the bodystream-custom-actions– Register custom stream actions for complex DOM updates
4. Broadcasting & Real-Time (HIGH)
bcast-model-broadcasts– Use broadcasts_refreshes for simple model updatesbcast-debounce-n1– Debounce broadcasts to prevent N+1 broadcast stormsbcast-scope-streams– Scope broadcast streams to accounts or usersbcast-refresh-over-replace– Prefer broadcast refresh over granular stream updatesbcast-avoid-view-logic-in-models– Keep broadcasting logic out of modelsbcast-signed-stream-names– Use signed stream names for securitybcast-reconnect-handling– Handle WebSocket disconnection and reconnection
5. Morphing & Page Refresh (HIGH)
morph-enable-page-refresh– Enable morphing for page refreshesmorph-permanent-elements– Mark stateful elements as permanentmorph-scroll-preservation– Preserve scroll position during morphingmorph-stimulus-reconnect– Handle Stimulus controller reconnection after morphmorph-frame-refresh– Use refresh=’morph’ on frames for additive contentmorph-vs-streams– Choose morphing over complex stream orchestration
6. Performance Optimization (MEDIUM-HIGH)
perf-optimistic-ui– Implement optimistic UI updates before server confirmationperf-batch-streams– Batch multiple stream updates into single responsesperf-frame-caching– Cache Turbo Frame responses with fragment cachingperf-prefetch-strategic– Disable prefetch on expensive endpointsperf-memory-leak-prevention– Clean up subscriptions and event listeners
7. Stimulus Patterns (MEDIUM-HIGH)
stim-outlets-communication– Use outlets for cross-controller communicationstim-values-reactive-state– Use Values API for reactive controller statestim-action-descriptors– Use declarative action descriptors over addEventListenerstim-small-reusable-controllers– Keep Stimulus controllers small and reusable
8. Architecture Decisions (MEDIUM)
arch-progressive-enhancement– Follow the progressive enhancement hierarchyarch-frame-vs-stream-decision– Use frames for scoped navigation, streams for multi-target updatesarch-importmap-management– Pin JavaScript dependencies with import mapsarch-avoid-client-state– Keep state on the server, not the clientarch-stimulus-boundaries– Use Stimulus only for client-side behavior
9. Testing Hotwire (MEDIUM)
test-system-test-async– Wait for Turbo updates in system teststest-stream-assertions– Use Turbo Stream test helpers in integration teststest-broadcast-assertions– Assert broadcasts with Turbo test helperstest-frame-navigation– Test frame navigation with scoped assertionstest-websocket-timing– Handle WebSocket connection timing in system tests
How to Use
Read individual reference files for detailed explanations and code examples:
- Section definitions – Category structure and impact levels
- Rule template – Template for adding new rules
Reference Files
| File | Description |
|---|---|
| references/_sections.md | Category definitions and ordering |
| assets/templates/_template.md | Template for new rules |
| metadata.json | Version and reference information |