Skip to content

feat!: bump minimum typescript version to 6.0.3#16692

Merged
AlessioGr merged 10 commits into
mainfrom
feat/typescript-6
May 20, 2026
Merged

feat!: bump minimum typescript version to 6.0.3#16692
AlessioGr merged 10 commits into
mainfrom
feat/typescript-6

Conversation

@AlessioGr

@AlessioGr AlessioGr commented May 19, 2026

Copy link
Copy Markdown
Member

BREAKING: The minimum supported typescript version is now 6.0.3. This means that payload types are not guaranteed to work on lower typescript versions.

  • bumps all typescript versions used in our monorepo from 5.7.3 to 6.0.3 and migrates breaking typescript changes
  • documents the minimum typescript version requirement in our installation docs

As part of this PR, a bunch of invalid imports within our test suites that relied on baseURL have been migrated. The issue where imports from payload show up as errors has also been fixed:

screenshot 2026-05-19 at 17 19 54@2x

@github-actions

github-actions Bot commented May 19, 2026

Copy link
Copy Markdown
Contributor

📦 esbuild Bundle Analysis for payload

This analysis was generated by esbuild-bundle-analyzer. 🤖

Meta File Out File Size (raw) Note
packages/next/meta_index.json esbuild/index.js 989.31 KB ✅ No change
packages/payload/meta_index.json esbuild/index.js 1.41 MB ⚠️ +132 B (+0.0%)
packages/payload/meta_shared.json esbuild/exports/shared.js 192.60 KB ✅ No change
packages/richtext-lexical/meta_client.json esbuild/exports/client_optimized/index.js 304.12 KB ✅ No change
packages/ui/meta_client.json esbuild/exports/client_optimized/index.js 1.24 MB ✅ No change
packages/ui/meta_shared.json esbuild/exports/shared_optimized/index.js 16.11 KB ✅ No change
Largest paths These visualization shows top 20 largest paths in the bundle.

Meta file: packages/next/meta_index.json, Out file: esbuild/index.js

Path Size
../../node_modules ${{\color{Goldenrod}{ ████████████████████▌ }}}$ 82.0%, 807.52 KB
dist/views/Version ${{\color{Goldenrod}{ █▎ }}}$ 5.2%, 51.48 KB
dist/views/Dashboard ${{\color{Goldenrod}{ ▌ }}}$ 2.2%, 21.71 KB
dist/views/Document ${{\color{Goldenrod}{ ▍ }}}$ 1.7%, 16.66 KB
dist/views/List ${{\color{Goldenrod}{ ▍ }}}$ 1.6%, 15.39 KB
dist/elements/Nav ${{\color{Goldenrod}{ ▎ }}}$ 1.0%, 10.24 KB
dist/views/Root ${{\color{Goldenrod}{ ▎ }}}$ 1.0%, 9.90 KB
dist/views/Versions ${{\color{Goldenrod}{ ▏ }}}$ 0.6%, 6.17 KB
dist/views/API ${{\color{Goldenrod}{ ▏ }}}$ 0.6%, 6.13 KB
dist/views/Account ${{\color{Goldenrod}{ ▏ }}}$ 0.6%, 6.06 KB
dist/elements/DocumentHeader ${{\color{Goldenrod}{ ▏ }}}$ 0.5%, 4.71 KB
dist/views/Login ${{\color{Goldenrod}{ }}}$ 0.4%, 4.40 KB
dist/layouts/Root ${{\color{Goldenrod}{ }}}$ 0.4%, 3.53 KB
dist/views/ForgotPassword ${{\color{Goldenrod}{ }}}$ 0.3%, 3.13 KB
dist/views/CreateFirstUser ${{\color{Goldenrod}{ }}}$ 0.3%, 2.81 KB
dist/views/ResetPassword ${{\color{Goldenrod}{ }}}$ 0.2%, 2.40 KB
dist/templates/Default ${{\color{Goldenrod}{ }}}$ 0.2%, 2.02 KB
dist/views/Logout ${{\color{Goldenrod}{ }}}$ 0.2%, 1.94 KB
dist/views/Verify ${{\color{Goldenrod}{ }}}$ 0.1%, 1.29 KB
dist/views/NotFound ${{\color{Goldenrod}{ }}}$ 0.1%, 1.21 KB
(other) ${{\color{Goldenrod}{ ████▌ }}}$ 18.0%, 177.11 KB

