# Release Announcement for v8.18

**URL:** <https://racket.discourse.group/t/release-announcement-for-v8-18/3900>\
**Category:** Internals\
**Tags:** release-management, release\
**Created:** [August 11, 2025, 12:48pm UTC](https://racket.discourse.group/t/release-announcement-for-v8-18/3900 "2025-08-11T12:48:47Z")\
**Posts on this page:** 20\
**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:** [August 11, 2025, 12:48pm UTC](https://racket.discourse.group/t/release-announcement-for-v8-18/3900/1 "2025-08-11T12:48:47Z")

</div>

The release announcement sketch that I have so far is below. Please mail me new items and/or edits.

Please phrase announcements using complete sentences and avoid the word "now".

* * *

## As of this release:

- Racket uses Unicode 16.0 for character and string operations.
- XML structures are serializable.
- Scribble's HTML generation conforms better to modern standards.
- The `redex-check` default generation strategy always uses random generation to supplement the enumerator.
- DrRacket supports the use of shift-tab to go backward to previous indentation positions.
- The macro stepper supports the string-constants library, allowing internationalization of the stepper itself.
- The `struct` form supports `#:properties prop-alist-expr`, making it more convenient to attach multiple property values to a structure type.
- Build-system improvements support containers registered at Docker Hub to build for all platforms that have downloads form the main Racket download site; improvements also support Unix-style builds for Mac OS in the style of MacPorts.
- The `expt` function produces a more accurate result when its first argument is a flonum and its second argument is an exact integer that has no equivalent flonum representation than it did in prior versions.
- TCP ports use `SO_KEEPALIVE` correctly.
- The Uninterruptible mode allows futures-based computations to run both concurrently and uninterrupted in an atomic-like mode.
- The `net/imap` library supports IMAP's `move` operation.
- There are many other repairs and documentation improvements!

Package regressions:

> <https://github.com/racket/racket/issues/5311>
>
> \### Build Failures
> 
> Many of these failures are for packages whose source is curr…ently unobtainable, and it doesn't appear that any of them should delay the release. Checking them off as non-blockers.
> 
> \- \[x\] pluto2 https://plt.cs.northwestern.edu/release-pkg-build/server/built/fail/pluto2.txt (source unavailable) (package now removed)
> \- \[x\] s-lib https://plt.cs.northwestern.edu/release-pkg-build/server/built/fail/s-lib.txt (source unavailable
> \- \[x\] sau-cptr-405 https://plt.cs.northwestern.edu/release-pkg-build/server/built/fail/sau-cptr-405.txt (source unavailable) (package now removed)
> \- \[x\] taino https://plt.cs.northwestern.edu/release-pkg-build/server/built/fail/taino.txt (source unavailable)
> \- \[x\] vscode-dark-theme https://plt.cs.northwestern.edu/release-pkg-build/server/built/fail/vscode-dark-theme.txt (source unavailable)
> 
> \### Test Failures
> 
> \### Dependency Failures
> \- \[x\] rkdf https://plt.cs.northwestern.edu/release-pkg-build/server/built/deps/rkdf.txt (this does not appear in the latest run)
> \- \[x\] rkdf-lib https://plt.cs.northwestern.edu/release-pkg-build/server/built/deps/rkdf-lib.txt (this does not appear in the latest run)
> 
> \### Other Failures

* * *

---

<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:** [August 11, 2025, 12:50pm UTC](https://racket.discourse.group/t/release-announcement-for-v8-18/3900/2 "2025-08-11T12:50:24Z")

</div>

(N.B. just made small edit "tab" -\> "indentation" in above.)

---

<div class="post-metadata">

**Author:** ![LiberalArtist](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/liberalartist/32/151_2.png) [@LiberalArtist](https://racket.discourse.group/u/LiberalArtist)\
**Post date:** [August 11, 2025, 1:59pm UTC](https://racket.discourse.group/t/release-announcement-for-v8-18/3900/3 "2025-08-11T13:59:29Z")

</div>

Should the announcement mention the end of pre-built BC downloads, and other changes/additions to the set of downloads offered?

If so, I'd probably add that to the top of the list, and I might move the Unicode update toward the bottom, as noteworthy but routine.

> [@jbclements](#):
>
> The Uninterruptible mode allows futures-based computations to run both concurrently and uninterrupted in an atomic-like mode.

Stylistically, I don't like `The Uninteruptable mode`. The docs capitalize "uninteruptable" only at the beginning of a sentence. I'd probably use italcs or quotation marks. Maybe something like:

- Unsafe code can use “uninteruptable mode” instead of “atomic mode” to allow futures to run concurrently while preventing interruptions from other threads.

---

<div class="post-metadata">

**Author:** ![encomer](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/encomer/32/280_2.png) [@encomer](https://racket.discourse.group/u/encomer)\
**Post date:** [August 11, 2025, 10:27pm UTC](https://racket.discourse.group/t/release-announcement-for-v8-18/3900/4 "2025-08-11T22:27:28Z")

</div>

Just a minor typo in **Build-system improvements** paragraph: It says "downloads _form_" but should say "downloads _from_". Please verify. _Thank you for all your fine work_.

---

<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:** [August 12, 2025, 3:23pm UTC](https://racket.discourse.group/t/release-announcement-for-v8-18/3900/5 "2025-08-12T15:23:38Z")

</div>

Well, aside from my nit-pick that "uninterruptible" has an "i" before the "b", a fact I just learned and am eager to share, I support this rewording, especially because I was very uncertain about the accuracy of my own summary. Thanks!

Um... but now I have a question about the use of "unsafe" in this context. Would it be any less accurate to remove the word unsafe, and just say "Code can use ..." ?

I agree that the removal of BC builds should probably be mentioned, along with the new Linux builds.

Here's what I have now:

## As of this release:

- The [racket-lang.org](http://racket-lang.org) website no longer distributes Racket BC bundles, but it includes pre-built bundles for two flavors of ARM linux, AArch64 and 32-bit ARMv6 VFP.
- Racket uses Unicode 16.0 for character and string operations.
- XML structures are serializable.
- Scribble's HTML generation conforms better to modern standards.
- The `redex-check` default generation strategy always uses random generation to supplement the enumerator.
- DrRacket supports the use of shift-tab to go backward to previous indentation positions.
- The macro stepper supports the string-constants library, allowing internationalization of the stepper itself.
- The `struct` form supports `#:properties prop-alist-expr`, making it more convenient to attach multiple property values to a structure type.
- Build-system improvements support containers registered at Docker Hub to build for all platforms that have downloads from the main Racket download site; improvements also support Unix-style builds for Mac OS in the style of MacPorts.
- The `expt` function produces a more accurate result when its first argument is a flonum and its second argument is an exact integer that has no equivalent flonum representation than it did in prior versions.
- TCP ports use `SO_KEEPALIVE` correctly.
- Unsafe code can use “uninterruptible mode” instead of “atomic mode” to allow futures to run concurrently while preventing interruptions from other threads.
- The Uninterruptable mode allows futures-based computations to run both concurrently and uninterrupted in an atomic-like mode.
- The `net/imap` library supports IMAP's `move` operation.
- There are many other repairs and documentation improvements!

---

<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:** [August 12, 2025, 3:24pm UTC](https://racket.discourse.group/t/release-announcement-for-v8-18/3900/6 "2025-08-12T15:24:11Z")

</div>

got this one too, many things

---

<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:** [August 12, 2025, 4:38pm UTC](https://racket.discourse.group/t/release-announcement-for-v8-18/3900/7 "2025-08-12T16:38:45Z")

</div>

> [@jbclements](#):
>
> - Unsafe code can use “uninterruptible mode” instead of “atomic mode” to allow futures to run concurrently while preventing interruptions from other threads.
> - The Uninterruptable mode allows futures-based computations to run both concurrently and uninterrupted in an atomic-like mode.

Spelling 😉 but if I re-read carefully, I think we intended to drop the second bullet altogether?

---

<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:** [August 12, 2025, 5:59pm UTC](https://racket.discourse.group/t/release-announcement-for-v8-18/3900/8 "2025-08-12T17:59:23Z")

</div>

Glug... changed upstream, didn't re-generate. Here goes, straight from the source, and including contributors as well:

## As of this release:

- The [racket-lang.org](http://racket-lang.org) website no longer distributes Racket BC bundles, but it includes pre-built bundles for two flavors of ARM linux, AArch64 and 32-bit ARMv6 VFP.
- XML structures are serializable.
- Scribble's HTML generation conforms better to modern standards.
- Racket uses Unicode 16.0 for character and string operations.
- The `redex-check` default generation strategy always uses random generation to supplement the enumerator.
- DrRacket supports the use of shift-tab to go backward to previous indentation positions.
- The macro stepper supports the string-constants library, allowing internationalization of the stepper itself.
- The `struct` form supports `#:properties prop-alist-expr`, making it more convenient to attach multiple property values to a structure type.
- Build-system improvements support containers registered at Docker Hub to build for all platforms that have downloads from the main Racket download site; improvements also support Unix-style builds for Mac OS in the style of MacPorts.
- The `expt` function produces a more accurate result when its first argument is a flonum and its second argument is an exact integer that has no equivalent flonum representation than it did in prior versions.
- TCP ports use `SO_KEEPALIVE` correctly.
- Unsafe code can use “uninterruptible mode” instead of “atomic mode” to allow futures to run concurrently while preventing interruptions from other threads.
- The `net/imap` library supports IMAP's `move` operation.
- There are many other repairs and documentation improvements!

## Thank you

The following people contributed to this release:

Bob Burger, Bogdan Popa, Carl Gay, Chloé Vulquin, D. Ben Knoble, Gustavo Massaccesi, Jacqueline Firth, Jade Sailor, Jarhmander, Jason Hemann, Jens Axel Søgaard, Joel Dueck, John Clements, jyn, Jörgen Brandt, Mao Yifu, Marc Nieper-Wißkirchen, Matthew Flatt, Matthias Felleisen, Mike Sperber, Noah Ma, paralogismos, Pavel Panchekha, Philip McGrath, Robby Findler, Ryan Culpepper, Sam Tobin-Hochstadt, Shalok Shalom, Steve Byan, Vincent Lee, Wing Hei Chan, and ZC Findler.

---

<div class="post-metadata">

**Author:** ![LiberalArtist](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/liberalartist/32/151_2.png) [@LiberalArtist](https://racket.discourse.group/u/LiberalArtist)\
**Post date:** [August 12, 2025, 9:09pm UTC](https://racket.discourse.group/t/release-announcement-for-v8-18/3900/9 "2025-08-12T21:09:03Z")

</div>

> [@jbclements](#):
>
> Um... but now I have a question about the use of "unsafe" in this context. Would it be any less accurate to remove the word unsafe, and just say "Code can use ..." ?

It would in a sense be true, but any code that used uninterruptible mode would become unsafe, because uninterruptible mode, like atomic mode, is unsafe.

---

<div class="post-metadata">

**Author:** ![samth](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/samth/32/3_2.png) [@samth](https://racket.discourse.group/u/samth)\
**Post date:** [August 13, 2025, 9:22pm UTC](https://racket.discourse.group/t/release-announcement-for-v8-18/3900/10 "2025-08-13T21:22:58Z")

</div>

I think the "Build-system improvements" bullet is too brief; I don't understand what it refers to.

---

<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:** [August 15, 2025, 9:41pm UTC](https://racket.discourse.group/t/release-announcement-for-v8-18/3900/11 "2025-08-15T21:41:32Z")

</div>

Matthew has built infrastructure in the distro-build library and (I believe) created a bunch of new docker images, to make it vastly more convenient to run builds using docker exclusively, eliminating the need to set up and maintain build machines that use old, sometimes insecure operating systems and are open on the internet.

Perhaps the key missing element here is a reference to the distro-build library? Maybe something like this:

New code in the distro-build library and new containers registered at Docker Hub make it possible  
to run racket build farms without setting up and maintaining machines using various operating systems. These improvements also support Unix-style builds for Mac OS in the style of MacPorts.

?

Build-system improvements support containers registered at Docker Hub to build for all platforms that have downloads from the main Racket download site; improvements also support Unix-style builds for Mac OS in the style of MacPorts.

---

<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:** [August 15, 2025, 9:42pm UTC](https://racket.discourse.group/t/release-announcement-for-v8-18/3900/12 "2025-08-15T21:42:18Z")

</div>

Okay, many thanks, I might understand slightly better. I will leave the word "Unsafe" in there!

---

<div class="post-metadata">

**Author:** ![samth](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/samth/32/3_2.png) [@samth](https://racket.discourse.group/u/samth)\
**Post date:** [August 15, 2025, 9:54pm UTC](https://racket.discourse.group/t/release-announcement-for-v8-18/3900/13 "2025-08-15T21:54:57Z")

</div>

This is only relevant for users of distro-build, right? That's a very small set of people. In which case a good bullet might be:

The distro-build package has improved support for building using docker images.

---

<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:** [August 16, 2025, 1:32pm UTC](https://racket.discourse.group/t/release-announcement-for-v8-18/3900/14 "2025-08-16T13:32:21Z")

</div>

This works for me, though I'd be inclined to replace "improved support" with "new infrastructure"; there's a whole new layer to the build system, essentially.

- The distro-build package has new infrastructure for building using docker images.

Does that make sense to y'all?

---

<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:** [August 16, 2025, 1:36pm UTC](https://racket.discourse.group/t/release-announcement-for-v8-18/3900/15 "2025-08-16T13:36:54Z")

</div>

> [@jbclements](#):
>
> The distro-build package has new infrastructure for building using docker images.

Or perhaps:

The distro-build package has new infrastructure for build farms using docker images.

---

<div class="post-metadata">

**Author:** ![samth](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/samth/32/3_2.png) [@samth](https://racket.discourse.group/u/samth)\
**Post date:** [August 18, 2025, 6:24pm UTC](https://racket.discourse.group/t/release-announcement-for-v8-18/3900/16 "2025-08-18T18:24:32Z")

</div>

Either of those seem fine.

---

<div class="post-metadata">

**Author:** ![spdegabrielle](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/spdegabrielle/32/95_2.png) [@spdegabrielle](https://racket.discourse.group/u/spdegabrielle)\
**Post date:** [August 20, 2025, 11:09pm UTC](https://racket.discourse.group/t/release-announcement-for-v8-18/3900/17 "2025-08-20T23:09:51Z")

</div>

> [@jbclements](#):
>
> The `struct` form supports `#:properties prop-alist-expr`, making it more convenient to attach multiple property values to a structure type.

Shouldn't this be

> - The `struct` form supports `#:properties prop-list-expr`, making it more convenient to attach multiple property values to a structure type.

The commit comment agrees " struct: add `#:properties prop-alist-expr` option" [struct: add `#:properties prop-alist-expr` option · racket/racket@bf08ef2 · GitHub](https://github.com/racket/racket/commit/bf08ef2e52efacef41779c63df8b793fafcf8cdf)

But the docs have `#:properties prop-list-expr`

 ![](https://global.discourse-cdn.com/free1/uploads/racket/original/2X/b/bce2d1f1f14e6af5463a495bc4846f6ec60a0d46.png)

> The #:properties option, which can be supplied multiple times, accepts multiple properties and their values as an association list.

I feel this is a small inconsistency - but should it be changed?

Stephen

---

<div class="post-metadata">

**Author:** ![ryanc](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/ryanc/32/71_2.png) [@ryanc](https://racket.discourse.group/u/ryanc)\
**Post date:** [August 21, 2025, 12:38am UTC](https://racket.discourse.group/t/release-announcement-for-v8-18/3900/18 "2025-08-21T00:38:16Z")

</div>

The inconsistency doesn't bother me much, especially at this stage. Either way is fine with me.

One other issue: I noticed the "Thanks" list of names in the draft announcement is formatted as a list of separate lines rather than as a single paragraph. (To clarify: I'm talking about the draft post here on Discourse.)

---

<div class="post-metadata">

**Author:** ![spdegabrielle](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/spdegabrielle/32/95_2.png) [@spdegabrielle](https://racket.discourse.group/u/spdegabrielle)\
**Post date:** [August 21, 2025, 1:13pm UTC](https://racket.discourse.group/t/release-announcement-for-v8-18/3900/19 "2025-08-21T13:13:27Z")

</div>

Thanks  
I’ve fixed the line breaks thing. Sadly we are trapped between soft and hard wrapping.  
S.

---

<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:** [August 21, 2025, 2:53pm UTC](https://racket.discourse.group/t/release-announcement-for-v8-18/3900/20 "2025-08-21T14:53:11Z")

</div>

I may be misunderstanding, but I think that I just kind of coincidentally fixed this a few weeks ago; that is, I think the markdown generated for the post should contain a single long line for the contributors. I'm guessing I did that after posting the draft announcement. Perhaps I'm mistaken, I'll go do some digging.

[Next page](https://racket.discourse.group/t/release-announcement-for-v8-18/3900.md?page=2)
