# Crystal 1.19.0 - Product: Crystal (https://whatsnew.fyi/product/crystal) - Vendor: Crystal Language - Date: 2026-01-15 - Version: 1.19.0 - Original notes: https://github.com/crystal-lang/crystal/releases/tag/1.19.0 - Permalink: https://whatsnew.fyi/product/crystal/releases/1.19.0 What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. --- - **removed** — Require OpenSSL 1.1.1+ or LibreSSL 3+ - **added** — Add compiler flag values to macros - **added** — Add yielding variant of StringLiteral#gsub - **added** — Support StringLiteral#split(RegexLiteral) - **added** — Add StringLiteral#match - **changed** — Make all overloads of ArrayLiteral#[] return nil on out of bounds - **added** — Add NamedTuple#reverse_merge - **changed** — Pad Hash#inspect, Tuple#inspect before { from first element - **added** — Add Set#map! - **added** — Add Hash#transform_keys! - **changed** — Enhance error message for Hash#[] when key is wrong type for default block - **added** — Add Sync::Mutex and Sync::RWLock - **added** — Add Sync::ConditionVariable - **added** — Import Sync::Exclusive and Sync::Shared - **added** — Add OpenSSL::SSL::Context::Server#on_server_name for SNI - **changed** — Loosen type restrictions in StaticFileHandler helper methods from File to IO - **added** — Add IPSocket#ipv6_only - **added** — Expose flags hint for getaddrinfo - **added** — Add Int.from_digits as inverse of Int#digits - **added** — Add BigInt.from_digits - **added** — Add Int#tdivmod ###### Breaking changes ###### stdlib - _(crypto)_ Require OpenSSL 1.1.1+ or LibreSSL 3+ ([#16480], thanks @ysbaddaden) [#16480]: https://github.com/crystal-lang/crystal/pull/16480 ###### Features ###### lang - _(macros)_ **[breaking]** Add compiler flag values ([#16310], thanks @straight-shoota) - _(macros)_ Add yielding variant of `StringLiteral#gsub` ([#16378], thanks @Blacksmoke16) - _(macros)_ Support `StringLiteral#split(RegexLiteral)` ([#16423], thanks @HertzDevil) - _(macros)_ Add `StringLiteral#match` ([#16464], thanks @HertzDevil) - _(macros)_ Make all overloads of `ArrayLiteral#[]` return `nil` on out of bounds ([#16453], thanks @HertzDevil) [#16310]: https://github.com/crystal-lang/crystal/pull/16310 [#16378]: https://github.com/crystal-lang/crystal/pull/16378 [#16423]: https://github.com/crystal-lang/crystal/pull/16423 [#16464]: https://github.com/crystal-lang/crystal/pull/16464 [#16453]: https://github.com/crystal-lang/crystal/pull/16453 ###### stdlib - _(collection)_ Add `NamedTuple#reverse_merge` ([#16229], thanks @andrykonchin) - _(collection)_ Pad `Hash#inspect`, `Tuple#inspect` before `{` from first element ([#16245], thanks @andrykonchin) - _(collection)_ Add `Set#map!` ([#16271], thanks @andrykonchin) - _(collection)_ Add `Hash#transform_keys!` ([#16280], thanks @andrykonchin) - _(collection)_ Enhance error message for `Hash#[]` when key is wrong type for default block ([#16442], thanks @Blacksmoke16) - _(concurrency)_ Add `Sync::Mutex` and `Sync::RWLock` ([#16399], thanks @ysbaddaden) - _(concurrency)_ Add `Sync::ConditionVariable` ([#16440], thanks @ysbaddaden) - _(concurrency)_ Import `Sync::Exclusive` and `Sync::Shared` ([#16487], thanks @ysbaddaden) - _(crypto)_ Add `OpenSSL::SSL::Context::Server#on_server_name` for SNI ([#16452], [#16525], thanks @carlhoerberg, @straight-shoota) - _(networking)_ Loosen type restrictions in `StaticFileHandler` helper methods from `File` to `IO` ([#16238], thanks @andrykonchin) - _(networking)_ Add `IPSocket#ipv6_only` ([#16347], thanks @stakach) - _(networking)_ Expose `flags` hint for `getaddrinfo` ([#16528], thanks @stakach) - _(numeric)_ Add `Int.from_digits` as inverse of `Int#digits` ([#16237], [#16566], thanks @andrykonchin, @ysbaddaden) - _(numeric)_ Add `BigInt.from_digits` ([#16259], thanks @HertzDevil) - _(numeric)_ Add `Int#tdivmod` ([#16258], thanks @andrykonchin) - _(runtime)_ Add `Proc#[]` as alias to `#call` ([#16220], thanks @andrykonchin) - _(runtime)_ Add `#unshift`, `#pop` and `#pop?` to `Crystal::PointerLinkedList` ([#16287], thanks @ysbaddaden) - _(runtime)_ Add `Random.next_bool` and `.next_int` ([#16297], thanks @ysbaddaden) - _(runtime)_ Add `Random#split` and `#split_internal` API for splittable PRNGs ([#16342], [#16495], thanks @ysbaddaden) - _(runtime)_ Add `Pointer#fill` ([#16338], thanks @straight-shoota) - _(runtime)_ Add `Crystal::PointerLinkedList#first?` ([#16400], thanks @ysbaddaden) - _(runtime)_ Ensure single reader and writer to system fd on Unix ([#16209], thanks @ysbaddaden) - _(runtime)_ Protect `Box.unbox` from dereferencing null pointer ([#16514], thanks @straight-shoota) - _(runtime)_ Register execution context schedulers with the event loop ([#16519], thanks @ysbaddaden) - _(runtime)_ Add `Fiber::ExecutionContext::Scheduler.current?` ([#16521], thanks @ysbaddaden) - _(runtime)_ Move execution context event loop lock to each event loop ([#16520], thanks @ysbaddaden) - _(serialization)_ Support deserialization of YAML anchors of value types ([#16186], thanks @HertzDevil) - _(serialization)_ Add end locations to scalars and aliases in `YAML::Nodes.parse` ([#16187], thanks @HertzDevil) - _(serialization)_ Set `JSON::SerializableError#attribute` when appropriate ([#16158], thanks @spuun) - _(serialization)_ Support large JSON files ([#16211], thanks @RX14) - _(serialization)_ Add `YAML::Nodes.parse_all` ([#16247], thanks @HertzDevil) - _(specs)_ Rescale execution c _[Truncated at 4000 characters — full notes: https://github.com/crystal-lang/crystal/releases/tag/1.19.0]_