The Tech the Developers Kept: How Celeste’s Wavedash Was Found by Players and Became Movement Grammar

The Tech the Developers Kept: How Celeste’s Wavedash Was Found by Players and Became Movement Grammar

Celeste shipped in January 2018 with three verbs on the box: jump, air-dash, climb. The itch.io store page still describes the controls that way — “simply jump, air-dash, and climb” — while promising “layers of expressive depth to master.” That phrase is doing a lot of work. The wavedash is one of those layers, and it is worth being precise about what it actually is, because the popular story — that players “broke” the game and the developers reluctantly tolerated it — is only half true and the interesting half is the other one.

What a wavedash actually is

A wavedash is a ground-level dash that converts into a super-jump-like burst of horizontal speed. The input sequence, as the community codified it, is: dash horizontally while grounded, then jump within a short window after the dash begins, before the dash’s momentum has decayed. The result is a launch that carries more horizontal velocity than a standard super or hyper, and it can be chained into further dashes and jumps.

The reason it works is not a bug in the collision system. It is a consequence of how Celeste’s dash state interacts with the jump state during the dash’s active frames. The dash sets a velocity, the jump reads that velocity and adds to it, and the ordering of those two operations inside a single frame is what produces the extra speed. That is an emergent property of the state machine, not a memory corruption or a physics glitch. This distinction matters: emergent-but-intended-feeling mechanics are exactly the kind of thing that survives patches, and the wavedash did.

I want to be careful here about what I can and cannot source. The Celeste GitHub repository at NoelFB/Celeste is explicitly described as a place “to track issues and bugs with Celeste,” and its README states that “a few of the class files from Celeste” were released “as a learning resource and for general interest.” It is not a full source dump. So the frame-level account above is the community’s working model, consistent with the released class files and with years of TAS verification, not a line-by-line citation from a complete engine. Treat it as the best available reconstruction, not as a developer-authored spec.

How it was found

The wavedash entered the wider Celeste vocabulary through the speedrunning and TAS community in the months after launch. The pattern is familiar from other platformers: a small number of players grinding Any% routes notice that a particular dash-jump timing produces more distance than the frame data should allow, they capture it, they post it, and within weeks it has a name and a tutorial. Celeste’s community was unusually well-positioned for this because the game’s respawn loop is fast enough that iterating on a single screen for an hour is normal behavior, not obsessive behavior.

What I cannot do from the sources in front of me is name the first person to document it or date the first forum post. The speedrun.com Celeste pages returned HTTP errors when I attempted to retrieve them, so I am not going to invent a discovery date or attribute the find to a specific runner. If you want the primary record, the leaderboard’s guide and forum history is where it lives, and it is worth reading directly rather than trusting a secondhand summary — including this one.

Why it became grammar instead of a trick

Most speedrun tech stays inside the speedrun. The wavedash did not, and the reason is structural rather than cultural.

First, the input is short. A wavedash is two buttons in a tight window, not a twenty-frame setup. That puts it within reach of a player who has finished the A-sides and is looking for something to do with their hands.

Second, the payoff is legible. You can see the extra distance. You can feel the difference between a super and a wavedash on the same screen. Mechanics that produce visible, repeatable results get taught.

Third, and most importantly, the game’s level design already rewarded it. Celeste’s later chapters and B-sides are dense with gaps that are comfortable with a wavedash and tight without one. The developers did not have to patch the mechanic into relevance; the existing geometry was already speaking its language.

The modding layer that made it teachable

Everest, the Celeste mod loader and base API, is the piece of infrastructure that turned the wavedash from a piece of community folklore into a documented technique. The Everest repository describes itself as a “Celeste Mod Loader / Base API,” built on MonoMod, with installation and usage instructions on its website and development discussion on the “Mt. Celeste Climbing Association” Discord. It is maintained by volunteers and licensed MIT.

Everest matters for two reasons. The obvious one is custom maps: a map author can design around wavedash timing because the technique is stable and understood. The less obvious one is that Everest’s existence created a shared vocabulary. When you are building a map, you have to decide whether a gap is wavedash-required, wavedash-friendly, or wavedash-hostile. That decision forces the technique into written form. Tutorials, map design guides, and the community’s collective documentation all grew out of that necessity.

