2025-09-03 22:24:23 -07:00
2025-05-18 19:22:51 -07:00
2025-09-03 22:24:23 -07:00
2025-09-03 22:24:23 -07:00
2025-05-28 17:03:52 -04:00
2025-05-03 14:52:13 -07:00
2025-03-01 20:15:23 -08:00
2025-03-18 21:20:53 -07:00
2025-08-29 17:45:42 -07:00
2025-02-27 11:41:43 -08:00
2025-03-04 21:37:42 -08:00
2025-05-18 19:58:20 -07:00
2025-05-17 11:56:13 -07:00
2025-08-29 17:45:42 -07:00
2025-05-29 11:46:56 -04:00
2025-06-07 13:25:52 -07:00
2025-05-18 14:36:48 -07:00
2025-07-03 09:09:23 -07:00
2025-03-01 18:47:28 -08:00
2025-08-20 17:06:50 -07:00

Webleste


A mostly-complete port of Celeste (2018) to WebAssembly, with full support for Everest mods. Powered by FNA-WASM-Build and MonoMod.WASM.

Webleste demo image Strawberry Jam running in Webleste

Limitations

  • Loading the game consumes 600M or so of memory, which is still around 3x lower than the original port, but it is still too much for low end devices.
  • You may encounter issues on Firefox.

I want to build this

  1. Ensure node and pnpm exist and pnpm i
  2. Install dotnet 9.0.4
  3. Install the mono-devel package on your distro
  4. Run sudo dotnet workload restore in loader/
  5. Run make serve for a dev server and make publish for a release build

I want to figure out how this works

  • The native dotnet WASM support is used to compile a loader program to WASM
    • loader/Celeste.cs loads a patched Celeste assembly and exports a function that polls its main loop
    • loader/Patcher.cs runs MonoMod on celeste assemblies provided by the user to patch it for WASM
    • patcher/ has the source for the MonoMod.Patcher mod used for WASM patches
  • A WASM port of MonoMod is used to provide detours/hooks to Everest and other runtime mods, it functions completely on the IL level and is mono specific
  • FMOD pthread builds are used for audio, with slight patching of the bindings so that using FMOD 2 works
  • The game canvas is transferred to dotnet's "deputy thread" and all rendering is done from there through FNA's OpenGL driver

For a deeper dive into how we made this and the Terraria web port, check out the writeup.

I want to port this to a newer version of Celeste (once it exists)

  1. Fix any issues with the hooks
  2. Make a PR!
Description
Browser port of Celeste (2018) and Everest using WebAssembly
Readme 38 MiB
Languages
C# 53%
TypeScript 44.9%
CSS 1%
Makefile 0.4%
Python 0.3%
Other 0.3%