A small, prototype-based programming language — now targeting WASM/WASI.
Io is a dynamic, prototype-based language built on a few simple ideas taken from Smalltalk (all values are objects), Self (prototypes, not classes), NewtonScript (differential inheritance), Act1 (actors and futures for concurrency), Lisp (code is a runtime-inspectable message tree), and Lua (small and embeddable).
Its guiding design principle is simplicity and power through conceptual unification — a handful of primitives stand in for features most languages keep separate:
| concept | unifies |
|---|---|
| scopable blocks | functions, methods, closures |
| prototypes | objects, classes, namespaces, locals |
| messages | operators, calls, assigns, var access |
The VM is written in portable C and now targets WebAssembly (WASI) by default. The same binary runs under wasmtime, Node.js, or directly in the browser via a bidirectional Io↔JavaScript bridge.
if, while, and for are implementable in Io itself.asyncSend or futureSend messages and run its own coroutine. Futures are transparent (they become their result) and detect deadlocks automatically.Sequence primitive, with multiple item types, text encodings, and SIMD acceleration on float vectors.Guides, tutorial, language reference, and design notes.
View →Common questions about Io — its origins, philosophy, and practical use.
View →Source code, issues, and contributions.
View →Milestones in Io's history, from 2002 to today.
View →For AI agents: llms.txt (curated index) and llms-full.txt (full content).