Game Engines (code-first / minimal libraries)
raylib, SDL3, sokol, ggez, bracket-lib — when you want a library, not an engine.
These aren't engines, they're libraries — you keep your own main loop, file layout and asset pipeline. Pick one if you want to write the engine, or if you want a tiny dependency you fully understand. For full engines see 3D engines / 2D engines. For specialized engines (Ren'Py, RPG Maker, GB Studio) see specialized engines. For audio in this layer see game audio.
These tools are loved by the Pico-8 / handmade-network crowd — they value transparency, small binaries and no editor in your face.
C / C++ minimal
- ★ raylib — zlib-licensed C library, ~30 source files, draws sprites/3D/audio out of the box. The cult favorite for "just give me a library." Bindings for Rust, Go, Python, Zig, C#, Odin, you name it. Modules:
raymath,raygui,raudio,rcamera. - ★ SDL3 — zlib (post-SDL2), the cross-platform foundation under most code-first stacks. Window, input, audio, basic 2D. SDL3 (released 2024–25) modernizes the API. Pair with SDL_image, SDL_mixer, SDL_ttf.
- sokol — single-header C libraries by Andre Weissflog (
sokol_gfx,sokol_app,sokol_audio,sokol_gp). Ultra-minimal, ships to web via Emscripten. - GLFW + bgfx — windowing + cross-API rendering backend. More plumbing than raylib but full-power 3D.
- OpenGL / Vulkan / WebGPU directly — the long road. Use Dawn or wgpu for portable WebGPU.
- FNA — open XNA4 reimplementation in C#. Ships Celeste, Salt and Sanctuary.
Rust ecosystem
- ★ macroquad — beginner-friendly Rust 2D, ships to web easily.
- ggez — "good game easily," 2D Rust framework inspired by LÖVE.
- bracket-lib — Rust roguelike toolkit with terminal rendering, A*, dungeon gen, FOV. Author wrote Hands-On Rust.
- Fyrox — Rust game engine with editor (closer to a full engine than a library, but worth listing here).
- wgpu — cross-API GPU abstraction; the Rust standard for WebGPU/Vulkan/Metal/DX12.
Other languages
- Odin + raylib bindings — the new minimalist combo darling.
- Zig + raylib / SDL — same vibe, growing community.
- Go + Ebitengine (formerly Ebiten) — Apache, simple 2D, ships Bitburner and many jam games.
- Nim — bindings for raylib, SDL.
- Crystal, Jai (closed beta) — niche but vocal communities.
Roguelike / terminal
- libtcod — the classic C++ roguelike toolkit; Python bindings.
- bracket-lib (Rust, above).
- rot.js — JavaScript roguelike toolkit; pairs with HTML canvas or DOM.
- BearLibTerminal — pseudoterminal renderer for non-roguelike-style games.
License notes
raylib, SDL3, sokol, GLFW, libtcod, ggez, macroquad, Ebitengine — all permissive (MIT/zlib/BSD/Apache). bgfx is BSD. Use freely; just attribute.
Pick this if…
- C, single library: raylib.
- C++, AAA-pipeline-shaped: SDL3 + bgfx + Dear ImGui.
- Rust, beginner: macroquad.
- Rust, ECS heavy: Bevy (see 3D engines).
- Rust, roguelike: bracket-lib.
- Go: Ebitengine.
- Roguelike, Python: libtcod via tcod-py.
- Web-first, JS roguelike: rot.js.
- You hate editors: any of these.