# Release Announcement for v9.3

**URL:** <https://racket.discourse.group/t/release-announcement-for-v9-3/4334>\
**Category:** Internals\
**Tags:** release-management\
**Created:** [July 28, 2026, 3:30am UTC](https://racket.discourse.group/t/release-announcement-for-v9-3/4334 "2026-07-28T03:30:23Z")\
**Posts on this page:** 14\
**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:** [July 28, 2026, 3:30am UTC](https://racket.discourse.group/t/release-announcement-for-v9-3/4334/1 "2026-07-28T03:30:23Z")

</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:

- The `raco setup` command can generate markdown documentation, using the `--doc-markdown` option.
- A number of changes address the teaching "#lang" teaching languages, the ones chosen by the use of a "#lang" first line in conjunction with the "The Racket Language" selection in the Language dialog:
  - These languages can specify DrRacket annotation values, to enable test coverage by default.
  - These languages display coverage information by default in DrRacket.
  - These languages display source-code locations in the same way as the menu-based \*SL languages.

- 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.

Link to pkg-build regressions / blockers issue: [Release Regressions for 9.3 · Issue #5546 · racket/racket · GitHub](https://github.com/racket/racket/issues/5546)

---

<div class="post-metadata">

**Author:** ![EmEf](https://avatars.discourse-cdn.com/v4/letter/e/53a042/32.png) [@EmEf](https://racket.discourse.group/u/EmEf)\
**Post date:** [July 28, 2026, 8:28pm UTC](https://racket.discourse.group/t/release-announcement-for-v9-3/4334/2 "2026-07-28T20:28:48Z")

</div>

I am sorry but as someone who is producer and client here, I don’t get what these bullets are trying to convey.

Also, the current cmd-R menu does _not_ include options to select `#lang htdp/bsl` or `#lang schreibedeinprogram/isl`  
The users just see selectable racket and scribble options. So if that’s what the prose tries to say, it’s inaccurate.  
We should add these teaching options and make them visible, so that kids with weak keyboarding skills are  
supposed to use dr are saved some work.

Let’s wait for @Robby’s list of differences. Perhaps that will help clarify what we should advertise.

— Matthias

---

<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, 2026, 3:21am UTC](https://racket.discourse.group/t/release-announcement-for-v9-3/4334/3 "2026-08-11T03:21:37Z")

</div>

Okay, following discussion I have this, let me know what y'all think (different only in the second bullet):

## As of this release:

- The `raco setup` command can generate markdown documentation, using the `--doc-markdown` option.
- The "#lang" teaching languages have reached parity with the ones chosen using the Language dialog, and are the recommended choice. Specifically:
  - These languages can specify DrRacket annotation values, to enable test coverage by default.
  - These languages display coverage information by default in DrRacket.
  - These languages display source-code locations in the same way as the menu-based \*SL languages.

- 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.

---

<div class="post-metadata">

**Author:** ![robby](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/robby/32/7_2.png) [@robby](https://racket.discourse.group/u/robby)\
**Post date:** [August 11, 2026, 3:00pm UTC](https://racket.discourse.group/t/release-announcement-for-v9-3/4334/4 "2026-08-11T15:00:51Z")

</div>

How about "Specifically: " =\> "The improvements in this release specifically are:" or similar and adjust the bullets to match? (this is in the #lang item)

---

<div class="post-metadata">

**Author:** ![EmEf](https://avatars.discourse-cdn.com/v4/letter/e/53a042/32.png) [@EmEf](https://racket.discourse.group/u/EmEf)\
**Post date:** [August 11, 2026, 3:01pm UTC](https://racket.discourse.group/t/release-announcement-for-v9-3/4334/5 "2026-08-11T15:01:12Z")

</div>

On Aug 10, 2026, at 10:31 PM, John Clements [notifications@racket.discoursemail.com](mailto:notifications@racket.discoursemail.com) wrote that

“””  
The "#lang" teaching languages have reached parity with the ones chosen using the Language dialog, and are the recommended choice. Specifically:

- These languages can specify DrRacket annotation values, to enable test coverage by default.
- These languages display coverage information by default in DrRacket.
- These languages display source-code locations in the same way as the menu-based \*SL languages.  
“””

1. I would cut the three sub-bullets (starting with “Specifically”). Parity implies them, and we want to keep the announcements concise.

2. I would add "(BSL, …, ISL+; plus DeinProgram)” to the right of “teaching languages”. This should let readers know quickly for whim this item matters (or not).

Thanks — Matthias

---

<div class="post-metadata">

**Author:** ![mike](https://avatars.discourse-cdn.com/v4/letter/m/58f4c7/32.png) [@mike](https://racket.discourse.group/u/mike)\
**Post date:** [August 11, 2026, 3:26pm UTC](https://racket.discourse.group/t/release-announcement-for-v9-3/4334/6 "2026-08-11T15:26:44Z")

</div>

> 1. I would cut the three sub-bullets (starting with “Specifically”). Parity implies them, and we want to keep the announcements concise.

Either way is fine with me,

> 1. I would add "(BSL, …, ISL+; plus DeinProgram)” to the right of “teaching languages”. This should let readers know quickly for whim this item matters (or not).

Yes.

---

<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, 2026, 9:11am UTC](https://racket.discourse.group/t/release-announcement-for-v9-3/4334/7 "2026-08-12T09:11:10Z")

</div>

Okay, sounds good. I now have

## As of this release:

- 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.

Any final edits?

---

<div class="post-metadata">

**Author:** ![shhyou](https://avatars.discourse-cdn.com/v4/letter/s/ccd318/32.png) [@shhyou](https://racket.discourse.group/u/shhyou)\
**Post date:** [August 14, 2026, 9:42am UTC](https://racket.discourse.group/t/release-announcement-for-v9-3/4334/8 "2026-08-14T09:42:48Z")

</div>

> [@jbclements](#):
>
> - The "#lang" teaching languages

> [@jbclements](#):
>
> - The `file/zip` package provides a new mechanism

In the generated markdown file ([blog post draft · racket/racket-lang-org@ff17db6 · GitHub](https://github.com/racket/racket-lang-org/commit/ff17db677a7762d475dd98cbfc973b62430f5d3a)), "teaching languages" and "new machanism" got quoted by back-ticks.

Actually, many links in the file seem to contain extra back-ticks in their text part, giving texts like `[``raco setup``](...)`.

> [@jbclements](#):
>
> - Uses of `(tcp-listen 0)` will retry when it fails with "address in use".

A different typo in the draft on GitHub: there's an extra pair of back-ticks around "(tcp-listen)".

---

<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 14, 2026, 12:09pm UTC](https://racket.discourse.group/t/release-announcement-for-v9-3/4334/9 "2026-08-14T12:09:40Z")

</div>

mea culpa, failure to push my fixes on that repo, should be fixed now.

---

<div class="post-metadata">

**Author:** ![shhyou](https://avatars.discourse-cdn.com/v4/letter/s/ccd318/32.png) [@shhyou](https://racket.discourse.group/u/shhyou)\
**Post date:** [August 14, 2026, 12:31pm UTC](https://racket.discourse.group/t/release-announcement-for-v9-3/4334/10 "2026-08-14T12:31:59Z")

</div>

The quotes around tcp-listen is still there.

---

<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 14, 2026, 1:43pm UTC](https://racket.discourse.group/t/release-announcement-for-v9-3/4334/11 "2026-08-14T13:43:16Z")

</div>

I don't think they are? BUT, I do see what appears to be a rendering quirk whereby a markdown link inside parentheses is not rendered as a link. Github and pygments appear to do the same thing, so I'll have to set up that link differently.

---

<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 14, 2026, 1:49pm UTC](https://racket.discourse.group/t/release-announcement-for-v9-3/4334/12 "2026-08-14T13:49:06Z")

</div>

okay, I moved the link outward, so it contains the full parenthesized call to `tcp-listen`, and checked the render, and it looks good to me. Hopefully this is the issue you were seeing, and it's now fixed?

---

<div class="post-metadata">

**Author:** ![shhyou](https://avatars.discourse-cdn.com/v4/letter/s/ccd318/32.png) [@shhyou](https://racket.discourse.group/u/shhyou)\
**Post date:** [August 14, 2026, 3:31pm UTC](https://racket.discourse.group/t/release-announcement-for-v9-3/4334/13 "2026-08-14T15:31:59Z")

</div>

Yup! That was what I saw and it looks good on GitHub (except that blog has not been updated yet).

---

<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 14, 2026, 8:42pm UTC](https://racket.discourse.group/t/release-announcement-for-v9-3/4334/14 "2026-08-14T20:42:20Z")

</div>

thanks, running `racket sync.rkt` right now.
