Date Period
March 03, 2026
String interpolation in double-quoted strings: You can now use syntax inside double-quoted strings for cleaner, more readable variable interpolation. This feature is disabled by default on existing instances to prevent backwards compatibility issues, but enabled by default on new instances. To enable on an existing instance, add to your config.yml: string_interpolation: true
Example:
{% assign name = "Alice" %}
{% assign greeting = "Hello {{ name | upcase }}!" %}
{{ greeting }}
Output: Hello ALICE!
Features:
"{{ name | upcase | truncate: 10 }}""{{ first }} {{ last }}"{% assign var = "world" %}
{% log "hello {{ var }}" %}
{% assign greeting = "hello {{ var }}" %}
{% function res = "lib/func", arg: "hello {{ var }}" %}
Important notes:
{{ }} text will now interpolate. Use single quotes for literal text: 'Use {{ variable }} syntax'record_update and record_destroy: When a record with the provided ID cannot be found, the error message now clearly specifies which table was being searched. For example:
Couldn't find Customization with 'id'=123Can't find Boats with id=123assign tag now supports hash/array operations directly: The assign tag has been extended with capabilities previously only available through hash_assign (which is now deprecated). You can now use a single, unified syntax for all variable assignments, including initializing hash and array:
{% assign foo = {} %}, {% assign bar = [] %} (no need to do '{}' | parse_json anymore){% assign var = "hello" %}
{% assign hash = { "key": var, var: "value", arr: ["el1", var] } %}
{{ hash }}
Output: { "key": "hello", "hello": "value", "arr": ["el1", "hello"] }{% assign foo["bar"] = "baz" %}{% assign foo.bar = "baz" %}{% assign foo.bar["baz"] = "qux" %}<<: {% assign foo << 'bar' %} (no need to use array_add filter){% assign foo["bar"]["baz"]["qux"] = [] %}{% assign foo["bar"]["baz"]["qux"] << "first" %}function tag now supports the same hash/array syntax: Bracket notation, dot notation, mixed notation, and array append with << now work with function too:
{% function foo["bar"] = 'partials/compute', input: 'baz' %}{% function foo.bar["baz"] = 'partials/get_name', id: 123 %}{% function foo << 'partials/fetch_item', id: 1 %}February 26, 2026
app/config.yml properties no longer cause fatal errors. The platform now logs a warning instead, allowing the application to continue running while still notifying developers of the issue.February 25, 2026
January 30, 2026
January 27, 2026
website field to the Locations contact tab.January 16, 2026
?, & and =.January 07, 2026
December 16, 2025
December 11, 2025
High Performance SQL Filtering Flag: A new high_performance_sql_filtering configuration option in app/config.yml. When activated, property filtering uses more efficient SQL queries by eliminating unnecessary text casting, allowing default column indexes to be utilized. Disabled by default for backward compatibility.
Markdown Format Support for Pages: Pages using the markdown converter can now be accessed via /:slug.md endpoints. This targets AI agent integration, as markdown is easier to parse and process compared to HTML.
syntax field for Language Server Protocol (LSP) servers to deliver enhanced code completion capabilities.slug attribute is now enforced within admin_page_* GraphQL mutations, preventing duplicate slug creation.December 05, 2025
Filter by
Date Period