doc/changelogs/v1.21.md
PCRE (#16924, thanks @straight-shoota)%W percent string array literals with interpolation (#16919, thanks @straight-shoota)TypeNode#all_methods that includes the type's ancestor's methods (#16902, thanks @Blacksmoke16)Channel(T) an Iterator(T) (#16916, thanks @jgaskins)Socket#sendfile (and Crystal::EventLoop::Socket#sendfile) (#16665, #17133, thanks @ysbaddaden, @straight-shoota)HTTP::WebSocket#receive as a synchronous call (#16689, thanks @jgaskins)Crystal::EventLoop::FileDescriptor#pread (#17068, thanks @ysbaddaden)without_main flag (#17074, thanks @kojix2)root properties in JSON::Field (#17016, thanks @tcoatswo)URI::Params::Field(ignore:), ignore_serialize, ignore_deserialize (#17029, thanks @trypsynth)#should, #should_not expectations (#17020, thanks @straight-shoota)Path#kind (#16917, thanks @Sija)Process.capture, .run and .new (#16975, thanks @straight-shoota)Process::Status.[] constructor (#17003, thanks @straight-shoota)String#present? (#16930, thanks @Sija)UUID.v6 and .v8 generators (#17010, thanks @trypsynth)ASTNode#inspect (#16699, thanks @straight-shoota)MacroVar with empty expressions: %var{} (#16772, thanks @straight-shoota)when Bar, Baz (#17072, thanks @straight-shoota)Process.exec on Windows and explicitly spawn subprocess (#17049, thanks @straight-shoota)Iterator#compact_map with EmptyIterator (#16928, thanks @straight-shoota)Iterator#compact_map with non-nilable compactor proc (#16927, thanks @straight-shoota)Sync::MU fast paths (#17063, thanks @stevegeek)HTTP::Request.form_params? to recognize Content-Type and charset (#16934, #16971, thanks @swsch, @straight-shoota)HTTP::Client to retry for connection recovery only (#16981, thanks @straight-shoota)Fiber::ExecutionContext::Monitor compat with old Crystal releases (#17007, thanks @ysbaddaden)EventLoop::IoUring#open musn't set O_NONBLOCK when blocking (#17035, thanks @ysbaddaden)Sync::MU (#17070, thanks @ysbaddaden)fdlock#try_close? must release ref after yielding to the block (#17089, thanks @ysbaddaden)Fiber::ExecutionContext.current? (#17092, thanks @ysbaddaden)XML::Node#each_namespace (#17038, thanks @ysbaddaden)IO::Encoder#write when operating on long strings (#16797, thanks @jgaskins)crystal spec -p (#17062, thanks @straight-shoota)type aliases as the same type (#16961, thanks @stakach)upcast_distinct for Pointer to Pointer (#16962, thanks @stakach)MacroVar syntax in literal (#16779, thanks @straight-shoota)Expression and ExceptionHandler (#16852, thanks @straight-shoota)&(...), &[...], &{...} in assignment (#16960, thanks @stakach)/ and // immediately after self, nil, true, false (#16942, thanks @stakach)out (#16870, thanks @straight-shoota)lookup_matches_in_type to reject partial matches (#16867, thanks @straight-shoota)sizeof, offsetof as generic type argument in inferred ivar type (#16811, thanks @kojix2)nil_if_read? across while cond filters (#16963, thanks @stakach)common_descendent for two generic class types (#10831) (#16999, thanks @stakach)then with trailing comment (#16878, thanks @straight-shoota)if with trailing comments (#16880, thanks @straight-shoota)Colorize.on_tty_only! (#16859, thanks @straight-shoota)spawn(same_thread:) (#17097, thanks @ysbaddaden)writable in IO::Memory.new (#16858, #16883, thanks @straight-shoota)Process::Status constructor (#16997, thanks @straight-shoota)Hash.zip (#17054, thanks @carlhoerberg)CompilerError instead of abort (#16995, thanks @straight-shoota)Process#wait on Windows (#17099, thanks @ysbaddaden)HTTP::Client#exec(&) (#16969, thanks @straight-shoota)IO::Evented into Crystal::EventLoop::Wasi (#17030, thanks @ysbaddaden)IO::Evented and Crystal::ThreadLocalValue (#17032, thanks @ysbaddaden)#overlapped_connect and #overlapped_accept into EventLoop::IOCP (#17090, thanks @ysbaddaden)Dir::Globber to a struct with instance methods (#16899, thanks @straight-shoota)Process constructor to receive Crystal::System::Process (#16933, thanks @straight-shoota)Process.capture (#17012, #17122, thanks @straight-shoota, @ysbaddaden)optsize and minsize fun attributes for the -Os and -Oz optimization modes (#16983, thanks @ysbaddaden)Union#parens (#16744, #16908, thanks @straight-shoota)Lexer#next_macro_token [follow-up #16771] (#16776, thanks @straight-shoota)delimited_pair(advance) (#17023, thanks @straight-shoota)format_binary parameter alternative (#16912, thanks @straight-shoota)::delegate (#16854, thanks @straight-shoota)String#to_unsafe (#16869, thanks @mvanhorn)String is not inheritable (#17000, thanks @LaskaIDK)writable in documentation (#16848, thanks @straight-shoota)run_git spec helper to use Process.capture_result? (#17079, thanks @straight-shoota)Iterator.empty (#17014, thanks @straight-shoota)close_connection and client_for for HTTP client specs (#16968, thanks @straight-shoota)compiler-cli test suite (#17033, thanks @straight-shoota)lldb-check expectations in debug tests for compatibility with modern LLDB (#16860, thanks @straight-shoota)not_nil! in spec suite (#16865, thanks @straight-shoota)not_nil! with should_not(be_nil) in spec suite (#16906, thanks @straight-shoota)release/1.19@1.19.2 into master (#16905, thanks @straight-shoota)release/1.20@1.20.1 into master (#16900, thanks @straight-shoota)devenv.lock (#16819, #16935, #17006, #17075, #17084, thanks @github-actions, @crysbot)CRYSTAL_BOOTSTRAP_VERSION in bin/ci (#16966, thanks @straight-shoota)install target into subcomponents (#16980, thanks @straight-shoota)release-update script (#16977, thanks @straight-shoota)install target (#16991, thanks @straight-shoota)shfmt (#17015, thanks @straight-shoota)mbake formatter for Makefile (#17024, thanks @straight-shoota)git-hooks follows nixpkgs (#17064, thanks @straight-shoota)markdownlint with rumdl (#17069, thanks @straight-shoota).markdownlint.yaml with rumdl.toml (#17078, thanks @straight-shoota)-Devloop=io_uring flag in Linux CI (#16843, thanks @straight-shoota)backport job (#16864, thanks @straight-shoota)deploy_api_docs job (#16863, thanks @straight-shoota)update-devenv workflow to trigger CI (#16938, thanks @straight-shoota)aarch64 workflow (#16965, thanks @straight-shoota)macos-15 runners to macos-26 (#17022, thanks @straight-shoota)Lint workflow (#17066, thanks @straight-shoota)