Willow vs Raw Ebitengine
Willow builds on Ebitengine. It doesn't replace it. This page shows what Willow layers on top, so you can decide whether it fits your project.
Feature Comparison
| Feature | Raw Ebitengine | With Willow |
|---|---|---|
| Draw ordering | Manual (you sort) | Display tree with z-index |
| Sprite batching | Manual (DrawImage calls) | Automatic with atlas support |
| Camera / viewport | Manual matrix math | Camera object with follow, scroll, culling |
| Text rendering | Basic (text/v2 package) | SDF + bitmap, multi-style FontFamily |
| Input / hit testing | Global input polling | Hierarchical hit testing per node |
| Particles | Build your own | CPU particle emitters |
| Shaders / filters | Raw Kage shaders | Composable filter chains |
| Tile maps | Build your own | Optimized tile map renderer |
| Animation / tweening | Build your own | 45+ easing functions |
| Performance tools | Build your own | Debug overlay, FPS widget, subtree caching |
Side by Side
Drawing a Positioned, Rotated Sprite
Camera Following a Player
Layered Scene with UI on Top
Performance Impact
For most projects, Willow adds negligible overhead. For large scenes, it can actually be faster than naive raw Ebitengine because of automatic batching and subtree caching.
~39 µs10K sprites, cached + camera scrolling~125x faster
~1.97 ms10K sprites, 100 animated tile UV swaps~2.5x faster
~4.0 ms10K sprites, 1% children moving (auto)~1.2x faster
~4.9 ms10K sprites, no cache (baseline)
If you're drawing fewer than 50 sprites with no camera, raw Ebitengine is perfectly fine. Willow pays for itself when you need structure: layering, cameras, batching, or input routing.
When You Don't Need Willow
Raw Ebitengine is fine for
- Very simple games with a handful of sprites
- Projects that need a fully custom rendering pipeline
- Learning Ebitengine itself (start raw, add Willow when you feel the pain)
- Non-game applications that just need a window and basic drawing
Willow helps when you need
- Structured scene management with parent/child relationships
- Cameras, viewports, and frustum culling
- Automatic sprite batching for performance
- Text rendering, particles, shaders, or tile maps
- Hierarchical input handling and hit testing