Pony
An open-source, actor-model, capabilities-secure programming language that uses a novel reference-capabilities type system to guarantee data-race-free concurrency with no locks and no stop-the-world garbage collection.
Created by Sylvan Clebsch (with Sebastian Blessing, Sophia Drossopoulou, and Constantine Goulimis)
Pony is an open-source, actor-model, capabilities-secure, high-performance programming language. Its central promise is unusual: it lets concurrent code share even mutable data between actors while the compiler statically guarantees the absence of data races. There are no locks to forget, no synchronized blocks to get wrong, and — by design — no way to write a program that the type checker accepts yet that races on shared memory. Pony pairs that safety with ahead-of-time compilation to native code through LLVM and a runtime that performs per-actor garbage collection with no stop-the-world pauses, aiming squarely at the kind of low-latency, high-throughput systems where both correctness and speed are non-negotiable.
History & Origins
Pony was created by Sylvan Clebsch. The roots of the language reach back into his industry career: in the 2000s he built a flight-simulator engine around an asynchronous message-queue system, and after that company folded in 2010 he moved into financial market data. By 2011 he was running a European electronic-trading infrastructure team at a major investment bank, where he wrote a C-based actor library to manage concurrency. The recurring frustration — that C and C++ gave him no safe, high-level way to express the concurrent systems he needed — pushed him toward formal study.
Around 2012–2013 Clebsch began a PhD at Imperial College London under the supervision of Sophia Drossopoulou, a noted programming-languages researcher. Out of that work Pony was born. As Clebsch tells it in the project’s own “An Early History of Pony,” “We started in June 2014 and by September 2014 we compiled and ran our first Pony program.” The language was developed within a company called Causality, founded by Clebsch together with Sebastian Blessing, Sophia Drossopoulou, and Constantine Goulimis. In 2015 the compiler and runtime were open-sourced under a permissive BSD 2-clause license.
A note on dates. Some catalogs list Pony’s first appearance as 2014 and others as 2015. Both are defensible: the first Pony program compiled and ran in September 2014, while the public, open-source release came in 2015. This page uses 2014 as the first-appearance year and notes the 2015 open-sourcing.
The theoretical heart of the language was published alongside it. The 2015 paper “Deny Capabilities for Safe, Fast Actors” (Clebsch, Drossopoulou, Blessing, and McNeil) laid out the reference capabilities that make Pony’s guarantees possible, and a later 2017 paper introduced ORCA, the protocol that lets Pony garbage-collect objects shared across actors without ever pausing the whole program.
Design Philosophy
Pony’s designers describe it with a short list of properties they refuse to compromise on. The language is meant to be:
- Type safe — a sound static type system with no escape hatches that silently break it.
- Memory safe — no dangling pointers, no buffer overruns, and (notably) no
null. - Exception safe — every exception has a defined handling path; partial functions must declare that they can fail.
- Data-race free — the type system prevents two actors from holding references that would let them race on the same data.
- Deadlock free — because actors never block waiting on each other; all communication is asynchronous message passing.
The unifying idea is that safety and performance are co-designed, not traded off. Pony’s type system and its runtime were built together: the type system encodes exactly the guarantees the runtime needs in order to garbage-collect and pass messages without locks, and the runtime is what makes those guarantees pay off in raw speed.
Reference Capabilities
The feature that most sets Pony apart is its system of reference capabilities (often shortened to rcaps). Every variable in Pony carries, as part of its type, an annotation describing what may be done with the object through that reference and who else may also reference it. There are six of them:
| Capability | Meaning |
|---|---|
iso | Isolated — a unique, mutable reference; no other references (read or write) exist anywhere. Safe to send between actors. |
trn | Transition — writable by this reference, but others may only read; a stepping stone to val. |
ref | Reference — an ordinary mutable reference, usable only within a single actor. |
val | Value — globally immutable; can be freely shared and sent because nobody can ever mutate it. |
box | Box — locally readable; the object may be mutable elsewhere, but not through this reference. |
tag | Tag — identity only; you can store it, compare it, and send messages to it (for actors), but not read or write its fields. |
These capabilities encode a deny-guarantee discipline: each one specifies which other aliases it denies to the rest of the program. Because the compiler tracks them, it can prove that any object sent in a message is either immutable (val), opaque (tag), or genuinely unique (iso) — which is precisely why Pony can pass mutable data between actors by reference with zero copying and still guarantee no two actors will ever race on it. The cost is a real learning curve: reference capabilities are widely acknowledged to be the hardest part of becoming productive in Pony, which is why this page is rated Advanced.
The Actor Model
Pony is built around actors. An actor is like a class, but its behaviours (methods introduced with be) execute asynchronously: calling one sends a message rather than running code immediately. Each actor processes its messages one at a time, so its own state is never touched concurrently. This is the same lineage as Erlang and Akka, but with two crucial differences — Pony is statically typed, catching message-shape errors at compile time, and it shares the deny-capability machinery, so messages can carry mutable data safely instead of being forced to copy everything.
| |
The runtime schedules actors across a pool of system threads using lightweight, lock-free, multiple-producer/single-consumer message queues, and it scales work across cores without the programmer managing threads directly.
Garbage Collection Without Pauses
Conventional garbage collectors periodically “stop the world” to reclaim memory. Pony does not. Each actor has its own heap and its own garbage collector, and because an actor is never running concurrently with itself, it can collect its private heap between messages without coordinating with anyone else. For objects that are shared across actors, Pony uses the ORCA protocol — a fully concurrent, message-based reference-counting scheme that tracks shared objects through the same message-passing system the program already uses. The result is garbage collection with no global pause, which is exactly the property latency-sensitive systems crave.
Implementation & Tooling
Pony compiles ahead of time to native machine code using the LLVM backend, so there is no virtual machine and no interpreter at run time. The compiler itself, ponyc, and the accompanying runtime are implemented largely in C. The surrounding toolchain includes:
ponyup— the toolchain multiplexer/installer used to fetch and manageponycversions.corral— the dependency manager, which supports semantic-version constraints, transitive dependencies, and revision locking via alock.jsonfile. (An earlier tool, Pony Stable, served a similar role before corral.)
According to the project’s official installation documentation, prebuilt packages are available for Linux (both glibc- and musl-based distributions), macOS (including Apple Silicon / arm64), and Windows, and the community documents building for ARM targets such as Raspberry Pi. Pony uses an unstable 0.x version scheme and releases frequently; ponyc 0.64.0 was current around mid-2026.
Current Relevance
Pony occupies a distinctive niche: it is more academically rigorous than most production languages and more production-oriented than most research languages. Its highest-profile real-world use was at Wallaroo Labs (originally Sendence), whose stream-processing engine Wallaroo was written in Pony to meet aggressive latency targets before the company later moved to Rust as its machine-learning workloads grew and it sought a larger library ecosystem. That trajectory captures both Pony’s appeal and its challenge: the language delivers on safe, fast concurrency, but its ecosystem is small compared with mainstream alternatives.
Its ideas, however, have travelled. Microsoft Research’s Project Verona — an experimental concurrency-safe systems language — drew on Pony’s reference-capability and ownership concepts, and Sylvan Clebsch joined Microsoft Research to work on it. The language continues to be actively maintained by a community core team using an RFC-driven process, with regular releases and weekly development updates as of 2026.
Why It Matters
Pony is a proof, in working form, that data-race freedom can be a compile-time guarantee rather than a discipline you hope every programmer follows. It showed that an actor language could be statically typed, pass mutable data without copying, and garbage-collect without ever stopping the world — and it did so with a type-system-and-runtime co-design backed by peer-reviewed theory. Even for developers who never ship Pony in production, its reference capabilities are a compelling lens on the same ownership-and-borrowing questions that animate languages like Rust, and its influence on research efforts such as Project Verona means its ideas continue to shape how the industry thinks about safe concurrency.
Timeline
Notable Uses & Legacy
Wallaroo Labs (Wallaroo)
Sendence, later Wallaroo Labs, wrote its distributed stream-processing engine Wallaroo in Pony to hit demanding low-latency, high-throughput targets for real-time data and financial workloads. The team wrote extensively about why Pony let them avoid building a concurrent runtime from scratch, before later migrating the engine to Rust as their machine-learning use cases grew.
Financial / electronic trading infrastructure
Pony's origins lie in Sylvan Clebsch's experience building C-based actor libraries for a major investment bank's European electronic-trading systems. The language has continued to be discussed and prototyped in fintech contexts where data-race-free, low-latency concurrency is valuable.
Project Verona (Microsoft Research)
Microsoft Research's experimental Project Verona, a concurrency-safe systems-programming research language, was influenced by Pony's reference-capability and ownership ideas, with Pony's creator Sylvan Clebsch contributing to the work after joining Microsoft Research.
Academic research on actors and type systems
Pony serves as a research vehicle for safe concurrency: its reference capabilities, deny-guarantee reasoning, and the ORCA garbage-collection protocol have been the subject of peer-reviewed papers, and the language is used in teaching and research on type systems and the actor model.
Open-source libraries and tooling
The Pony ecosystem includes community-maintained packages installed via the corral dependency manager — among them HTTP servers, a Kafka client, JSON and PostgreSQL libraries, and testing tools — demonstrating the language in networking, messaging, and service code.
Language Influence
Influenced By
Influenced
Running Today
Run examples using the official Docker image:
docker pull ponylang/ponyc:latestExample usage:
docker run --rm -v $(pwd):/app -w /app ponylang/ponyc:latest ponyc