Meta file: packages/payload/meta_index.json, Out file: esbuild/index.js

Path Size
../../node_modules ${{\color{Goldenrod}{ █████████████████ }}}$ 68.4%, 959.51 KB
dist/fields/hooks ${{\color{Goldenrod}{ ▊ }}}$ 3.1%, 44.07 KB
dist/collections/operations ${{\color{Goldenrod}{ ▋ }}}$ 2.9%, 40.23 KB
dist/versions/migrations ${{\color{Goldenrod}{ ▎ }}}$ 1.3%, 18.50 KB
dist/auth/operations ${{\color{Goldenrod}{ ▎ }}}$ 1.1%, 15.63 KB
dist/fields/config ${{\color{Goldenrod}{ ▎ }}}$ 1.0%, 13.66 KB
dist/globals/operations ${{\color{Goldenrod}{ ▎ }}}$ 1.0%, 13.40 KB
dist/utilities/configToJSONSchema.js ${{\color{Goldenrod}{ ▏ }}}$ 0.9%, 13.13 KB
dist/queues/operations ${{\color{Goldenrod}{ ▏ }}}$ 0.9%, 12.63 KB
dist/fields/validations.js ${{\color{Goldenrod}{ ▏ }}}$ 0.8%, 10.57 KB
dist/collections/config ${{\color{Goldenrod}{ ▏ }}}$ 0.7%, 9.53 KB
dist/bin/generateImportMap ${{\color{Goldenrod}{ ▏ }}}$ 0.7%, 9.44 KB
dist/config/orderable ${{\color{Goldenrod}{ ▏ }}}$ 0.6%, 7.92 KB
dist/uploads/fetchAPI-multipart ${{\color{Goldenrod}{ ▏ }}}$ 0.6%, 7.80 KB
dist/index.js ${{\color{Goldenrod}{ ▏ }}}$ 0.6%, 7.77 KB
dist/hierarchy/utils ${{\color{Goldenrod}{ ▏ }}}$ 0.5%, 7.65 KB
dist/database/migrations ${{\color{Goldenrod}{ ▏ }}}$ 0.5%, 7.54 KB
dist/collections/endpoints ${{\color{Goldenrod}{ }}}$ 0.4%, 6.23 KB
dist/auth/strategies ${{\color{Goldenrod}{ }}}$ 0.4%, 5.43 KB
dist/queues/config ${{\color{Goldenrod}{ }}}$ 0.4%, 5.31 KB
(other) ${{\color{Goldenrod}{ ███████▉ }}}$ 31.6%, 443.41 KB

Meta file: packages/payload/meta_shared.json, Out file: esbuild/exports/shared.js

