doc/changelogs/v1.20.md
HTTP::Headers#to_json and #to_yaml (#16890, thanks @straight-shoota)Range#sample eventually loses randomness (#16853, thanks @ysbaddaden)Formatter code for simplification" (#16885, thanks @straight-shoota)Exception::CallStack for better boundaries (#16896, thanks @straight-shoota)HTTP::Server is no longer vulnerable to request smuggling (GHSA-wqh5-7w63-pm68)#select and #reject to HashLiteral and NamedTupleLiteral (#16558, thanks @Blacksmoke16)OptionParser (#16770, thanks @Qard)OpenSSL::BIO (#16646, thanks @ysbaddaden)IO#read_greedy (#16535, thanks @BlobCodes)FileUtils#rm_f (#12832, thanks @zw963)IO::PrefixSuffixBuffer for capturing truncated streams (#16774, thanks @straight-shoota)Sec-WebSocket-Protocol checks to HTTP::WebSocket::Protocol (#16600, #16671, thanks @antondalgren, @straight-shoota)Sec-WebSocket-Protocol to HTTP::WebSocketHandler (#16574, thanks @antondalgren)HTTP::Response#content_type and #content_length as convenient accessors (#16712, thanks @CTC97)OAuth error in payload (#16634, #16828, thanks @jgaskins, @Sija)Fiber::ExecutionContext::ThreadPool (#15885, #16750, thanks @ysbaddaden)Pointer#align_up and #align_down (#16585, thanks @BlobCodes)record macro (#16172, #16834, thanks @Vici37, @ysbaddaden)Crystal::Lock (#16768, thanks @ysbaddaden)FdLock on all targets (#16569, thanks @ysbaddaden)Process.new with args instead of command, args (#16681, thanks @straight-shoota)Process.run(args) without command (#16739, thanks @straight-shoota)Process.run? (#16738, thanks @straight-shoota)Process.capture (#16773, thanks @straight-shoota)StringScanner#scan, #check, and #skip overloads for Int (#16557, thanks @jneen)StringScanner#peek_behind (#16593, thanks @jneen)StringScanner (#16595, thanks @jneen)StringScanner#inspect (#16594, thanks @jneen)mold or lld) (#16696, thanks @straight-shoota)@[TargetFeature] annotation (#16717, #16835, thanks @stakach, @ysbaddaden)ProcNotation with empty arg parenthesis: () -> (#16741, thanks @straight-shoota)--base-path for crystal docs (#16091, thanks @matiasgarciaisaia)UInt32 (#16730, thanks @kojix2)HTTP::Headers#merge! to not wrap key (#16624, thanks @straight-shoota)forward_missing_to in HTTP::Headers (#16637, thanks @straight-shoota)Socket::IPAddress IPv4 address in IPv6 with zone identifier (#16813, thanks @straight-shoota)Indexable#range_to_index_and_count with unsigned integers (#16597, thanks @jneen)Float32#abs to return Float32 (#16655, thanks @straight-shoota)EventLoop#open (#16636, thanks @kojix2)Thread.sleep is invalid when duration >= 1 minute (#16629, thanks @ysbaddaden)Sync::ConditionVariable can hang forever (#16677, thanks @ysbaddaden)Pointer#to_s with lib typedefs (#16687, thanks @straight-shoota)Process#wait on Windows (#16766, thanks @ysbaddaden)xmlFree for string pointer from xmlNodeGetContent (#16688, thanks @toddsundsted)Dir.glob matching wildcard with dot directory (#16604, thanks @straight-shoota)Fiber.current access on segfault handler (#16612, thanks @bcardiff)Process#wait to not close @input before waiting (#16620, #16638, thanks @straight-shoota, @ysbaddaden)System.cpu_count returns Int32 (#16648, thanks @straight-shoota)Process.new(args) etc. support Enumerable(String) args (#16784, thanks @straight-shoota)String#scan zero-width matches with multibyte characters (#16684, thanks @error256)unreachable for inlined NoReturn returns (#16690, thanks @kojix2)declare_fun attribute copy (#16708, thanks @kojix2)| delimiter in macro context (#16672, #16716, thanks @toddsundsted, @straight-shoota)ProcNotation with parens around argument type (#16753, thanks @straight-shoota)@line only on write (#16762, thanks @straight-shoota)@[Experimental] annotation to new Process API (#16816, thanks @straight-shoota)System::Time.monotonic on Windows (#16555, thanks @straight-shoota)OpenSSL::BIO (#16640, thanks @ysbaddaden)Slice.literal for fast_float when supported, part 2 (#16261, thanks @HertzDevil)Mutex in favor to Sync::Mutex (#16737, #16759, #16802, thanks @ysbaddaden)Crystal::System::Env with Sync::RWLock (UNIX) (#16591, thanks @ysbaddaden)System::Process.make_env_block into System::Env (win32) (#16605, thanks @ysbaddaden)System.wstr_literal for env names on Win32 (#16669, thanks @kojix2)ExecutionContext::Parallel (#16719, thanks @ysbaddaden)EventLoop::IOCP instead of System::IOCP (#16765, thanks @ysbaddaden)Fiber::ExecutionContext::Parallel::Scheduler (#16732, thanks @ysbaddaden)Mutex use cases with Sync::Mutex (#16783, thanks @ysbaddaden)with_env helper over mutating ENV in specs (#16608, thanks @ysbaddaden)shell: true from Process.run calls (#16781, thanks @ysbaddaden)Pointer.new(Int) in dlfcn (#16691, thanks @kojix2)Process.new overloads (#16782, thanks @straight-shoota)DelimiterState#open_count to initialize with 0 (#16771, thanks @straight-shoota)Formatter code for simplification (#16745, thanks @straight-shoota)ENV documentation (#16592, #16599, thanks @ysbaddaden)thread_local macro exposes Thread class in stdlib docs (#16714, thanks @ysbaddaden)Fiber::ExecutionContext (#16602, thanks @ysbaddaden)Pointer.new constructor from API docs (#16734, thanks @ysbaddaden)Process.run & co (#16618, thanks @straight-shoota)Fiber#resumable? spec must run in concurrent context (#16731, thanks @ysbaddaden)Process.run(shell: true) with PATH (#16617, thanks @straight-shoota)Crystal::Config.path= for spec helper (#16613, thanks @straight-shoota)assert_syntax_error to use expect_raises (#16711, thanks @straight-shoota)ProcNotation (#16742, thanks @straight-shoota)spec/syntax_spec.cr (#16749, thanks @straight-shoota)MacroVar syntax inside literals (#16778, thanks @straight-shoota)Link annotation spec (#16710, thanks @kojix2)devenv.lock (#16426, #16588, #16658, #16673, #16775, #16586, #16623, thanks @github-actions)ENV.[]= in generate_windows_zone_names (#16606, thanks @straight-shoota)Lint/SpecFocus (#16740, thanks @straight-shoota)update-devenv workflow (#16587, thanks @straight-shoota)prek instead of pre-commit (#16653, thanks @straight-shoota)fail-fast: false to all matrix strategies (#16656, thanks @straight-shoota)lint workflow on all files when devenv.lock was changed (#16682, thanks @straight-shoota)nixpkgs in lint workflow (#16706, thanks @straight-shoota)