# Defold 1.12.3 has been released!

**URL:** <https://forum.defold.com/t/defold-1-12-3-has-been-released/82619>\
**Category:** Release notes\
**Created:** [April 7, 2026, 1:15pm UTC](https://forum.defold.com/t/defold-1-12-3-has-been-released/82619 "2026-04-07T13:15:26Z")\
**Posts on this page:** 1\
**Showing post:** 1

<div class="post-metadata">

**Author:** ![Mathias\_Westerdahl](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/mathias_westerdahl/32/228_2.png) [@Mathias\_Westerdahl](https://forum.defold.com/u/Mathias_Westerdahl)\
**Post date:** [April 7, 2026, 1:15pm UTC](https://forum.defold.com/t/defold-1-12-3-has-been-released/82619/1 "2026-04-07T13:15:26Z")

</div>

# Defold 1.12.3

NOTE: From this release on, we’ve moved away from having the editor deployed under `editor-alpha` channel, and instead use the `stable` channel. You don’t need to do anything special, other than update the editor as usual, and it will update itself to the stable channel.

## ⚠ Important note about changes to resource.get\_atlas() and resource.set\_atlas()

If you manipulate or query an atlas at runtime using `resource.get_atlas()`, `resource.set_atlas()` or `resource.create_atlas()` it is important that you pay extra attention to the change made to the atlas animation data. Previous versions of Defold returned a `frame_start` and `frame_end` per animation in the `animations` list. The `frame_start` and `frame_end` values were very unreliable and only worked correctly in the case when the order of images in the `geometries` list exactly matched the sequence of animation frames from `frame_start` to `frame_end`. In cases when animations aren’t sequentially ordered the `frame_start` and `frame_end` simply can’t be used to represent the animation frames.

The use of `frame_start` and `frame_end` was an oversight in the initial design of the API. **In this version of Defold we’ve decided to deprecated the `frame_start` and `frame_end` fields in favour of a list of animation `frames`** containing indices to the geometries of the animation. If you have code which works with single frame animations it is still easy to get the get “image” used by the animation by getting the first value from the `frames` list:

```lua
-- defold 1.12.2 and older:
local geometry_index = anim.frame_start

-- defold 1.12.3
local geometry_index = anim.frames[1]

```

More information in the pull request:

> <https://github.com/defold/defold/pull/12016>
>
> This change adds \`frames\` as a valid key in the \`animations\` table received from… \`resource.get\_atlas()\` or sent to \`resource.set\_atlas()\` / \`resource.create\_atlas()\`. Each entry in the \`frames\` table maps between an animation frame and the location of the frame in the \`geometries\` list.
> 
> ⚠️ The fields \`frame\_start\` and \`frame\_end\` have been removed from \`resource.get\_atlas()\` but are still accepted when calling \`resource.set\_atlas()\` / \`resource.create\_atlas()\`.
> 
> 
> \`\`\`lua
> local data = resource.get\_atlas(...)
> pprint(data)
> \`\`\`
> 
> \`\`\`
> {
> animations = {
> width = 16,
> flip\_vertical = false,
> id = "Walk",
> frames = {
> 1 = 10,
> 2 = 1,
> 3 = 4,
> 4 = 8,
> 5 = 9,
> 6 = 2,
> 7 = 3,
> 8 = 5,
> 9 = 6,
> 10 = 7
> },
> flip\_horizontal = false,
> height = 16,
> fps = 30,
> playback = 4
> },
> geometries = {
> {
> uvs = {
> ...
> },
> pivot\_x = 0.5,
> pivot\_y = 0.5,
> height = 16,
> vertices = {
> ...
> },
> indices = {
> ...
> },
> rotated = false,
> width = 16
> }
> },
> {
> ...
> }
> }
> \`\`\`
> 
> Fixes #11956 
> 
> \## PR checklist
> 
> \* \[\] Code
> \* \[\] Add engine and/or editor unit tests.
> \* \[\] New and changed code follows the overall code style of existing code
> \* \[\] Add comments where needed
> \* \[\] Documentation
> \* \[\] Make sure that API documentation is updated in code comments
> \* \[\] Make sure that manuals are updated (in github.com/defold/doc)
> \* \[\] Prepare pull request and affected issue for automatic release notes generator
> \* \[\] Pull request - Write a message that explains what this pull request does. What was the problem? How was it solved? What are the changes to APIs or the new APIs introduced? This message will be used in the generated release notes. Make sure it is well written and understandable for a user of Defold.
> \* \[\] Pull request - Write a pull request title that in a sentence summarises what the pull request does. Do not include "Issue-1234 ..." in the title. This text will be used in the generated release notes.
> \* \[\] Pull request - Link the pull request to the issue(s) it is closing. Use on of the \[approved closing keywords\](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue).
> \* \[\] Affected issue - Assign the issue to a project. Do not assign the pull request to a project if there is an issue which the pull request closes.
> \* \[\] Affected issue - Assign the "breaking change" label to the issue if introducing a breaking change.
> \* \[\] Affected issue - Assign the "skip release notes" is the issue should not be included in the generated release notes.
> 
> \----------
> 
> Example of a well written PR description:
> 
> 1. Start with the user facing changes. This will end up in the release notes.
> 1. Add one of the GitHub approved closing keywords
> 1. Optionally also add the technical changes made. This is information that might help the reviewer. It will not show up in the release notes. Technical changes are identified by a line starting with one of these:
> 1. \`### Technical changes\` 
> 1. \`Technical changes:\`
> 2. \`Technical notes:\`
> 
> \`\`\`
> There was a anomaly in the carbon chroniton propeller, introduced in version 8.10.2. This fix will make sure to reset the phaser collector on application startup.
> 
> Fixes #1234
> 
> \### Technical changes
> \* Pay special attention to line 23 of phaser\_collector.clj as it contains some interesting optimizations
> \* The propeller code was not taking into account a negative phase.
> \`\`\`

# Defold 1.12.3

## Summary

- **NEW** : ([#11987](https://github.com/defold/defold/pull/11993)) Expose engine time to shaders (by Jhonnyg)
- **NEW** : ([#11947](https://github.com/defold/defold/pull/12026)) Add QuatFromAngle, QuatToEuler and EulerToQuat to dmSDK (by britzl)
- **NEW** : ([#11956](https://github.com/defold/defold/pull/12016)) Use list of animation frames instead of start and end frame when working with atlases (by britzl)
- **NEW** : ([#7045](https://github.com/defold/defold/pull/11941)) New semantic type for texture transforms (by Jhonnyg)
- **NEW** : ([#9918](https://github.com/defold/defold/pull/11906)) Added experimental support for minification of internal resource paths to save memory (by JCash)
- **NEW** : ([#11902](https://github.com/defold/defold/pull/11945)) Add `editor.properties(node)` editor script API for runtime introspection (by vlaaad)
- **NEW** : ([#11964](https://github.com/defold/defold/pull/11966)) Add OpenAPI spec to editor HTTP server (by vlaaad)
- **NEW** : ([#11969](https://github.com/defold/defold/pull/11970)) Add `"text"` property to textual resources in editor scripts (by vlaaad)
- **NEW** : ([#7737](https://github.com/defold/defold/pull/11996)) Use filterable select box in input\_binding’s key selector (by vlaaad)
- **NEW** : ([#5370](https://github.com/defold/defold/pull/12014)) Add `parent` property to editor script outline nodes (by vlaaad)
- **NEW** : ([#8642](https://github.com/defold/defold/pull/11980)) Add “Duplicate Selection” code action (by vlaaad)
- **NEW** : ([#11927](https://github.com/defold/defold/pull/11927)) Support world and normal semantic types for sprites (by Jhonnyg)
- **FIX** : ([#11930](https://github.com/defold/defold/pull/11958)) Fix strange sprite behavior when change atlas in runtime (by ekharkunov)
- **FIX** : ([#11328](https://github.com/defold/defold/pull/12042)) Reduce number of dispatches needed for GUI text nodes (by Jhonnyg)
- **FIX** : ([#9722](https://github.com/defold/defold/pull/11965)) Incorrect attribute values for instancing (by Jhonnyg)
- **FIX** : ([#11953](https://github.com/defold/defold/pull/11983)) Fix `gui.set_screen_position()` when Adjust Reference is Disabled (by AGulev)
- **FIX** : ([#12009](https://github.com/defold/defold/pull/12009)) Make sure `shader.exclude_gles_sm100` is taken into account in `AndroidManifest.xml` (by AGulev)
- **FIX** : ([#12034](https://github.com/defold/defold/pull/12034)) Added dmGraphics::VulkanGetImage and dmGraphics::VulkanGetImageView to dmsdk (by JCash)
- **FIX** : ([#12029](https://github.com/defold/defold/pull/12029)) Update winsdk version. Cleanup old stuff a bit (by ekharkunov)
- **FIX** : ([#12017](https://github.com/defold/defold/pull/12037)) Fixed issue where the HTML5 bundle always displayed the `DOMToGLFWKeyCode...` message in the console (by AGulev)
- **FIX** : ([#12022](https://github.com/defold/defold/pull/12039)) Fix for incorrect particlefx scale (by Jhonnyg)
- **FIX** : ([#12048](https://github.com/defold/defold/pull/12053)) Fix `model_animation_done` callback (by AGulev)
- **FIX** : ([#8163](https://github.com/defold/defold/pull/11957)) Cache texture sampler state for OpenGL (by Jhonnyg)
- **FIX** : ([#11926](https://github.com/defold/defold/pull/11926)) Produce better local space vertices for sprites and particles (by Jhonnyg)
- **FIX** : ([#11919](https://github.com/defold/defold/pull/11919)) Fix for positions in local coordinate space for particles (by Jhonnyg)
- **FIX** : ([#12052](https://github.com/defold/defold/pull/12073)) Cache the viewport rectangle to avoid potential performance issues on the HTML5 platform (by AGulev)
- **FIX** : ([#12070](https://github.com/defold/defold/pull/12070)) Added support to choose Vulkan api version from game.project (by JCash)
- **FIX** : ([#11907](https://github.com/defold/defold/pull/11918)) Fix floating point type mismatch for atlas images (by JosephFerano)
- **FIX** : ([#11886,#6260](https://github.com/defold/defold/pull/11931)) Show function list in the right sidebar (by vlaaad)
- **FIX** : ([#8537](https://github.com/defold/defold/pull/11940)) Prevent the editor from crashing when loading a malformed collection (by vlaaad)
- **FIX** : ([#11977](https://github.com/defold/defold/pull/11977)) Avoid surprisingly expensive file system access during project read (by matgis)
- **FIX** : ([#11923](https://github.com/defold/defold/pull/12065)) Editor fix: Allow shaders to compile with page count \> 8 (by JosephFerano)
- **FIX** : ([#11976](https://github.com/defold/defold/pull/12018)) Fix broken handling of shader compiler warnings in the editor (by matgis)
- **FIX** : ([#11985](https://github.com/defold/defold/pull/12024)) Eliminate unnecessary code editor redraws (by matgis)
- **FIX** : ([extender#385](https://github.com/defold/defold/pull/11950)) Up Android min sdk version to 21 (Android 5.0) (by ekharkunov)

## Engine

**NEW** : ([#11987](https://github.com/defold/defold/pull/11993)) **‘Expose engine time to shaders’** by Jhonnyg  
There is now a new constant type added `CONSTANT_TYPE_TIME` that can be used by shaders to automatically recieve time data from the engine:

```glsl
uniform my_uniforms
{
    vec4 my_time; // Set to constant type "Time" in the material editor!
};

```

The current data is exposed:  
my\_time.x : time since engine start  
my\_time.y : delta time from last frame (same as being passed into script updates)

This change means that you don’t need to keep track of these values manually for certain effects like scrolling textures or other shader based animations!

**NEW** : ([#11947](https://github.com/defold/defold/pull/12026)) **‘Add QuatFromAngle, QuatToEuler and EulerToQuat to dmSDK’** by britzl  
This change adds `dmVmath::QuatFromAngle()`, `dmVmath::QuatToEuler()` and `dmVmath::EulerToQuat()` to the public dmSDK.

**NEW** : ([#11956](https://github.com/defold/defold/pull/12016)) **‘Use list of animation frames instead of start and end frame when working with atlases’** by britzl  
This change adds `frames` as a valid key in the `animations` table received from `resource.get_atlas()` or sent to `resource.set_atlas()` / `resource.create_atlas()`. Each entry in the `frames` table maps between an animation frame and the location of the frame in the `geometries` list.

⚠ The fields `frame_start` and `frame_end` have been removed from `resource.get_atlas()` but are still accepted when calling `resource.set_atlas()` / `resource.create_atlas()`.

```lua
local data = resource.get_atlas(...)
pprint(data)

```

```lua
{
  animations = {
    width = 16,
    flip_vertical = false,
    id = "Walk",
    frames = {
      1 = 10,
      2 = 1,
      3 = 4,
      4 = 8,
      5 = 9,
      6 = 2,
      7 = 3,
      8 = 5,
      9 = 6,
      10 = 7
    },
    flip_horizontal = false,
    height = 16,
    fps = 30,
    playback = 4
  },
  geometries = {
    {
      uvs = {
        ...
      },
      pivot_x = 0.5,
      pivot_y = 0.5,
      height = 16,
      vertices = {
        ...
      },
      indices = {
        ...
      },
      rotated = false,
      width = 16
    }
  },
  {
    ...
  }
}

```

**NEW** : ([#7045](https://github.com/defold/defold/pull/11941)) **‘New semantic type for texture transforms’** by Jhonnyg  
We have added a new semantic type **texture transform** for custom vertex formats that can be used to implement scrolling textures for sprites and particlefx components:

![Recording 2026-02-23 135632](https://github.com/user-attachments/assets/23dba04f-7c4d-4f20-95a1-8eeb70a8cda5)

**NEW** : ([#9918](https://github.com/defold/defold/pull/11906)) **'Added experimental support for minification of internal resource paths to save memory ’** by JCash  
This change helps projects with lots of resources as it likely will mean they have nested resources in many folders.  
It will convert internal paths from the form `/very/long/path/to/my/resource.type` into `/0123/4567/890a/bcde.type`, so the savings will vary between projects.

Note: Currently, this option is experimental.

To use this feature, pass `--experimental-path-minification` to `bob.jar` when bundling.

**FIX** : ([#11930](https://github.com/defold/defold/pull/11958)) **‘Fix strange sprite behavior when change atlas in runtime’** by ekharkunov  
Fix sprite strange behavior when sprite atlas was changed in runtime.

**FIX** : ([#11328](https://github.com/defold/defold/pull/12042)) **‘Reduce number of dispatches needed for GUI text nodes’** by Jhonnyg  
Text nodes in the GUI component requires less dispatch calls now.

**FIX** : ([#9722](https://github.com/defold/defold/pull/11965)) **‘Incorrect attribute values for instancing’** by Jhonnyg  
Using materials with custom vertex formats for models together with overriding materials in a render script can now render correctly.

**FIX** : ([#11953](https://github.com/defold/defold/pull/11983)) **‘Fix `gui.set_screen_position()` when Adjust Reference is Disabled’** by AGulev  
Fixed an issue where `gui.set_screen_position()` did not work correctly for root nodes when `Adjust Reference` was set to Disabled in a GUI component.

**FIX** : ([#12009](https://github.com/defold/defold/pull/12009)) **‘Make sure `shader.exclude_gles_sm100` is taken into account in `AndroidManifest.xml`’** by AGulev  
The `shader.exclude_gles_sm100` checkbox in `game.project` disables generation of OpenGL ES 2.0 compatible shaders, which makes this API unsupported. This setting should also be reflected in `AndroidManifest.xml`, so Google Play knows that such devices are not supported.

⚠ If you are using a custom AndroidManifest.xml file, make sure to update it.  
Replace

```xml
    <uses-feature android:required="true" android:glEsVersion="0x00020000" />

```

with

```xml
    {{#shader.exclude_gles_sm100}}
    <uses-feature android:required="true" android:glEsVersion="0x00030000" />
    {{/shader.exclude_gles_sm100}}
    {{^shader.exclude_gles_sm100}}
    <uses-feature android:required="true" android:glEsVersion="0x00020000" />
    {{/shader.exclude_gles_sm100}}

```

**FIX** : ([#12034](https://github.com/defold/defold/pull/12034)) **‘Added dmGraphics::VulkanGetImage and dmGraphics::VulkanGetImageView to dmsdk’** by JCash  
This allows the developer to get a native `VkImage` and `VkImageView` from a `dmGraphics::HTexture`.  
It helps when interacting with other 3rd party libraries.

**FIX** : ([#12029](https://github.com/defold/defold/pull/12029)) **‘Update winsdk version. Cleanup old stuff a bit’** by ekharkunov  
Updated WinSDK to version `10.0.26100.0` and build tools to version `14.44.35207`  
Related [Add robustness test for windows libraries · Issue #813 · defold/extender · GitHub](https://github.com/defold/extender/issues/813)

**FIX** : ([#12017](https://github.com/defold/defold/pull/12037)) **‘Fixed issue where the HTML5 bundle always displayed the `DOMToGLFWKeyCode...` message in the console’** by AGulev  
Fixed an issue where every keyboard key press produced a console log in HTML5 bundles, even in release builds.

**FIX** : ([#12022](https://github.com/defold/defold/pull/12039)) **‘Fix for incorrect particlefx scale’** by Jhonnyg  
Fixes a regression that was introduced from recent changes in how particle systems factor in scale into local positions.

**FIX** : ([#12048](https://github.com/defold/defold/pull/12053)) **‘Fix `model_animation_done` callback’** by AGulev

**FIX** : ([#8163](https://github.com/defold/defold/pull/11957)) **‘Cache texture sampler state for OpenGL’** by Jhonnyg  
We currently set the texture sampler state every time we bind a texture as well as when `dmGraphic::SetTextureParams` is called when textures are bound in the renderer. This has now been changed so that we cache the sampler settings and only apply these when the sampler state has changed.

In this sample scene the number OpenGL calls is almost half and the fps diff is ~370 vs 340.

Left: Caching of OpenGL texture state (not applying filter if we don’t have to)  
Right: Current dev

![texturesamplestate](https://github.com/user-attachments/assets/322eae8a-93ce-40a4-9415-35188f3717d9)

**FIX** : ([#11926](https://github.com/defold/defold/pull/11926)) **‘Produce better local space vertices for sprites and particles’** by Jhonnyg  
Currently when writing custom vertex positions in the “local” coordinate space for sprites and particles, the size of the sprite/particle is applied to both the position _and_ the world transform. This means that you cannot render the primitive correctly when applying the world transform to the local position in a shader for example:

```glsl
// 1. the position attribute is in local space (i.e pixel local coordinate space)
gl_Position = view_proj * mtx_world * vec4(position.xyz, 1.0);
// 2. the position attribute is in world space
gl_Position = view_proj * vec4(position.xyz, 1.0);

```

These two statements should produce identical results, but doesn’t since the size is applied to the world transform for both sprites and particles. This has now been fixed, which means that we can use custom vertex formats to properly do billboarding properly.

**FIX** : ([#11919](https://github.com/defold/defold/pull/11919)) **‘Fix for positions in local coordinate space for particles’** by Jhonnyg  
The transform was previously applied to the local space positions, which caused the particle system to produce rotated vertices in to the vertex buffer.

**FIX** : ([#12052](https://github.com/defold/defold/pull/12073)) **‘Cache the viewport rectangle to avoid potential performance issues on the HTML5 platform’** by AGulev  
Cache the viewport rectangle to avoid unnecessary OpenGL calls. In some cases, it may be the cause of performance issues.

**FIX** : ([#12070](https://github.com/defold/defold/pull/12070)) **'Added support to choose Vulkan api version from game.project ’** by JCash  
This feature allows you to configure a specific Vulkan api version.  
Game.project now has two settings:

- `graphics.vulkan_version_major` (default =1)
- `graphics.vulkan_version_minor` (default = 0)

## Editor

**NEW** : ([#11902](https://github.com/defold/defold/pull/11945)) **‘Add `editor.properties(node)` editor script API for runtime introspection’** by vlaaad  
Now you can use `editor.properties()` fn in editor scripts to look up existing properties on a node, which makes them much more discoverable, especially for agentic workflows that interact with the running editor.

#### Usage example

```lua
pprint(editor.properties("/")) 
-- {
-- "children",
-- "path"
-- }

pprint(editor.properties("/game.project"))
-- {
-- "android.app_icon_144x144",
-- "android.app_icon_192x192",
-- "android.app_icon_36x36",
-- "android.app_icon_48x48",
-- ...many more
-- }

```

#### Agentic workflow example

##### Minimal `/eval` endpoint implementation (`eval.editor_script`):

```lua
local M = {}

function M.get_http_server_routes()
    return {
        http.server.route("/eval", "POST", "string", function(request)
            local success, result = pcall(function()
                return assert(load(request.body))()
            end)
            return http.server.json_response({
                success = success,
                result = result
            })
        end)
    }
end

return M

```

##### Using eval programmatically

```sh
curl "http://127.0.0.1:$(cat .internal/editor.port)/eval" -d 'return editor.properties("/")' | jq            
{
  "success": true,
  "result": [
    "children",
    "path"
  ]
}

```

##### Using eval in your favorite coding assistant

Once your agent knows about `/eval` endpoint and `.internal/editor.port`:

````md
› Use /eval endpoint to show me all properties with values of /main/player.script
• Working...
• Properties with values for `/main/player.script`:

  - `path`: /main/player.script
  - `text`:
    ```
    go.property("hp", 100)
    go.property("speed", 3.5)
    ```
  - `__speed`: 3.5
  - `__hp`: 100

````

**NEW** : ([#11964](https://github.com/defold/defold/pull/11966)) **‘Add OpenAPI spec to editor HTTP server’** by vlaaad  
We added an [OpenAPI](https://spec.openapis.org/oas/v3.0.3.html) spec to the editor’s built-in HTTP server. This makes it more discoverable for AI agents, now they only need to know that the port is in `.internal/editor.port`, and they can learn the rest themselves.

#### Example using your favorite coding agent:

```md
> given a local server in .internal/editor.port, what can you do with the server? 
• I found a live Defold Editor HTTP server. Next I’ll inspect its OpenAPI spec to list exactly
  what operations are available...
• With the server on port in `.internal/editor.port` file, I can control/read parts
  of your Defold editor via HTTP:

  Read editor console output
  `GET /console`

  Execute built-in editor commands
  `POST /command/{command}`
  Examples: build, rebuild, build-html5, hot-reload, debugger commands, fetch-libraries, 
  pane toggles, open docs/issues/profiler pages.

  Read/write editor preferences
  `GET /prefs/{path} and POST /prefs/{path}`
  Examples of paths: `code/font`, `code/font/size`.

```

**NEW** : ([#11969](https://github.com/defold/defold/pull/11970)) **‘Add `"text"` property to textual resources in editor scripts’** by vlaaad  
We added `"text"` properties to textual resources besides code resources, e.g.:

```lua
print(editor.get("/builtins/render/default.render", "text"))
-- script: "/builtins/render/default.render_script"

```

**NEW** : ([#7737](https://github.com/defold/defold/pull/11996)) **‘Use filterable select box in input\_binding’s key selector’** by vlaaad  
It’s now possible to type to filter the input\_binding’s key selectbox:  
 ![Screenshot 2026-03-05 at 15 49 32](https://github.com/user-attachments/assets/42f5e181-2eb4-4576-89d1-9a313ccec3be)

**NEW** : ([#5370](https://github.com/defold/defold/pull/12014)) **‘Add `parent` property to editor script outline nodes’** by vlaaad  
Editor scripts can now access outline parents using `editor.can_get(node, "parent")` and `editor.get(node, "parent")` in commands that query outline selection.

**NEW** : ([#8642](https://github.com/defold/defold/pull/11980)) **‘Add “Duplicate Selection” code action’** by vlaaad  
The text editor now supports a Duplicate Selection code action (⌘⇧D on macOS, Ctrl Shift D on Windows and Linux):

[https://github-production-user-asset-6210df.s3.amazonaws.com/732554/558037175-936e49f2-1de1-453b-a79e-ae0a3c8c281b.mov?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAVCODYLSA53PQK4ZA%2F20260410%2Fus-east-1%2Fs3%2Faws4\_request&X-Amz-Date=20260410T210341Z&X-Amz-Expires=300&X-Amz-Signature=5ec7d404995053f606a069c2090e7e4560722751ebd49a19916d53922539a2a1&X-Amz-SignedHeaders=host](https://github-production-user-asset-6210df.s3.amazonaws.com/732554/558037175-936e49f2-1de1-453b-a79e-ae0a3c8c281b.mov?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAVCODYLSA53PQK4ZA%2F20260410%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260410T210341Z&X-Amz-Expires=300&X-Amz-Signature=5ec7d404995053f606a069c2090e7e4560722751ebd49a19916d53922539a2a1&X-Amz-SignedHeaders=host)

**NEW** : ([#11927](https://github.com/defold/defold/pull/11927)) **‘Support world and normal semantic types for sprites’** by Jhonnyg  
Sprites that use a material with vertex attributes specified as world or normal matrix semantic types previously produced only an identity matrix. This has now been fixed.

**FIX** : ([#11907](https://github.com/defold/defold/pull/11918)) **‘Fix floating point type mismatch for atlas images’** by JosephFerano  
Fix issue when creating new animations while reusing existing atlas images where the image would get temporarily duplicated into the atlas until a restart.

**FIX** : ([#11886,#6260](https://github.com/defold/defold/pull/11931)) **‘Show function list in the right sidebar’** by vlaaad  
We now show the function list in the right sidebar:  
 ![Screenshot 2026-02-20 at 08 37 39](https://github.com/user-attachments/assets/30a66ff4-2697-416a-9956-b07415909ea3)

**FIX** : ([#8537](https://github.com/defold/defold/pull/11940)) **‘Prevent the editor from crashing when loading a malformed collection’** by vlaaad

**FIX** : ([#11977](https://github.com/defold/defold/pull/11977)) **‘Avoid surprisingly expensive file system access during project read’** by matgis  
Avoid calling `Path.toRealPath` on stateless resources when reading project data. This method appears to be surprisingly slow on certain file systems. We now only call this method for symlinks to stateless resources, where the existence of the file is important to determine at read-time.

This change resulted in a 24% project load time improvement in the large project we were testing in, but it will vary depending on the project.

**FIX** : ([#11923](https://github.com/defold/defold/pull/12065)) **‘Editor fix: Allow shaders to compile with page count \> 8’** by JosephFerano  
Allow the compilation of shaders when a paged material exceeds the maximum allowed pages currently set to 8 when “Exclude GLES 2.0” is not checked in game.project \> Shader setting.

**FIX** : ([#11976](https://github.com/defold/defold/pull/12018)) **‘Fix broken handling of shader compiler warnings in the editor’** by matgis  
Fix unhelpful error during editor builds when the GLSL shader compiler emits warnings.

**FIX** : ([#11985](https://github.com/defold/defold/pull/12024)) **‘Eliminate unnecessary code editor redraws’** by matgis

- Fixed an issue where the code editor would redraw unnecessarily when moving the mouse cursor across the view.
- Fixed an issue where the blinking cursor could cause the code editor height to oscillate by half a pixel when placed on the first row of a file.

## Other

**FIX** : ([extender#385](https://github.com/defold/defold/pull/11950)) **‘Up Android min sdk version to 21 (Android 5.0)’** by ekharkunov  
⚠ The minimum supported Android API version has been increased from 19 (Android 4.4) to 21 (Android 5.0).  
If you are using a custom `AndroidManifest.xml` file, make sure to replace

> android:name=“android.support.multidex.MultiDexApplication”

with

> android:name=“android.app.Application”

---

_[View the full topic](https://forum.defold.com/t/defold-1-12-3-has-been-released/82619)._
