Skip to content

feat: support React 19 - #1441

Merged
rfgamaral merged 2 commits into
mainfrom
ricardo/support-react-19
Jul 27, 2026
Merged

feat: support React 19#1441
rfgamaral merged 2 commits into
mainfrom
ricardo/support-react-19

Conversation

@rfgamaral

Copy link
Copy Markdown
Member

Overview

Widens the React peer range to ^18.0.0 || ^19.0.0 and moves the development environment to React 19.

Today @doist/typist peers on React 18 only, which blocks consumers from even trying React 19: npm fails to resolve. @doist/reactist already allows both (>=18.0.0 <20.0.0), so Typist is the remaining gate. Both todoist-web and comms-web are still on React 18.3.1, so nothing changes for them right now.

Typist barely touches React — a single forwardRef component and a handful of hooks, with Tiptap handling the editor integration, and @tiptap/react already 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 Compatibility job 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 shared node_modules cache 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 chore commit.

PR Checklist

Test plan

  • Observe that CI is green, which covers static analysis, tests, and the build on React 19, plus type checking and tests on React 18
  • Open the Netlify preview Storybook and confirm the editor stories behave as expected under React 19

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

netlify Bot commented Jul 27, 2026

Copy link
Copy Markdown

Deploy Preview for doist-typist ready!

Name Link
🔨 Latest commit 49e24b9
🔍 Latest deploy log https://app.netlify.com/projects/doist-typist/deploys/6a679e0256f5b80008aa761b
😎 Deploy Preview https://deploy-preview-1441--doist-typist.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

@doistbot doistbot left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 @18 specs 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 test to 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)
  • P3 .github/workflows/check-ci-validation.yml:161: check:types has noEmit and the test script does not depend on it, so these two validations can run concurrently after the single React 18 install. Running them with run-p check:types test would shorten the compatibility job's wall-clock time without duplicating setup work.

Share FeedbackReview Logs

Comment thread .github/workflows/check-ci-validation.yml Outdated
@rfgamaral

Copy link
Copy Markdown
Member Author

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.

@rfgamaral rfgamaral self-assigned this Jul 27, 2026
@rfgamaral rfgamaral added the 👀 Show PR Used for PRs that need a review, but can be merged when CI is green. label Jul 27, 2026
@rfgamaral
rfgamaral requested review from a team and frankieyan and removed request for a team July 27, 2026 18:12
@rfgamaral
rfgamaral merged commit a3c6d80 into main Jul 27, 2026
11 checks passed
@rfgamaral
rfgamaral deleted the ricardo/support-react-19 branch July 27, 2026 18:13
doist-release-bot Bot pushed a commit that referenced this pull request Jul 27, 2026
## [16.1.0](v16.0.0...v16.1.0) (2026-07-27)

### Features

* support React 19 ([#1441](#1441)) ([a3c6d80](a3c6d80))
@doist-release-bot

Copy link
Copy Markdown

🎉 This PR is included in version 16.1.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

@doist-release-bot doist-release-bot Bot added the released Pull requests that have been released to production label Jul 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

released Pull requests that have been released to production 👀 Show PR Used for PRs that need a review, but can be merged when CI is green.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants