Celeste did not start as a big game that was squeezed into a small tool. It started as a tiny toy that refused to stay small. The 2018 precision platformer was developed and published by indie studio Maddy Makes Games, directed by Maddy Thorson with Noel Berry as lead programmer, and released on January 25, 2018 for PC, Switch and PS4, on January 26 for Xbox One, and later for Stadia in July 2020. Its infobox lists Microsoft XNA as the engine, while the MonoGame project lists Celeste among games built with MonoGame, which implements the Microsoft XNA 4 API.
That two-step answer is the whole point: a four-day PICO-8 jam toy proved the verbs, then a hand-rolled C# codebase on the XNA lineage scaled those verbs to 700+ screens without handing physics to a black box.
Players keep asking the engine question in exactly those words. Google suggests "what game engine was celeste made with" and Bing suggests "what engine was celeste made in," "what game engine does celeste use," and "celeste pico 8 online." That split — popular game plus niche fantasy console plus dead C# framework — is why this stack is worth unpacking.
What made Celeste popular enough to care about
You play Madeline, a young woman with anxiety and depression, climbing a fictional Mount Celeste while a personification of self-doubt called "Badeline" tries to stop her. The premise and climb structure are documented on Wikipedia.
The Steam page describes the scale bluntly: a mountain with 700+ screens of hardcore platforming, brutal B-side chapters, and simple controls — jump, air-dash, climb — where every death is a lesson and respawns are lightning-fast. Reviews quoted there include 10/10 from IGN and Destructoid.
Critics praised the interplay of narrative and movement, the tight controls, the approach to difficulty and accessibility, and depictions of depression and anxiety, plus music and pixel-art style. Since release it has been called among the greatest games of all time by some journalists and built dedicated speedrunning and modding communities. The free Farewell expansion added a ninth chapter on September 9, 2019. The developers later rejected a full sequel but released small spin-offs, including a PICO-8 sequel and Celeste 64.
For an indie-tech article, that popularity matters: this is not a toy that stayed obscure. A jam prototype became a canon precision-platform reference.
What PICO-8 actually is
PICO-8 is a fantasy console for making, sharing and playing tiny games from Lexaloffle Games. It feels like a console but runs on Windows, Mac and Linux, booting to a command line with built-in cartridge tools and an online browser called SPLORE.
The limits are the product:
- Display 128x128, 16 colours
- Cart size 32k
- Sound 4-channel chip blerps
- Code P8 Lua
- CPU 4M vm instructions/sec
- Sprites 256 8x8 sprites
- Map 128x32 tiles
Lexaloffle states those limits are carefully chosen to be fun, to encourage small but expressive designs, and to give PICO-8 carts their own look and feel. Carts can be saved as special .png images, shared via a web player, or exported to standalone HTML5 and desktop apps, and any cart can be reopened to study code, graphics and sound.
Wikipedia frames it the same way: a virtual machine and game engine that mimics limited 8-bit capabilities to encourage creativity without overwhelming modern possibilities, coded in a Lua-based environment with music, sprite and map editors. Games can be exported as HTML5 or uploaded to the BBS to play in a browser with visible source. Notable games include the original version of Celeste, created in four days as part of a game jam.
What XNA and MonoGame actually are
Microsoft XNA was a freeware managed runtime based on .NET for game development, aimed at lightweight games and Xbox Live Indie Games. It was announced at GDC in March 2004, targeted Xbox 360, Windows and Windows Phone, officially supported C#, and was discontinued with no further development as of January 2013.
MonoGame is the community continuation: a free and open-source C# framework that began as a way to bring XNA-based Windows and Windows Phone games to unsupported platforms and is now also used to build new games from scratch. It implements the XNA 4 API, supports desktop, mobile and — for authorized developers — PlayStation, Xbox and Nintendo Switch, and explicitly lists Celeste alongside Bastion, Fez and Stardew Valley. After Microsoft ended XNA in 2013, MonoGame continued independently and since September 2023 has been stewarded by the nonprofit MonoGame Foundation.
In short: Celeste bet on a dead official stack kept alive by an open reimplementation. That sounds unfashionable in a Unity/Unreal decade. For a two-programmer team coming from TowerFall, it was control over convenience.
From a weekend Everest to a mountain
Development began in August 2015 when Thorson and Berry created a PICO-8 version over a weekend, with Thorson producing and Berry as lead programmer, intending to expand it into a full game. The jam page is even blunter: a PICO-8 platformer about climbing a mountain, made in four days with arrow keys, X and C, by Maddy Thorson and Noel Berry.
The longer history adds texture: the prototype took three days in one account, was first titled Everest, was designed single-player from the start with lessons carried from TowerFall, and was later retroactively titled Celeste Classic and hidden as a minigame inside the full release. Gameplay was meant to be minimal and mirror bouldering, inspired in part by Super Mario Bros. 3 and TowerFall.
The full game keeps only three verbs — run, jump, climb for limited stamina — plus an eight-direction mid-air dash. Green gems refill dash without landing, dream blocks teleport when dashed into, moving blocks transfer momentum, and bubbles carry Madeline. The base game is eight chapters of single-screen challenges with checkpoints, branching paths, strawberries, cassette tapes and crystal hearts; each chapter has a harder B-side unlocked by its tape, then shorter harder C-sides after all B-sides. Farewell adds jellyfish parachutes, explosive pufferfish launches and double-dash gems. All of those systems are detailed in the gameplay and expansion summaries.
What handmade control gained
The most revealing technical sentence is not about rendering. The developers chose not to use a pre-existing physics engine so they could predetermine outcomes for certain situations. Pixel art was chosen partly because it communicates information clearly.
That choice funded a forgiveness layer most players feel but never name:
- coyote time that lets you jump for a small moment after leaving ground
- jump buffering that accepts input slightly before landing
- corner correction that rounds collisions so you do not snag
- wall-jump forgiveness that does not require pixel-perfect contact
- intent-matching over near-perfect execution, with later challenges demanding more precision
Stamina embodies the same idea. Madeline's moveset was kept minimal to emulate bouldering, which inspired limited wall-climb stamina, shaped by the vertical mountain theme.
Assist Mode extends the philosophy. It offers lowered game speed, unlimited dash, or invincibility. Strawberries, B-sides and Assist Mode were designed as a difficulty-customization system, with Assist as counterbalance to harder optional content. It was a late addition — first called Cheat Mode, renamed because the name felt judgmental, inspired partly by discourse around Cuphead's difficulty — and took only a couple of days to develop, though balancing the whole game took extensive playtesting.
Because the team owned the variables, accessibility was not a separate easy mode bolted on. It was the same physics with different numbers.
What it cost
Owning everything has a bill. The team underwent crunch in the final months. A dead-base framework means you maintain your own future: no official XNA roadmap, reliance on MonoGame community accuracy, and per-console port work even though MonoGame now covers Switch, PlayStation and Xbox for authorized developers. Art, level iteration and story integration were constantly re-tuned — attributes adjusted, levels redesigned — because predetermined outcomes require hand-tuning every edge.
There is also a scope cost. Once you prove you can hand-tune 700+ screens plus B-sides, C-sides and Farewell, players expect that density forever. The developers' answer was to refuse a sequel and release tiny spin-offs instead. That is not a technical limitation. It is a human one.
My reading: three contrarian takes
Other retrospectives usually say PICO-8 was a throwaway prototype and MonoGame was a nostalgic C# choice. I think that gets the causality backwards. These are interpretations, not verified facts, but they explain the evidence better than the standard story.
1. The 32k cart was the design document, not the sketch.
Most postmortems treat the jam as a sketch for the "real" game. I think the PICO-8 limits — 128x128, 16 colors, 32k — forced a completable toy with only climb, jump and dash. Anything that was not fun in one sitting never earned the right to become 700 screens. The full game did not outgrow PICO-8 logic; it just removed the resolution cap. If you cannot make the mountain fun when the mountain is 30 pixels tall, more pixels will not save you.
2. Celeste is a forgiveness engine wearing a platformer costume.
People praise Celeste for being hard but fair, then credit level design. I credit the input stack: coyote time, buffering and corner rounding are a compiler from human intent to game action. Unity or a generic physics engine would have given them realistic momentum for free and then forced them to fight it for two years. XNA/MonoGame gave them nothing, which meant they could build exactly the forgiveness they wanted. The tech win was not performance. It was the right to be lenient in code.
3. Assist Mode works because difficulty is a variable, not a verdict.
Many games treat accessibility as a separate menu that apologizes for existing. Celeste treats game speed and dash count as physics sliders because the team owned those numbers. That is why Assist Mode took days to build but feels native: it changes the same simulation speedrunners master, rather than swapping in a different game. My harsher take is that most "hard games" cannot copy Assist Mode without first owning their physics. If your difficulty lives inside someone else's black-box character controller, you cannot expose it cleanly.
None of this requires believing PICO-8 or XNA is "better" in general. It was better for this team, this verb set, and this story about self-forgiveness that needed gameplay to feel forgiving.
What indie devs can steal
- Prototype verbs under a harsh cap before you choose an engine. If climb-dash-climb is not fun at 128x128 in Lua, it will not become fun at 1080p in C#.
- Budget for forgiveness, not just mechanics. Coyote time, input buffering and corner correction are features with real implementation and testing cost.
- Keep stamina tied to theme. Bouldering justified limited climbing more elegantly than any tutorial could.
- Make accessibility a set of simulation variables from day one — game speed, dash refills, invincibility flags — so Assist-style options do not require a rewrite.
- If you pick a community-maintained framework like MonoGame, verify console targets, content-pipeline tooling and long-term stewardship early. The MonoGame Foundation model is different from a commercial engine SLA.
- Ship the jam inside the game when you can. Celeste Classic as a hidden minigame preserves history and gives speedrunners and modders a shared reference.
Feel the verbs in a browser first
You cannot practice Celeste without Celeste, but you can practice the sub-skills its engine rewards: feathered height control, looking ahead, and committing to momentum. That is where small browser games help without pretending to be replacements.
If your deaths come from over-holding and ceiling slams, Space Waves is the closest trainer. You only control height — hold to rise, release to fall — across 33 handcrafted levels with face-ranked difficulty. The guide's core advice mirrors Celeste discipline: feather with micro-taps instead of holding, look two to three obstacles ahead, and default to the center line to keep options open.
If your problem is release timing, Stickman Hook isolates it to one button: hold to attach, let go to fly. The reliable window is just past the bottom of the swing while moving forward and up, chained without hesitation, with bounce pads as recovery. That is the same muscle as Celeste's dream-block and moving-block jumps — earlier input decides the later landing.
If you panic when speed rises, Tunnel Rush trains the antidote. It is a pure reaction tunnel where success comes from scanning the next wall early, staying centered for flexibility, and making small clean adjustments instead of overcorrecting. Play a few runs there and Celeste's B-side rhythm — dodge, recenter, dodge — feels familiar.
None of these are Celeste. They are useful precisely because they are smaller: one verb, instant restart, visible pattern. That is the PICO-8 lesson applied to practice.
Bottom line
Celeste bet that constraints teach faster than features. PICO-8 taught the team which three verbs mattered. XNA via MonoGame gave them a thin C# framework with no physics opinions, so they could hand-build forgiveness — coyote time, buffering, corner correction — and expose difficulty as tunable simulation. The cost was hand-tuning everything and maintaining a post-XNA future themselves. The payoff was a 2018 platformer still cited for movement, accessibility and story-gameplay integration, with an active speedrunning and modding afterlife.
For your own project, copy the sequence, not the tools: tiny completable toy first, owned physics second, forgiveness and accessibility as variables throughout.
Top comments (0)