feat: support React 19 - #1441
Conversation
Widens the React peer range to allow React 19 alongside 18, and moves the development environment to React 19. Adds a CI job that installs React 18 over the top and runs type checking and the test suite against it, so the oldest supported version stays covered while development happens on the newest one.
✅ Deploy Preview for doist-typist ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
doistbot
left a comment
There was a problem hiding this comment.
Widens the React peer range to ^18.0.0 || ^19.0.0, moves the dev environment to React 19, and adds a well-constructed restore-only-cache CI job to keep React 18 type-checking and tests covered.
Few things worth tightening:
- Pin the compatibility job's React 18 packages to the actual minimum versions (e.g.
react@18.0.0,react-dom@18.0.0) — bare@18specs resolve to the latest 18 release, so 18.0.x consumers go untested despite the job's stated purpose. - After the single React 18 install, run type checking and tests concurrently with
run-p check:types testto shorten the job's wall-clock time.
I also included a few optional follow-up notes in the details below.
Optional follow-up note (1)
.github/workflows/check-ci-validation.yml:161:
check:typeshasnoEmitand the test script does not depend on it, so these two validations can run concurrently after the single React 18 install. Running them withrun-p check:types testwould shorten the compatibility job's wall-clock time without duplicating setup work.
|
On the optional note about running the two validations concurrently with `run-p check:types test`: skipping it. Type checking takes ~0.5s and the tests ~1.4s, against a job whose runtime is dominated by the install, so the gain is under a second. Not worth interleaving the output and making failures harder to read. |
## [16.1.0](v16.0.0...v16.1.0) (2026-07-27) ### Features * support React 19 ([#1441](#1441)) ([a3c6d80](a3c6d80))
|
🎉 This PR is included in version 16.1.0 🎉 The release is available on: Your semantic-release bot 📦🚀 |
Overview
Widens the React peer range to
^18.0.0 || ^19.0.0and moves the development environment to React 19.Today
@doist/typistpeers on React 18 only, which blocks consumers from even trying React 19: npm fails to resolve.@doist/reactistalready allows both (>=18.0.0 <20.0.0), so Typist is the remaining gate. Bothtodoist-webandcomms-webare still on React 18.3.1, so nothing changes for them right now.Typist barely touches React — a single
forwardRefcomponent and a handful of hooks, with Tiptap handling the editor integration, and@tiptap/reactalready supports 17, 18, and 19. The built output is byte-for-byte identical whether it is compiled against React 18 or 19 types.Since development now happens on React 19, a
React 18 Compatibilityjob installs React 18 over the top of a normal install and runs the same type checking and test suite against it. That keeps the oldest supported version covered without aliased packages, extra configs, or duplicated scripts. When React 18 support is eventually dropped, deleting that job is the only cleanup needed. The job restores the sharednode_modulescache but never saves it, so the downgraded tree cannot leak into the other jobs.Replaces #1325, which bumped the same dependencies but left React 18 untested, and would not have published the widened range from a
chorecommit.PR Checklist
Test plan