Pure Odin windowing library.
- Odin 100%
| examples | ||
| window | ||
| .gitignore | ||
| CLAUDE.md | ||
| impl.md | ||
| plan.md | ||
| readme.md | ||
Window
This project aims to be a fully cross-platform library for creating windows. We'll take the best ideas of other libaries and apply them liberally here, while maintaining Odin idioms.
GLFW — great reference for minimalism
Why it’s valuable
- Very tight scope: windows, input, cursors, monitors, timing
- Clear separation between windowing and rendering
- Proven longevity and stability
- Easy to reason about
Why not copy it directly
- C-style global state + callbacks
- Pull-based input querying (glfwGetKey) feels un-Odin
- Callback soup doesn’t map well to Odin’s structured control flow
What to steal from GLFW:
- Small, opinionated surface area
- “We don’t manage your renderer” stance
- Simple lifecycle rules
If you want something that feels like core:window, GLFW is the right size reference.4
winit — best conceptual model for Odin
Why winit maps well to Odin
- Event-driven core
- Explicit event loop ownership
- Strong separation of:
- OS events
- User events
- Window lifecycle
- Backend-agnostic (X11, Wayland, Win32, Cocoa, etc.)
Even though it’s Rust, its design philosophy fits Odin extremely well.
- Structured control flow
- No hidden globals
- Deterministic ownership
- Backend-specific code isolated cleanly
What to adapt (not copy)
- Central event loop as the spine
- Typed events instead of callbacks
- Backend modules per platform
- Explicit control over blocking vs polling