Est. 2014 Advanced

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)

Paradigm Actor-model, Object-oriented, Imperative
Typing Static, Strong, Inferred; nominal and structural, with reference capabilities
First Appeared 2014 (open-sourced 2015)
Latest Version ponyc 0.64.0 (2026)

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:

CapabilityMeaning
isoIsolated — a unique, mutable reference; no other references (read or write) exist anywhere. Safe to send between actors.
trnTransition — writable by this reference, but others may only read; a stepping stone to val.
refReference — an ordinary mutable reference, usable only within a single actor.
valValue — globally immutable; can be freely shared and sent because nobody can ever mutate it.
boxBox — locally readable; the object may be mutable elsewhere, but not through this reference.
tagTag — 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.

1
2
3
actor Main
  new create(env: Env) =>
    env.out.print("Hello, Pony!")

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 manage ponyc versions.
  • corral — the dependency manager, which supports semantic-version constraints, transitive dependencies, and revision locking via a lock.json file. (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

2014
Sylvan Clebsch begins work on Pony in June 2014 while a PhD student at Imperial College London under Sophia Drossopoulou; by September 2014 the first Pony program is compiled and run. The project is developed within Causality, a company founded by Clebsch, Sebastian Blessing, Sophia Drossopoulou, and Constantine Goulimis
2015
The Pony compiler (ponyc) and runtime are open-sourced in 2015 under a BSD 2-clause license, making the actor-model language and its reference-capability type system publicly available
2015
Clebsch, Drossopoulou, Blessing, and Andy McNeil publish 'Deny Capabilities for Safe, Fast Actors' at the AGERE! workshop, presenting the formal foundation of Pony's reference capabilities for data-race freedom
2016
Sendence (later renamed Wallaroo Labs) adopts Pony to build Wallaroo, a distributed high-performance stream-processing engine, bringing the language into a real-world financial and big-data setting
2017
The 'ORCA' fully-concurrent garbage-collection protocol for actors is published (Clebsch et al., OOPSLA), describing how Pony collects shared objects across actors without any stop-the-world pause
2017
Project governance moves to a community model under the Pony Language organization on GitHub, with a Request for Comments (RFC) process and a core team maintaining the compiler and standard library
2019
Microsoft Research begins Project Verona, an experimental concurrency-safe systems language whose design draws on ideas from Pony; Sylvan Clebsch joins Microsoft Research and works on the effort
2026
The project remains actively maintained on its 0.x release line, with frequent ponyc releases (0.64.0 around mid-2026), regular 'Last Week in Pony' development updates, and the corral dependency manager and ponyup toolchain installer

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

Project Verona

Running Today

Run examples using the official Docker image:

docker pull ponylang/ponyc:latest

Example usage:

docker run --rm -v $(pwd):/app -w /app ponylang/ponyc:latest ponyc
Last updated: