# Defold 1.12.3 BETA

**URL:** <https://forum.defold.com/t/defold-1-12-3-beta/82543>\
**Category:** Release notes\
**Created:** [March 16, 2026, 1:19pm UTC](https://forum.defold.com/t/defold-1-12-3-beta/82543 "2026-03-16T13:19:00Z")\
**Posts on this page:** 20\
**Page:** 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:** [March 16, 2026, 1:19pm UTC](https://forum.defold.com/t/defold-1-12-3-beta/82543/1 "2026-03-16T13:19:00Z")

</div>

# Defold 1.12.3 Beta

## Disclaimer

This is a BETA release, and it might have issues that could potentially be disruptive for you and your teams workflow. Use with caution. Use of source control for your projects is strongly recommended.

## Access to the beta

Download the editor or bob.jar from GitHub: [Release v1.12.3 - beta · defold/defold · GitHub](https://github.com/defold/defold/releases/tag/1.12.3-beta)

## ⚠ 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%2F20260320%2Fus-east-1%2Fs3%2Faws4\_request&X-Amz-Date=20260320T132620Z&X-Amz-Expires=300&X-Amz-Signature=e731c12a7623e983cc8d9b797eaeb6e99ddb1a3f89a12a12c1533805c0876e93&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%2F20260320%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260320T132620Z&X-Amz-Expires=300&X-Amz-Signature=e731c12a7623e983cc8d9b797eaeb6e99ddb1a3f89a12a12c1533805c0876e93&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”

---

<div class="post-metadata">

**Author:** ![Asatte](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/asatte/32/39093_2.png) [@Asatte](https://forum.defold.com/u/Asatte)\
**Post date:** [March 17, 2026, 6:04am UTC](https://forum.defold.com/t/defold-1-12-3-beta/82543/2 "2026-03-17T06:04:23Z")

</div>

Thank you for the update, it is great as always!  
I like this new addition, it will make coding more organized. Clicking on the functioon takes you to the line it is defined I assume?

> [@Mathias\_Westerdahl](#):
>
> **‘Show function list in the right sidebar’** by vlaaad

Also this: **‘Use filterable select box in input\_binding’s key selector’** by vlaaad  
is really nice. It was a pain to scroll and find a key for a letter 🙂

I was hoping to see the light and/or 3d model as collision shape but I guess they will be added in the 1.12.4

---

<div class="post-metadata">

**Author:** ![Mathias](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/mathias/32/44015_2.png) [@Mathias](https://forum.defold.com/u/Mathias)\
**Post date:** [March 17, 2026, 6:48am UTC](https://forum.defold.com/t/defold-1-12-3-beta/82543/3 "2026-03-17T06:48:14Z")

</div>

> [@Asatte](#):
>
> 3d model as collision shape

What? are you saying there is a plan to set a mesh as collision shape?? In 2D too? 😍😍

I have created a Space Blob mesh but I have to use many collision sphere to shape it:

 ![VideoCapture_20260317-075826](https://forum-defold-uploads.b-cdn.net/original/3X/5/e/5e2b5787227ac0457a856a1a6a99c406da9709ba.jpeg)

---

<div class="post-metadata">

**Author:** ![Asatte](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/asatte/32/39093_2.png) [@Asatte](https://forum.defold.com/u/Asatte)\
**Post date:** [March 17, 2026, 7:19am UTC](https://forum.defold.com/t/defold-1-12-3-beta/82543/4 "2026-03-17T07:19:07Z")

</div>

Yes! On the a look ahead for 2026, they said: On the boundary between 3D and physics, we want to make collision authoring more flexible by allowing any model to be used as a collision shape, removing common pipeline friction when bringing complex geometry into Defold.

---

<div class="post-metadata">

**Author:** ![Eren](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/eren/32/42870_2.png) [@Eren](https://forum.defold.com/u/Eren)\
**Post date:** [March 17, 2026, 9:24am UTC](https://forum.defold.com/t/defold-1-12-3-beta/82543/5 "2026-03-17T09:24:09Z")

</div>

> [@Mathias\_Westerdahl](#):
>
> **FIX** : ([#11886](https://github.com/defold/defold/pull/11931)) Show function list in the right sidebar (by vlaaad)

Thank you for this version; it has significantly enhanced my coding experience

---

<div class="post-metadata">

**Author:** ![Mathias](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/mathias/32/44015_2.png) [@Mathias](https://forum.defold.com/u/Mathias)\
**Post date:** [March 17, 2026, 9:37am UTC](https://forum.defold.com/t/defold-1-12-3-beta/82543/6 "2026-03-17T09:37:38Z")

</div>

> [@Mathias\_Westerdahl](#):
>
> **NEW** : ([#11987](https://github.com/defold/defold/pull/11993)) **‘Expose engine time to shaders’**

Yes! This will save me a lot time on my current project, as I want to do almost all graphics, effects and animations with small textures and shader code!  
Thank you

---

<div class="post-metadata">

**Author:** ![deni](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/deni/32/42901_2.png) [@deni](https://forum.defold.com/u/deni)\
**Post date:** [March 18, 2026, 6:32am UTC](https://forum.defold.com/t/defold-1-12-3-beta/82543/7 "2026-03-18T06:32:13Z")

</div>

Hi, there’s no information about the format in `atlas.animations` changing in 1.12.3. Specifically, there is now no `anim.frame_start`, but there is `anim.frames`. It would be great to get some guidance on how this works now and what the final format is.

---

<div class="post-metadata">

**Author:** ![deni](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/deni/32/42901_2.png) [@deni](https://forum.defold.com/u/deni)\
**Post date:** [March 18, 2026, 6:34am UTC](https://forum.defold.com/t/defold-1-12-3-beta/82543/8 "2026-03-18T06:34:13Z")

</div>

![Screenshot 2026-03-18 102523](https://forum-defold-uploads.b-cdn.net/original/3X/1/a/1ab62aa0d22d8eb3c65039f14c6d447e4bf096af.jpeg)

Apparently, the drawing order in the profiler is wrong… The text is under the background now and is practically invisible.

---

<div class="post-metadata">

**Author:** ![AGulev](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/agulev/32/4541_2.png) [@AGulev](https://forum.defold.com/u/AGulev)\
**Post date:** [March 18, 2026, 8:24am UTC](https://forum.defold.com/t/defold-1-12-3-beta/82543/9 "2026-03-18T08:24:13Z")

</div>

The release notes have been updated to include this fix as well. Thank you for the heads up.

> [@Mathias\_Westerdahl](#):
>
> **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
> }
> },
> {
> ...
> }
> }
> 
> ```

---

<div class="post-metadata">

**Author:** ![AGulev](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/agulev/32/4541_2.png) [@AGulev](https://forum.defold.com/u/AGulev)\
**Post date:** [March 18, 2026, 10:13am UTC](https://forum.defold.com/t/defold-1-12-3-beta/82543/10 "2026-03-18T10:13:46Z")

</div>

> [@deni](#):
>
> Apparently, the drawing order in the profiler is wrong… The text is under the background now and is practically invisible.

Fixed. It’s building now and will be available in about 1 hour. Thank you!

---

<div class="post-metadata">

**Author:** ![Dragosha](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/dragosha/32/5103_2.png) [@Dragosha](https://forum.defold.com/u/Dragosha)\
**Post date:** [March 18, 2026, 11:31am UTC](https://forum.defold.com/t/defold-1-12-3-beta/82543/11 "2026-03-18T11:31:42Z")

</div>

> [@Mathias\_Westerdahl](#):
>
> 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:

Can we see an example or documentation?

---

<div class="post-metadata">

**Author:** ![britzl](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/britzl/32/23_2.png) [@britzl](https://forum.defold.com/u/britzl)\
**Post date:** [March 18, 2026, 12:01pm UTC](https://forum.defold.com/t/defold-1-12-3-beta/82543/12 "2026-03-18T12:01:17Z")

</div>

> [@Dragosha](#):
>
> Can we see an example or documentation?

@Pawel and @jhonny.goransson let’s make sure to prepare an example for [Defold examples](http://defold.com/examples)

---

<div class="post-metadata">

**Author:** ![Pawel](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/pawel/32/24623_2.png) [@Pawel](https://forum.defold.com/u/Pawel)\
**Post date:** [March 18, 2026, 12:05pm UTC](https://forum.defold.com/t/defold-1-12-3-beta/82543/13 "2026-03-18T12:05:42Z")

</div>

I’m on it!

> <https://github.com/defold/examples/issues/153>
>
> \*\*Describe the example you'd like\*\*
> We now have the texture transform semantic t…ype (and soon a uniform constant) that can be used to achieve scrolling textures from an atlas.

---

<div class="post-metadata">

**Author:** ![Pawel](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/pawel/32/24623_2.png) [@Pawel](https://forum.defold.com/u/Pawel)\
**Post date:** [March 18, 2026, 3:43pm UTC](https://forum.defold.com/t/defold-1-12-3-beta/82543/14 "2026-03-18T15:43:32Z")

</div>

@dragosha example is up in the PR, awaiting review, but you can already look it up 😉 It also uses the newly exposed time in shaders, btw! Will be merged after 1.12.3 release anyway.

> <https://github.com/defold/examples/pull/154>
>
> Texture UV scrolling example using texture transform 2d attribute and Defold pro…vided time in shaders (since 1.12.3)

You can control the direction (and speed) via Vertex Attribute **`translation`**.

---

<div class="post-metadata">

**Author:** ![Dragosha](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/dragosha/32/5103_2.png) [@Dragosha](https://forum.defold.com/u/Dragosha)\
**Post date:** [March 19, 2026, 6:47am UTC](https://forum.defold.com/t/defold-1-12-3-beta/82543/15 "2026-03-19T06:47:29Z")

</div>

> [@Pawel](#):
>
> example is up in the PR

Cool one!

Unfortunately, I was unable to reproduce the effect on an atlas with multiple sprites. Try adding multiple sprites to your example. It seems that this part generates incorrect local coordinates if there is more than one image in the atlas.

```lua
// Region size in atlas UV space.
    // The first two columns encode basis vectors; their lengths correspond to size.
    vec2 atlas_size = vec2(
        length(var_texture_transform[0].xy),
        length(var_texture_transform[1].xy)
    );

    // Convert to local tile UV (0..1).
    vec2 localUV = (var_texcoord0 - atlas_pos) / atlas_size;

```

---

<div class="post-metadata">

**Author:** ![jhonny.goransson](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/jhonny.goransson/32/3864_2.png) [@jhonny.goransson](https://forum.defold.com/u/jhonny.goransson)\
**Post date:** [March 19, 2026, 8:20am UTC](https://forum.defold.com/t/defold-1-12-3-beta/82543/16 "2026-03-19T08:20:34Z")

</div>

So, the steps to reproduce is to just add more than one image to the atlas? Or are you using more than one atlas?

---

<div class="post-metadata">

**Author:** ![iotaHum](https://forum-defold.b-cdn.net/letter_avatar_proxy/v4/letter/i/977dab/32.png) [@iotaHum](https://forum.defold.com/u/iotaHum)\
**Post date:** [March 19, 2026, 9:59am UTC](https://forum.defold.com/t/defold-1-12-3-beta/82543/17 "2026-03-19T09:59:29Z")

</div>

I also tried adding a sprite to the atlas yesterday, and it resulted in a mixed up scrolling image.  
All I did was to add a logo\_blue\_1024.png to sprite.atlas  
My current guess is it something to do with atlas\_size is now not the same in both directions, so the off-set is wrong.  
I don’t really understand much, and need to wait for the documentation/tutorial.  
(can I make the atlas square with multiple images, what is a texture transform… (rhetorical questions))  
I am lost in the fundamentals, so meh.

---

<div class="post-metadata">

**Author:** ![Dragosha](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/dragosha/32/5103_2.png) [@Dragosha](https://forum.defold.com/u/Dragosha)\
**Post date:** [March 19, 2026, 10:41am UTC](https://forum.defold.com/t/defold-1-12-3-beta/82543/18 "2026-03-19T10:41:55Z")

</div>

> [@jhonny.goransson](#):
>
> So, the steps to reproduce is to just add more than one image to the atlas? Or are you using more than one atlas?

I looked it up again and realized that it only works correctly if there is a single image of dimension 2^n in the atlas. If you add more images or if the single image is not a square of dimension 2^n, the size in the transformation matrix is incorrect. Or it needs to be calculated in a different way. I took the shader from the example above.

---

<div class="post-metadata">

**Author:** ![jhonny.goransson](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/jhonny.goransson/32/3864_2.png) [@jhonny.goransson](https://forum.defold.com/u/jhonny.goransson)\
**Post date:** [March 19, 2026, 11:32am UTC](https://forum.defold.com/t/defold-1-12-3-beta/82543/19 "2026-03-19T11:32:54Z")

</div>

Huh that is not correct behavior, I’ll take a look.

---

<div class="post-metadata">

**Author:** ![Pawel](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/pawel/32/24623_2.png) [@Pawel](https://forum.defold.com/u/Pawel)\
**Post date:** [March 19, 2026, 5:17pm UTC](https://forum.defold.com/t/defold-1-12-3-beta/82543/20 "2026-03-19T17:17:23Z")

</div>

Thank you!

In the meanwhile, here’s also a PR with example for billboarding:

> <https://github.com/defold/examples/pull/155>

The trees, rocks and smoke are all 2D images:

 ![Zrzut ekranu z 2026-03-19 11-27-32](https://forum-defold-uploads.b-cdn.net/original/3X/4/5/4594ef4557a6b7b044cc62950b3d37666809c177.jpeg)

Maybe I’ll change the 3D models to unlit material, won’t be standing out as much. 🤔

And generally, because I remember @JuLongZhiLu were asking once about 3D particles for smoke, I think now with billboards and a simple gradient circle image (that is also in this example, free to use) - it will be easy to recreate something like this! 😉

[Next page](https://forum.defold.com/t/defold-1-12-3-beta/82543.md?page=2)
