Inside three.js: From Scene Graph to WebGL Draw Calls
Every three.js developer eventually hits the same three walls. First, a mesh you just added simply does not render — no error, no warning, just an empty canvas. Second, you change a single material flag like needsUpdate and the frame...
Inside SFML: How the Module System Turns Vertices into Pixels
If you have ever written a 2D game against raw SDL, you know the ritual: create a window, create a renderer, fill a rect, call SDL_RenderPresent, and only then start worrying about textures, blending, and scaling. SFML hides all of...
Inside SDL3: How the Cross-Platform Media Layer Absorbs Every OS
Ask anyone who has shipped a native app on three operating systems: the windowing layer is where optimism goes to die. On Windows you fight message loops and DPI, on macOS you fight the main thread and lifecycle events, on...
Inside raylib: How the Minimal C Game Library Draws a Frame
Every newcomer hits the same wall with a full engine: to draw one red circle you inherit a scene tree, an asset importer, an editor layout, and a build system you did not choose. Engines like Godot earn that complexity...
Inside PixiJS: How the Batcher Turns Thousands of Sprites into One Draw Call
Thousands of moving sprites are where naive canvas-2D code goes to die. A loop of drawImage calls crosses the JavaScript-to-native boundary thousands of times per frame, re-sends state on every call, and gives the GPU nothing it can chew on...
Inside Phaser: The Scene Lifecycle and Step Loop Behind 2D Web Games
A Phaser game ships as one JavaScript bundle and then runs on a five-year-old Android phone, a school Chromebook, and a desktop browser at 144 Hz. That is a strange engineering target for a game engine: no install step, no...
Inside MonoGame: The XNA Successor's Game Loop, SpriteBatch, and Content Pipe...
Stardew Valley, Celeste, Streets of Rage 4, and Carrion were all built on MonoGame — an open-source re-implementation of Microsoft’s discontinued XNA Framework. The deal XNA offered is seductive: you subclass Game, override Update and Draw, call base.Run(), and a...
Inside LÖVE: How Lua Callbacks Drive the Simplest 2D Game Framework
A complete LÖVE game fits in a single main.lua that is often shorter than this article. You define love.load(), love.update(dt), and love.draw(), run love, and a window opens with a running game. After configuring scenes and build settings in bigger...
Inside Godot: How the Scene Tree, Servers, and GDScript VM Actually Work
You write a small func _process(delta) in GDScript, press play, and a character moves across the screen at a smooth sixty frames per second. It feels like magic, but the whole thing is a precisely choreographed C++ routine that runs...
Inside Bevy: How the ECS Scheduler Runs Your Systems in Parallel
Every engine built around a god-object eventually hits the same wall. A GameObject grows a transform, a mesh, a collider, a health value, a script slot, and suddenly every subsystem walks a pointer-chasing object graph, and “can this object move...
Inside tmux: How the Client-Server Model Keeps Sessions Alive
You know the moment: the hotel Wi-Fi hiccups, your SSH connection freezes, and the shell you spent an hour setting up dies with it. Except — if you had started that shell inside tmux, nothing died. You reconnect, type tmux...
Inside Starship: How a Cross-Shell Prompt Renders in Milliseconds
Open a terminal inside a huge monorepo and watch a traditional prompt choke: the git-status segment shells out to git status, the directory scan blocks, and every draw costs hundreds of milliseconds. Starship’s problem is harsher than most, because in...
Inside ripgrep: The Crate Architecture That Makes Search This Fast
You type rg 'fn walk_builder' in a checkout of ripgrep itself and the answer is on screen before your finger has left the Enter key. Run grep -r 'fn walk_builder' . on the same tree and you can hear the...
Inside Neovim: How the RPC Core and Lua Host Actually Work
Run nvim --headless +'lua print(vim.api.nvim_buf_line_count(0))' +qa on a file and you get an answer with no window, no terminal, no user. That is a strange property for an editor: the same binary you use interactively is also a scriptable service...
Inside Helix: The Selection-First Editor Architecture Explained
If you have ever spent a weekend assembling a modal editor out of parts — a plugin manager, an LSP config, a tree-sitter setup, a colorscheme written in a DSL — you know the failure mode. The editor itself is...
Inside Git Internals: How the Object Model, Packfiles, and Commit Walks Actua...
Run git status in a huge repository — say the CPython tree after its move to GitHub — and it answers instantly, while some other tools on the same machine take seconds. Run git log in two repos of comparable...
Inside fzf: The Fuzzy Matching Architecture Behind Instant Interactive Search
Type three characters into fzf while a million lines stream through it, and the best match appears before your finger leaves the key. That is not a shortcut: every keystroke triggers a full pass over every candidate, scoring each one...
Inside the fish Shell: How Typed Characters Become Running Jobs
Open fish for the first time, type git che, and a gray ghost of a full command appears at the end of your line — a real suggestion pulled from your history, not a canned prefix. Press the right-arrow key...
Inside fd: How the Fast Rust Find Replacement Walks Your Filesystem
Every developer knows the ritual: you want the file named foo, and out comes find . -iname "*foo*" -not -path "*/node_modules/*". Quotes because find’s argument order is a trap, -iname because you do not remember the casing, and a -not...
Inside Alacritty: How a GPU-Accelerated Terminal Emulator Renders Your Shell
Open a half-gigabyte log file with cat in a typical terminal and the interface starts to melt: keystrokes echo late, the scrollbar fights back, and a CPU core saturates. Run the same command in Alacritty and it stays smooth. The...
Inside the Zig Compiler: How the Self-Hosted Toolchain Turns Source Into Mach...
You type zig build-exe hello.zig, and in well under a second you have a native binary — with cross-compilation, libc detection, and output caching included in that second. If you come from Python, where CPython spends its time interpreting bytecode...
Inside the TypeScript Compiler: How tsc Really Works, From Scanner to Emit
Every TypeScript developer has hit the narrowing puzzle: if (typeof x === "string") happily refines a union type, but move that same check into a helper function and the refinement evaporates. The explanation is not in the docs; it is...
Inside rustc: How the Borrow Checker Actually Sees Your Code
Every Rust developer eventually hits the same wall. You write a function that returns a reference to something computed inside it, the pattern works fine in C, and rustc refuses to compile it with an error about a value not...
Inside ruby/ruby: How YARV Actually Runs Your Code
Every Rails developer eventually meets the same mystery: the first request after boot is slow, and every request after that is fine. Part of that warm-up is Ruby quietly filling method call caches. When foo.bar executes, the interpreter records which...