Removing 32-bit Windows support and separate Lua states

In the next major version update, 1.14.0 (will be released after the next 1.13.2 release), we plan to remove support for 32-bit Windows and the option to use separate Lua states for game object, GUI, and render scripts.

32-bit Windows

Maintaining a separate 32-bit Windows target requires additional builds, dependencies, and testing. Removing it will reduce maintenance effort and simplify our build infrastructure.

Windows development and bundling will use the 64-bit platform, x86_64-win32. Building games and native extensions for x86-win32 will no longer be supported. If your build scripts target x86-win32, update them to use x86_64-win32 instead. See PR #13109 for details.

Lua states

Defold currently supports either one shared Lua state or separate states for game object, GUI, and render scripts. A shared state uses less memory and is already required by the editor debugger. Removing the separate-state option will simplify script initialization, updates, and native extension handling.

Starting with 1.14.0, all three script types will always share one Lua state, and the Shared State project setting (script.shared_state) will be removed. Projects that already use a shared state will keep the same behavior. Projects that use separate states will now share global variables and loaded Lua modules between script types. See PR #13111 for details.


If you have a project that still depends on 32-bit Windows, please provide more information about your audience and use case. This will help us understand the impact of removing this platform.

If your project uses separate Lua states, you can prepare by enabling Script → Shared State in game.project and testing your game. Pay particular attention to global variables and mutable state stored in Lua modules. If something on our side blocks this migration, please create an issue and provide a repro project so we can investigate it before the release.

16 Likes

Starting with 1.14.0, all three script types will always share one Lua state, and the Shared State project setting (script.shared_state) will be removed. Projects that already use a shared state will keep the same behavior. …

Phew, good thing it’s not the other way around, or I’d have to refactor my whole project.

2 Likes

I’m surprised that someone would use separate states for Lua (I was sure everyone use Shared State). Could you please explain why you chose this approach?

Sorry, I misread it.

2 Likes

do i understand correctly: now devs can, for example, call go functions from gui scripts and versa?

No, it’s not related. script.shared_state controls whether game object scripts, GUI scripts, and render scripts share one Lua state, including global variables and loaded Lua modules. In 1.14.0, they will always share one state, so the setting will be removed. Each script instance will still have its own self.

2 Likes

It should be extremely rare for anyone to have script.shared_state unchecked. It has been checked as default for a very very long time. I’d say that 99.99% of all developers won’t notice any difference.

1 Like