1.14.0
Aktuell
OpenNavo-Redaktion In Homebrew aufgenommen KI-übersetzt
KompatibilitätmacOS 12 oder neuer
Ergänzt Cubemap-Renderziele, generationelle Handles, dmSDK-Speicherpuffer und Editorverbesserungen; Metal wird macOS-Standard. Enthält inkompatible Änderungen an ABI, Lua, Windows-32-Bit, IAC, Rendering, Eingabe und Plugins.
Redaktionelle Zusammenfassung
Ergänzt Cubemap-Renderziele, generationelle Handles, dmSDK-Speicherpuffer und Editorverbesserungen. Metal ist der macOS-Standard.
- Generationelle Spielobjekt-/Collection-Handles ändern die native ABI: vorgefertigte dmSDK-Bibliotheken neu bauen und Zeigerannahmen durch Handle-großen Speicher ersetzen. HGameObject wird bevorzugt, HInstance bleibt Quellcode-Alias; GetGeneration() ist veraltet.
- Lua nutzt stets einen gemeinsamen Zustand ohne Abschaltoption. Alte Projekte mit getrennten Zuständen müssen gemeinsame globale Variablen und Modul-Caches berücksichtigen und refaktoriert werden.
- Windows-32-Bit-Artefakte entfallen. Build-Skripte von x86-win32 auf x86_64-win32 umstellen; Bobs win32-Suche bleibt Kompatibilitätsalias.
- IAC muss UIScene für eigene/universelle URLs einschließlich Kaltstart unterstützen; kompatibles Update mit Defold/Bob 1.14.0 oder neuer verwenden.
- Die alte uint32_t-Signatur von SetRenderTarget auf RenderTargetBindingParams umstellen. Die offizielle Übersicht nennt sie veraltet, der Detailabschnitt entfernt; beide Aussagen stehen unten. Nicht auf die alte Signatur verlassen. Cubemap-Anhänge müssen gleich große Quadrate ungleich null sein; Sample-Anforderungen über 1 werden auf 1 gesetzt.
- Beschleunigungssensor-Eingabe ist standardmäßig aus; bei Bedarf in game.project aktivieren.
- Ressourcen-Editor-Plugins müssen auf Signaturen mit gemeinsamem context aktualisiert werden.
b2d.get_gameobject_id()/bullet3d.get_gameobject_id() liefern die Objekt-ID oder nil für skripterzeugte Physikkörper. Matrixattribute von go.set()/go.get() verwenden vmath.matrix4; mat2/mat3 nutzen den linken oberen Teil und werden in eine Einheitsmatrix erweitert. vmath.vector4 wird abgelehnt. Metal lässt sich per App-Manifest auf OpenGL/Vulkan umstellen.
Dies ist eine übersetzte Zusammenfassung. Die vollständigen offiziellen englischen Hinweise mit APIs, Beispielen, Migrationen und Korrekturen folgen.
Official English notes — unabridged
Defold version 1.14.0 Channel=stable sha1: a81dbb0478e8b73931dc2d671563204f6ac0ef82 date = 2026-10-12 13:24:53
Defold 1.14.0
Defold_1_14_0_released|690x474
This version contains a number of breaking changes:
Generational game object handles
This is a breaking change for extension developers with code to manipulate game objects in C++. Game object and collection handles are now generational. Native extensions can retain these opaque handles; Defold rejects handles to deleted objects or collections instead of allowing them to resolve to reused storage. This is a native ABI change.
MIGRATION: Prebuilt dmSDK libraries must be rebuilt, and code that treated opaque handles as pointers must use handle-sized storage instead.
Always use a shared Lua state
This will likely only affect really old projects. The option to use a shared Lua state between . . and . has been the default for a very long time. With this change the option to disable a shared Lua state has been removed.
MIGRATION: Refactor any project where the shared Lua state is disabled.
Remove win32 support
Defold no longer builds or distributes 32-bit Windows runtime, editor, Bob, native-extension, or dependency artifacts. Windows development and bundling now consistently use x86_64, while Bob's legacy win32 lookup remains as a compatibility alias for x86_64-win32.
MIGRATION: Review any build scripts which uses x86-win32 and change them to use x86_64-win32 instead.
Support cubemap aware render targets
The function void SetRenderTarget(HContext context, HRenderTarget render_target, uint32_t transient_buffer_types); has been deprecated.
MIGRATION: Use the new cubemap aware SetRenderTarget() function:
struct RenderTargetBindingParamsExpand
{
uint32_t m_TransientBufferTypes;
CubeMapFace m_CubeMapFace;
};
void SetRenderTarget(HContext context, HRenderTarget render_target, const RenderTargetBindingParams& params);
Summary
- BREAKING CHANGE: (#12701) Add generational game object handles (by JCash)
- BREAKING CHANGE: (#12432) Always use a shared Lua state (by AGulev)
- BREAKING CHANGE: (#13109) Remove win32 support (windows 32-bit) (by AGulev)
- BREAKING CHANGE: (#11042) Support iOS links with the UIScene lifecycle (by AGulev)
- BREAKING CHANGE: (#12815) Support creating cubemap render targets (by Jhonnyg)
- BREAKING CHANGE: (#13353) Disable accelerometer input by default (by AGulev)
- BREAKING CHANGE: (#13257) Editor plugin API changes for resource-types (by matgis)
- NEW: (#13205) Remove usage of GL_QUADS and GL_POLYGON (by Jhonnyg)
- NEW: (#12685) Added b2d.get_gameobject_id() / bullet3d.get_gameobject_id() (by JCash)
- NEW: (#12608) Metal default on osx (by Jhonnyg)
- NEW: (#13102) Shrink Android resources alongside Java code (by AGulev)
- NEW: (#13297) Update XCode to 27.1, MacOS SDK to 27.0, iOS SDK to 27.1 (by AGulev)
- NEW: (#13315) Storage buffers support in dmSDK (by Jhonnyg)
- NEW: (#12853) Support wildcards in .defignore and .defunload patterns (by ekharkunov)
- NEW: (#4863) Add "New Window" option to the macOS Dock menu (by AGulev)
- NEW: (#13093) Updates for the single-graph editor (by vlaaad)
- NEW: (#12948) Implement configurable shortcuts for switching and reordering tabs (by vlaaad)
- NEW: (#13231) Implement strict graph connection rules in the editor (by matgis)
- NEW: (#13072) Establish outbound connections from editor resource nodes prior to loading (by matgis)
- NEW: (#13175,#13100,#12705) Update JDK to 25.0.4 and JavaFX to 27 (by vlaaad)
- NEW: (#13223) Add a preference to completely disable Lua language servers (by vlaaad)
- FIX: (#12863) Support more than 8k images/animations in a GUI component (by Jhonnyg)
- FIX: (#13094) Improve using go.get/go.set together with matrix types in custom vertex formats (by Jhonnyg)
- FIX: (#12331) Support using 0 samplers for sprites (by Jhonnyg)
- FIX: (#13156) Fix normalized depth texture uploads on OpenGL ES (by criccomini)
- FIX: (#12352,#10406) Fix Apple API deprecations and iOS cold-start links (by AGulev)
- FIX: (#11566) Fix compressed cubemap face order in OpenGL (by AGulev)
- FIX: (#13202) Choose Bob's build server by release channel (by AGulev)
- FIX: (#13262) Update archive compressor to LZ4 1.10.0 (by JCash)
- FIX: (#13260) Upgrade Basis Universal to 2.50 (by JCash)
- FIX: (#13283) Disable "Lint Code on Build" by default (by AGulev)
- FIX: (#12144) Fix Chrome's HTML5 web app metadata warning (by AGulev)
- FIX: (#13274) Use Metal as the default graphics adapter for the iOS simulator (by Jhonnyg)
- FIX: (#13311) Improved Material Editor UX (by JosephFerano)
- FIX: (#13312) Fix PVRTC texture uploads on Apple graphics backends (by JCash)
- FIX: (#13314) Fix for supporting ASTC on older Apple devices (by JCash)
- FIX: (#13331) Fix GUI safe-area anchoring and rotation updates (by AGulev)
- FIX: (#12627) Fix resource descriptor versions on creation (by AGulev)
- FIX: (#13206) Fix attribute cache lifetime counter (by Jhonnyg)
- FIX: (#13374) Fix literal ampersands breaking rich text (by JCash)
- FIX: (#13185) Fix macOS launcher showing "Not Responding" (by AGulev)
- FIX: (#13246) Fix atlas image hashes to follow geometry order (by JCash)
- FIX: (#12928) Support text shaping for complex scripts, emojis, and bidi (by JosephFerano)
- FIX: (#13227) Reduce editor CPU usage with multiple open tabs (by AGulev, matgis)
- FIX: (#13289) Fix camera preview errors with large aspect ratios (by vlaaad)
- FIX: (#13362) Fix regression that made the editor load longer than before (by vlaaad)
- FIX: (#13365) Fix lit shaders for ES2 (by Jhonnyg)
Engine
BREAKING CHANGE: (#12701) 'Add generational game object handles' by JCash Game object and collection handles are now generational. Native extensions can retain these opaque handles; Defold rejects handles to deleted objects or collections instead of allowing them to resolve to reused storage.
Collections can now contain up to 1,048,576 game objects. HGameObject is the preferred C++ type; HInstance remains as a source-compatibility alias.
This is a native ABI change. Prebuilt dmSDK libraries must be rebuilt, and code that treated opaque handles as pointers must use handle-sized storage instead.
Added public API:
dmGameObject::HGameObject.dmGameObject::CollectionResourceanddmGameObject::ResCollectionGetCollection().DM_DEPRECATED(message)from<dmsdk/.dlib/ deprecated. h>
Deprecated public API:
dmGameObject::GetGeneration(); the encoded generation is an implementation detail.
BREAKING CHANGE: (#12432) 'Always use a shared Lua state' by AGulev Defold now always shares one Lua state between game object, GUI, and render scripts. The obsolete Shared State project setting and its debugger warning have been removed. Projects that previously disabled the setting will now share globals and loaded-module caches after upgrading.
BREAKING CHANGE: (#13109) 'Remove win32 support (windows 32-bit)' by AGulev
⚠️ Defold no longer builds or distributes 32-bit Windows runtime, editor, Bob, native-extension, or dependency artifacts. Windows development and bundling now consistently use x86_64, while Bob’s legacy win32 lookup remains as a compatibility alias for x86_64-win32.
MIGRATION: Review any build scripts which uses x86-win32 and change them to use x86_64-win32 instead.
BREAKING CHANGE: (#11042) 'Support iOS links with the UIScene lifecycle' by AGulev Update IAC for Defold’s UIScene lifecycle so custom-scheme URLs and universal links continue to reach Lua, including links that launch the app before its listener is registered. Requires Defold/Bob 1.14.0 or later.
Fix needed for comptability after these braking changes https://github.com/defold/defold/issues/11042
BREAKING CHANGE: (#12815) 'Support creating cubemap render targets' by Jhonnyg Added support for rendering into cubemap render targets.
Screen Recording 2026-08-26 at 10 40 48|640x480
⚠️ BREAKING CHANGE ⚠️
The dmSDK function to bind a render target has been removed:
void SetRenderTarget(HContext context, HRenderTarget render_target, uint32_t transient_buffer_types);
In favor of using the new cubemap aware params+function:
struct RenderTargetBindingParamsExpand
{
uint32_t m_TransientBufferTypes;
CubeMapFace m_CubeMapFace;
};
void SetRenderTarget(HContext context, HRenderTarget render_target, const RenderTargetBindingParams& params);
Overview
Cubemap render targets can be created dynamically from render scripts or configured as .render_target resources in the editor. Individual cubemap faces are selected when binding the render target, allowing applications to render the six views required for realtime reflections, environment capture, point-light shadows, and similar effects. The resulting color attachment is a regular cubemap texture and can be bound to materials/shaders using a samplerCube.
Creating a cubemap backed render target from a render script:
self.environment = render.render_target("environment", {
type = graphics.TEXTURE_TYPE_CUBE_MAP,
[graphics.BUFFER_TYPE_COLOR0_BIT] = {
format = graphics.TEXTURE_FORMAT_RGBA,
width = size,
height = size,
},
[graphics.BUFFER_TYPE_DEPTH_BIT] = {
format = graphics.TEXTURE_FORMAT_DEPTH,
width = size,
height = size,
},
})
Once created, the render target can be used for drawing by binding a single face of the cubemap:
local faces = {
graphics.CUBEMAP_FACE_POSITIVE_X,
graphics.CUBEMAP_FACE_NEGATIVE_X,
graphics.CUBEMAP_FACE_POSITIVE_Y,
graphics.CUBEMAP_FACE_NEGATIVE_Y,
graphics.CUBEMAP_FACE_POSITIVE_Z,
graphics.CUBEMAP_FACE_NEGATIVE_Z,
}
for i, face in ipairs(faces) do
-- NEW: This enables drawing to a cubemap side!
render.set_render_target(self.environment, { face = face })
render.clear({
[graphics.BUFFER_TYPE_COLOR0_BIT] = vmath.vector4(0, 0, 0, 1),
[graphics.BUFFER_TYPE_DEPTH_BIT] = 1,
})
render.set_view(self.cubemap_views[i])
render.set_projection(self.cubemap_projection)
render.draw(self.scene_predicate)
end
-- Reset to backbuffer drawing
render.set_render_target(render.RENDER_TARGET_DEFAULT)
-- The cubemap can now be bound globally to any shader that has a cube sampler called "reflection_map"
render.enable_texture("reflection_map", self.environment)
⚠️ NOTE: Cubemap attachments must be square, non-zero, and equally sized. ⚠️ NOTE: Cubemap multisampling is not included in the MVP1 of this feature. Requests above one sample are normalized to an effective sample count of one.
Demo: cubemap-render-targets.zip
BREAKING CHANGE: (#13353) 'Disable accelerometer input by default' by AGulev Accelerometer input now defaults to disabled.
⚠️ Projects that rely on acceleration events must explicitly enable it in game..
NEW: (#13205) 'Remove usage of GL_QUADS and GL_POLYGON' by Jhonnyg
Modernizes the editor graphics backend by replacing the remaining uses of the legacy GL_QUADS and GL_POLYGON primitive modes. These modes are unavailable in the OpenGL 3.3 core profile.
Rendering behavior should remain unchanged.
NEW: (#12685) 'Added b2d.get_gameobject_id() / bullet3d.get_gameobject_id()' by JCash
These new script functions allow you to get the assigned gameobject of a physics body.
The functions return the game object id.
They return nil for bodies that are dynamically created via scripts.
Example:
local body = b2d.get_body("#collisionobject")
local id = b2d.get_gameobject_id(body)
NEW: (#12608) 'Metal default on osx' by Jhonnyg Metal is now the default graphics backend for OSX. To change backend to OpenGL or Vulkan (which uses Metal internally), create an app manifest, open the file and then make your selection in the properties panel on the right.
NEW: (#13102) 'Shrink Android resources alongside Java code' by AGulev Extender can now remove unused Android resources during R8 builds and return the optimized resources for bundling. Older SDKs retain their existing code-only optimization behavior, and D8 builds retain their original resources.
NEW: (#13297) 'Update XCode to 27.1, MacOS SDK to 27.0, iOS SDK to 27.1' by AGulev Extender can build native extensions for iOS 27.1 when its Apple silicon host has Xcode 27.1 and the matching packaged toolchain and SDKs. The setup guide now documents those requirements and how to route builds to that host.
NEW: (#13315) 'Storage buffers support in dmSDK' by Jhonnyg
Added shader storage buffers (commonly called SSBO's in graphics terminology) to the dmGraphics SDK, allowing native extensions to create, update, and bind buffers for graphics and compute shaders. Includes implementations for Vulkan, Metal, DirectX 12, WebGPU, OpenGL/OpenGL ES where supported, and the null adapter.
API
// Create a buffer with optional initial data. Returns 0 when unsupported or invalid.
HStorageBuffer NewStorageBuffer(HContext context, uint32_t size, const void* data, BufferUsage buffer_usage);
// Delete a buffer.
void DeleteStorageBuffer(HContext context, HStorageBuffer storage_buffer);
// Replace the complete contents and resize the buffer.
void SetStorageBufferData(HContext context, HStorageBuffer storage_buffer, uint32_t size, const void* data, BufferUsage buffer_usage);
// Update a byte range without resizing.
void SetStorageBufferSubData(HContext context, HStorageBuffer storage_buffer, uint32_t offset, uint32_t size, const void* data);
// Query the logical size in bytes.
uint32_t GetStorageBufferSize(HContext context, HStorageBuffer storage_buffer);
// Bind to the descriptor set and binding declared by the shader.
void EnableStorageBuffer(HContext context, HStorageBuffer storage_buffer, uint32_t set, uint32_t binding);
// Remove all bindings of this buffer from the context.
void DisableStorageBuffer(HContext context, HStorageBuffer storage_buffer);
Shader declaration:
layout(set = 0, binding = 0, std430) readonly buffer Values {
vec4 values[];
};
Native extension:
if (dmGraphics::IsContextFeatureSupported(context, dmGraphics::CONTEXT_FEATURE_STORAGE_BUFFER))
{
// Create the storage buffer
float values[] = { 1.0f, 2.0f, 3.0f, 4.0f };
dmGraphics::HStorageBuffer buffer = dmGraphics::NewStorageBuffer(context,
sizeof(values), values, dmGraphics::BUFFER_USAGE_DYNAMIC_DRAW);
dmGraphics::EnableStorageBuffer(context, buffer, 0, 0);
// Draw or dispatch here with a shader using the declaration above.
dmGraphics::DisableStorageBuffer(context, buffer);
dmGraphics::DeleteStorageBuffer(context, buffer);
}
FIX: (#12863) 'Support more than 8k images/animations in a GUI component' by Jhonnyg Fixed an issue where the GUI component would play the incorrect frame in a large atlas (more than 8k images/animations).
FIX: (#13094) 'Improve using go.get/go.set together with matrix types in custom vertex formats' by Jhonnyg
Fixed an issue where using custom vertex attributes with matrix types did not work correctly with the go. and go. functions. The dynamic attribute implementation only had storage for four floats and converted properties based on element count, which caused several issues. Now, matrix attributes consistently use vmath. types instead:
go.accepts a vmath.matrix4 for mat2, mat3, and mat4 attributes.set() - Mat2 and mat3 attributes extract the upper-left 2×2 or 3×3 portion.
go.returns a vmath.matrix4 for every matrix attribute.get() - Mat2 and mat3 values are expanded onto an identity matrix.
- Flattened vector values such as vmath.vector4 are rejected for matrix attributes.
-- Setting matrix values requires a matrix type as the data container
go.set("#model", "custom_mat4", vmath.matrix4())
go.set("#model", "custom_mat3", vmath.matrix4())
go.set("#model", "custom_mat2", vmath.matrix4())
-- Getting matrix values will return a vmath.matrix4, regardless of the source data size
go.get("#model", "custom_mat4")
go.get("#model", "custom_mat3")
go.get("#model", "custom_mat2")
Furthermore, 2x2 matrices could previously be set/get via vmath.vector4 types, but this is no longer supported - you need to use a matrix container for this. Note that this is NOT a breaking change, but merely a bug fix. A matrix type is a matrix type and should be treated as such!
FIX: (#12331) 'Support using 0 samplers for sprites' by Jhonnyg Fixed an engine crash when using sprite components without textures/samplers.
FIX: (#13156) 'Fix normalized depth texture uploads on OpenGL ES' by criccomini
Fixes a native OpenGL ES depth-texture allocation failure that can abort the engine with GL_INVALID_OPERATION, including on Raspberry Pi 5. Normalized depth textures now use an unsigned integer upload type. No API or render-script changes are required.
FIX: (#12352,#10406) 'Fix Apple API deprecations and iOS cold-start links' by AGulev Removes native deprecation warnings from the active macOS and iOS engine build paths and restores forwarding of custom URL links when they launch an iOS app.
FIX: (#11566) 'Fix compressed cubemap face order in OpenGL' by AGulev Compressed cubemaps now display their front and back faces correctly with OpenGL. Previously, enabling texture compression swapped these two faces.
FIX: (#13202) 'Choose Bob's build server by release channel' by AGulev
Bob now defaults to the production build server only for stable releases and staging for every other channel. This prevents alpha and beta SDKs from reaching an incompatible production server. Explicit --build-server overrides continue to work.
FIX: (#13262) 'Update archive compressor to LZ4 1.10.0' by JCash Bob now uses the same LZ4 compressor as the runtime engine. Also it brings a performance boost of ~21% when compressing our game archive. The runtime decompression performance remains unaffected.
We did this to more easily keep code up-to-date, and in the future, we want to support custom compressor algorithms for platforms that support it.
FIX: (#13260) 'Upgrade Basis Universal to 2.50' by JCash Updated Basis Universal to version 2.50. Defold continues to use UASTC textures to keep engine size down.
FIX: (#13283) 'Disable "Lint Code on Build" by default' by AGulev Code linting during builds is now disabled by default. Users can enable “Lint Code on Build” in Preferences.
FIX: (#12144) 'Fix Chrome's HTML5 web app metadata warning' by AGulev Removes Chrome's deprecation warning from HTML5 bundles and build time reports while preserving standalone launch from the Home Screen on older iOS versions.
FIX: (#13274) 'Use Metal as the default graphics adapter for the iOS simulator' by Jhonnyg Metal is now the default graphics adapter for the iOS simulator.
FIX: (#13311) 'Improved Material Editor UX' by JosephFerano Material Editor got a redesign to improve the user experience and visual appearance. It now has header to clearly mark the different sections and shows a read-only table with an editable form for the current selection. Also reduced the width of choice boxes found throughout the editor.
FIX: (#13312) 'Fix PVRTC texture uploads on Apple graphics backends' by JCash This fixes an issue when uploading swizzled PVRTC textures on Metal/Vulkan backend on macOS/iOS.
FIX: (#13314) 'Fix for supporting ASTC on older Apple devices' by JCash This fix enables ASTC textures on Apple2 Metal devices
FIX: (#13331) 'Fix GUI safe-area anchoring and rotation updates' by AGulev Anchored root GUI nodes now respect the safe-area origin, keeping their positions clear of screen cutouts. GUI layout also refreshes when insets change without a window resize, including 180° rotations on iOS and Android.
FIX: (#12627) 'Fix resource descriptor versions on creation' by AGulev
Newly created resources now store their assigned version. Previously, every new descriptor kept version 0 in the factory map, allowing a stale Lua buffer wrapper to release a replacement resource if its path and memory address were reused.
FIX: (#13206) 'Fix attribute cache lifetime counter' by Jhonnyg Fix unbounded cache growth and incorrect expiration of model custom vertex attribute render data. Active entries now survive frame counter wraparound, unused entries expire correctly, and released cache slots are reused.
FIX: (#13374) 'Fix literal ampersands breaking rich text' by JCash Treat ampersands as literal text unless they begin one of the five supported complete escapes. Preserve literal ampersands when filtering unsupported glyphs, including output growth through the Java wrapper.
Editor
BREAKING CHANGE: (#13257) 'Editor plugin API changes for resource-types' by matgis Resource readers and loaders previously queried the graph to resolve resource types, dependencies, and templates. The function signatures have been updated to take shared context that is prepared once before we start loading anything, avoiding repeat work during the load process.
This is a breaking editor plugin API change necessitating updates to all extensions with editor plugins. If your project has extensions based on defold/extension-simpledata, the necessary changes can be seen here: https://github.com/defold/extension-simpledata/pull/23/changes
NEW: (#12853) 'Support wildcards in .defignore and .defunload patterns' by ekharkunov
Now . and . files supports expressions with wildcard patterns.
Examples:
| Pattern | Matches | Does not match |
|---|---|---|
| /levels | /levels, /levels/1/map.tilemap | /levelsX, /Levels |
| /a.b | /a.b, /a.b/m.txt | /aXb |
| /levels/*/tiled | /levels/1/tiled, /levels/1/tiled/a.txt | /levels/tiled, /levels/1/tiledX, /levels/1/other.txt |
| /levels/* | /levels/a.txt, /levels/a/b.txt | /levels |
| /assets/temp_??.png | /assets/temp_01.png | /assets/temp_1.png, /assets/temp_001.png |
| /dir(1)/*.png | /dir(1)/a.png | /dir1/a.png, /dir(1)/b.txt |
| /**/generated | /generated, /a/b/generated/n.txt | /a/b/ungenerated |
| /levels/** | /levels, /levels/a/b/c.txt | /levelsX |
| /a/**/b | /a/b, /a/x/y/b | /a/xb |
NEW: (#4863) 'Add "New Window" option to the macOS Dock menu' by AGulev Adds a New Window action to Defold’s macOS Dock menu. It opens another editor at the welcome screen, allowing users to open or create a project while keeping their current project open.
NEW: (#13093) 'Updates for the single-graph editor' by vlaaad https://github.com/defold/defold/issues/13093
NEW: (#12948) 'Implement configurable shortcuts for switching and reordering tabs' by vlaaad The editor now has configurable shortcuts for switching between tabs. The tabs can now also be reordered using keyboard shortcuts.
New shortcuts:
| Command | macOS | Windows / Linux |
|---|---|---|
| Select next tab | <kbd>⌃ Tab</kbd><br>or <kbd>⇧⌘]</kbd> | <kbd>Ctrl + Tab</kbd><br>or <kbd>Ctrl + Page Down</kbd> |
| Select previous tab | <kbd>⌃⇧ Tab</kbd><br>or <kbd>⇧⌘[</kbd> | <kbd>Ctrl + Shift + Tab</kbd><br>or <kbd>Ctrl + Page Up</kbd> |
| Move tab left | <kbd>⌥⌘[</kbd> | <kbd>Ctrl + Shift + Page Up</kbd> |
| Move tab right | <kbd>⌥⌘]</kbd> | <kbd>Ctrl + Shift + Page Down</kbd> |
NEW: (#13231) 'Implement strict graph connection rules in the editor' by matgis The graph connections established when loading resource nodes have been cleaned up in order to avoid undesirable cross-resource effects.
Part of #10166
NEW: (#13072) 'Establish outbound connections from editor resource nodes prior to loading' by matgis Editor resource nodes now establish outbound connections to global systems before they are loaded. This change is intended to enable partial project loading in the future.
Part of #10166
NEW: (#13175,#13100,#12705) 'Update JDK to 25.0.4 and JavaFX to 27' by vlaaad Updates the editor’s bundled JDK to 25.0.4.1+1 and JavaFX to 27, fixing reported excessive memory usage on Windows and high background CPU and energy usage on macOS.
NEW: (#13223) 'Add a preference to completely disable Lua language servers' by vlaaad This is useful when working on large projects where the coding is done outside the Defold editor, since LuaLS typically uses a lot of memory.
FIX: (#13185) 'Fix macOS launcher showing "Not Responding"' by AGulev Removes the extra Defold process that remained in Activity Monitor as “Not Responding” while the editor was running. Also prevents restart failures when the exiting editor closes the new launcher's output pipes.
FIX: (#13246) 'Fix atlas image hashes to follow geometry order' by JCash Fixes incorrect normal maps on multi-textured sprites when their atlases list images in different orders.
The editor now generates image-name hashes from the sorted geometry list, keeping hashes aligned with frame indices. Rename patterns, animation metadata, and geometry variants are preserved.
FIX: (#12928) 'Support text shaping for complex scripts, emojis, and bidi' by JosephFerano image|1011x1018
FIX: (#13227) 'Reduce editor CPU usage with multiple open tabs' by AGulev, matgis Reduce unnecessary CPU work while resizing the editor, focusing property fields, and leaving a GUI scene idle.
FIX: (#13289) 'Fix camera preview errors with large aspect ratios' by vlaaad The editor now keeps camera previews within their display bounds and skips previews that cannot be rendered.
FIX: (#13362) 'Fix regression that made the editor load longer than before' by vlaaad In recent releases, the time from launching the editor to showing the welcome screen has regressed. Now it's back to normal!
FIX: (#13365) 'Fix lit shaders for ES2' by Jhonnyg Fixed an issue where the lighting.glsl include was not compatible with OpenGL ES2 contexts.