# Racket v8.16 is now available

**URL:** <https://racket.discourse.group/t/racket-v8-16-is-now-available/3600>\
**Category:** Announcements\
**Tags:** release\
**Created:** [March 2, 2025, 11:16pm UTC](https://racket.discourse.group/t/racket-v8-16-is-now-available/3600 "2025-03-02T23:16:55Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![jbclements](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/jbclements/32/11_2.png) [@jbclements](https://racket.discourse.group/u/jbclements)\
**Post date:** [March 2, 2025, 11:16pm UTC](https://racket.discourse.group/t/racket-v8-16-is-now-available/3600/1 "2025-03-02T23:16:55Z")

</div>

We are pleased to announce Racket v8.16 is now available from [https://download.racket-lang.org/](https://download.racket-lang.org).

## As of this release:

- Racket has expanded support for immutable and mutable treelists:
  - A variety of new treelist utility functions are available: [`treelist-filter`](https://docs.racket-lang.org/reference/treelist.html#%28def._%28%28lib._racket%2Ftreelist..rkt%29._treelist-filter%29%29), [`treelist-flatten`](https://docs.racket-lang.org/reference/treelist.html#%28def._%28%28lib._racket%2Ftreelist..rkt%29._treelist-flatten%29%29), et cetera.
  - The [`mutable-treelist-prepend!`](https://docs.racket-lang.org/reference/treelist.html#%28def._%28%28lib._racket%2Fmutable-treelist..rkt%29._mutable-treelist-prepend%21%29%29) function allows prepending to mutable treelists.
  - [Mutable treelists](https://docs.racket-lang.org/reference/treelist.html#%28part._.Mutable_.Treelists%29) are [serializable](https://docs.racket-lang.org/reference/serialization.html).

- The [`serialize-structs`](https://docs.racket-lang.org/reference/serialization.html#%28mod-path._racket%2Fserialize-structs%29) module allows the minimization of dependencies by providing only a handful of core forms.
- The [`flbit-field`](https://docs.racket-lang.org/reference/flonums.html#%28def._%28%28lib._racket%2Fflonum..rkt%29._flbit-field%29%29) function allows access to the binary representation of IEEE floating-point numbers.
- The top-left search box in the [documentation](https://docs.racket-lang.org/index.html) works once more.
- The [XML reader](https://docs.racket-lang.org/xml/index.html#%28part._.Reading_and_.Writing_.X.M.L%29) is 2-3x faster on inputs with long CDATA and comments, and avoids some internal contract checks to obtain a 25% speedup on large documents generally.
- The [pregexp syntax includes "\X" to match a grapheme cluster](https://docs.racket-lang.org/reference/regexp.html#(part._regexp-syntax)), following Perl and PCRE.
- The [`read-json*`](https://docs.racket-lang.org/json/index.html#%28def._%28%28submod._%28lib._json%2Fmain..rkt%29._for-extension%29._read-json%2A%29%29) and [`write-json*`](https://docs.racket-lang.org/json/index.html#%28def._%28%28submod._%28lib._json%2Fmain..rkt%29._for-extension%29._write-json%2A%29%29) functions allow customization of the Racket representation of JSON elements, eliminating the need for a separate "translation" pass.
- Racket has new port I/O functions:
  - The [`open-input-nowhere`](https://docs.racket-lang.org/reference/port-lib.html#%28def._%28%28lib._racket%2Fport..rkt%29._open-input-nowhere%29%29) function creates an empty input port.
  - The [`pipe-port?`](https://docs.racket-lang.org/reference/pipeports.html#%28def._%28%28quote._~23~25kernel%29._pipe-port~3f%29%29) function makes it possible to determine whether a port is created by [`make-pipe`](https://docs.racket-lang.org/reference/pipeports.html#%28def._%28%28quote._~23~25kernel%29._make-pipe%29%29).
  - The [`port-file-stat`](https://docs.racket-lang.org/reference/file-ports.html#%28def._%28%28quote._~23~25kernel%29._port-file-stat%29%29) function allows gathering information about the file that is the source or target of a file-stream port.

- A [revised representation](https://racket.discourse.group/t/fixnum-slow-despite-docs/3409/6) of pointers improves the performance of foreign function calls. As a result, [`ptr-ref`](https://docs.racket-lang.org/foreign/foreign_pointer-funcs.html#%28def._%28%28quote._~23~25foreign%29._ptr-ref%29%29) and [`ptr-set!`](https://docs.racket-lang.org/foreign/foreign_pointer-funcs.html#%28def._%28%28quote._~23~25foreign%29._ptr-set%21%29%29) are substantially faster.
- In anticipation of the fifteenth [RacketCon](https://con.racket-lang.org), the [`fifteenth`](https://pre-release.racket-lang.org/doc/reference/pairs.html#%28def._%28%28lib._racket%2Flist..rkt%29._fifteenth%29%29) function returns the fifteenth element of a list.
- Racket has an improved multi-line convention for error messages.
- The [`db` library](https://docs.racket-lang.org/db/index.html) allows [`prepare`](https://docs.racket-lang.org/db/query-api.html#%28def._%28%28lib._db%2Fbase..rkt%29._prepare%29%29) on virtual statements.
- The [`student-t` distribution](https://docs.racket-lang.org/math/Real_Distribution_Families.html#%28part._.Student-t_.Distributions%29) is part of the [`math/distributions` library](https://docs.racket-lang.org/math/dist.html).
- [Expeditor](https://docs.racket-lang.org/expeditor/index.html) supports customizing the prompt, using the [`#:prompt` keyword argument to `call-with-expeditor`](https://docs.racket-lang.org/expeditor/Expeditor_API.html#%28def._%28%28lib._expeditor%2Fmain..rkt%29._call-with-expeditor%29%29).
- There is a [guide to adding internationalization for a new (human) language.](https://racket.discourse.group/t/advent-2024-day-translate-drracket-interface-in-your-language/3407)
- Optimizations to racket/profile improve asymptotic speed for very large call graphs.
- The `#lang htdp/asl` language incorporates [Graphical Debugger](https://docs.racket-lang.org/drracket/debugger.html#%28part._.Debugger_.Buttons%29) support.
- There is lots of new documentation, and many defects repaired!

## Thank you

The following people contributed to this release:

a11ce, Alex Knauth, Alexander Shopov, Alexis King, Andrew Mauer-Oats, Anthony Carrico, Bert De Ketelaere, Bob Burger, Bogdan Popa, D. Ben Knoble, David Van Horn, Gustavo Massaccesi, halfminami, Hao Zhang, Jacqueline Firth, Jinser Kafka, JJ, John Clements, Jörgen Brandt, Kraskaska, lafirest, Laurent Orseau, lukejianu, Marc Nieper-Wißkirchen, Matthew Flatt, Matthias Felleisen, mehbark, Mike Sperber, Noah Ma, Onorio Catenacci, Oscar Waddell, Pavel Panchekha, payneca, Robby Findler, Sam Phillips, Sam Tobin-Hochstadt, Shu-Hung You, Sorawee Porncharoenwase, Stephen De Gabrielle, Wing Hei Chan, Yi Cao, and ZhangHao.

_Racket is a community developed open source project and we welcome new contributors. See [racket/README.md](https://github.com/racket/racket/blob/master/README.md#contributing) to learn how you can be a part of this amazing project._

## Feedback Welcome

Questions and discussion welcome at the Racket community [Discourse](https://racket.discourse.group/invites/VxkBcXY7yL) or [Discord](https://discord.gg/6Zq8sH5)

## Please share

If you can - please help get the word out to users and platform specific repo packagers

```scheme
Racket - the Language-Oriented Programming Language - version 8.16 is now available from https://download.racket-lang.org

See https://blog.racket-lang.org/2025/03/racket-v8-16.html for the release announcement and highlights.

```

[![Racket Discourse](https://img.shields.io/discourse/users?label=Discuss%20on%20Racket%20Discourse&logo=racket&server=https%3A%2F%2Fracket.discourse.group)](https://racket.discourse.group/invites/VxkBcXY7yL) [![Racket Discord](https://img.shields.io/discord/571040468092321801?label=Chat%20on%20Racket%20Discord&logo=racket)](https://discord.gg/6Zq8sH5)  
[![Mastodon Follow](https://img.shields.io/mastodon/follow/110503403357821549?domain=https%3A%2F%2Ffunctional.cafe&logo=racket&label=@racketlang@functional.cafe)](https://functional.cafe/@racketlang) [![Follow Racket on Bluesky](https://img.shields.io/badge/Bluesky-0285FF?logo=bluesky&logoColor=fff&label=Racket%20on&color=0285FF)](https://bsky.app/profile/racket-lang.org)

---

<div class="post-metadata">

**Author:** ![benknoble](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/benknoble/32/16_2.png) [@benknoble](https://racket.discourse.group/u/benknoble)\
**Post date:** [March 3, 2025, 5:51pm UTC](https://racket.discourse.group/t/racket-v8-16-is-now-available/3600/2 "2025-03-03T17:51:32Z")

</div>

Apologies if this is not the right place to reply: looks like the  
Racket Homebrew package is already updated!

> **[racket](https://formulae.brew.sh/cask/racket#default)**
>
> Homebrew’s package index

---

<div class="post-metadata">

**Author:** ![zyga](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/zyga/32/585_2.png) [@zyga](https://racket.discourse.group/u/zyga)\
**Post date:** [March 3, 2025, 9:42pm UTC](https://racket.discourse.group/t/racket-v8-16-is-now-available/3600/3 "2025-03-03T21:42:16Z")

</div>

I've updated the `racket` [snap package](https://snapcraft.io/racket). There are two new tracks, one for the 8.15 and one for the 8.16 release. The latest track now also contains 8.16 and all existing installations can refresh to that version.

---

<div class="post-metadata">

**Author:** ![bakgatviooldoos](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/bakgatviooldoos/32/1381_2.png) [@bakgatviooldoos](https://racket.discourse.group/u/bakgatviooldoos)\
**Post date:** [March 4, 2025, 8:07am UTC](https://racket.discourse.group/t/racket-v8-16-is-now-available/3600/4 "2025-03-04T08:07:42Z")

</div>

Yay, the Windows installer doesn't complain when uninstalling the old version of Racket anymore! Usually, a folder or two would remain and cause the process to declare incompletion, but no more. (Although, this could be coincidence, but a welcome one nonetheless).
