Crystal 1.22
Crystal 1.22.0 Release Notes

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
| Metric | Value |
|---|---|
| Total Changes | 251 |
| Contributors | 33 |
| Version | 1.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
SIGPIPEbehavior. - 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-linuxis 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
has been officially removed (Issue #17367) after being deprecated since before the 1.0 release.Process.fork
💎 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#bytesizeNumberLiteral#chrRangeLiteral#each(now supportsCharLiteral)
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_addressand#local_addresshave migrated fromHTTP::RequestHTTP::Context. - Functionality:
- Added
HTTP::Headers#merge. IO::Memoryin HTTP bodies now includes theContent-Lengthheader.
- Added
- Bug Fixes:
- Now rejects invalid
Content-Encoding, unrecognizedTransfer-Encoding, and invalid HTTP trailers. - Fixed return values for
HTTP::Request#body=and#content_length=. HTTP.parse_headers_and_bodyno longer crashes whenwithout_zlibis used.- Improved validation for
HTTP::WebSocketHandler,HTTP::Request, andHTTP::Headersnames. HTTP::Clientnow closes onIO::Errorduring requests.- Fixed
Content-Encoding: deflateand empty header name parsing inHTTP::Request.from_io. HTTP::Request#form_params?now ignores invalid content types.
- Now rejects invalid
Event Loop
All targets now utilize a native event loop based on the system selector by default.
- Solaris: Now uses
epoll. - BSD: Now uses
kqueueacross 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 afollow_symlinks: falseargument.- New
Char::Reader.new(Bytes)constructor. - Added
Time::Span#to_nanosecondsand related methods. - Introduced
GC.syscall(). - Resolved backtrace issues when using
-static-pieonmusl-libc.
Deprecations
The following are now deprecated:
- Uppercase instance and class variables.
HTTP::Request#local_addressand#remote_address.LLVM::Type#sizeandLLVM::Type#alignment.
Dependencies & Packaging
| Component | Update |
|---|---|
| LLVM | Support for 23.1 and 24.0 |
| markd | Updated to 0.6.0 |
| Distribution | Updated 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:
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.techfor direct sponsorship opportunities.