# Crystal 0.19 breaks Crinja

**URL:** <https://forum.crystal-lang.org/t/crystal-0-19-breaks-crinja/8660>\
**Category:** Help & Support\
**Created:** [January 19, 2026, 7:42pm UTC](https://forum.crystal-lang.org/t/crystal-0-19-breaks-crinja/8660 "2026-01-19T19:42:40Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![ralsina](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/ralsina/32/2139_2.png) [@ralsina](https://forum.crystal-lang.org/u/ralsina)\
**Post date:** [January 19, 2026, 7:42pm UTC](https://forum.crystal-lang.org/t/crystal-0-19-breaks-crinja/8660/1 "2026-01-19T19:42:40Z")

</div>

In [GitHub - ralsina/nicolino: A not-quite-minimalistic SSG written in Crystal](http://github.com/ralsina/nicolino) if I upgrade to 0.19 build fails with this weird backtrace, all inside crinja:

```auto
nicolino on  main [$⇡] is 📦 v0.10.0 via 🔮 v1.19.0 took 11s
> shards build --error-trace
Dependencies are satisfied
Building: nicolino
Error target nicolino failed to compile:
In lib/crinja/src/lib/filter/collections.cr:2:10

 2 | Crinja.filter :list do
            ^-----
Error: expanding macro

In lib/crinja/src/lib/filter/collections.cr:2:3

 2 | Crinja.filter :list do
     ^
Error: expanding macro

There was a problem expanding macro 'filter'

Called macro defined in lib/crinja/src/runtime/callable.cr:67:3

 67 | macro filter(defaults = nil, name = nil, &block)

Which expanded to:

 > 1 | Crinja.callable(Crinja::Filter, :list, nil) do
    2 | target = arguments.target!
    3 |
    4 | begin
    5 | value = target.raw
    6 |
    7 | case value
    8 | when String
    9 | value.chars
   10 | when Array
   11 | value
   12 | when .responds_to?(:to_a)
   13 | target.to_a
   14 | else
   15 | raise(TypeError.new("target for list filter cannot be converted to list"))
   16 | end
   17 | end
   18 | end
   19 |
Error: expanding macro

In lib/crinja/src/lib/filter/collections.cr:11:14

 11 | target.to_a
             ^---
Error: instantiating 'Crinja::Value#to_a()'

In lib/crinja/src/runtime/value.cr:404:5

 404 | each do |item|
       ^---
Error: instantiating 'each()'

In lib/crinja/src/runtime/value.cr:260:5

 260 | raw_each do |raw|
       ^-------
Error: instantiating 'raw_each()'

In lib/crinja/src/runtime/value.cr:244:14

 244 | object.each { |value| yield value.as(Value).raw }
              ^---
Error: instantiating '(Array(Crinja::Value) | Crinja::Function::Cycler | Crinja::Tuple | Iterator(Crinja::Value))#each(

In /usr/lib/crystal/iterator.cr:649:20

 649 | value = self.next
                    ^---
Error: instantiating 'Crinja::Tag::For::ConditionalIterator#next()'

In lib/crinja/src/lib/tag/for.cr:116:7

 116 | loop do
       ^---
Error: instantiating 'loop()'

In lib/crinja/src/lib/tag/for.cr:116:7

 116 | loop do
       ^---
Error: instantiating 'loop()'

In lib/crinja/src/lib/tag/for.cr:121:27

 121 | if @env.evaluator.value(@condition).truthy?
                         ^----
Error: instantiating 'Crinja::Evaluator#value(Crinja::AST::ExpressionNode+)'

In lib/crinja/src/runtime/evaluator.cr:12:15

 12 | Value.new evaluate(expression)
                ^-------
Error: instantiating 'evaluate(Crinja::AST::ExpressionNode+)'

In lib/crinja/src/runtime/evaluator.cr:54:12

 54 | left = evaluate expression.left
             ^-------
Error: instantiating 'evaluate(Crinja::AST::ExpressionNode+)'

In lib/crinja/src/runtime/evaluator.cr:69:13

 69 | right = evaluate expression.right
              ^-------
Error: instantiating 'evaluate(Crinja::AST::ExpressionNode+)'

In lib/crinja/src/runtime/evaluator.cr:85:18

 85 | callable = call_on_member(identifier)
                 ^-------------
Error: instantiating 'call_on_member(Crinja::AST::MemberExpression)'

In lib/crinja/src/runtime/evaluator.cr:113:18

 113 | identifier = evaluate expression.identifier
                    ^-------
Error: instantiating 'evaluate(Crinja::AST::ExpressionNode+)'

In lib/crinja/src/runtime/evaluator.cr:155:14

 155 | object = value! expression.identifier
                ^-----
Error: instantiating 'value!(Crinja::AST::ExpressionNode+)'

In lib/crinja/src/runtime/evaluator.cr:26:32

 26 | raise UndefinedError.new(name_for_expression(expression))
                               ^------------------
Error: instantiating 'name_for_expression(Crinja::AST::ExpressionNode+)'

In lib/crinja/src/runtime/evaluator.cr:200:8

 200 | "#{name_for_expression(expression.identifier)}.#{expression.member.name}"
          ^------------------
Error: instantiating 'name_for_expression(Crinja::AST::ExpressionNode+)'

In lib/crinja/src/runtime/evaluator.cr:204:54

 204 | "#{name_for_expression(expression.identifier)}[#{evaluate expression.argument}]"
                                                        ^-------
Error: instantiating 'evaluate(Crinja::AST::ExpressionNode+)'

In lib/crinja/src/runtime/evaluator.cr:176:24

 176 | value = Resolver.resolve_attribute(argument, object)
                        ^----------------
Error: instantiating 'Crinja::Resolver.resolve_attribute((Array(Crinja::Value) | Bool | Crinja::Value | Float64 | Hash(Crinja::Value, Crinja::Value) | Int64 | String | Nil), Crinja::Value)'

In lib/crinja/src/runtime/resolver.cr:7:18

 7 | value = self.resolve_getattr(name, object)
                  ^--------------
Error: instantiating 'Crinja::Resolver.resolve_getattr((Array(Crinja::Value) | Bool | Crinja::Value | Float64 | Hash(Crinja::Value, Crinja::Value) | Int64 | String | Nil), Crinja::Value)'

In lib/crinja/src/runtime/resolver.cr:31:12

 31 | self.resolve_with_hash_accessor(name, value)
           ^-------------------------
Error: instantiating 'Crinja::Resolver.resolve_with_hash_accessor(Crinja::Value, Crinja::Value)'

In lib/crinja/src/runtime/resolver.cr:58:32

 58 | return Value.new object[name.to_s]
                             ^
Error: no overload matches 'Proc(Crinja::Arguments, Crinja::Value)#[]' with type String

Overloads are:
 - Proc(*T, R)#[](*args : *T)

```

---

<div class="post-metadata">

**Author:** ![straight-shoota](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/straight-shoota/32/36_2.png) [@straight-shoota](https://forum.crystal-lang.org/u/straight-shoota)\
**Post date:** [January 19, 2026, 8:22pm UTC](https://forum.crystal-lang.org/t/crystal-0-19-breaks-crinja/8660/2 "2026-01-19T20:22:56Z")

</div>

This is fixed in master: [Add Proc check in resolve\_with\_hash\_accessor method by kalinon · Pull Request #94 · straight-shoota/crinja · GitHub](https://github.com/straight-shoota/crinja/pull/94)
