Homepage

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 your config.yml: string_interpolation: true

    Example:

    
    {% 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_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:
    • Before: Couldn't find Customization with 'id'=123
    • After: Can't find Boats with id=123
  • assign 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:
    • Empty hash/array literals: {% assign foo = {} %}, {% assign bar = [] %} (no need to do '{}' | parse_json anymore)
    • 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:
      
      {% assign var = "hello" %}
      {% assign hash = { "key": var, var: "value", arr: ["el1", var] } %}
      {{ hash }}
      
      
      Output: { "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 use array_add filter)
    • 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
  • 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 %}
  • Module registration from pos-module.json: Modules listed in pos-module.json are 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).

Questions?

We are always happy to help with any questions you may have.

contact us