| name | ember-best-practices |
| description | Ember.js performance optimization and accessibility guidelines. This skill should be used when writing, reviewing, or refactoring Ember.js code to ensure optimal performance patterns and accessibility. Triggers on tasks involving Ember components, routes, data fetching, bundle optimization, or accessibility improvements. |
| license | MIT |
| metadata | {"author":"Ember.js Community","version":"1.0.0"} |
Ember.js Best Practices
Comprehensive performance optimization and accessibility guide for Ember.js applications. Contains 58 rules across 10 categories, prioritized by impact to guide automated refactoring and code generation.
When to Apply
Reference these guidelines when:
- Writing new Ember components or routes
- Implementing data fetching with WarpDrive
- Reviewing code for performance issues
- Refactoring existing Ember.js code
- Optimizing bundle size or load times
- Implementing accessibility features
Rule Categories by Priority
| Priority | Category | Impact | Prefix |
|---|
| 1 | Route Loading and Data Fetching | CRITICAL | route- |
| 2 | Build and Bundle Optimization | CRITICAL | bundle- |
| 3 | Component and Reactivity | HIGH | component-, exports- |
| 4 | Accessibility Best Practices | HIGH | a11y- |
| 5 | Service and State Management | MEDIUM-HIGH | service- |
| 6 | Template Optimization | MEDIUM | template-, helper- |
| 7 | Performance Optimization | MEDIUM | performance- |
| 8 | Testing Best Practices | MEDIUM | testing- |
| 9 | Tooling and Configuration | MEDIUM | vscode- |
| 10 | Advanced Patterns | MEDIUM-HIGH | advanced- |
Quick Reference
1. Route Loading and Data Fetching (CRITICAL)
route-parallel-model - Use RSVP.hash() for parallel data loading
route-loading-substates - Implement loading substates for better UX
route-lazy-routes - Use route-based code splitting with Embroider
route-templates - Use route templates with co-located syntax
route-model-caching - Implement smart route model caching
2. Build and Bundle Optimization (CRITICAL)
bundle-direct-imports - Import directly, avoid entire namespaces
bundle-embroider-static - Enable Embroider static mode for tree-shaking
bundle-lazy-dependencies - Lazy load heavy dependencies
3. Component and Reactivity Optimization (HIGH)
component-use-glimmer - Use Glimmer components over classic components
component-cached-getters - Use @cached for expensive computations
component-minimal-tracking - Only track properties that affect rendering
component-tracked-toolbox - Use tracked-built-ins for complex state
component-composition-patterns - Use yield blocks and contextual components
component-reactive-chains - Build reactive chains with dependent getters
component-class-fields - Use class fields for component composition
component-controlled-forms - Implement controlled form patterns
component-on-modifier - Use {{on}} modifier for event handling
component-args-validation - Validate component arguments
component-memory-leaks - Prevent memory leaks in components
component-strict-mode - Use strict mode and template-only components
component-avoid-classes-in-examples - Avoid unnecessary classes in component examples
component-avoid-constructors - Avoid constructors in Glimmer components
component-avoid-lifecycle-hooks - Avoid legacy lifecycle hooks
component-file-conventions - Follow proper file naming conventions
exports-named-only - Use named exports only
4. Accessibility Best Practices (HIGH)
a11y-automated-testing - Use ember-a11y-testing for automated checks
a11y-semantic-html - Use semantic HTML and proper ARIA attributes
a11y-keyboard-navigation - Ensure full keyboard navigation support
a11y-form-labels - Associate labels with inputs, announce errors
a11y-route-announcements - Announce route transitions to screen readers
5. Service and State Management (MEDIUM-HIGH)
service-cache-responses - Cache API responses in services
service-shared-state - Use services for shared state
service-ember-data-optimization - Optimize WarpDrive queries
service-owner-linkage - Manage service owner and linkage patterns
service-data-requesting - Implement robust data requesting patterns
6. Template Optimization (MEDIUM)
template-let-helper - Use {{#let}} to avoid recomputation
template-each-key - Use {{#each}} with @key for efficient list updates
template-avoid-computation - Move expensive work to cached getters
template-helper-imports - Import helpers directly in templates
template-conditional-rendering - Optimize conditional rendering
template-fn-helper - Use {{fn}} helper for partial application
template-only-component-functions - Use template-only components
helper-composition - Compose helpers for reusable logic
helper-builtin-functions - Use built-in helpers effectively
helper-plain-functions - Write helpers as plain functions
7. Performance Optimization (MEDIUM)
performance-on-modifier-vs-handlers - Use {{on}} modifier instead of event handler properties
8. Testing Best Practices (MEDIUM)
testing-modern-patterns - Use modern testing patterns
testing-qunit-dom-assertions - Use qunit-dom for better test assertions
testing-test-waiters - Use @ember/test-waiters for async testing
testing-render-patterns - Use correct render patterns for components
testing-msw-setup - Mock API requests with MSW
testing-library-dom-abstraction - Use Testing Library patterns
9. Tooling and Configuration (MEDIUM)
vscode-setup-recommended - VS Code extensions and MCP server setup
10. Advanced Patterns (MEDIUM-HIGH)
advanced-modifiers - Use modifiers for DOM side effects
advanced-helpers - Extract reusable logic into helpers
advanced-tracked-built-ins - Use reactive collections from @ember/reactive/collections
advanced-concurrency - Use ember-concurrency for task management
advanced-data-loading-with-ember-concurrency - Data loading patterns with ember-concurrency
How to Use
Read individual rule files for detailed explanations and code examples:
rules/route-parallel-model.md
rules/bundle-embroider-static.md
rules/a11y-automated-testing.md
Each rule file contains:
- Brief explanation of why it matters
- Incorrect code example with explanation
- Correct code example with explanation
- Additional context and references
Accessibility with OSS Tools
Ember has excellent accessibility support through community addons:
- ember-a11y-testing - Automated accessibility testing in your test suite
- ember-a11y - Route announcements and focus management
- ember-focus-trap - Focus trapping for modals and dialogs
- ember-page-title - Accessible page title management
- Platform-native validation - Use browser's Constraint Validation API for accessible form validation
These tools, combined with native web platform features, provide comprehensive a11y support with minimal configuration.
Full Compiled Document
For the complete guide with all rules expanded: AGENTS.md