ADR-004: Display Protocol Pattern
Date: March 2026
Status: Accepted
Context
Different display targets (terminal, browser, pygame) needed unified interface. Hard to add new backends.
Decision
Display protocol with common interface:
DisplayRegistry auto-discovers backends from engine/display/backends/:
- terminal.py: ANSI escape sequences
- websocket.py: HTML5 Canvas broadcast
- sixel.py: Sixel graphics
- kitty.py: Kitty protocol
- pygame.py: Pygame window
- null.py: Headless (testing)
- multi.py: Forward to multiple backends
Consequences
- Positive: Add new backend by implementing protocol
- Positive: MultiDisplay enables simultaneous outputs
- Positive: NullDisplay enables headless testing
References
engine/display/__init__.py: Display, DisplayRegistry
engine/display/backends/: Backend implementations