Candidates

Runtime Language Why It Fits Why It Doesn’t
Love2D Lua Lightweight, SDL-backed, game-like input model, framebuffer-friendly, small binary Not on RG yet; would need ARM build or static binary
PyGame Python Python is already on the RG, SDL-backed, familiar PyGame not in the stripped Python; would need pip install or static
Raw Python + FBUI Python No deps — write pixels to /dev/fb0, read /dev/input/event*, pure stdlib Builds everything from scratch; slower iteration
Bash + curl + fbgrab Bash Zero deps, already on device Preposterous at full TUI; only viable for notification overlay
Rust + Framebuffer Rust Static binary, zero deps at runtime, fast, small Cross-compilation needed; longer build cycle
C + SDL C Lightest possible, direct hardware access Toolchain complexity; overkill for text UI