Skip to content
GitHub Repository Forum RSS-Newsfeed

Crystal 1.10.0 is released!

Johannes Müller

We are delivering a new Crystal release with several bugfixes and improvements.

Pre-built packages are available on GitHub Releases and our official distribution channels. See for installation instructions.


This release includes 82 changes since 1.9.2 by 21 contributors. We thank all the contributors for all the effort put into improving the language! ❤️


Below we list the most remarkable changes in the language, compiler and stdlib. For more details, visit the changelog.

This release does not bring any big impact changes, but smaller enhancements and bug fixes, stabilizing the compiler and standard library.

Unlimited block unpacking

The most notable language change is the introduction of unlimited block unpacking (#11597).

Block parameter unpacking can now be nested.

ary = [
  {1, {2, {3, 4}}},

ary.each do |(w, (x, (y, z)))|
  w # => 1
  x # => 2
  y # => 3
  z # => 4

Splat parameters are also supported.

ary = [
  [1, 2, 3, 4, 5],

ary.each do |(x, *y, z)|
  x # => 1
  y # => [2, 3, 4]
  z # => 5

Breaking: crystal spec exits with failure when focused

If the spec suite has any examples with focus: true, the spec process will always exit with a failure code. Even if all executed specs succeed. This is to prevent CI success when a focus: true is accidentally commited. (#13653)

Compiler tools: dependencies and unreachable

Two new compiler tools are available for analyzing the program source.

  • crystal tool dependencies prints a tree of required source files. This can be useful for separating source trees or debugging issues with require order.

    For instance, if we have a file requiring and, and each of these in turn require

    $ crystal tool dependencies
  • crystal tool unreachable prints methods that are defined but never called. This can help cleaning up unused code.

    For instance, if we have a file defing the following methods which are never called anywhere:

    def top_not_used
    class Foo
      def not_used
    $ crystal tool unreachable top-level top_not_used 2 lines Foo#not_used 2 lines


  • parameters fallthrough and directory_listing other type than Bool.