Liquidz

High-performance Liquid template engine for Elixir, powered by Zig.

Installation

Add liquidz to your list of dependencies in mix.exs:

def deps do
  [
    {:liquidz, "~> 0.2.0"}
  ]
end

Prerequisites: You need to build the Zig library first:

cd ../..  # Go to project root
zig build -Doptimize=ReleaseFast

Usage

# Simple variable substitution
{:ok, result} = Liquidz.render("Hello, {{ name }}!", %{name: "World"})
# => "Hello, World!"

# Using the bang version (raises on error)
result = Liquidz.render!("Hello, {{ name }}!", %{name: "World"})
# => "Hello, World!"

# With loops
result = Liquidz.render!("{% for item in items %}{{ item }} {% endfor %}", %{items: ["a", "b", "c"]})
# => "a b c "

# With conditionals
result = Liquidz.render!("{% if show %}visible{% endif %}", %{show: true})
# => "visible"

# With filters
result = Liquidz.render!("{{ name | upcase }}", %{name: "hello"})
# => "HELLO"

# Using keyword lists
result = Liquidz.render!("{{ name }}", name: "World")
# => "World"

# Using JSON string directly
result = Liquidz.render!("{{ x }}", ~s({"x": 42}))
# => "42"

API

Liquidz.render(template, data \\ %{})

Renders a Liquid template with the given data. Returns {:ok, result} or {:error, reason}.

Liquidz.render!(template, data \\ %{})

Same as render/2 but raises on error.

Liquidz.render_string/2 and Liquidz.render_string!/2

Aliases for render/2 and render!/2.

Running Tests

mix deps.get
mix test

License

MIT