dev log #16 - 2D Ready RC
Today's post is about progress on our '2D ready' milestone, it's ready for testing! That means it is plenty usable for a wide range of 2D games + more, but we're wrapping up documentation and samples. You can already hop in, it'll help us make sure it's smooth for others.
Hello hello!
Today's post is about progress on our '2D ready' milestone, it's ready for testing!
That means it is plenty usable for a wide range of 2D games + more, but we're wrapping up documentation and samples. You can already hop in, it'll help us make sure it's smooth for others. 2025.11.1 is live.
Share on Bluesky
Share on Mastodon
New website
As part of the goal, we really wanted to update the website to better showcase what the engine can already do, as it's jam packed with all kinds of useful tools and workflows for 2D games (and more).
It's nice to see all the tools in one place like this!
View the new website!
New documentation
Another big part of the goal is revamping the documentation. Not just in content (of which there is a lot of new stuff) but also in usability and nicety.
We're still adding lots of documentation, but it's also nice to see it live in its new form.
We've switched to using Astro with Starlight which provides a much nicer baseline to work from. You can view (and help add to) the source + content for the documentation here.
View the new documentation

That includes a separate API reference as well, making it easier to maintain and update:

New tutorials
We've polished the existing tutorials (under getting started)! We went through them with a complete beginner and clarified, polished, and detailed a lot more.
Match 3
We also have been adding whole new tutorials, for example we've now got a comprehensive tutorial making a simple match 3 like game, but the focus is on
- Implementing the game as a modifier system
- Using the `Draw` tool to quickly visualize the gameplay
- Using Wren Fibers to pause code while animations play out
- Converting the prototype code into neat, structured systems
- Converting the drawing to use `Sprite` for animation and effects
The end result looks a bit like this:
Others
We've added some docs and guides for Dialogue (yarn module), States, Wires, Save and some foundations like camera and such.
We have a few more tutorials stubbed in the docs too, if you'd like to help out let us know!
Wren debugger now enabled
Ronja spent a bunch of time reviving and rewriting the old debugger code we had, and added a ton of new features to it as well. It was also made a lot more lightweight, so there's almost no cost to having it around when unused. It's now enabled by default!

Above you can see it being used in the luxe editor, a very non-insignificant scale Wren project. The debugger includes variable inspection, sometimes editing, breakpoints, wait for debugger, attach, all the baseline things you might expect.
If you have any issues, please let us know!
VFX engine now online
Many years ago I started an experimental VFX engine using our custom shader language, which generated bytecode that runs in a vector wide virtual machine. Over time I was focused on the core but since particles and vfx are a major need, it was time to bring it over the line.
While the new VFX modifier is still being polished, it's still useful and a lot of fun. Here's a few clips from while I was working on it featuring a line emitter, ribbon renderer, sprite renderer and shape renderer (it shows in editor iteration too).
Modular design
The concepts like tiny modular pieces of shader code that are shareable, allows a lot of non technical users access to really nice effects that more technical users create. The ability to snap together any modular pieces including renderer types is a flexible way to achieve a ton of visual effects.
We'll talk more about that in depth in tech blogs and docs.
Efficient on CPU
The original focus was to make sure we utilize the modern CPU to the fullest before jumping to use the GPU. There's a lot of game play ideas to me that need efficient access to particle data in a way that makes GPU complexity spike.
Most indie games just don't need millions of particles in practice, they just need the baseline to not be a problem, which is often a guiding principle for us. CPUs offer SIMD as well as multi-threading with many cores, so we should be able to do just fine right?
On my napkin tests, this is 1k pink particles, 50k black particles, the video is a bit low quality vibe but this is all very smooth/realtime, with no hitching on spawn and fast updates:
+ pink took 0.0803 ms
+ black took 7.9005 ms
That's before any multithreading/job system use, so we're not worried about that! The wiggling wire is just there to show that the frame rate is smooth.
(The videos should be smooth, if it's stuttering it's the video playback)Since the module code is all shaders, later we can also compile them to compute shaders instead of bytecode, and run them on the GPU.
We're excited to keep expanding the system with gpu, more modules, variants and more in future, and especially in improving the editing workflow further.
UI editor, themes and more
Given the UI engine in luxe was one of the oldest parts, it didn't get fully converted to the new modifier workflows until now. This brings a whole bunch of things that fall out, starting with
UI editor experience
The UI modifier can now be used like any other modifier in the editor. You can attach it, configure it, preview it and edit it. Here's an example showing the preview flag, which allows seeing what the flex layout will do when resized, either to a fixed size or dragging.
You can also attach a Control modifier, and customize the control type and settings, save them in a scene/prototype, and use them later:
Themes and styles
Another big part of the update to newer workflows is bringing themes to the UI engine. It works like this (nothing surprising):
- UI - Theme
- Defaults for Control type
- Control - style asset (shareable override)
- Control override (distinct settings for individual control)
- Control - style asset (shareable override)
- Defaults for Control type
So you might have a dark theme applied to the root UI, but custom changes around and specific details on specific controls. This can be seen here, we use a custom style on the check field and override this text field to fit our intended aesthetic.

There's still work to do, like style variants applying based on light/dark and so on, but it's a strong foundation and easy to use, especially for games.
Editor benefits
This also means the editor itself will soon get a light theme, and users can make their own themes for the editor too.
We also spent a bit of time polishing the base theme, visuals, and editor UI too:

Like in this example, the grouped sections are much clearer and feel a lot nicer to interact with:

Editor workflow++
The editor has received a bunch of fixes, but the new ones that are worth noting are all related to the world outliner.
There's stuff like dragging the gizmo with a key to duplicate, less refreshing while making changes so scrollbar doesn't reset, saving workflows being more sensible and so on.
Folders
The first big thing is folders and structure can now be manipulated directly in the outliner. Drag and drop to move things around, create folders, all the classics.

Lenses
One of the other luxe workflow things we have wanted to bring online for a while is a 'lens' on the world view. These represent different relationships, and is work in progress.
An often used pattern is the Transform Hierarchy, which can make sense for some things, but for us it doesn't make sense as the default experience of making content.
(ignore the alignment of nested things, we're polishing the UI)One of the big reasons is because not everything has or needs a transform, and more importantly because it typically isn't JUST transform being represented: it's active state, visible state, and transform all at once. Coupling these things together in our experience creates a lot of extra work, so we've never coupled them in the engine. That also means they were never coupled in the editor!
The default lens: scene structure
The default lens is "show me the contents of my scene as it is on disk", e.g how it's organized as content we're editing. We don't find organizing scenes around transforms all that interesting, instead we like to organize our content nicely on disk.
Since every entity is a single file on disk this is especially easy to reason about, when you delete an entity, you're deleting a file. When you delete a folder, you're deleting a folder on disk. This also shows up nicely in version control!
But of course, sometimes it's useful to see the world in different ways...
The transform lens
This one shows the scene as a transform hierarachy! It does nothing more, nothing less. Entities loose in the world are in a folder at the top, and nested entities are shown under their transform parent. In this lens dragging the entities will change the Transform parent link.

Other lenses
We have a few more lenses to add, and of course you can always define them at a project level for custom views, here are some we have planned:
- Physics - shows the body/collider relationships in the world
- Visibility - show which objects will affect others when visibility changes
- Active - show which objects will affect others when enabled/disabled
More on those in future.
Automated builds
Automated builds are back, making it easier than ever to push builds!

We've also made it automatically publish pre-release builds so that they're grabbable on the user side. This is not new but submitting a build is one click! We wrote a little tool in luxe (naturally) to make it easy:

In the launcher we've added settings to show pre-releases on the landing page, and a toggle on the modules page if you want to grab them. We only show the latest pre-release by default but there's a setting to see them all as well.
Other fun things
Gizmos on float3 fields
In a modifier you can define a float3 field, or an array of them, like a list of locations... but it's not as convenient as using the transform gizmo directly in the editor to see that location.
If you tag the field with `#gizmo` it'll now show an option in editor:

Which gives us this ability, seeing and editing the field as a location, and we can also visualize multiple of these at once:
We have more to add to the annotation later (like diff types), and more uses from code (e.g spline modifier with multiple gizmos along the path, selection based).
Camera: sticky previews
We had a few situations where it would be nice to be able to watch something else (like what an NPC is doing off screen) while testing a different thing (camera transition) in editor, so we made camera previews able to stay around:
Rendering backends
In the background we've been working on more backends. We've started a proper WebGPU backend alongside our Vulkan backend which is also steadily moving along - aside from coordinate space mismatches the vulkan backend was almost complete and rendering our 3d pipeline.
This is just a clear color but our testing of luxe on browser WebGPU and Dawn was going well.

Bloom improvements
We wrote about the bloom blowing out making camera rotation a pain for users.

After the fix the bloom is a lot more pleasing from different angles:

Bonus mystery screenshot

Del-eeeete
The old world workflows have been entirely removed from the engine, almost all code associated was dropped. This was many thousands of lines deleted, which is our favourite part of iterative design!
You can help!
While we're still documenting and polishing a bit before we mark this as ready, we'd love your help testing and validating the engine more.
Do the tutorials, make small games, and TELL US ABOUT YOUR EXPERIENCE!
We see plenty people trying it out, and a bunch reporting issues but we've love even more of you to make stuff and tell us how it went, so we can ensure a smooth experience for everyone.
Next steps
Now that we've got a lot of the foundations in, we're focused on documenting them, making them as stable as can be, making the workflows ever nicer.
When that's done, we'll cross the 2D ready item off the list! We have more 2D stuff to add of course, more tools, but our next focus will be on making luxe an even better 3D engine to use for indie games.
We'll run another game jam soon for the engine too, that will align with the 2D ready goal.
We're making good progress on our games using luxe that we're excited to show, also on the cards soon!
Try it now!
Download luxe and have fun!
It's free and easy to learn!