Christian Tismer's fork of CPython replaced the C call stack with a custom tasklet-based concurrency model, enabling tasklet-based concurrency in a single main thread. It powered EVE Online for over a decade, but was archived in 2025 as Python's own async features made it redundant.
Stackless Python modified CPython's interpreter loop to decouple Python frames from C stack frames, enabling tasklets (microthreads) that could be cooperatively scheduled, suspended, resumed, and even serialized (pickled) while running. The soft-switching mechanism in Stackless 3.0 avoided saving/restoring C stack state entirely, making context switches between tasklets extremely lightweight.
In 1998, Christian Tismer set out to solve one of CPython's most fundamental limitations: its dependence on the C call stack. Every Python function call corresponded to a C stack frame, which meant deep recursion could segfault, and concurrent tasks required heavyweight OS threads. Tismer wanted continuations — the ability to save and restore execution state at will — and he was willing to rewrite CPython's internals to get them.
Stackless Python 1.0, compatible with Python 1.5.2, was announced on January 20, 2000. It implemented true continuations, which were powerful but notoriously hard to reason about. Tismer spent roughly six person-months on the conceptual design, and the result was 3-5% faster than standard CPython on benchmarks — proving the approach was viable without major performance penalties.
The project went through several major reinventions. Stackless 2.0 (2002) abandoned continuations in favor of "tasklets" — lightweight, cooperatively-scheduled microthreads that were far easier for application developers to understand. Stackless 3.0 (2004) introduced "soft-switching," which decoupled tasklet execution from the C stack entirely, enabling the pickling (serialization) of running program states.
Stackless Python's killer app was EVE Online. CCP Games, the Icelandic company behind the massively multiplayer game, built their entire server infrastructure on Stackless Python. Most of the game engine (everything except rendering and physics) ran on Stackless, using tasklets to manage thousands of simultaneous player interactions. CCP's CEO credited their commercial success to the decision to adopt Stackless Python.
But the Python world was moving. Python 3.4 added asyncio, Python 3.5 brought async/await syntax, and the greenlet library provided many of Stackless's concurrency benefits without requiring a custom interpreter. The Stackless GitHub repository was archived in February 2025, marking the official end of a project that had quietly shaped Python's concurrency story for over two decades.
Christian Tismer begins work on Stackless Python with true continuations
Stackless Python 1.0 released for Python 1.5.2
Stackless 2.0 replaces continuations with tasklets for easier concurrency
CCP Games adopts Stackless Python as the foundation for EVE Online's server
Stackless 3.0 introduces soft-switching and pickling of running tasklet states
Python 3.5 adds async/await, providing native concurrency without Stackless
Stackless Python GitHub repository archived; project officially discontinued
“I wanted to free Python from the constraints of the C stack.”
Stackless Python's influence far exceeded its adoption. The tasklet and channel concepts it pioneered directly influenced Python's eventual adoption of native concurrency primitives. The greenlet library, which powers gevent and other popular concurrency frameworks, was inspired by Stackless's approach. Even Go's goroutines bear a family resemblance to Stackless tasklets.
The EVE Online case study became legendary in the Python community — proof that Python could handle real-time, massively concurrent systems if given the right concurrency primitives. It challenged the narrative that Python was inherently unsuitable for high-performance server applications.