Bevy UI Example - ECS-Based Game Interfaces
Production-ready Bevy UI 0.15+ patterns for ECS-based game user interfaces.
Last Updated: 2026-03-14
Bevy Version: 0.15+
Rust Version: 1.85+ (2021 edition)
Purpose
This example demonstrates building production-ready game UIs using Bevy UI 0.15+ with ECS (Entity-Component-System) architecture. Patterns include:
- ECS UI State Management - Component-based UI state, system-driven updates
- Zero-Copy UI State Transfer - Direct memory transfer, no serialization overhead
- Accessibility Patterns - ARIA-like ECS components, focus management systems
- Systemic Consistency - ECS validation rules, state machine consistency
- Game Design Integration - Player HUD, inventory UI, dialogue systems
2026 Best Practices
Bevy UI 0.15+ Architecture Patterns
| Pattern |
Use Case |
Implementation |
| UI Camera |
Dedicated UI rendering |
Camera2dBundle::ui() |
| UI State Component |
State storage |
#[derive(Component)] |
| State System |
State transitions |
fn ui_state_system() |
| Event-driven UI |
Reactive updates |
Events::<UiEvent>::send() |
| Zero-Copy Transfer |
High-performance |
bytemuck derive, direct memory |
ECS UI State Management
// ECS UI state component pattern
#[derive(Component, Clone, Debug)]
struct UiState {
focus: Option<Entity>,
active_panel: PanelType,
theme: UiTheme,
accessibility: AccessibilityConfig,
}
// System-driven state updates
fn update_ui_state(
mut ui_state: ResMut<UiState>,
input: Res<InputMap>,
mut commands: Commands,
) {
if input.pressed("Tab") {
ui_state.focus = ui_state.next_focus();
}
}
Zero-Copy Transfer Patterns
| Pattern |
Use Case |
Implementation |
| Bytemuck Derive |
Safe zero-copy |
#[derive(Bytemuck)] |
| Pod Trait |
Plain old data |
unsafe impl Pod |
| Zeroable Trait |
Zero initialization |
unsafe impl Zeroable |
| Direct Slice |
Batch transfers |
&[T] without allocation |
| GPU Upload |
Texture/buffer |
encoder.write_buffer() |
Accessibility (A11Y) Requirements
| Requirement |
ECS Pattern |
WCAG Level |
| Focus Tracking |
FocusComponent on entities |
AA |
| ARIA Labels |
LabelComponent with text |
A |
| Keyboard Nav |
InputMap system bindings |
A |
| High Contrast |
ThemeComponent variants |
AA |
| Screen Reader |
Text-to-speech events |
AA |
Systemic Consistency Rulesets
ECS UI CONSISTENCY RULES:
1. **STATE MACHINE VALIDATION**
- UI state transitions validated by systems
- Invalid transitions logged + rejected
- State machine type-checked at compile time
2. **COMPONENT BOUNDARIES**
- UI components separate from game components
- No direct mutation across boundaries
- Systems enforce separation
3. **EVENTUAL CONSistency**
- UI events queued via Events<T>
- Systems process in deterministic order
- Conflicts resolved by system priority
4. **ZERO-COPY GUARANTEES**
- All UI state derives Bytemuck
- No allocation during transfer
- GPU upload via direct memory
Running the Example
cd examples/rust/bevy-ui-example
cargo init
cargo add bevy@0.15
cargo add bytemuck
cargo run
File Structure
| File |
Purpose |
Key Patterns |
main.rs |
Bevy app setup, UI systems |
UI camera, state systems |
ecs-ui-state.rs |
ECS UI state management |
Components, systems, events |
zero-copy-transfer.rs |
Zero-copy UI transfer |
Bytemuck, Pod, Zeroable |
Architecture
+------------------+ +------------------+ +------------------+
| Bevy App | | ECS Systems | | GPU Renderer |
| (UI Camera) | | (State Logic) | | (wgpu) |
+------------------+ +------------------+ +------------------+
| | |
| UI Components | |
|-----------------------| |
| | |
| State Systems | Validate state |
|-----------------------|------------------------|
| | |
| Zero-Copy Transfer | Direct memory |
|-----------------------|------------------------|
| | |
| | GPU Upload |
| |------------------------|
| | |
| | Render |
| |------------------------|
Guardrails Compliance
| Rule |
Implementation |
| PRODUCTION FIRST |
ECS systems before UI tests |
| COMPONENT BOUNDARIES |
UI/game separation enforced |
| ACCESSIBILITY |
Focus, labels, keyboard nav |
| ZERO-COPY |
No allocation during transfer |
| STATE VALIDATION |
All transitions type-checked |
Related Documentation
Authored by: Claude Code (Anthropic)
Document Owner: Project Maintainers
Review Cycle: Monthly