Kutta
A small 2D wind tunnel in Go with Ebitengine: a Lattice-Boltzmann flow past an airfoil you can draw, cut into a wing and flap, and animate. Qualitative visual intuition, not validated CFD.
Kutta is a small 2D wind tunnel. It streams a flow past an airfoil and makes it visible: the speed field, vorticity, a pressure-like field, smoke streaklines, and the lift and drag vectors, all reacting live as you change the angle of attack.
It is written in Go and rendered with Ebitengine, and ships as a single desktop application.
The point is intuition, not engineering. Kutta runs in lattice units, not physical ones: it gets the shape of the flow right (stagnation at the nose, the wake, suction over the top, separation as the angle climbs) and the numbers wrong on purpose. It is for teaching, aeromodeling curiosity, and demos that look good on a projector, not for sizing a real wing. Skin friction is ignored, so drag reads low; a known limitation, not a hidden bug.
The solver is a 2D Lattice-Boltzmann method (D2Q9 with BGK collision): a free stream from the left, the body as a no-slip wall via half-way bounce-back, and forces from integrating pressure over the body faces. The lower-level packages (lbm, foil, scene/sceneio, viz) carry no rendering weight and test headlessly; a snapshot tool renders the fields straight to PNG for sanity-checking without a window.
It also includes a shape editor. Draw a closed shape, drag vertices, pull Bézier handles to curve edges, and cut and rejoin shapes to split one airfoil into a wing and a flap that each keep the real profile. An animation mode scrubs a timeline and keyframes the pose of each part while the flow keeps running. Scenes save as .afoil, a small textual s-expression format.
NACA 4- and 5-digit profiles are generated from their formulas, so a code like 2412, 0012 or 23012 produces the shape with nothing loaded from disk.
Works on macOS, Windows, and Linux, with prebuilt binaries and a Homebrew cask (brew install --cask crgimenes/tap/kutta). MIT licensed.