Path Size
../../node_modules ${{\color{Goldenrod}{ ███████████████████▉ }}}$ 79.5%, 150.12 KB
dist/fields/validations.js ${{\color{Goldenrod}{ █▍ }}}$ 5.6%, 10.57 KB
dist/config/orderable ${{\color{Goldenrod}{ ▍ }}}$ 1.7%, 3.13 KB
dist/fields/baseFields ${{\color{Goldenrod}{ ▍ }}}$ 1.5%, 2.79 KB
dist/utilities/deepCopyObject.js ${{\color{Goldenrod}{ ▎ }}}$ 1.3%, 2.54 KB
dist/auth/cookies.js ${{\color{Goldenrod}{ ▏ }}}$ 0.8%, 1.55 KB
dist/utilities/flattenTopLevelFields.js ${{\color{Goldenrod}{ ▏ }}}$ 0.7%, 1.42 KB
dist/fields/config ${{\color{Goldenrod}{ ▏ }}}$ 0.7%, 1.37 KB
dist/utilities/getVersionsConfig.js ${{\color{Goldenrod}{ ▏ }}}$ 0.6%, 1.04 KB
dist/utilities/flattenAllFields.js ${{\color{Goldenrod}{ ▏ }}}$ 0.5%, 943 B
dist/utilities/unflatten.js ${{\color{Goldenrod}{ }}}$ 0.4%, 779 B
dist/utilities/sanitizeUserDataForEmail.js ${{\color{Goldenrod}{ }}}$ 0.4%, 713 B
dist/utilities/getFieldPermissions.js ${{\color{Goldenrod}{ }}}$ 0.3%, 651 B
dist/collections/config ${{\color{Goldenrod}{ }}}$ 0.3%, 570 B
dist/bin/generateImportMap ${{\color{Goldenrod}{ }}}$ 0.3%, 561 B
dist/auth/sessions.js ${{\color{Goldenrod}{ }}}$ 0.3%, 525 B
dist/fields/getFieldPaths.js ${{\color{Goldenrod}{ }}}$ 0.3%, 485 B
dist/utilities/appendDateTimezoneSelectFields.js ${{\color{Goldenrod}{ }}}$ 0.2%, 451 B
dist/utilities/getSafeRedirect.js ${{\color{Goldenrod}{ }}}$ 0.2%, 423 B
dist/utilities/deepMerge.js ${{\color{Goldenrod}{ }}}$ 0.2%, 413 B
(other) ${{\color{Goldenrod}{ █████▏ }}}$ 20.5%, 38.70 KB

Meta file: packages/richtext-lexical/meta_client.json, Out file: esbuild/exports/client_optimized/index.js

Path Size
dist/features/blocks ${{\color{Goldenrod}{ ███ }}}$ 12.4%, 37.36 KB
dist/lexical/ui ${{\color{Goldenrod}{ ██▊ }}}$ 11.4%, 34.16 KB
dist/lexical/plugins ${{\color{Goldenrod}{ ██▋ }}}$ 10.9%, 32.88 KB
dist/features/experimental_table ${{\color{Goldenrod}{ ██▎ }}}$ 9.0%, 27.16 KB
dist/packages/@lexical ${{\color{Goldenrod}{ █▌ }}}$ 6.3%, 18.99 KB
dist/features/link ${{\color{Goldenrod}{ █▌ }}}$ 6.3%, 18.81 KB
dist/features/toolbars ${{\color{Goldenrod}{ █▍ }}}$ 5.5%, 16.58 KB
dist/features/upload ${{\color{Goldenrod}{ █▏ }}}$ 4.7%, 14.09 KB
dist/features/textState ${{\color{Goldenrod}{ ▉ }}}$ 3.7%, 11.08 KB
dist/features/relationship ${{\color{Goldenrod}{ ▊ }}}$ 3.1%, 9.39 KB
dist/lexical/utils ${{\color{Goldenrod}{ ▋ }}}$ 2.9%, 8.79 KB
dist/features/converters ${{\color{Goldenrod}{ ▋ }}}$ 2.8%, 8.36 KB
dist/features/debug ${{\color{Goldenrod}{ ▋ }}}$ 2.5%, 7.40 KB
dist/utilities/fieldsDrawer ${{\color{Goldenrod}{ ▌ }}}$ 2.4%, 7.29 KB
dist/lexical/config ${{\color{Goldenrod}{ ▍ }}}$ 1.7%, 5.08 KB
dist/features/lists ${{\color{Goldenrod}{ ▍ }}}$ 1.7%, 5.00 KB
dist/features/format ${{\color{Goldenrod}{ ▎ }}}$ 1.2%, 3.46 KB
dist/lexical/LexicalEditor.js ${{\color{Goldenrod}{ ▎ }}}$ 1.1%, 3.23 KB
dist/features/horizontalRule ${{\color{Goldenrod}{ ▎ }}}$ 1.1%, 3.18 KB
dist/field/Field.js ${{\color{Goldenrod}{ ▏ }}}$ 0.9%, 2.84 KB
(other) ${{\color{Goldenrod}{ █████████████████████▉ }}}$ 87.6%, 263.53 KB

