Fenster is a minimal, highly opinionated library for creating cross-platform 2D graphical applications. Its core implementation is a single C99 header of roughly 300 lines, making the code easy to inspect and modify. It opens one titled window and exposes a simple 24-bit RGB framebuffer for direct pixel drawing. Keyboard events, mouse coordinates, clicks, timing, application lifecycle, and system events are handled through a polling API. The same interface also provides audio playback through WinMM on Windows, CoreAudio on macOS, and ALSA on Linux. Programs do not need callbacks, multithreading, or a large GUI framework. Fenster additionally offers Go, Zig, and community Lua bindings and is capable enough to support games, visual experiments, and even Doom ports.
Features
- Single-header C99 implementation
- Direct 24-bit RGB framebuffer access
- Cross-platform keyboard and mouse input
- Stable frame timing and event handling
- Windows, macOS, and Linux audio playback
- Go, Zig, and Lua language bindings