logo
Kurashizu Blogwhere ideas flow
  • Home
  • News
  • Blog
  • About
  • Home
  • News
  • Blog
  • About

© 2026 Kurashizu. All rights reserved.

Admin·New Post·Service Status
Powered by Cloudflare·28.10.26
← Back to news

Crystal 1.22

Original article
crystal-lang.org|137 points|63 comments|by ksec|Oct 22, 2026

Crystal 1.22.0 Release Notes

Crystal Logo

The Crystal team is proud to announce the launch of Crystal 1.22.0, featuring a suite of performance enhancements, language refinements, and critical bug fixes.

Released on October 12, 2026, by Johannes Müller.


📊 Release Statistics

MetricValue
Total Changes251
Contributors33
Version1.22.0

"We extend our deepest gratitude to all contributors who dedicated their time and effort to evolve the language!" ❤️


🚀 Key Highlights

  • SIGPIPE Emulation: Standard streams now mimic SIGPIPE behavior.
  • DWARF Overhaul: Massive performance gains in DWARF parsing.
  • Universal Event Loop: Native event loops are now the default for all targets.
  • LLVM Support: Compatibility added for LLVM 23 and 24.
  • Tier 1 Promotion: aarch64-linux is now a primary platform.

⚠️ Breaking Changes

Pipe Error Handling

Crystal processes will now terminate immediately if writing to STDOUT or STDERR results in an EPIPE error. This aligns the language with standard SIGPIPE signal behavior.

Previously, this would trigger an IO::Error, leading to a printed error message before exiting. If you need to disable this, use: STDOUT.exit_on_broken_pipe = false

Process Management

Process.fork has been officially removed (Issue #17367) after being deprecated since before the 1.0 release.


💎 Language & Compiler Updates

Typed Constants

You can now explicitly declare types for constants (#16951). This behaves as a logical merge of constant definition and type annotation.

module Foo
  BAR : Int32 = 1
  BAZ : String = ""
  QUX : Int64 = 123 # The value 123 is autocast to Int64
end

Compile-Time Macros

New macros have been introduced to facilitate more text manipulation during compilation:

  • StringLiteral#bytesize
  • NumberLiteral#chr
  • RangeLiteral#each (now supports CharLiteral)

Compiler Internals

Access to compile-time flags is now available via two new constants: Crystal::ALL_FLAGS and Crystal::USER_FLAGS.

DWARF Parsing Refactor

The DWARF parser has been completely redesigned to minimize memory footprints and maximize speed.

Additionally, support for DWARF 5 has been added, specifically for DW_FORM_addrx n and DW_FORM_strx n.


🌐 Networking & HTTP

HTTP Improvements

A significant number of refinements were merged into the HTTP module:

  • Architecture: #remote_address and #local_address have migrated from HTTP::Request →\rightarrow→ HTTP::Context.
  • Functionality:
    • Added HTTP::Headers#merge.
    • IO::Memory in HTTP bodies now includes the Content-Length header.
  • Bug Fixes:
    • Now rejects invalid Content-Encoding, unrecognized Transfer-Encoding, and invalid HTTP trailers.
    • Fixed return values for HTTP::Request#body= and #content_length=.
    • HTTP.parse_headers_and_body no longer crashes when without_zlib is used.
    • Improved validation for HTTP::WebSocketHandler, HTTP::Request, and HTTP::Headers names.
    • HTTP::Client now closes on IO::Error during requests.
    • Fixed Content-Encoding: deflate and empty header name parsing in HTTP::Request.from_io.
    • HTTP::Request#form_params? now ignores invalid content types.

Event Loop

All targets now utilize a native event loop based on the system selector by default.

  • Solaris: Now uses epoll.
  • BSD: Now uses kqueue across all remaining targets.

Note: libevent remains as an opt-in fallback but is now considered technically obsolete.

KernelTLS

OpenSSL bindings now enable Kernel TLS support by default.


🛠️ Miscellaneous & Dependencies

General Updates

  • File.exists? now accepts a follow_symlinks: false argument.
  • New Char::Reader.new(Bytes) constructor.
  • Added Time::Span#to_nanoseconds and related methods.
  • Introduced GC.syscall().
  • Resolved backtrace issues when using -static-pie on musl-libc.

Deprecations

The following are now deprecated:

  1. Uppercase instance and class variables.
  2. HTTP::Request#local_address and #remote_address.
  3. LLVM::Type#size and LLVM::Type#alignment.

Dependencies & Packaging

ComponentUpdate
LLVMSupport for 23.1 and 24.0
markdUpdated to 0.6.0
DistributionUpdated distribution-scripts (Docker images, etc.)

New Platform Support: This release marks the first time builds are available for aarch64-windows-msvc.


👨‍💻 Maintainers & Support

According to the forward compatibility policy in RFC 30, building Crystal 1.22 requires a stage-0 compiler version: Version≥1.14\text{Version} \ge 1.14Version≥1.14

Support Crystal: This progress is made possible by 84codes and our other generous sponsors. To help us maintain this momentum, please consider donating or sponsoring. Contact crystal@manas.tech for direct sponsorship opportunities.