Meta file: packages/ui/meta_client.json, Out file: esbuild/exports/client_optimized/index.js

Path Size
../../node_modules ${{\color{Goldenrod}{ ███████████▊ }}}$ 47.0%, 579.80 KB
dist/elements/Hierarchy ${{\color{Goldenrod}{ ▉ }}}$ 3.5%, 43.71 KB
dist/elements/BulkUpload ${{\color{Goldenrod}{ ▌ }}}$ 2.3%, 28.05 KB
dist/elements/Table ${{\color{Goldenrod}{ ▍ }}}$ 1.6%, 19.18 KB
dist/views/HierarchyList ${{\color{Goldenrod}{ ▍ }}}$ 1.5%, 18.70 KB
dist/views/Edit ${{\color{Goldenrod}{ ▎ }}}$ 1.4%, 17.38 KB
dist/elements/WhereBuilder ${{\color{Goldenrod}{ ▎ }}}$ 1.4%, 17.24 KB
dist/forms/Form ${{\color{Goldenrod}{ ▎ }}}$ 1.3%, 15.92 KB
dist/fields/Relationship ${{\color{Goldenrod}{ ▎ }}}$ 1.3%, 15.48 KB
dist/fields/Blocks ${{\color{Goldenrod}{ ▎ }}}$ 1.2%, 15.11 KB
dist/fields/Upload ${{\color{Goldenrod}{ ▎ }}}$ 1.2%, 14.39 KB
dist/elements/QueryPresets ${{\color{Goldenrod}{ ▏ }}}$ 0.8%, 10.25 KB
dist/elements/PublishButton ${{\color{Goldenrod}{ ▏ }}}$ 0.7%, 9.00 KB
dist/elements/HTMLDiff ${{\color{Goldenrod}{ ▏ }}}$ 0.7%, 8.38 KB
dist/views/List ${{\color{Goldenrod}{ ▏ }}}$ 0.6%, 7.99 KB
dist/elements/ReactSelect ${{\color{Goldenrod}{ ▏ }}}$ 0.6%, 7.84 KB
dist/fields/Array ${{\color{Goldenrod}{ ▏ }}}$ 0.6%, 7.75 KB
dist/elements/LivePreview ${{\color{Goldenrod}{ ▏ }}}$ 0.6%, 7.04 KB
dist/elements/RelationshipTable ${{\color{Goldenrod}{ ▏ }}}$ 0.6%, 6.88 KB
dist/elements/Upload ${{\color{Goldenrod}{ ▏ }}}$ 0.5%, 6.62 KB
(other) ${{\color{Goldenrod}{ █████████████▎ }}}$ 53.0%, 653.48 KB

Meta file: packages/ui/meta_shared.json, Out file: esbuild/exports/shared_optimized/index.js

