# Racket: what changed from 8 to 9 - Product: Racket (https://whatsnew.fyi/product/racket) - Vendor: Racket - Range: changelog entries numbered after v8.18 up to and including v9.3, stable releases only - Entries below: 4 releases (newest first) - Resolved: 8 is v8.18 and 9 is v9.3, the newest stable release of each major we track - Carrying security changes: 0 · CVEs mentioned: 0 · Mentioning breaking changes: 0 · Removing or deprecating something: 0 - Page: https://whatsnew.fyi/product/racket/compare/8...9 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'. ## What changed (46 changes, grouped by kind) ### Added #### v9.3 (2026-08-13) - The `raco setup` command can generate markdown documentation using the `--doc-markdown` option - The `raco pkg install` command includes new options `--adjacent-deps`, `--destdir`, and `--attach`, and a refined `--skip-installed` - The `ffi/unsafe/runtime-lib` library provides a `define-runtime-lib` mechanism similar to `define-runtime-path` for locating libraries relative to a source file - The `error-syntax->srcloc-handler` parameter provides control over the mapping from syntactic forms to source locations for error handling - The `file/zip` package provides a new mechanism for greatly increased control over zip file generation, allowing in-memory file sources and per-file compression control #### v9.2 (2026-05-28) - The #%foreign-inline core syntactic form provides unsafe access to facilities provided at the linklet layer by a Racket implementation - Internal support for a more static ffi2 foreign interface - The terminal-file-position function counts bytes written to ports connected to a terminal, such as stdin and stderr - The impersonator-property-predicate-procedure? function identifies procedures created by make-impersonator-property #### v9.1 (2026-02-24) - Documentation organization and navigation can be specialized by language family - The `for` form and its variants accept an `#:on-length-mismatch` specifier - The `exn-classify-errno` function maps network and filesystem error numbers to posix-standard symbols - The `make-struct-type` procedure can inherit the current inspector using a `'current` flag - The `openssl/legacy` library provides access to OpenSSL's legacy provider for insecure and outdated algorithms - The `system-type` function can report on platform and shared-object-library conventions with new flags #### v9.0 (2025-11-23) - Racket supports parallel threads that can be created using the `#:pool` argument to thread creation - Threads created with `#:keep` set to `'results` will record their results for later retrieval with `thread-wait` - The `black-box` wrapper prevents the optimizing compiler from optimizing away certain computations entirely - The `decompile-linklet` function can map linklets back to s-expressions - Distribute natipkg packages for AArch64 useful for package-build and package-testing infrastructure - The `math` library includes Weibull distributions ### Changed #### v9.3 (2026-08-13) - The "#lang" teaching languages (BSL, ISL+, DeinProgram) have reached parity with the ones chosen using the Language dialog and are the recommended choice - DrRacket's background expansion disables errortrace annotations for faster syntax checking - The `prompt-tag/c` contract generator no longer performs checking on `call/cc` when the `#:call/cc` option is not present - The `impersonate-prompt-tag` function takes an additional argument allowing checking and update of results for composable continuations - Uses of `(tcp-listen 0)` will retry when it fails with "address in use" - The `racket/base` module requires fewer internal modules and instantiations #### v9.2 (2026-05-28) - Unicode 17.0 is used for character and string operations - Cross-phase persistent modules allow more types of quoted data - The implementations of member, memw, when, unless, let/ec, and cond are rewritten to use only racket/kernel syntax - In Typed Racket, polymorphic struct types are printed using type arguments rather than exposing an internal representation - The stepper's display of numbers better matches the language settings - Scribble documents that do not use the Racket-manual style get an initial-scale of 1.0 instead of 0.8, but this can be configured using the initial-scale property - By default, margin notes appear inline for narrow displays in all styles, not just in the Racket-manual style #### v9.1 (2026-02-24) - Behavior of Racket BC on certain character operations is changed to match Racket CS - DrRacket improves the GUI for choosing color schemes - DrRacket now displays curved syntax arrows with curvature indicating relative displacement - DrRacket's Insert Large Letters uses characters that match the comment syntax of the buffer's language - Typed Racket improves expected type propagation for keyword argument functions - Bundle configurations can better control conventions for locating shared object files with `--enable-sofind=` flags #### v9.0 (2025-11-23) - When using BC Racket, the `processor-count` function is changed to always return the parallel count - Check Syntax tracks identifiers more deeply nested in the origin field of syntax objects ### Fixed #### v9.2 (2026-05-28) - The match form checks that non-linear patterns with ... have equal parts and rejects non-linear patterns where one use of a variable has ... and another does not - Typed Racket's types for asin and acos procedures correctly handle situations where the function produces a complex number - Big-bang programs distributed as .dmg files correctly handle the close-on-stop feature #### v9.0 (2025-11-23) - Many repairs and documentation improvements ## Release notes ### v9.3 — Racket v9.3 - Date: 2026-08-13 - Version: v9.3 - Original notes: https://github.com/racket/racket/releases/tag/v9.3 - Permalink: https://whatsnew.fyi/product/racket/releases/v9.3 - **added** — The `raco setup` command can generate markdown documentation using the `--doc-markdown` option - **changed** — The "#lang" teaching languages (BSL, ISL+, DeinProgram) have reached parity with the ones chosen using the Language dialog and are the recommended choice - **changed** — DrRacket's background expansion disables errortrace annotations for faster syntax checking - **added** — The `raco pkg install` command includes new options `--adjacent-deps`, `--destdir`, and `--attach`, and a refined `--skip-installed` - **added** — The `ffi/unsafe/runtime-lib` library provides a `define-runtime-lib` mechanism similar to `define-runtime-path` for locating libraries relative to a source file - **changed** — The `prompt-tag/c` contract generator no longer performs checking on `call/cc` when the `#:call/cc` option is not present - **changed** — The `impersonate-prompt-tag` function takes an additional argument allowing checking and update of results for composable continuations - **added** — The `error-syntax->srcloc-handler` parameter provides control over the mapping from syntactic forms to source locations for error handling - **changed** — Uses of `(tcp-listen 0)` will retry when it fails with "address in use" - **changed** — The `racket/base` module requires fewer internal modules and instantiations - **added** — The `file/zip` package provides a new mechanism for greatly increased control over zip file generation, allowing in-memory file sources and per-file compression control ---------------------------------------------------------------------- - The `raco setup` command can generate markdown documentation, using the `--doc-markdown` option. - The "#lang" teaching languages (BSL, ..., ISL+; plus DeinProgram) have reached parity with the ones chosen using the Language dialog, and are the recommended choice. - DrRacket's background expansion disables errortrace annotations, for faster syntax checking. - The `raco pkg install` command includes new options that provide more install-time configuration flexibility: `--adjacent-deps`, `--destdir`, and `--attach`, and a refined `--skip-installed`. - The `ffi/unsafe/runtime-lib` library provides a `define-runtime-lib` mechanism similar to `define-runtime-path`, allowing location of libraries located relative to a source file. - The `prompt-tag/c` contract generator no longer performs checking on `call/cc` when the `#:call/cc` option is not present. - The `impersonate-prompt-tag` function takes an additional argument that allows checking and update of results for composable continuations. - The `error-syntax->srcloc-handler` parameter provides control over the mapping from syntactic forms to source locations for error handling. - Uses of `(tcp-listen 0)` will retry when it fails with "address in use". - The `racket/base` module requires fewer internal modules and instantiations. - The `file/zip` package provides a new mechanism for greatly increased control over zip file generation, allowing in-memory file sources and per-file compression control. The following people contributed to this release: Alex Knauth, Alexander Shopov, Aris Spathis, Bert De Ketelaere, Bob Burger, Caleb Mazalevskis, Cameron Moy, Geoffrey J. Teale, Gustavo Massaccesi, Hannes Braun, Jade Sailor, Jason Hemann, Jens Axel Søgaard, John Clements, Jordan Johnson, Matthew Flatt, Matthias Felleisen, Mike Sperber, Nathan Dykman, Noah Ma, Philip McGrath, Robby Findler, Romeo Ahmed, Sam Tobin-Hochstadt, Shu-Hung You, Stefan Schwarzer, Stephen De Gabrielle, and Wing Hei Chan. ---------------------------------------------------------------------- ### v9.2 — Racket v9.2 - Date: 2026-05-28 - Version: v9.2 - Original notes: https://github.com/racket/racket/releases/tag/v9.2 - Permalink: https://whatsnew.fyi/product/racket/releases/v9.2 - **fixed** — The match form checks that non-linear patterns with ... have equal parts and rejects non-linear patterns where one use of a variable has ... and another does not - **fixed** — Typed Racket's types for asin and acos procedures correctly handle situations where the function produces a complex number - **added** — The #%foreign-inline core syntactic form provides unsafe access to facilities provided at the linklet layer by a Racket implementation - **changed** — Unicode 17.0 is used for character and string operations - **added** — Internal support for a more static ffi2 foreign interface - **added** — The terminal-file-position function counts bytes written to ports connected to a terminal, such as stdin and stderr - **changed** — Cross-phase persistent modules allow more types of quoted data - **changed** — The implementations of member, memw, when, unless, let/ec, and cond are rewritten to use only racket/kernel syntax - **added** — The impersonator-property-predicate-procedure? function identifies procedures created by make-impersonator-property - **changed** — In Typed Racket, polymorphic struct types are printed using type arguments rather than exposing an internal representation - **changed** — The stepper's display of numbers better matches the language settings - **changed** — Scribble documents that do not use the Racket-manual style get an initial-scale of 1.0 instead of 0.8, but this can be configured using the initial-scale property - **changed** — By default, margin notes appear inline for narrow displays in all styles, not just in the Racket-manual style - **fixed** — Big-bang programs distributed as .dmg files correctly handle the close-on-stop feature ---------------------------------------------------------------------- - The `match` form checks that when non-linear patterns (patterns where the same variable is used multiple times) are used with `...`, the two parts of the matched value actually are equal. Additionally, match rejects non-linear patterns where one use of the variable is used with `...` and another is not. This repair could cause existing code to fail. - Typed Racket's types for the `asin` and `acos` procedures correctly handle situations where the function produces a complex number, avoiding unsound results that were previously possible. This repair could cause existing code to fail at compile time. - The `#%foreign-inline` core syntactic form provides unsafe access to facilities provided at the linklet layer by a Racket implementation. This means that any code that handles all core forms by enumeration will need to be updated. - Unicode 17.0 is used for character and string operations. - This release includes internal support for a more static "ffi2" foreign interface (to be used in a future package). - The `terminal-file-position` function counts bytes written to ports connected to a terminal, such as `stdin` and `stderr`. - Cross-phase persistent modules allow more types of `quote`d data. - The implementations of `member`, `memw`, `when`, `unless`, `let/ec`, and `cond` are rewritten to use only `racket/kernel` syntax - The `impersonator-property-predicate-procedure?` function identifies procedures created by `make-impersonator-property`. - In Typed Racket, polymorphic struct types are printed using type arguments (e.g., `(Array Byte)`) rather than exposing an internal representation. - The stepper's display of numbers better matches the language settings. - Scribble documents that do not use the Racket-manual style get an `initial-scale` of 1.0, instead of the manual style's 0.8, but this can be configured using the `initial-scale` property. - By default, margin notes appear inline for narrow displays in all styles, not just in the Racket-manual style. - Big-bang programs distributed as .dmg files correctly handle the `close-on-stop` feature. - There are many other repairs and documentation improvements! The following people contributed to this release: Alexander Shopov, Alexis King, Asilo, Bert De Ketelaere, Bob Burger, Bogdan Popa, Chung-chieh Shan, François-René Rideau, Gustavo Massaccesi, Ilya Klyuchnikov, Jade Sailor, Jamie Taylor, John Clements, Jonathan Simpson, LS_Hower, Matthew Flatt, Matthias Felleisen, Mike Sperber, Pavel Panchekha, Philippe Meunier, RMOlive, Robby Findler, Roman Klochkov, Sam Tobin-Hochstadt, Shu-Hung You, Stephen de Gabrielle, Tejas Sanap, Vincent Lee, and Wing Hei Chan. ---------------------------------------------------------------------- ### v9.1 — Racket v9.1 - Date: 2026-02-24 - Version: v9.1 - Original notes: https://github.com/racket/racket/releases/tag/v9.1 - Permalink: https://whatsnew.fyi/product/racket/releases/v9.1 - **added** — Documentation organization and navigation can be specialized by language family - **added** — The `for` form and its variants accept an `#:on-length-mismatch` specifier - **added** — The `exn-classify-errno` function maps network and filesystem error numbers to posix-standard symbols - **added** — The `make-struct-type` procedure can inherit the current inspector using a `'current` flag - **added** — The `openssl/legacy` library provides access to OpenSSL's legacy provider for insecure and outdated algorithms - **added** — The `system-type` function can report on platform and shared-object-library conventions with new flags - **changed** — Behavior of Racket BC on certain character operations is changed to match Racket CS - **changed** — DrRacket improves the GUI for choosing color schemes - **changed** — DrRacket now displays curved syntax arrows with curvature indicating relative displacement - **changed** — DrRacket's Insert Large Letters uses characters that match the comment syntax of the buffer's language - **changed** — Typed Racket improves expected type propagation for keyword argument functions - **changed** — Bundle configurations can better control conventions for locating shared object files with `--enable-sofind=` flags ---------------------------------------------------------------------- - Documentation organization and navigation can be specialized by language family, to allow users to interact with documentation in a way that is tailored to that language family. This is currently used by Rhombus. - The `for` form and its variants accept an `#:on-length-mismatch` specifier. 3.18 Iterations and Comprehensions: for, for/list, ... - DrRacket improves the GUI for choosing color schemes. - DrRacket has curved syntax arrows. The degree of curvature indicates the relative left- or right-displacement of the arrow's target. - DrRacket's "Insert Large Letters" uses characters that match the comment syntax of the buffer's language, making it useful (and fun!) in Rhombus. - The `exn-classify-errno` maps network and filesystem error numbers on various platforms to posix-standard symbols, to enable more portable code. 10.2 Exceptions - The behavior of Racket BC on certain character operations (most notably `eq?`) is changed to match that of Racket CS, with a small performance penalty for these operations for BC programs. 19 Performance 1.5 Implementations - The `make-struct-type` procedure can inherit the current inspector using a `'current` flag. This is the default behavior, but there are situations in which it's not possible to refer to the current inspector. 5.2 Creating Structure Types - Bundle configurations can better control the conventions for locating shared object files with the `--enable-sofind=` flags. - The `system-type` function can report on platform and shared-object-library conventions with new flags. 15.8 Environment and Runtime Information - The `openssl/legacy` library makes it possible to access OpenSSL's built-in "legacy" provider, to get access to insecure and outdated algorithms. OpenSSL: Secure Communication - Typed Racket improves expected type propagation for keyword argument functions. - There are many other repairs and documentation improvements! The following people contributed to this release: Alexander Shopov, beast-hacker, Bob Burger, Brad Lucier, Cadence Ember, David Van Horn, evan, François-René Rideau, Gustavo Massaccesi, Jacqueline Firth, Jade Sailor, Jason Hemann, Jens Axel Søgaard, John Clements, Jonas Rinke, Matthew Flatt, Matthias Felleisen, Mike Sperber, Noah Ma, Pavel Panchekha, Rob Durst, Robby Findler, Ryan Culpepper, Sam Tobin-Hochstadt, Stephen De Gabrielle, and Wing Hei Chan. ---------------------------------------------------------------------- ### v9.0 — Racket v9.0 - Date: 2025-11-23 - Version: v9.0 - Original notes: https://github.com/racket/racket/releases/tag/v9.0 - Permalink: https://whatsnew.fyi/product/racket/releases/v9.0 - **added** — Racket supports parallel threads that can be created using the `#:pool` argument to thread creation - **added** — Threads created with `#:keep` set to `'results` will record their results for later retrieval with `thread-wait` - **added** — The `black-box` wrapper prevents the optimizing compiler from optimizing away certain computations entirely - **added** — The `decompile-linklet` function can map linklets back to s-expressions - **added** — Distribute natipkg packages for AArch64 useful for package-build and package-testing infrastructure - **added** — The `math` library includes Weibull distributions - **changed** — When using BC Racket, the `processor-count` function is changed to always return the parallel count - **changed** — Check Syntax tracks identifiers more deeply nested in the origin field of syntax objects - **fixed** — Many repairs and documentation improvements ---------------------------------------------------------------------- - Racket supports parallel threads. For more information see the new blog post on the topic. - Parallel threads can be created using the `#:pool` argument to thread creation. - Threads created with `#:keep` set to `'results` will record their results for later retrieval with `thread-wait`. - The `black-box` wrapper prevents the optimizing compiler from optimizing away certain computations entirely. This can be helpful in ensuring that benchmarks are accurate. - The `decompile-linklet` function can map linklets back to s-expressions. - When using BC Racket, the `processor-count` function is changed to always return the parallel count. - We now distribute "natipkg" packages for AArch64, useful for package-build and package-testing infrastructure. - Check Syntax tracks identifiers more deeply nested in the "origin" field of syntax objects. - The `math` library includes Weibull distributions. - There are many other repairs and documentation improvements! The following people contributed to this release: Alexander Shopov, Anthony Carrico, Bert De Ketelaere, Bogdan Popa, Cadence Ember, David Van Horn, Gustavo Massaccesi, Jade Sailor, Jakub Zalewski, Jens Axel Søgaard, jestarray, John Clements, Jordan Johnson, Matthew Flatt, Matthias Felleisen, Mike Sperber, Philip McGrath, RMOlive, Robby Findler, Ruifeng Xie, Ryan Culpepper, Sam Phillips, Sam Tobin-Hochstadt, Sebastian Rakel, shenleban tongying, Shu-Hung You, Stephen De Gabrielle, Steve Byan, and Wing Hei Chan. ----------------------------------------------------------------------