Why Willow?
A display-tree rendering framework that sits between your game and Ebitengine's GPU backend. Scene graph, sprite batching, cameras, text, particles, and shaders. All in Go.
Blendmode Effects
Nested Transforms
Offscreen Pixel Rendering
Rope Mesh EffectsThe Rendering Gap in Ebitengine
Ebitengine gives you a game loop and a screen to draw on. Everything above that is your problem.
Every project starts by rebuilding the same infrastructure: draw ordering, camera transforms, sprite management, text layout, input routing. It works, but it's the same boilerplate every time.
This is the same gap PixiJS filled for HTML5 Canvas, and Starling filled for Flash. A structured rendering layer between your game logic and the low-level draw calls. Willow fills that gap for Ebitengine.
What Willow Gives You
Display Tree
Parent/child scene graph with automatic transform inheritance, alpha propagation, and z-index ordering.
Sprite Batching
Automatic draw call batching with TexturePacker atlas support. Thousands of sprites in a handful of draw calls.
Cameras & Viewports
Multiple viewports with frustum culling, follow targets, and scroll-to animation.
Text Rendering
SDF font rendering with multi-style FontFamily support. PixelFont for crisp bitmap text.
Particles
CPU-simulated particle emitters with configurable lifetime, gravity, and interpolation.
Shaders & Filters
Composable Kage shader filter chains. Blur, outline, palette swap, color matrix, and custom filters.
Hit Testing
Hierarchical input handling with rect, circle, and polygon hit shapes. Event callbacks for pointer, touch, and keyboard.
Tile Maps
Efficient large-world tile map rendering with animated tile UV swaps.
2D Lighting
2D lighting layer with erase-blend render targets for dynamic light and shadow.
Animation
Tweening with 45+ easing functions for position, scale, rotation, alpha, and color.
Raw Ebitengine vs Willow
Drawing a positioned, rotated sprite with a camera offset.
Willow handles origin centering, transform composition, and camera projection for you. You describe what your scene looks like; Willow figures out how to draw it.
Built for Performance
Zero heap allocations per frame on the hot path. 10,000 sprites at 120+ FPS on desktop, 60+ FPS on mobile and WebAssembly.
Static content caching delivers up to 125x speedups. Automatic render batching reduces draw calls. Frustum culling skips off-screen objects entirely.
Is Willow Right for Your Project?
Great for
- 2D games requiring structured layering and scene composition
- Large tile map worlds with cameras and scrolling
- Game tooling, level editors, and debug overlays
- Rapid prototyping with minimal setup
- Creative coding, generative art, and audio visualizers
- Cross-platform desktop utilities with rich 2D graphics
Not designed for
- Not a full game engine. No built-in physics, networking, or asset pipelines.
- Not a UI layout framework. Willow UI is a separate companion library for that.
- Not a replacement for Ebitengine. It builds on top of it.
Compare Willow
Want a closer look at how Willow stacks up? See side-by-side code comparisons and feature breakdowns:
- Willow vs Raw Ebitengine — what Willow adds on top of Ebitengine's core, with code comparisons for common tasks.
- Willow vs PixiJS — concept mapping for developers coming from PixiJS. Same patterns, different language.