Path Size
dist/graphics/Logo ${{\color{Goldenrod}{ █████ }}}$ 20.2%, 3.12 KB
../../node_modules ${{\color{Goldenrod}{ ████▎ }}}$ 17.1%, 2.65 KB
dist/graphics/Icon ${{\color{Goldenrod}{ ██▍ }}}$ 9.8%, 1.52 KB
dist/utilities/formatDocTitle ${{\color{Goldenrod}{ ██▏ }}}$ 8.6%, 1.32 KB
dist/providers/TableColumns ${{\color{Goldenrod}{ █▍ }}}$ 5.6%, 866 B
dist/utilities/getGlobalData.js ${{\color{Goldenrod}{ █▏ }}}$ 4.9%, 762 B
dist/utilities/api.js ${{\color{Goldenrod}{ █▏ }}}$ 4.9%, 756 B
dist/utilities/groupNavItems.js ${{\color{Goldenrod}{ █▏ }}}$ 4.7%, 734 B
dist/elements/Translation ${{\color{Goldenrod}{ ▊ }}}$ 3.2%, 493 B
dist/utilities/handleTakeOver.js ${{\color{Goldenrod}{ ▋ }}}$ 2.8%, 440 B
dist/utilities/traverseForLocalizedFields.js ${{\color{Goldenrod}{ ▋ }}}$ 2.6%, 399 B
dist/elements/withMergedProps ${{\color{Goldenrod}{ ▌ }}}$ 2.2%, 339 B
dist/utilities/getNavGroups.js ${{\color{Goldenrod}{ ▌ }}}$ 2.2%, 338 B
dist/utilities/getVisibleEntities.js ${{\color{Goldenrod}{ ▌ }}}$ 2.1%, 329 B
dist/elements/WithServerSideProps ${{\color{Goldenrod}{ ▍ }}}$ 1.5%, 232 B
dist/utilities/handleGoBack.js ${{\color{Goldenrod}{ ▎ }}}$ 1.2%, 180 B
dist/fields/mergeFieldStyles.js ${{\color{Goldenrod}{ ▎ }}}$ 1.0%, 159 B
dist/utilities/handleBackToDashboard.js ${{\color{Goldenrod}{ ▎ }}}$ 1.0%, 152 B
dist/forms/Form ${{\color{Goldenrod}{ ▏ }}}$ 0.9%, 147 B
dist/utilities/abortAndIgnore.js ${{\color{Goldenrod}{ ▏ }}}$ 0.9%, 146 B
(other) ${{\color{Goldenrod}{ ███████████████████▉ }}}$ 79.8%, 12.36 KB
Details

Next to the size is how much the size has increased or decreased compared with the base branch of this PR.

  • ‼️: Size increased by 20% or more. Special attention should be given to this.
  • ⚠️: Size increased in acceptable range (lower than 20%).
  • ✅: No change or even downsized.
  • 🗑️: The out file is deleted: not found in base branch.
  • 🆕: The out file is newly found: will be added to base branch.

@AlessioGr AlessioGr merged commit 8b5c722 into main May 20, 2026
324 of 326 checks passed
@AlessioGr AlessioGr deleted the feat/typescript-6 branch May 20, 2026 16:00

@DanRibbens DanRibbens left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Does this need to be added to the migration guide?

AlessioGr added a commit that referenced this pull request May 22, 2026
Adds all breaking changes docs from my own PRs to the v4 migration doc.

