PackageTrack
Sign in Get early access

liquify

A powerful and extensible Liquid template engine for Dart. Supports full Liquid syntax, custom tags and filters, and high-performance parsing and rendering.

1.6.1 16K downloads/mo #2436 most downloaded on pub.dev kingwill101/liquify

What this package is like to depend on

Last release 23 days ago

01 Aug 2026

Release timing varies

gaps range from 2 weeks to 6 months

Nearly every release is documented

notes for 32 of 35 stable releases

Nothing withdrawn

no release was ever pulled

2 years old

37 releases · first in 2024

8 releases in the last 12 months

see the full history below

Release timeline

37 releases · Aug 2024 to Aug 2026
2025 2026
Release Pre-release

Releases

latest 37
  1. 1.6.1 01 Aug 2026
    Release notes

    What's Changed

    New Contributors

    Full Changelog: liquify-v1.6.0...liquify-v1.6.1

    Open source →
    Release notes
    • fix topic typo
    Open source →
    Release notes

    package:liquify v1.6.1 Latest

    Latest

    Compare

    Choose a tag to compare

    Open source →
  2. 1.6.0 26 Jul 2026
    Release notes

    Browser Support

    • Make the package usable from browser builds - Split the filesystem exports so webdev/browser entrypoints no longer pull in dart:io, allowing the package to be used more freely in the browser and in the playground.

    Bug Fixes

    • Switch date filter strftime formatting to d4_time_format - Replaced custom _applyStrftime() converter with d4_time_format package for standard strftime specifiers. Custom %P, %:z, %Z (timezone name), and %q (ordinal suffix) specifiers are preserved via a small shim.
    Open source →
    Release notes

    Browser Support

    • Make the package usable from browser builds - Split the filesystem exports so webdev/browser entrypoints no longer pull in dart:io, allowing the package to be used more freely in the browser and in the playground.

    Bug Fixes

    • Switch date filter strftime formatting to d4_time_format - Replaced custom _applyStrftime() converter with d4_time_format package for standard strftime specifiers. Custom %P, %:z, %Z (timezone name), and %q (ordinal suffix) specifiers are preserved via a small shim.
    Open source →
    Release notes

    package:liquify v1.6.0

    Compare

    Choose a tag to compare

    Open source →
  3. 1.5.1 19 Jan 2026
    Release notes

    Bug Fixes

    • Fix keyword word boundary parsing - Keywords empty, true, false, and nil no longer incorrectly match prefixes of identifiers (e.g., empty_title, true_value, false_flag, nil_check now correctly parse as identifiers)
    Open source →
    Release notes

    Bug Fixes

    • Fix keyword word boundary parsing - Keywords empty, true, false, and nil no longer incorrectly match prefixes of identifiers (e.g., empty_title, true_value, false_flag, nil_check now correctly parse as identifiers)
    Open source →
    Release notes

    package:liquify v1.5.1

    Compare

    Choose a tag to compare

    Open source →
  4. 1.5.0 18 Jan 2026
    Release notes

    New Features

    • Custom delimiters support - Configure alternative template delimiters via LiquidConfig
      • Use ERB-style (<% %>, <%= %>), bracket-style ([% %], [[ ]]), or any custom delimiters
      • Built-in presets: LiquidConfig.erb for ERB-style templates
      • Custom tags automatically support configured delimiters via createTagStart(), createTagEnd(), etc.
      • Parser caching ensures performance is not impacted when using multiple configurations

    Performance Improvements

    • 92-95% reduction in parser activations through comprehensive optimization:
      • Lookahead-based element routing (skips tag parsers for plain text)
      • Precedence-based expression parser (eliminates repeated prefix parsing)
      • Pattern-based text(), identifier(), and memberAccess() parsers
      • First-character routing in primaryTerm() (skips impossible alternatives)

    Breaking Changes

    • Custom tags using {{ }} syntax must now explicitly declare their delimiter type

      If you have a custom tag that uses variable-style delimiters ({{ mytag }}), you must now override delimiterType:

      class MyCustomTag with CustomTagParser {
        @override
        TagDelimiterType get delimiterType => TagDelimiterType.variable;
        
        @override
        Parser parser() {
          // ... your parser implementation
        }
      }

      Custom tags using standard {% %} syntax (the default) require no changes.

    Internal Changes

    • Add TagDelimiterType enum to distinguish custom tag delimiter styles
    • Optimize parser routing based on delimiter lookahead
    Open source →
    Release notes

    New Features

    • Custom delimiters support - Configure alternative template delimiters via LiquidConfig
      • Use ERB-style (<% %>, <%= %>), bracket-style ([% %], [[ ]]), or any custom delimiters
      • Built-in presets: LiquidConfig.erb for ERB-style templates
      • Custom tags automatically support configured delimiters via createTagStart(), createTagEnd(), etc.
      • Parser caching ensures performance is not impacted when using multiple configurations

    Performance Improvements

    • 92-95% reduction in parser activations through comprehensive optimization:
      • Lookahead-based element routing (skips tag parsers for plain text)
      • Precedence-based expression parser (eliminates repeated prefix parsing)
      • Pattern-based text(), identifier(), and memberAccess() parsers
      • First-character routing in primaryTerm() (skips impossible alternatives)

    Breaking Changes

    • Custom tags using {{ }} syntax must now explicitly declare their delimiter type

      If you have a custom tag that uses variable-style delimiters ({{ mytag }}), you must now override delimiterType:

      class MyCustomTag with CustomTagParser {
        @override
        TagDelimiterType get delimiterType => TagDelimiterType.variable;
        
        @override
        Parser parser() {
          // ... your parser implementation
        }
      }
      

      Custom tags using standard {% %} syntax (the default) require no changes.

    Internal Changes

    • Add TagDelimiterType enum to distinguish custom tag delimiter styles
    • Optimize parser routing based on delimiter lookahead
    Open source →
    Release notes

    package:liquify v1.5.0

    Compare

    Choose a tag to compare

    Open source →
  5. 1.4.2 08 Jan 2026
    Release notes

    Full Changelog: v1.4.1...v1.4.2

    Open source →
    Release notes
    • Bump dependencies
    Open source →
    Release notes

    v1.4.2

    Compare

    Choose a tag to compare

    Open source →
  6. 1.4.1 06 Jan 2026
    Release notes

    Full Changelog: v1.4.0...v1.4.1

    Open source →
    Release notes

    Fix: Add better handling of filtered assignments

    Open source →
    Release notes

    v1.4.1

    Compare

    Choose a tag to compare

    Open source →
  7. 1.4.0 06 Jan 2026
    Release notes

    What's Changed

    Full Changelog: v1.3.1...v1.4.0

    Open source →
    Release notes

    Liquid tag improvements

    • Treat each non-empty line in {% liquid %} blocks as a statement
    • Ignore whitespace-only lines inside {% liquid %} blocks
    • Error on CR-only line endings in {% liquid %} blocks for consistent parsing behavior
    • Route {% liquid %} output through the active buffer (works correctly inside captures)

    Output and scope semantics

    • Preserve value types for single-expression tag content so numeric filters (e.g., times) behave correctly
    • assign inside for loops now persists after the loop while keeping forloop and loop variables local

    Tests

    • Add {% liquid %} shorthand syntax and whitespace handling tests
    • Add capture regression coverage for {% liquid %} output routing
    Open source →
    Release notes

    v1.4.0

    Compare

    Choose a tag to compare

    Open source →
  8. 1.3.1 27 Oct 2025
    Release notes

    What's Changed

    Full Changelog: v1.3.0...v1.3.1

    Open source →
    Release notes
    • Fix string literal parsing to correctly handle escaped quotes and characters
    • Add regression tests covering render tag and evaluator behaviour with escaped strings
    Open source →
    Release notes

    v1.3.1

    Compare

    Choose a tag to compare

    Open source →
  9. 1.3.0 03 Jul 2025
    Release notes

    What's Changed

    Full Changelog: v1.2.0...v1.3.0

    Open source →
    Release notes
    • Correctly check for elsif tags and not elseif
    • tablerow - use seperate buffer for each row being rendered
    • refactor parsers for if/case/for to better capture content in else branches etc
    Open source →
    Release notes

    v1.3.0

    Compare

    Choose a tag to compare

    Open source →
  10. 1.2.0 21 Jun 2025
    Release notes

    🔒 Environment-Scoped Registry

    • Add environment-scoped filter and tag registration
    • Add strict mode for security sandboxing
    • Add Environment.withStrictMode() constructor
    • Add Template API support for custom environments
    • Add environment cloning with local registrations

    🔧 Parser Improvements

    • Fix operators to prevent invalid matches with adjacent words
    • Enhance comparison, logical, and unary operator parsing
    • Improve operator precedence handling

    🏷️ Render Tag Fixes

    • Fix variable scope isolation in render tags
    • Prevent variable leakage to parent scope
    • Add comprehensive scope isolation tests

    📚 Documentation

    • Add environment-scoped registry documentation
    Open source →
  11. 1.1.0 18 Jun 2025
    Release notes

    📚 Documentation

    • Complete documentation overhaul: Added comprehensive documentation system
    • Examples documentation: Added 5 detailed example guides covering basic usage, layouts, custom tags, drop objects, and file system integration
    • Tags documentation: Complete reference for all 21 tags with usage patterns and examples
    • Filters documentation: Comprehensive documentation for 68+ filters across 7 categories (array, string, math, date, HTML, URL, misc)
    • API documentation: Structured documentation hub with cross-references and navigation

    🧮 Filters

    • NEW: Add parse_json filter for parsing JSON strings into Dart objects
    • Enhancement: Math filters now handle null values gracefully (null treated as 0, prevents runtime type cast errors)
    • Enhancement: Complete expression-based filters (where_exp, find_exp, group_by_exp, etc.) with proper Liquid expression evaluation
    • Enhancement: Add missing array manipulation filters: compact, concat, push, pop, shift, unshift, reject, sum, sort_natural, group_by, has
    • Fix: Filter arguments now support member access expressions (e.g., append: features.size)

    🏗️ Core Improvements

    • Fix: Boolean literal parsing in comparison operations (true/false now parsed as literals instead of identifiers)
    • Enhancement: FileSystemRoot and MapRoot now have extensions and throwOnError support
    • Complete: 100% filter test coverage with comprehensive regression tests

    🏷️ Tags

    • NEW: comment
    • NEW: doc

    🧪 Testing

    • Complete test coverage for all implemented filters
    • Add regression tests for boolean literal parsing
    • Enhanced render tag tests
    Open source →
  12. 1.0.4 01 Jun 2025
    Release notes
    • Fix FileSystemRoot to handle null fileSystem argument safely and consistently fallback to LocalFileSystem
    • Add tests for FileSystemRoot null fileSystem behavior
    Open source →
  13. 1.0.3 15 Apr 2025
    Release notes
    • Fix contains operator
    Open source →
  14. 1.0.2 14 Apr 2025
    Release notes
    • allow iterating over key value pairs in for tags
    Open source →
  15. 1.0.1 19 Mar 2025
    Release notes
    • Disable internal resolver/analyzer logging
    Open source →
  16. 1.0.0 17 Mar 2025
    Release notes
    • Layout tag support
    • Async rendering support
    Open source →
  17. 1.0.0-dev.2 14 Feb 2025 pre-release
    Release notes
    • Template Enhancements:

      • Added layout tag support with title filter.
      • Implemented template analyzer and resolver.
    • Analyzer Improvements:

      • Initial support for a static analyzer.
      • Extensive testing and improvements in static analysis.
      • Enhanced resolver and analyzer integration.
    • Filter Enhancements:

      • Enabled dot notation for array filters.
    Open source →
  18. 1.0.0-dev.1 11 Feb 2025 pre-release
    Release notes
    • layout tag support
    Open source →
  19. 0.8.2 24 Jan 2025
    Release notes
    • Make sure we register all the missing string filters
    Open source →
  20. 0.8.1 30 Oct 2024
    Release notes
    • support elseif tags
    Open source →
  21. 0.8.0 26 Oct 2024
    Release notes
    • Start throwing exceptions when parsing fails
    Open source →
  22. 0.7.4 26 Oct 2024
    Release notes
    • For tag: make sure iterable is not null before assignment
    Open source →
  23. 0.7.3 22 Oct 2024
    Release notes
    • Truthy support for binary operators

    0.7.2

    • Array support
    Open source →
  24. 0.7.2 22 Oct 2024

    Nothing published for this version

  25. 0.7.1 21 Oct 2024
    Release notes
    • array support
    Open source →
  26. 0.7.0 21 Oct 2024
    Release notes
    • Fix parse failure for single { character
    • Better whitespace control handling
    • Optional tracing and linting
    Open source →
  27. 0.6.6 04 Sep 2024
    Release notes
    • Allow identifiers with hyphens
    Open source →
  28. 0.6.5 27 Aug 2024
    Release notes
    • Member access fix
    Open source →
  29. 0.6.4 27 Aug 2024

    Nothing published for this version

  30. 0.6.3 26 Aug 2024
    Release notes
    • Filtered assignment fix
    Open source →
  31. 0.6.2 26 Aug 2024
    Release notes
    • Group filters into modules
    Open source →
  32. 0.6.1 26 Aug 2024

    Nothing published for this version

  33. 0.6.0 26 Aug 2024
    Release notes
    • Empty type
    • MapRoot Root implementation
    Open source →
  34. 0.5.0 24 Aug 2024
    Release notes
    • Filesystem lookup
    • Render tag
    Open source →
  35. 0.3.0 23 Aug 2024
    Release notes
    • Support floating point numbers
    • Support negative numbers
    Open source →
  36. 0.2.0 23 Aug 2024
    Release notes
    • Add built in filters
    Open source →
  37. 0.1.0 23 Aug 2024
    Release notes
    • Initial version.
    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive