Colophon

This book describes the Ingle language as it stood in late June 2026, early in its life and moving fast. This edition was refreshed as several features landed in quick succession — dynamic dispatch (interfaces as value types), the bitwise and shift operators plus the explicit wrapping-arithmetic builtins, the generic-keyed Map<K, V> and the bounded generic structs underneath it, the pointer/buffer/handle FFI, and — largest of all — the native C backend that compiles a whole program to a standalone binary (Chapter 22) — each of which had been “not yet” only a day or two earlier. It covers only what had been built and tested by the time of writing; the Not Yet List marks the boundary. A later pass — this one — folded in what had landed since: array slices and explicit .clone(), the non-blocking try_recv, struct keys for Map/Set, a returned C char* arriving as a copied-in string (how std/http brings a response body home), and — the largest piece — Flare’s animation (springs + FLIP), its modal/popover overlays, and a much wider widget catalogue.

A further pass folded in the run of features that landed in late June: Show (a fn show(self) -> string makes any value interpolate), named enum construction (Circle(radius: 2.0)), the resource struct that lets a value own and auto-close a C handle — and std/sqlite built on it — full-range u64 literals, the rc struct and std/slotmap sharing tools, and Flare’s 60fps work (list virtualization, idle-CPU gating) with enter/exit animation, fades, and toasts. The toolchain also grew a fourth gate (ledger, the resource-linearity fuzzer) and now builds and runs on Linux alongside macOS.

A later pass began Ingle’s type-system campaign: newtypes (type UserId = int, a distinct nominal type over a scalar or string, erased to its base at zero cost) and refinement types (type Percent = int where 0 <= self && self <= 100, a predicate checked at construction) — both in Chapter 7. The run-time fault also grew sharper: an unhandled error now renders its payload as data (values: error = IoErr { code: 5 }) at a true file:line:col (Chapter 19).

Every Ingle snippet in these pages was compiled and run with the reference compiler before being written down, and the outputs shown are the outputs produced. Where this book and the language’s formal specification disagreed, the book follows what the compiler actually does — and refreshing it turned up a few places where the spec’s prose had drifted behind its own implementation (a sentence still calling structs “immutable records,” another claiming there was no prelude, a stale note on which generic bounds were allowed — and, this pass, a Map key still said to need Copy and Flare’s inline Markdown still described as unrendered). Those were noted and filed as Opportunities For Improvement rather than copied, which is exactly the bargain this book makes with itself.

Ingle will have grown since you read this. Treat the spirit — safe by default, simple by default, fast to build, honest about its edges — as the durable part, and check the current spec and examples for the details. The fire’s only just been lit.

Written by the fireside. Mind the sparks.