| PR | Breaking change | Merged | In v4 migration doc |
|----|-----------------|--------|---------------------|
| [#16359](#16359) | `feat!`
Deleted `@payloadcms/richtext-slate` — Lexical is now the only supported
rich text editor | 2026-04-23 | ✅ Added (was missing) |
| [#16414](#16414) | `feat!`
Removed deprecated `jobs.depth` and `jobs.runHooks` config options |
2026-04-28 | ✅ Added (was missing) |
| [#16416](#16416) | `feat!`
Removed deprecated `state: 'failed'`/`'succeeded'` job task return shape
| 2026-05-01 | ✅ Added (was missing) |
| [#16537](#16537) | `feat!`
Bumped minimum Next.js version to 16.2.6 | 2026-05-07 | ✅ Added (was
missing) |
| [#16540](#16540) | `feat!`
Bumped minimum Node.js version to 24.15.0 | 2026-05-08 | ✅ Added (was
missing) |
| [#16546](#16546) | `feat!`
Removed croner `sloppyRanges` compatibility setting (stricter cron
parsing) | 2026-05-08 | ✅ Added (was missing) |
| [#16547](#16547) | `feat!`
Removed deprecated `min`/`max` from `relationship`/`upload` fields |
2026-05-08 | ✅ Added (was missing) |
| [#16548](#16548) |
`feat(richtext-lexical)!` Removed deprecated `HTMLConverterFeature` /
`lexicalHTML` | 2026-05-11 | ✅ Added (was missing) |
| [#16692](#16692) | `feat!`
Bumped minimum TypeScript version to 6.0.3 | 2026-05-20 | ✅ Added (was
missing) |
| [#16693](#16693) |
`refactor!` Removed `allowLocalizedWithinLocalized` compat flag +
`PAYLOAD_DO_NOT_SANITIZE_LOCALIZED_PROPERTY` env var | 2026-05-21 | ✅
Added (was missing) |
r1tsuu added a commit that referenced this pull request Jun 3, 2026
Specs introduced in the tanstack-start branch use bare-specifier imports like
`__helpers/e2e/copyPasteField.js` and `__helpers/e2e/playwright.js`. They've
been failing across both [next] and [tanstack-start] E2E shards with:

  Error: Cannot find package '__helpers' imported from
    test/fields/collections/Array/e2e.spec.ts

The TypeScript 6 bump (#16692) dropped `baseUrl` and `rootDir` from
`test/tsconfig.json`, and the only `paths` entry left was `@payload-config`,
so Playwright's resolver (which honours tsconfig paths since 1.31) had
nothing to map `__helpers` against and fell through to Node's bare-specifier
resolver — which throws.

Restore `baseUrl: "."`, add an explicit `__helpers/*` -> `./__helpers/*`
mapping, and silence the TS 6.0 baseUrl deprecation with
`ignoreDeprecations: "6.0"` to match the rest of the monorepo.
denolfe added a commit that referenced this pull request Jun 5, 2026
# Overview

The `build-and-test-templates` CI job was disabled while 4.x breaking
changes landed, so the templates drifted and no longer build against
current core packages. This updates each template to the new 4.x APIs so
they build again.

CI for the re-enabled job:
[#16880](#16880).

## Key Changes

- **Storage adapters moved from `plugins` to `storage`**
- 4.x initializes storage adapters from a top-level `storage` array
instead of `plugins` (#16596). `vercelBlobStorage` / `r2Storage` calls
were relocated in `with-vercel-mongodb`, `with-vercel-postgres`,
`with-vercel-website`, and `with-cloudflare-d1`. This was the source of
the `TypeError: plugin is not a function` failures. Applied with
`@payloadcms/codemod`'s `migrate-storage-adapters-to-config`.

- **Import maps point at `@payloadcms/ui` instead of removed
`@payloadcms/next` subpaths**
- The `@payloadcms/next/rsc` and `@payloadcms/next/client` subpaths were
removed; generated import maps now reference `@payloadcms/ui/rsc` and
`@payloadcms/ui`. Applied with `@payloadcms/codemod`'s
`migrate-next-subpath-exports` across all templates.

- **Bare `src/` imports replaced with the `@/` path alias**
- Website-based templates imported from `src/...`, which no longer
resolves under Turbopack. Switched to the configured `@/` alias (maps to
`./src/*`).

- **Slug generic dropped on `Pages` / `Posts` (TypeScript 6 regression
workaround)**
- The documented `CollectionConfig<'pages'>` + `defaultPopulate` pattern
compiled under TypeScript 5.7 (3.x) but not under TypeScript 6.0.3 (the
#16692 bump): the generated select interface is no longer assignable to
the `SelectType` that the `collections` array element expects. Dropping
the generic lets `defaultPopulate` fall back to `SelectType` so the
templates build, at the cost of field-name checking on
`defaultPopulate`. This is a core type regression that affects any 4.x
project using the pattern under TS 6, so the real fix belongs in core;
the templates carry a commented workaround to be reverted once that
lands.

## Design Decisions

Most changes were applied with `@payloadcms/codemod` rather than by
hand, so the same transforms users will run produce the same result.
Import maps are left as the minimal subpath rewrite rather than a full
local regeneration, since `payload build` regenerates them during the
build.

Scope is template builds. All six matrix templates build with packed
local packages, verified locally via `script:pack --all` +
`build-template-with-local-pkgs`.

The remaining E2E failures on `blank` and `website`
(`chunk.reason.enqueueModel is not a function` when loading the admin
under `next dev`) are a pre-existing runtime issue, present before this
change and unrelated to the build fixes. Only the workspace templates
(`blank`, `website`, `ecommerce`) run E2E in this job; `pnpm --filter`
does not match the non-workspace templates, so their E2E and int steps
currently no-op.


---
- To see the specific tasks where the Asana app for GitHub is being
used, see below:
  - https://app.asana.com/0/0/1215426886664378
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants