Unreleased
Unreleased - only on Staging
NEW
-
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 yourconfig.yml:string_interpolation: trueExample:
{% assign name = "Alice" %} {% assign greeting = "Hello {{ name | upcase }}!" %} {{ greeting }}Output:
Hello ALICE!Features:
- Works with variables, property access, array access, and filters
- Supports filter chains:
"{{ name | upcase | truncate: 10 }}" - Multiple interpolations:
"{{ first }} {{ last }}" - Works in all tags that accept string values (assign, function, background, export, log, etc.):
{% assign var = "world" %} {% log "hello {{ var }}" %} {% assign greeting = "hello {{ var }}" %} {% function res = "lib/func", arg: "hello {{ var }}" %}
Important notes:
- Single-quoted strings never interpolate (use for literal
text) - Breaking change if enabled: Existing templates with double-quoted strings containing literal
{{ }}text will now interpolate. Use single quotes for literal text:'Use {{ variable }} syntax'
IMPROVED
- Upgraded internal dependencies for improved performance and security
- Upgraded GraphQL gem to the latest version for security and performance
- Clearer error messages for
record_updateandrecord_destroy: When a record with the provided ID cannot be found, the error message now clearly specifies which table was being searched. For example:- Before:
Couldn't find Customization with 'id'=123 - After:
Can't find Boats with id=123
- Before:
assigntag now supports hash/array operations directly: Theassigntag has been extended with capabilities previously only available throughhash_assign(which is now deprecated). You can now use a single, unified syntax for all variable assignments, including initializing hash and array:- Empty hash/array literals:
{% assign foo = {} %},{% assign bar = [] %}(no need to do'{}' | parse_jsonanymore) - Inline hash/array literals with values: You can now create hashes and arrays with initial values directly in the assign tag. Variables are evaluated, and can be used both as values and as keys:
Output:{% assign var = "hello" %} {% assign hash = { "key": var, var: "value", arr: ["el1", var] } %} {{ hash }}{ "key": "hello", "hello": "value", "arr": ["el1", "hello"] } - Bracket notation:
{% assign foo["bar"] = "baz" %} - Dot notation:
{% assign foo.bar = "baz" %} - Mixed notation (combining dots and brackets):
{% assign foo.bar["baz"] = "qux" %} - Array append with
<<:{% assign foo << 'bar' %}(no need to usearray_addfilter) - Nested operations: Full support for deeply nested hash and array assignments, e.g.,
{% assign foo["bar"]["baz"]["qux"] = [] %}{% assign foo["bar"]["baz"]["qux"] << "first" %} - Performance: Key lookups are pre-computed at parse time for faster rendering
- Empty hash/array literals:
functiontag now supports the same hash/array syntax: Bracket notation, dot notation, mixed notation, and array append with<<now work withfunctiontoo:{% function foo["bar"] = 'partials/compute', input: 'baz' %}{% function foo.bar["baz"] = 'partials/get_name', id: 123 %}{% function foo << 'partials/fetch_item', id: 1 %}
- Module registration from
pos-module.json: Modules listed inpos-module.jsonare now registered as installed without downloading their source code on every deploy. Module files are expected to be included during deployment (e.g., committed to your repository or included in your deployment package).