Sign in

Francesco · Eresh Engine

@ereshengine.org
19 followers 13 following 56 posts

Building Eresh Engine: an open-source Rust game engine you can open in your browser. ereshengine.org

PostsRepliesMedia
Francesco · Eresh Engine @ereshengine.org · 19/09/2026
#ScreenshotSaturday In August I wrote that the browser build doesn't get Luau scripting. Over the last month, I've changed that. No install, just a tab. Try it → ereshengine.org/try.html?utm... #gamedev #indiedev #rustlang #indietech #luau
The Eresh Engine editor. A Luau script is open in the text editor, and in the viewport, a 3D character with capsule collision. The ereshengine.org watermark is visible bottom-right.
0176
Francesco · Eresh Engine @ereshengine.org · 14/09/2026
6/ Save the .luau and every running instance picks up the change in place, no restart. No compiler in the loop. Pre-alpha, solo dev. Get notified at launch → ereshengine.org?utm_source=b... #rustlang #luau #indietech
ereshengine.org
Eresh Engine: The editor-first Rust game engine
An editor-first Rust game engine. Run the built-in editor right in your browser with WebGPU and WebAssembly with no installation needed. Open-source (MIT/Apache).
000
Francesco · Eresh Engine @ereshengine.org · 14/09/2026
5/ Limits, plainly: a runtime error stops that script instance until you save the file again, nothing else goes down. No file or network access from scripts. No new component types either: Rust owns those, scripts read and write them.
100
Francesco · Eresh Engine @ereshengine.org · 14/09/2026
4/ A write from a script is a real ECS write: it marks the component changed, so change detection, transform propagation and physics react as if a Rust system had done it. One shortcut only: self.transform is resolved by type, because every script touches it every frame.
100
Francesco · Eresh Engine @ereshengine.org · 14/09/2026
3/ The part I like: self.entity:get("Light") looks up "Light" in the reflection registry, the same registry the inspector, the scene file and undo use. Add a Health component in Rust and scripts can use it right away. No glue code per component, anywhere.
100
Francesco · Eresh Engine @ereshengine.org · 14/09/2026
2/ The script declares its own inspector fields. speed_deg = 45 and axis = vec3(0, 1, 0) in its properties block become two editable fields in the inspector, saved per instance in the scene. Tweak the speed without opening the file.
100
Francesco · Eresh Engine @ereshengine.org · 14/09/2026
1/ A script is a .luau file that returns a few callbacks: on_start, on_update, on_fixed_update. You attach it to an entity the way you attach a Mesh or a Light: Add Component → Script, pick the file. It is saved in the scene file with everything else.
100
Francesco · Eresh Engine @ereshengine.org · 14/09/2026
Pressed Play in the Eresh editor and a Luau script spins this cube. The script asks the engine for components by name and a reflection registry does the rest: no binding code per component. A short thread on how scripting talks to my Rust engine 🧵
131
Francesco · Eresh Engine @ereshengine.org · 11/09/2026
#ScreenshotSaturday: this street feels more real. In Eresh, I use post-processing to give its lights more weight. Pre-alpha. Try it → ereshengine.org?utm_source=b... #gamedev #indiedev #rustlang #indietech
0144
Francesco · Eresh Engine @ereshengine.org · 09/09/2026
Get notified at launch → ereshengine.org?utm_source=b...
ereshengine.org
Eresh Engine: The editor-first Rust game engine
An editor-first Rust game engine. Run the built-in editor right in your browser with WebGPU and WebAssembly with no installation needed. Open-source (MIT/Apache).
000
Francesco · Eresh Engine @ereshengine.org · 09/09/2026
New devlog: a character controller is two problems, not one. Plus the three gaps in rapier that made my capsule sink, drift and slide downhill. ereshengine.org/blog/charact... #gamedev #indiedev #rustlang #indietech
282
Francesco · Eresh Engine @ereshengine.org · 07/09/2026
I built Eresh's character controller: it walks slopes, steps up, jumps, in-browser. Kinematic capsule, honest contacts. Pre-alpha. Email updates → ereshengine.org?utm_source=b... #gamedev #indiedev #rustlang #indietech
0113
Francesco · Eresh Engine @ereshengine.org · 02/09/2026
6/ This is live in Eresh for keyboard and mouse. Gamepad support and runtime rebinding are still planned. Pre-alpha means saying that plainly. Action-first already makes gameplay much less tied to a device. #gamedev #indiedev #rustlang #indietech
061
Francesco · Eresh Engine @ereshengine.org · 02/09/2026
5/ Physics runs on fixed ticks, display frames do not: one frame can drive zero physics steps or several. Eresh latches action edges across that gap, so a quick Jump press lands exactly once. It neither vanishes on a zero-step frame nor fires twice on a multi-step one.
100
Francesco · Eresh Engine @ereshengine.org · 02/09/2026
4/ Contexts make modes explicit. Gameplay can be the base context; a higher-priority pause menu can consume controls or block lower contexts. A key press then does one intentional thing.
100
Francesco · Eresh Engine @ereshengine.org · 02/09/2026
3/ One Move action can use a WASD composite without making movement code assemble four keys. Modifiers live with the binding too, so normalizing diagonal movement is data, not a patch in every controller.
100
Francesco · Eresh Engine @ereshengine.org · 02/09/2026
2/ An action model names intent once: Move, Jump, Fire. Bindings translate physical controls into typed values, such as a button for Jump or a 2D vector for Move. Game code reads actions, not hardware.
100
Francesco · Eresh Engine @ereshengine.org · 02/09/2026
1/ Binding a movement system to W means that system knows about one keyboard key, not the player's intent. The moment controls change, gameplay code has to change too.
100
Francesco · Eresh Engine @ereshengine.org · 02/09/2026
A player presses W. Your game should hear "Move", not "W". I am building Eresh around that distinction. A short thread on action-based input 🧵
The Eresh Engine editor displays a 3D character model centered between two input configuration windows, one on the left and one on the right. The ereshengine.org watermark is visible in the bottom-right corner.
120
Francesco · Eresh Engine @ereshengine.org · 29/08/2026
#ScreenshotSaturday: pressed Play in Eresh, my from-scratch Rust game engine, and a Luau script spins this cube, no clicks from me. Luau scripting ships with it: early days, but agent-ready is the direction. Open it → ereshengine.org #gamedev #indiedev #rustlang #indietech
083
Francesco · Eresh Engine @ereshengine.org · 25/08/2026
New devlog: a material in Eresh is a .mat.ron file. The shader declares its params, the editor builds the panel from them, one pipeline per feature combo. Plus the bug that broke texture hot-reload. ereshengine.org/blog/materia... #gamedev #indiedev #rustlang #indietech
0153
Francesco · Eresh Engine @ereshengine.org · 23/08/2026
Small thing, big deal: in Eresh, my Rust engine, start from an empty viewport, place a light, spawn a few objects, save, close the tab. Reopen the editor and the scene is exactly as you left it. In the browser, no install. Open it → ereshengine.org #gamedev #indiedev #rustlang #indietech
0111
Francesco · Eresh Engine @ereshengine.org · 18/08/2026
Quick Eresh internal on Eresh Engine, my from-scratch Rust game engine: drag the street light prefab from the content browser to the viewport, release, and the lamp post spawns there. The editor runs in your browser. Open it → ereshengine.org #gamedev #indiedev #rustlang #indietech
0132
Francesco · Eresh Engine @ereshengine.org · 15/08/2026
#ScreenshotSaturday: a quiet street scene in Eresh Engine, my from-scratch Rust game engine. A sidewalk with curbs and some trash on it. Built and lit right in the browser editor, no install. Open it → ereshengine.org #gamedev #indiedev #rustlang #indietech
1104
Francesco · Eresh Engine @ereshengine.org · 11/08/2026
New devlog on Eresh Engine, my from-scratch Rust game engine: anatomy of a .scene.ron file, the plain-text format the editor uses to serialize a scene to disk. Read it → ereshengine.org/blog/anatomy-of-a-scene-ron.html #gamedev #indiedev #rustlang #indietech
092
Francesco · Eresh Engine @ereshengine.org · 08/08/2026
#ScreenshotSaturday: live texture reload in Eresh Engine, my from-scratch Rust game engine. Edited a road barrier's texture in GIMP, painted "hello" on it, saved, and it showed up in the editor moments later. Open it → ereshengine.org #gamedev #indiedev #rustlang #indietech
0103
Francesco · Eresh Engine @ereshengine.org · 04/08/2026
7/ The lesson I didn't expect: getting wgpu into the browser was the cheap part. Porting my assumptions about threads, blocking and the disk was the actual work. The editor opens in a tab today. Pre-alpha, solo dev, building it in the open 🟣 #gamedev #indiedev #rustlang #indietech
050
Francesco · Eresh Engine @ereshengine.org · 04/08/2026
6/ What the tab doesn't get: hot reload (nothing to watch), FBX import, BC7 baking and Luau scripting (all C or C++), GPU timestamp profiling. The editor reads a capabilities resource and hides those controls instead of failing silently.
100
Francesco · Eresh Engine @ereshengine.org · 04/08/2026
5/ And there is no filesystem. Shaders and the starting scene are baked into the .wasm with include_bytes!. Your edits live in an in-memory VFS mirrored to IndexedDB by a debounced flush, plus navigator.storage.persist() so the browser doesn't evict your project.
100
Francesco · Eresh Engine @ereshengine.org · 04/08/2026
4/ You also can't block the main thread. block_on isn't compiled into my wasm build at all, so misusing it is a compile error, not a hang. GPU init became async: I spawn the adapter+device request and idle frames until it lands. Blocking loads return Unsupported, never spin.
100
Francesco · Eresh Engine @ereshengine.org · 04/08/2026
3/ Then it stops being free. A tab is single-threaded unless you add Web Workers and SharedArrayBuffer, which need COOP/COEP headers you don't always control. So on web my ECS scheduler runs systems sequentially: rayon has no worker pool there.
100
Francesco · Eresh Engine @ereshengine.org · 04/08/2026
2/ wgpu is shaped like WebGPU, so the WGSL, the pipelines and the bind groups are one shared file. The only #[cfg] in my GPU crate picks the backend: Vulkan/DX12/Metal natively, BROWSER_WEBGPU in the tab. I hold native to the same limits, so it never outgrows the browser.
100
Francesco · Eresh Engine @ereshengine.org · 04/08/2026
I compiled my Rust game engine to WebAssembly so the editor runs in a browser tab. The renderer needed one changed line. Everything around it is what hurt 🧵 1/ 10 of my 24 crates have zero web-specific code: ECS, math, scene, physics, animation, input. Same source. 👇
131
Francesco · Eresh Engine @ereshengine.org · 01/08/2026
Are you referring to how hitting Stop acts as an undo for the physics state? If only real life had snapshots we could revert to!
011
Francesco · Eresh Engine @ereshengine.org · 01/08/2026
#ScreenshotSaturday: play-in-editor in Eresh Engine, my from-scratch Rust game engine. Press Play and the physics simulation takes over, press Stop and everything snaps back to where it was. It all runs in your browser. Open it → ereshengine.org #gamedev #indiedev #rustlang #indietech
1133
Francesco · Eresh Engine @ereshengine.org · 28/07/2026
New devlog on Eresh Engine, my from-scratch Rust game engine: undo/redo looks solved (record commands, replay backwards) until you hit an ECS editor. Read it → ereshengine.org/blog/undo-redo-command-stack.html #gamedev #indiedev #rustlang #indietech
0114
Francesco · Eresh Engine @ereshengine.org · 25/07/2026
#ScreenshotSaturday: the scene-saving clip I keep promising. In Eresh Engine, my from-scratch Rust game engine, you can open a scene in the browser editor, move objects, save it back to disk, and reload it exactly as you left it. Open it → ereshengine.org #gamedev #indiedev #rustlang #indietech
0112
Francesco · Eresh Engine @ereshengine.org · 21/07/2026
6/ Net result in my engine today: lots of dynamic lights in a scene in the browser editor and the frame time barely moves. The light culling pass is a small slice of the frame, visible in the telemetry HUD. Pre-alpha, solo dev, building it in the open 🟣 #gamedev #indiedev #rustlang #indietech
070
Francesco · Eresh Engine @ereshengine.org · 21/07/2026
5/ Why I picked forward+ for an editor that runs in the browser: no fat G-buffer like deferred (memory matters in WASM), MSAA still works, transparency just works. I trade a bit of setup cost for a lot of flexibility.
100
Francesco · Eresh Engine @ereshengine.org · 21/07/2026
4/ The expensive part, the light-tile assignment, runs once per frame in a compute pass. The cheap part, the shading, runs per pixel with a short per-tile light list. That's the whole trick.
100
Francesco · Eresh Engine @ereshengine.org · 21/07/2026
3/ "Clustered" forward+ goes one step further and also slices each tile along depth. A pixel far away shares a tile with near pixels but a different depth cluster, so it skips lights that are actually behind it. Less wasted shading.
100
Francesco · Eresh Engine @ereshengine.org · 21/07/2026
2/ Forward+ does the obvious thing: split the screen into tiles, and once per frame compute which lights overlap each tile. The fragment shader then shades a pixel using only the lights in its tile, not the whole list.
100
Francesco · Eresh Engine @ereshengine.org · 21/07/2026
"Forward+" sounds fancy but the core idea is simple. A thread on the trick Eresh uses to handle lots of dynamic lights 🧵 1/ Classic forward shading tests every light against every pixel. Add 200 lights and that's 200× the work per pixel. It melts. 👇
Eresh Engine editor viewport: a floor lit by roughly multple dynamic lights, demonstrating the scene used to test Forward+ light culling.
141
Francesco · Eresh Engine @ereshengine.org · 18/07/2026
Thanks a lot! Best of luck with your platform!
000
Francesco · Eresh Engine @ereshengine.org · 18/07/2026
#ScreenshotSaturday: multi-select in Eresh Engine, my from-scratch Rust game engine. Select a group of entities, copy/paste to duplicate them, then drag the whole group at once with a single gizmo. Open it → ereshengine.org #gamedev #indiedev #rustlang #indietech
0133
Francesco · Eresh Engine @ereshengine.org · 14/07/2026
My from-scratch Rust game engine: reworked the material editor, PBR shading updates live as you pick a color (tested it on a duck, no regrets). Also just published my first devlog: why Rust, wgpu and egui for this project. Open it → ereshengine.org #gamedev #indiedev #rustlang #indietech
1104
Francesco · Eresh Engine @ereshengine.org · 04/07/2026
#ScreenshotSaturday: prefabs in Eresh Engine, my Rust game engine with a browser editor. One prefab, a row of instances, one edit to the source and they all update together. Oddly satisfying. Open it → ereshengine.org #gamedev #indiedev #rustlang #indietech
0103
Francesco · Eresh Engine @ereshengine.org · 02/07/2026
Looks chill. Which engine did you build this in?
110
Francesco · Eresh Engine @ereshengine.org · 29/06/2026
Grande! è un piacere vedere italiani in questo settore, sono rarissimi
010
Francesco · Eresh Engine @ereshengine.org · 28/06/2026
Yes, I am 😎
110