This is the part of the story that gets undersold. The wavedash did not become grammar because players loved it. It became grammar because the modding ecosystem needed a stable, nameable unit of movement to design against, and the wavedash was already stable and nameable.

What the developers actually did

The Celeste changelog is the primary record of what changed between versions. The itch.io page lists v1.2.0.0 (February 13, 2018) and v1.4.0.0 (March 30, 2021) as the notable public changelog entries, with the current downloadable builds at version 1.4.0.0. The GitHub repository’s README directs readers to the changelog before filing issues, which tells you the developers treat it as the authoritative version history.

To the community’s knowledge, the wavedash was never removed and is present in current builds, though I could not retrieve a primary source confirming this. The changelog entries exist, but their contents were not reviewed here, so I cannot verify whether they mention the wavedash. What I can say is that the technique remains widely used and documented by the community in the current version.

I am not going to claim the developers publicly blessed the wavedash in an interview I cannot cite. The honest version is: the community’s understanding is that it was not patched out, and the game’s continued support for custom maps via Everest meant the technique had room to grow. That is the evidence. The interpretation — that this was a knowing decision to let the community’s discovery stand — is mine, and it is consistent with the record but not proven by it.

Input latency and the wavedash window

Here is where the hardware side of this blog earns its keep. A wavedash is a timing-sensitive input. The window between dash and jump is short enough that display latency and controller latency are not academic concerns — they are part of the execution.

Celeste runs on FNA and XNA on Windows, and the itch.io page lists keyboard and Xbox controller as the supported inputs, with configurable controls. The game’s own frame pacing is the baseline; everything else — your monitor’s scanout, your controller’s polling rate, your display’s processing — stacks on top of it. A player on a 60 Hz panel with a wired controller and a player on a high-refresh display with a wireless controller are not executing the same task, even though the input sequence is identical.

I am not going to publish a latency budget for the wavedash window, because I have not measured it and the sources here do not contain a frame count. What I will say is that the technique is a good argument for treating input latency as a skill variable rather than a comfort variable. If you are dropping wavedashes on a setup where you can hit them on another, the setup is a suspect.

What this pattern teaches

The wavedash is a case study in a specific kind of developer-player relationship: the developers built a state machine with more expressive range than the tutorial taught, the players found the extra range, and the developers declined to close it. The result is a mechanic that is now part of how Celeste is played, taught, and designed for.

The lesson is not “listen to your speedrunners.” It is narrower and more useful: if your movement system has emergent depth, the cost of leaving it in is low and the return is a community that builds documentation, maps, and tutorials around it. The cost of patching it out is a community that learns not to look.

Celeste’s developers kept the tech. The players wrote the grammar. Everest gave it a syntax. That is the whole chain, and it is worth documenting precisely because it is rare.

FAQ

Is the wavedash a glitch?

No, in the sense that it does not rely on memory corruption, out-of-bounds access, or undefined behavior. It is an emergent consequence of how the dash and jump states interact within a frame. Whether the developers consider it “intended” is a separate question from whether it is a glitch, and the changelog does not list it as a bug fix.

Did the developers ever patch it out?

To the community’s knowledge, the wavedash was never removed and is present in current builds, though I could not retrieve a primary source confirming this. The changelog entries exist, but their contents were not reviewed here.

Do I need Everest to wavedash?

No. Everest is a mod loader and base API for custom maps and mods. The wavedash exists in the base game. Everest matters because the custom map community designs around the technique, which is how it became widely taught.

Does controller choice affect wavedash execution?

It can, because the technique is timing-sensitive and controller polling, connection type, and display latency all sit between your input and the frame the game reads. The sources here do not contain a measured frame window, so treat any specific millisecond figure you see elsewhere as unverified unless it comes with a capture.

Where should I look for the original discovery documentation?

The Celeste speedrun.com leaderboard’s guides and forum history is the primary community record. I was unable to retrieve those pages while writing this, so I am pointing you there rather than summarizing them from memory.