ESLint plugin for Next.js.
Last release today
25 Aug 2026
Ships on a steady schedule
a new release about every 8 days
Rarely documented
notes for 32 of 287 stable releases
Nothing withdrawn
no release was ever pulled
6 years old
3137 releases · first in 2020
Release timeline
3137 releases since 2020Releases
- 16.3.0-canary.9523 Jul 2026pre-release
Release notes
Open source →Misc Changes
- Turbopack: Very minor improvements for watcher loop: #96103
- Turbopack: Refactor watcher event handling and batching logic: #96087
- fix: remove deprecated url.parse() from custom-server example: #96105
- Upgrade React from
711c445b-20260722to28cd4bb0-20260723: #96100 - Throw for empty or incomplete generateStaticParams results with output: export: #95969
- Throw when generateStaticParams returns invalid values: #95968
- Remove inert experimental.viewTransition flag: #96098
- Restore partial fallback shell upgrade coverage: #96096
- fix(next/font/google): bound Google Fonts fetch timeout on Turbopack: #95981
- Rewrite edge server source map sources in Rust, drop JS fallback: #95980
- docs: view transitions guide — skill section, source-audit fixes, flag-removal docs: #96097
- Restore canary version 16.3.0-canary.94 after v16.3.0-preview.9 preview release
- [Bench] Add client-trace attribution pass and document metrics to render-pipeline: #95828
- Turbopack: Split up turbo-tasks-fs/src/lib.rs into smaller modules: #96030
- Turbopack: Use Arc<PathMap> and Box<Path> to make InvalidatorMap slightly more efficient: #95987
- Turbopack: Use
swc_core::ecma::utils::prop_name_eqfor a couple of thenext-custom-transforms: #96035
Credits
Huge thanks to @bgw, @wasim-builds, @vercel-release-bot, @devjiwonchoi, @aurorascharff, @lukesandberg, and @gaearon for helping!
- 16.3.0-canary.9422 Jul 2026pre-release
Release notes
Open source →Misc Changes
- [Cache Components] Exclude dynamic params from prerenders when no generateStaticParams values is provided: #95872
- Gate
partialFallbackbehavior behindpartialPrefetchingflag: #96074 - [turbopack] Fix deployment skew protection for component chunks: #96079
- Turbopack: stop copying sourcesContent into every serialized source map: #95934
- Upgrade React from
81e442ea-20260721to711c445b-20260722: #96066 - fix: cache miss in App Shell for cached pages with gSP: #95665
- skill(cc-adoption): add dev-only validation sweep reference: #96057
- Refine Cache Components and Partial Prefetching adoption skills: #95817
- [test] Move the dev-only
use cachetest suite totest/development: #96023 - Fix stale dev
'use cache'for cookieless requests and route handlers: #96022 - [test] Add failing tests for stale route handler and page cached data: #96021
- Add a dedicated HMR message for static params changes: #96020
- Emit the static paths HMR update after updating the cache: #96019
- [test] Add source-mapping coverage of React's fake stack frame scripts in
use cache: #95945 - Fix basePath fallback parameter parsing: #95966
- Restore canary version 16.3.0-canary.93 after v16.3.0-preview.8 preview release
- Always consult
npm_config_user_agentfirst: #95879 - Rewrite next-cache-components-optimizer around a test-driven instant() loop: #94721
Credits
Huge thanks to @gnoff, @acdlite, @sampoder, @gaearon, @vercel-release-bot, @lubieowoce, @aurorascharff, @unstubbable, @timneutkens, @eps1lon, and @gaojude for helping!
- 16.3.0-canary.9321 Jul 2026pre-release
Release notes
Open source →Misc Changes
- docs: attribute App Shell prefetch to Partial Prefetching: #96003
- Turbopack: Remove chunk group id from value of chunk groups map: #95142
- [ci] Enforce minimumReleaseAge in e2e tests that install external dependencies: #95628
- Turbopack: Fix missing canonicalization of paths and always use verbatim paths internally for Windows: #95668
- Revert "[turbopack] Don't SSR on pages only navigated to through a soft nav (#95539)": #96028
- Turbopack: Use
Arc<PathBuf>for keys in turbo-task-fs's per-pathMutexMap: #95951 - chore(deps): bump [email protected]: #95507
- [turbopack] Tree-shake CJS exports that use the
Object.definePropertysyntax: #95994 - Restore canary version 16.3.0-canary.92 after v16.3.0-preview.7 preview release
Credits
Huge thanks to @icyJoseph, @bgw, @sampoder, and @styfle for helping!
- 16.3.0-canary.9221 Jul 2026pre-release
Release notes
Open source →Example Changes
- fix: error handling and loading states in with-apollo-and-redux example: #91457
Misc Changes
- Upgrade React from
172742b4-20260716to81e442ea-20260721: #96016 - Fix Turbopack middleware matcher with i18n single locale: #96014
- Improve performance of validating MPA form submissions: #96013
- Enforce
serverActions.bodySizeLimitfor Server Actions in Edge runtime: #96012 - Set correct origin for internal redirects in custom server: #96011
- Ensure exotic rewrite param values are properly encoded: #96010
- fix(fetch-cache): key fetch(Request, init) by the effective request: #96009
- fix(incremental-cache): byte-exact fetch cache key for binary bodies: #96008
- Validate server reference IDs during manifest lookup: #96007
- fix(next/image): improve performance of detectContentType() : #96006
- Preserve basePath in redirect destinations: #95608
- [ci] Skip passed-tests cache steps for jobs that never run tests: #96001
- docs: add upgrade section to installation and expand AI agents guide: #95861
- docs: fix unstable_cache syntax error: #96002
- Insights: use a single Learn more link in console errors: #95967
- Refine development validation signal handling: #95998
- Include examples of static export tools & GitHub Pages template: #95929
- docs: note the
:has()scaling limit in the Interactive apps guide: #95925 - Prevent unhandled rejections when a "use cache" cache handler errors: #95985
- [test] Add coverage for throwing custom "use cache" cache handler: #95984
- docs: clarify layout.js nesting behavior in route groups: #95720
- Fix instant validation blocking navigations: #95939
- [ci] Share a single browser instance across all test suites in a single job: #95589
- [turbopack] Rename
turbopackTreeShakingtoturbopackModuleFragments: #95978 - cna: use LayoutProps helper in TS layout templates: #95675
Credits
Huge thanks to @vercel-release-bot, @eps1lon, @ZaforAbdullah, @gaojude, @aurorascharff, @icyJoseph, @timneutkens, @WildChargerTV, @ankurdotio, @bgw, and @sampoder for helping!
- 16.3.0-canary.9120 Jul 2026pre-release
Release notes
Open source →Misc Changes
- [turbopack] Skip redundant top-level root updates: #95903
- [turbopack] Drop unused exports from a CJS module: #95716
- Turbopack: Simplify parent directory creation retry loop logic: #95835
- Run Rust doctests in CI: #95911
- docs: add 'Set up your editor' to the installation guide: #95928
- fix(cms-contentful): await draftMode() and use Promise<> params type: #95631
- Move outputHashSalt out of experimental: #95840
- Move immutable static assets config option out of experimental: #95351
- [instant] Let dev-server requests bypass the fetch lock: #95761
Credits
Huge thanks to @marcoshernanz, @sampoder, @bgw, @aurorascharff, @manoraj, @mischnic, and @eps1lon for helping!
- 16.3.0-canary.9020 Jul 2026pre-release
Release notes
Open source →Misc Changes
- Upgrade React from
7023f501-20260714to172742b4-20260716: #95901
Credits
Huge thanks to @vercel-release-bot for helping!
- Upgrade React from
- 16.3.0-canary.8917 Jul 2026pre-release
Release notes
Open source →Misc Changes
- Fix Rust doctest failures: #95909
- [turbopack] Clean up
server_chunking_context: #95908 - [turbopack] Don't SSR on pages only navigated to through a soft nav: #95539
- Package skills/ as a Claude Code plugin: #95907
- [ci] Avoid apt-get in the next-stats-action Docker image: #95847
- Back/forward set the Nav Inspector back to pending: #95865
- fix(agent-rules): pad managed AGENTS.md block with blank lines: #95892
- Revert "Run more test suites under cacheComponents flag": #95884
- Fix repeated navigations while the Instant Navigation lock is held: #95864
Credits
Huge thanks to @marcoshernanz, @sampoder, @gaojude, @eps1lon, @acdlite, @aurorascharff, and @gaearon for helping!
- 16.3.0-canary.8816 Jul 2026pre-release
Release notes
Open source →Misc Changes
- Run more test suites under cacheComponents flag: #95878
- Unify appShells flag with Partial Prefetching: #95415
- Fix Request Insights span collection: #95818
- Revert "Replay same-document traversals that happen before hydration": #95853
- [ci] Allow running all deploy tests with builds from a private registry: #95784
- [turbopack] Only ship pages-router routes in the client chunk-group bootstrap manifest: #94671
- [turbopack] Inline the chunk group bootstrap in Next.js to drop the per-route runtime: #94666
- [turbopack] Add
chunk_group_bootstrap_paramsand the chunk-loading global to the build manifest: #94663 - [turbopack] Add
registerEntry()to handle inline bootstrapping (#94664) - [turbopack] Add
inline_chunk_group_bootstraptoBrowserChunkingContextandchunk_group_bootstrap_paramstoChunkGroupResult(#94661) - [turbopack] Create a
chunk_group_bootstrap_params()function (#94631) - [turbopack] Create a shared asset with browser runtime code (#94586)
- Turbopack: trace externals imported only by server actions (#95824)
Credits
Huge thanks to @gaearon, @acdlite, @timneutkens, @eps1lon, and @sampoder for helping!
- 16.3.0-canary.8715 Jul 2026pre-release
Release notes
Open source →Misc Changes
- [turbopack] Generate component chunks for each merged group to increase cache hits: #95261
- Exclude stale under 5 minutes from app shells: #95833
- docs: remove experimental @next/routing note: #94903
- [turbopack] Tell agents not to mention next.config.js options: #95825
- chore: Remove stale build warning: #95813
- Replay same-document traversals that happen before hydration: #95682
- docs: cssChunking graph option: #95693
- [Bench] Extend bench app to have realistic client chunk counts: #95814
- Add more realistic bench fixtures: #95807
- Fix Request Insights subscription initialization: #95794
- Model async userland loading in app routes as a state machine: #95791
- Preserve init errors from async route modules: #95799
- Fix cache warming and static params for metadata images with top-level await: #95790
- Only track pending imports for real promises: #95789
- Support metadata routes in --debug-build-paths: #95788
- Respect NEXT_HASH_SALT for server side assetsHashes: #95738
- telemetry: add agentName to anonymous metadata: #95586
- [turbopack] Optimize the implementation of AutoMap/AutoSet : #95694
Credits
Huge thanks to @sampoder, @gnoff, @timneutkens, @mischnic, @gaearon, @icyJoseph, @andrewimm, and @lukesandberg for helping!
- 16.3.0-canary.8614 Jul 2026pre-release
Release notes
Open source →Misc Changes
- Better support the CLI spinner when running the TSC CLI: #95753
- Upgrade React from
5123b063-20260708to7023f501-20260714: #95782 - docs: add route-side URL data audit to the Partial Prefetching adoption guide: #95389
- docs: revalidateTag with expire zero, for route handlers: #95760
- request insights: add DevTools request panel (5/5): #93978
- docs: Improve immutable static docs: #95752
- Add React sync development skill: #95620
- docs: useSearchParams example stray link: #95759
- Improve the NFT error message and ignore comment handling: #95144
- Upgrade to swc 73: #95731
Credits
Huge thanks to @lukesandberg, @vercel-release-bot, @aurorascharff, @icyJoseph, @feedthejim, @mischnic, and @timneutkens for helping!
- 16.3.0-canary.8513 Jul 2026pre-release
Release notes
Open source →Misc Changes
- [turbopack] Switch
make_production_chunksto use floats: #95749 - Fix termination handling: #95692
- Restore canary version 16.3.0-canary.84 after v16.3.0-preview.6 preview release
- Turbopack: order CSS modules by chunk-group co-occurrence in linearize: #95579
- [test] Disable i18n-api-support deploy test for Turbopack with adapters: #95739
- Fork navigation-testing-lock module: #95611
- docs: runtime prefetching update: #95564
- request insights: add agent diagnosis access (4/5): #93977
- Fix Pages router 404 runtime rendering with Adapter: #95264
- Fix duplicate static files in adapter: #95681
- Update font data: #95725
- [test] Disable middleware-rewrites deploy test for Turbopack with adapters: #95680
Credits
Huge thanks to @sampoder, @lukesandberg, @sokra, @eps1lon, @icyJoseph, @feedthejim, @mischnic, and @vercel-release-bot for helping!
- [turbopack] Switch
- 16.3.0-canary.8412 Jul 2026pre-release
Release notes
Open source →Misc Changes
- request insights: expose dev snapshots to tools and HMR (3/5): #93976
- request insights: derive request history and fetch data (2/5): #93975
- request insights: record local framework spans (1/5): #93974
Credits
Huge thanks to @feedthejim for helping!
- 16.3.0-canary.8310 Jul 2026pre-release
Release notes
Open source →Misc Changes
- Turbopack tests: remove assertions that duplicate webpack results: #95688
- Fix support for
custom-media-queriesin LightningCSS: #95689 - Clarify AI-assisted contribution policy in PR template and AGENTS.md: #95629
- docs: add Building guide: #94999
- docs: add incremental adoption path to Cache Components migration guide: #95325
- [PPF] Sync IO is only allowed in the dynamic stage: #95384
- refactor: remove unnecessary switches from StagedRenderingController: #95383
- Keep the request body a plain Readable after middleware so Readable.toWeb() doesn't hang: #95607
- docs: note default error/not-found UI follows OS color scheme, not app theme: #95673
- test: skip redbox check in "static prefetch - missing suspense around search params": #95670
- test: allow-runtime breaks Link's Server component child detection: #95596
- docs: Immutable static assets: #95348
- [turbopack] Simplify service worker e2e tests: #95672
- [docs] Update "Handling a Custom
Service Worker" in the CRA migration docs: #95434 - [docs] Update progressive web apps documentation for new service worker syntax: #95431
- (TypeScript 7 Support) Add experimental TypeScript CLI backend: #95639
Credits
Huge thanks to @wbinnssmith, @sampoder, @bgw, @aurorascharff, @lubieowoce, @timneutkens, @icyJoseph, and @mischnic for helping!
- 16.3.0-canary.8210 Jul 2026pre-release
Release notes
Open source →Misc Changes
- [turbopack] Compile service workers registered from pages router pages: #95583
- [turbopack] Output service workers to
/_next/static/: #95554 - Reduce the size of OperationVc from 8 bytes to 4: #95614
- Upgrade React from
df4bd1b4-20260708to5123b063-20260708: #95642 - Add attribute rendering benchmark: #95621
- docs(opengraph-image): load assets at module scope to keep route static under Cache Components: #95246
- Convert agent-041's blocking-data check to the agentic LLM judge: #95630
- Upgrade React from
12a4baec-20260707todf4bd1b4-20260708: #95612 - Make the agent-rules block verifiable and self-upgrading: #95467
- Refresh outdated agent-rules blocks on next dev and codemod upgrade: #95470
- [ci] Split up large instant-validation tests: #95627
- [ci] Split up large rsc-build-errors development test: #95624
- [ci] split up large cache-components-errors tests: #95623
- docs: update MCP guides for the thin next-devtools-mcp: #94859
- Normalize and validate
expireandrevalidatevalues to handle Infinity and surface mistakes early: #95493 - [ci] Bump PR stats job timeout to 35 minutes: #95592
Credits
Huge thanks to @sampoder, @lukesandberg, @vercel-release-bot, @timneutkens, @aurorascharff, @gaojude, @bgw, and @gaearon for helping!
- 16.3.0-canary.818 Jul 2026pre-release
Release notes
Open source →Misc Changes
- [ci] Pin typescript version in tests: #95619
- fix(create-next-app): render filenames in Geist Mono so the preloaded font is used: #95471
- [turbopack] print Turbopack warnings after SSG: #95430
- fix(create-next-app): pin both axes on Tailwind template logos to silence aspect-ratio warning: #95609
- Turbopack: enable
import with {type: 'text'}by default: #95606 - Consistently gate navigation-testing-lock API on flag: #95582
- test: Fix immutable static asset deployment tests for real: #95600
- Upgrade React from
23def8fd-20260706to12a4baec-20260707: #95581 - Split remaining "client-node"-only modules into .browser variants: #95366
- [turbopack] Don't evict when there is little memory to save: #95213
- align dev and build output: #94916
- [turbopack] Don't persist if there is little work to do: #95137
- fix: log "Partial Prefetching enabled" during next build: #95593
- [PP] Surface URL data during prefetching as an Instant insight with rule page: #95365
- [turbopack] Rename
rscEndpointtorscHmrEndpoint: #95538 - [ci] Split up large create-next-app/templates/matrix test: #95555
Credits
Huge thanks to @bgw, @aurorascharff, @sampoder, @mischnic, @eps1lon, @vercel-release-bot, and @lukesandberg for helping!
- 16.3.0-canary.807 Jul 2026pre-release
Release notes
Open source →Misc Changes
- Turbopack: add more context to persistence file errors: #95318
- [ci] Split up large cache-components-dev-warmup test suite: #95553
- Cancel a superseded Server Components HMR refresh's server-side work: #95486
- test: Fix immutable static asset deployment tests: #95550
- [ci] Migrate webpack tests back to arm runners: #95549
- docs: Fix testing-adapters variable name: #95575
- test: Use Turbopack for 'Test new and changed tests when deployed': #95552
- test: Disable service worker deploy tests for now: #95570
- Fix/next info experimental analyze with graph css chunking: #95542
- ci: Bump withgraphite/graphite-ci-action: #95562
- Run instrumentation for Node.js Middleware without Adapter: #95547
- Propagate maxDuration to edge adapter outputs: #95118
- [ci] Skip apt-installed dependencies in playwright install step: #95535
- test: Fix service worker error test: #95548
- Upgrade to swc 72 and rust-react-compiler: #95536
- [skills] Update gh-stack skill: #95541
- docs: updates to Cache Components Caching: #95452
Credits
Huge thanks to @lukesandberg, @bgw, @unstubbable, @mischnic, @icyJoseph, @timneutkens, and @sampoder for helping!
- 16.3.0-canary.796 Jul 2026pre-release
Release notes
Open source →Misc Changes
- docs: remove incorrect statement that force-cache is the default for …: #95235
- Turbopack: add all keys to dynamic exports before sealing the object: #93334
- Disable
supportsImmutableAssetswithconfig.output: #95521 - turbo-persistence: skip directory fsync on Windows: #95497
- Abort superseded Server Components HMR requests on the client: #95463
- [ci] Add stats comment with partial stats: #95401
- [fragment-scroll] Enable new scroll handler by default: #95378
- Upgrade React from
3508aee6-20260702to23def8fd-20260706: #95532 - fix(dev-overlay): increase fix card grid row gap to clear floating Copy prompt button: #95526
- evals: fix false-negative regex checks with the agentic LLM judge: #95440
- trace-viewer: Support string span ids in nextjs trace backend: #95515
- [turbopack] Add E2E tests for service workers: #94924
- otel: Use correct parent span for Node.js middleware: #95306
- Fix instrumentation hook awaiting for middleware with adapters: #95357
- [test] Unflake
cache-components-dev-streamingtest suite: #95466 - Also rewrite requires in page templates with Webpack: #95446
Credits
Huge thanks to @Pranav18M, @andrewimm, @mischnic, @chippleh1392, @unstubbable, @eps1lon, @vercel-release-bot, @aurorascharff, @gaojude, and @sampoder for helping!
- 16.3.0-canary.784 Jul 2026pre-release
Release notes
Open source →Misc Changes
- Add
serverComponentsHmrCancellationexperimental flag: #95462
Credits
Huge thanks to @unstubbable for helping!
- Add
- 16.3.0-canary.773 Jul 2026pre-release
Release notes
Open source →Misc Changes
- Avoid unnecessary rendering for validation in dev: #95394
- fix: work around SWC compress bug: #95457
- docs: Update FormEvent to SubmitEvent in form handling example (deprecated in React 19.2.10+): #95453
- Update font data: #95441
- Ignore-list internal frames whose source maps chain to original sources: #95448
- Type resolved
cacheLifeprofiles, dropping runtime asserts: #95428 - Split typeof-window server requires into .browser variants: #95201
- Collect modules with browser variants statically: #95200
Credits
Huge thanks to @lubieowoce, @M4cM4rco, @vercel-release-bot, @unstubbable, and @eps1lon for helping!
- 16.3.0-canary.763 Jul 2026pre-release
Release notes
Open source →Misc Changes
- Fix navigation getting reverted when a Server Action is in flight: #95391
- Fix false-positive nested-cache error for a short default profile: #95373
- Skip saving
expire: 0values in the default cache handler in prod: #95363 - [ci] Disable mid-stack PR optimization for native PR stacks: #95427
- Fix history push getting treated like replace when followed by refresh: #95392
- Upgrade React from
ec0fca31-20260701to3508aee6-20260702: #95410 - fix(config): correctly validate cacheHandlers names: #95358
- [ci] Actually migrate Turbopack jobs back to ARM: #95386
- Recover from blocking routes under Instant Navigation lock when deployed: #95227
- Make Instant Navigation Testing full-page loads work when deployed: #95222
- Clear a resurrected instant cookie on unlock so a hard reload recovers: #95398
- fix: handle prototype-colliding segment names in segment explorer trie: #95403
- Prefetch links nearest the top of the document first: #95393
- Fix metadata title dropped on soft navigation with Cache Components: #95315
- Cache short-
expire'use cache'values across dev reloads: #95362
Credits
Huge thanks to @gaearon, @unstubbable, @bgw, @vercel-release-bot, @Partha-Shankar, @icyJoseph, and @acdlite for helping!
- 16.3.0-canary.752 Jul 2026pre-release
Release notes
Open source →Misc Changes
- [cd] Replace the release package with our own GitHub release creation: #95352
- [test] Enable deploy tests for the Instant Navigation Testing API suite: #95236
- Await reused in-flight prefetch entries under Instant Navigation lock: #95301
- [test] Park the blocking-fallback segment on a withheld param: #95300
- Make
instant()resilient to a leaked navigation-testing cookie: #95375 - [ci] Avoid running full CI mid-stack for GH-native stacks, same as we do for Graphite: #95218
- Remove 'silence this warning' from instant validation fix output: #95187
- fix(turbopack): allow
#/prefixed subpath import specifiers: #94461
Credits
Huge thanks to @eps1lon, @unstubbable, @bgw, @aurorascharff, and @sleitor for helping!
- 16.3.0-canary.742 Jul 2026pre-release
Nothing published for this version
- 16.3.0-canary.731 Jul 2026pre-release
Nothing published for this version
- 16.3.0-canary.721 Jul 2026pre-release
Nothing published for this version
- 16.3.0-canary.7129 Jun 2026pre-release
Nothing published for this version
- 16.3.0-canary.7029 Jun 2026pre-release
Nothing published for this version
- 16.3.0-canary.6927 Jun 2026pre-release
Nothing published for this version
- 16.3.0-canary.6826 Jun 2026pre-release
Nothing published for this version
- 16.3.0-canary.6724 Jun 2026pre-release
Release notes
Open source →Misc Changes
- Restore canary version 16.3.0-canary.66 after v16.3.0-preview.4 preview release
- Fix local fonts in statically prerendered
ImageResponsemetadata route: #95121 - docs(root-params): generateStaticParams section and CC requirement: #95073
- Surface an error for blocking routes under the Navigation Inspector: #95139
- Suppress prefetch={true} warning when route opts out via instant = false: #95099
- skill(cc-adoption): recommend next-dev-loop and add build-only path: #95122
Credits
Huge thanks to @unstubbable, @icyJoseph, @acdlite, and @aurorascharff for helping!
- 16.3.0-canary.6624 Jun 2026pre-release
Release notes
Open source →Misc Changes
- Revert "Remove legacy PPR codepaths": #95113
- dev-overlay: wire Link prefetch={true} Partial Prefetching warning into Insights: #94798
- Docs/partial prefetching: #94855
- [ci] Make preview tarballs available while new Canaries are being published: #95112
- [cd] add ad-hoc preview release cut from canary: #95086
- Add missing switch case: #95127
- Revert "Add missing switch case": #95129
- Fix Navigation Inspector styles in dark mode: #95126
- [test] Reorder
hmr-intercept-routestest to avoid a reload/refresh race: #95134
Credits
Huge thanks to @eps1lon, @aurorascharff, @icyJoseph, @unstubbable, and @samselikoff for helping!
- 16.3.0-canary.6524 Jun 2026pre-release
Release notes
Open source →Misc Changes
- docs(cache-components): clarify allow-runtime, sync-IO and instant=false, CLS fallback: #94997
- Keep the resolved cache life for
cacheMaxMemorySize: 0caches in dev: #95100 - Avoid mutating
req.headerswhen stripping internal headers: #95116
Credits
Huge thanks to @aurorascharff and @unstubbable for helping!
- 16.3.0-canary.6424 Jun 2026pre-release
Release notes
Open source →Misc Changes
- Consider merging chunks when
overlap == 1: #95102 - [turbopack] Add support for single-entry chunks: #94727
- Turbopack: add TURBOPACK_DEBUG_CSS_CHUNKING env var: #95080
- [cd] publish on release tags instead of branch push: #95085
Credits
Huge thanks to @sampoder, @sokra, and @eps1lon for helping!
- Consider merging chunks when
- 16.3.0-canary.6323 Jun 2026pre-release
Release notes
Open source →Misc Changes
- Serve ISR fallback shells in response to prefetch requests: #94534
- Insights: drop irrelevant fix cards from instant errors: #94926
- Navigation inspector UI updates: #94959
- skill(next-cache-components-adoption): clarify prereqs: #95082
- Turbopack: Delete dead AttachedFileSystem type: #94960
- Opt Partial Prefetching routes into the runtime stage of Cached Navs: #95097
- Fix #95015 by pulling a fix to scattered-collect: #95098
- docs(caching): clarify generateStaticParams prebuild and recommend max for CMS: #95081
- Release the instant navs lock without clearing the whole cookie jar: #94947
- Compute dev fallback params from the most-specific prerendered route: #95066
Credits
Huge thanks to @acdlite, @aurorascharff, @samselikoff, @bgw, @unstubbable, @lukesandberg, and @icyJoseph for helping!
- 16.3.0-canary.6223 Jun 2026pre-release
Release notes
Open source →Misc Changes
- [skills] Mark insight-error-page and next-rspack as internal: #95070
- Turbopack: Fix log box test on react 18: #95078
- Turbopack: Avoid clone when sorting by module file path: #95079
- Fix false-positive
export const dynamicin Cache Components detection: #95083 - docs: add Interactive Apps guide: #94020
Credits
Huge thanks to @gaojude, @bgw, @eps1lon, and @aurorascharff for helping!
- 16.3.0-canary.6123 Jun 2026pre-release
Release notes
Open source →Misc Changes
- [test] Fix failing determinism test using adapter: #95051
- docs: fix typo in slot-missing-default.mdx: #94531
- [otel] Correctly set error code attributes for App API routes: #94979
- docs: Cache components requires Node.js runtime: #94897
- [scripts] Write pnpm overrides for pnpm projects in pack/patch helpers: #94747
- docs(authentication): add Auth and streaming, fix code fences and imports: #95056
- Statically prerender metadata image routes under Cache Components: #94957
- Upgrade React from
b1786c31-20260618to247fbb45-20260622: #95063 - codemod: cache-components-instant-false + next-cache-components-adoption skill: #94941
- Remove legacy PPR codepaths: #94955
- skill(next-dev-loop): fix --session flag, agent-browser bootstrap, --headed daemon note: #95005
- Add a global opt-in for the runtime stage of Cached Navigations: #95064
- [turbopack] Rename the edge runtime to the self-contained runtime: #94726
- [turbopack] Sort modules in files by path not ID: #95065
- skill(next-cache-components-adoption): tune skill to mention app router requirement: #95069
Credits
Huge thanks to @mischnic, @parkhojeong, @icyJoseph, @eps1lon, @aurorascharff, @unstubbable, @vercel-release-bot, and @sampoder for helping!
- 16.3.0-canary.6021 Jun 2026pre-release
Release notes
Open source →Misc Changes
- Remove embedded Claude Code plugin marketplace: #94877
Credits
Huge thanks to @gaojude for helping!
- 16.3.0-canary.5920 Jun 2026pre-release
Release notes
Open source →Misc Changes
- Upgrade to swc 70: #94814
- [turbopack] Sort modules in chunks to reduce duplicates: #94961
- router instrumentation: refactor client hook dispatch (1/7): #94755
- [otel] Add more verbose-mode OTEL spans for App Router: #94894
- Enforce route segment configs on metadata routes under Cache Components: #94962
- typegen: default to Turbopack: #94952
- router instrumentation: add transition start context (2/7): #94766
- fix: after(callback) called after response end: #94974
- fix: request APIs in promises passed to after() in actions/handlers: #94964
Credits
Huge thanks to @mischnic, @sampoder, @feedthejim, @unstubbable, @wbinnssmith, and @lubieowoce for helping!
- 16.3.0-canary.5819 Jun 2026pre-release
Release notes
Open source →Misc Changes
- Fix dev overlay hydration error ordering: #94555
- [turbopack] Retry chunk loading on failure: #94918
- Upgrade React from
ad78e251-20260616tob1786c31-20260618: #94951 - [ci] Update playwright to 1.61.0: #94871
- [cd] reduce size of npm metadata on publish: #94953
Credits
Huge thanks to @timneutkens, @sampoder, @vercel-release-bot, @bgw, and @styfle for helping!
- 16.3.0-canary.5718 Jun 2026pre-release
Release notes
Open source →Misc Changes
- Scope the Cold cache indicator in dev to shell cache misses: #94911
- Fix Instant Navs DevTools capture bugs and re-enable its test suite: #94866
- docs: fix capitalization of Server and Client Components: #94891
- docs: Fix broken link to Node.js Debugging Guide: #93958
- docs: fix broken Node.js inspector URL in debugging guide: #94934
- examples/with-ably: update to App Router + Ably v2: #94600
- docs: clarify sequential data fetching example: #94930
- docs: GtK, caching with fetch is opt-in - extended to any method or header included: #94899
- [test] Enable
metadata-streaming-configfor Cache Components: #94936 - fix(dev-overlay): correct open-in-editor path when using a
srcdirectory: #94775 - Fix repoRoot for adapters: #94478
Credits
Huge thanks to @unstubbable, @niketchandivade, @gilest, @jahanzaib-iqbal-dev, @owenpearson, @davidgg, @icyJoseph, @eps1lon, @fhfournier, and @mischnic for helping!
- 16.3.0-canary.5618 Jun 2026pre-release
Release notes
Open source →Misc Changes
- Let LLMs create less noisy and more focused PR descriptions: #94896
- Avoid re-logging server-originated errors forwarded from the browser: #94917
- [ci] Only install chromium-headless-shell and not chromium: #94882
Credits
Huge thanks to @eps1lon, @unstubbable, and @bgw for helping!
- 16.3.0-canary.5517 Jun 2026pre-release
Release notes
Open source →Misc Changes
- [cd] Continue release train if
@next/swc-wasm-*fails to publish: #94912
Credits
Huge thanks to @eps1lon for helping!
- [cd] Continue release train if
- 16.3.0-canary.5317 Jun 2026pre-release
Release notes
Open source →Misc Changes
- pass
--lockedtocargo binstall: #94834 - [ci] Use node-version-file when we already have a repository checkout and reduce hardcoded references to node versions: #94780
- [turbopack] Allocate
Effects in an arena: #94614 - [turbo-tasks] Shrink RawVc to 8 bytes and CellId to 4 bytes: #94792
- rust react compiler: detect and build for react 18: #94836
- [test] Unflake
metadata static routes cachetest: #94796 - [test] Recover from a leftover build process on test retry: #94797
- Properly set response-based OTEL attributes with adapters : #94603
- dev-overlay: polish error header layout and instant fix-card chip: #94790
- Upgrade React from
43bcbf80-20260603tod9158919-20260615: #94826 - Make
cacheMaxMemorySize: 0and custom cache handlers fast in dev: #94784 - [ci] Clean up references to self-hosted runners: #94827
- Fix remaining OTEL issues in adapter: #94817
- Turbopack: improve NFT warning message: #94854
- Add experimental.useExperimentalReact to opt into React's experimental channel: #94861
- Turbopack: improve issue printing colors: #94858
- [turbopack] Update algebra in chunking algorithm: #94873
- [CC] Fix accumulator flushing logic: #94857
Credits
Huge thanks to @lukesandberg, @bgw, @sampoder, @wbinnssmith, @unstubbable, @mischnic, @aurorascharff, @vercel-release-bot, @gaojude, and @lubieowoce for helping!
- pass
- 16.3.0-canary.5216 Jun 2026pre-release
Release notes
Open source →Core Changes
- chore: upgrade next-rspack to rspack 2.0: #92222
Misc Changes
- docs: Route Handlers to be supported later on: #94705
- [ci] Allow "rerun failed jobs" to work up until 5 days for e2e deploy tests: #94812
- Fix stale next data API test URL: #94815
- Format submillisecond durations as milliseconds: #94813
- Instruct agents to keep and commit the generated agent-rules block: #94725
- [agents-md] Index bundled docs instead of downloading into .next-docs: #94719
- docs: add prefetchInlining config reference: #94650
- Move
warnOnceimports into statements guarded byprocess.env.NODE_ENV === 'development': #94781 - Expand signature rewriting to allow returning ResolvedVc from turbo task functions: #94772
- Move
errorOnceimports into statements guarded byprocess.env.NODE_ENV === 'development': #94782 - Add a message to
AGENTS.mdaboutsuper::imports.: #94733 - Turbopack: add experimental React compiler support: #94573
Credits
Huge thanks to @icyJoseph, @eps1lon, @devjiwonchoi, @timneutkens, @gaojude, @ifer47, @sampoder, @lukesandberg, @wbinnssmith, and @SyMind for helping!
- 16.3.0-canary.5113 Jun 2026pre-release
Release notes
Open source →Misc Changes
- Avoid a premature Suspense fallback flash in the streaming dev render: #94783
Credits
Huge thanks to @unstubbable for helping!
- 16.3.0-canary.5013 Jun 2026pre-release
Release notes
Open source →Misc Changes
- [codemod] Write pnpm overrides to pnpm-workspace.yaml on pnpm v11+: #94690
- [ci] Always upload canary tarballs from the canary branch: #94557
- docs: document non-streamed bot rendering and Cache Components: #94605
- [CC] Exclude caches with low stale from static prerenders: #94678
- [CC] Rename shellStage to streamReleaseStage: #94749
- [turbopack] Drop data while serializing in
next build: #94561 - [turbopack] Optimize cell_dependency representation: #94717
- [turbopack] Use
final_read_hintin top level turbo tasks: #94712 - refactor: process streaming prerenders more efficiently: #94764
- Allow root params in App Shell (client)
- fix: this in edge sandbox setTimeout/setInterval: #94754
Credits
Huge thanks to @eps1lon, @icyJoseph, @lubieowoce, and @lukesandberg for helping!
- 16.3.0-canary.4912 Jun 2026pre-release
Release notes
Open source →Misc Changes
- [turbopack] Rename variables in
path_joinand add tests: #94625 - Warn on prefetch={true} navigation without Partial Prefetching (dev): #94672
- Serve stale
'use cache'entries in the dev server until they expire: #94662 - Re-fetch dynamic content on navigation with
partialPrefetchingenabled: #94655 - docs: expand the Cache Components migration guide: #94649
- Add Owner Stack to "
prefetch={true}navigation without Partial Prefetching" warning: #94683 - [tubopack] migrate rcstr! to use scattered collect: #94498
- Strip internal dev request-id headers from userland
headers(): #94703 - Persist
'use cache: private'entries in dev: #94694 - [App Shells] refactor instant-validation to make adding new stages easier: #94711
- migrate turbo-tasks to scattered collect: #94503
- [CC] refactor staged rendering codepaths in params/searchParams: #94718
- [App Shells] Track whether shell prefetch used session data: #94484
- Treat empty resume bodies as dynamic render requests: #94729
Credits
Huge thanks to @sampoder, @acdlite, @unstubbable, @icyJoseph, @eps1lon, @lukesandberg, @lubieowoce, and @gnoff for helping!
- [turbopack] Rename variables in
- 16.3.0-canary.4810 Jun 2026pre-release
Release notes
Open source →Misc Changes
- [turbopack] Enable turbopackFileSystemCacheForBuild by default in non-stable releases: #94616
- Add a cold cache dev indicator: #94611
- instant: build fix-card Copy AI prompt dynamically from title + link: #94637
- Stage short-lived
'use cache'entries correctly in dev: #94645 - docs: next/root-params references on i18n guide: #94629
- [ci] Reduce usage of turborepo cache in
build_and_deploy.yml: #94319 - [ci] Download fnm directly from GitHub releases and validate checksum: #94579
- Call
register_assignment_scope()invisit_export_default_expr()andvisit_export_default_decl(): #94581 - fix: handle shell errors when resuming Node streams: #94668
Credits
Huge thanks to @lukesandberg, @unstubbable, @aurorascharff, @icyJoseph, @bgw, @sampoder, and @gnoff for helping!
- 16.3.0-canary.4710 Jun 2026pre-release
Release notes
Open source →Misc Changes
- Rename prefetch option
force-runtimetoallow-runtime: #94568 - Remove unstable_instant agent hints; insights validate by default: #94577
- [turbopack] Use an arena for
JSValues: #94297 - Stabilize export const prefetch: #94571
- Fix node:stream leak in webpack edge bundles: #94585
- docs: fix 'time zone' spelling in FOUC guide: #93244
- docs: add pnpm installation step to module-not-found error page: #93773
- Stream Cache Components dev render instead of restarting on cache miss: #94457
- instant: polish client-hook overlay wording, cards, and docs links: #94496
- Fix Navigation Inspector Continue Rendering with loading.tsx: #94355
- disallow reads from .next-profiles: #94570
- [turbopack] add an extension to trace files: #94587
- [ci] Remove dead playwright docker image creation logic: #94576
- [cd] Ensure release can be triggered on old branches: #94596
- Make router-act ignore App Shell prefetch requests: #94580
- Enable experimental.appShells by default with cacheComponents: #94516
- [turbopack] Lazily allocate the BlockCaches: #94562
- Stabilize catchError and retry by removing unstable_ prefix: #94610
- Revert "Stabilize catchError and retry by removing unstable_ prefix": #94617
- docs: root-params highligth fixes: #94620
- Stabilize
unstable_instant: #94578 - docs: remove unstable_disableValidation recommendations: #94608
- doc: instant navs runtime story: #93204
- Reapply "Stabilize catchError and retry by removing unstable_ prefix": #94623
Credits
Huge thanks to @gnoff, @gaojude, @sampoder, @karlhorky, @MikhailStn, @unstubbable, @aurorascharff, @samselikoff, @lukesandberg, @bgw, @eps1lon, @acdlite, @devjiwonchoi, and @icyJoseph for helping!
- Rename prefetch option
- 16.3.0-canary.469 Jun 2026pre-release
Release notes
Open source →Misc Changes
- docs: clarify next-env.d.ts regeneration: #94232
- docs: add updateTag example to cacheTag page: #94508
- Remove
experimental.useNodeStreamsflag as it's enabled: #93938 - Remove dead cacheComponents web streams path: #93944
- [ci] Disable on-call notification if manual deploy e2e tests failed: #94554
- Reduce new test concurrency to five: #94552
- fix(dev-overlay): Tidy up issues/insight menu and tab overlay: #94549
- [turbopack] Remove WebAssembly helpers from the default runtime: #94373
- docs: clarify use cache persistence across deploys: #93554
- enable eviction by default: #94452
- docs: fix onRequestError error type example: #94518
- docs: move insight error pages from vercel/front to canary: #94564
Credits
Huge thanks to @SJvaca30, @aurorascharff, @timneutkens, @eps1lon, @sampoder, @icyJoseph, @lukesandberg, and @danyalahmed1995 for helping!
- 16.3.0-canary.458 Jun 2026pre-release
Release notes
Open source →Misc Changes
- [turbopack] standardize chunk entry names for webpack and postcss loaders: #94256
- Add global config to enable Partial Prefetching: #94448
- Fix: Subtree hints not propagating correctly: #94489
- Partial Prefetching: Default to App Shell only: #94510
- Turbopack: refactor into
get_next_client_transforms_rules: #94487 - [cna] Use
allowBuildsinstead ofignoredBuiltDependencieswhen using PNPM 11+: #94544 - Turbopack: content hash polyfill sourcemap file: #94548
Credits
Huge thanks to @lukesandberg, @acdlite, @mischnic, and @eps1lon for helping!
- 16.3.0-canary.447 Jun 2026pre-release
Release notes
Open source →Misc Changes
- Turbopack: remove EcmascriptParsable::parse_original: #94465
- Turbopack: Add an experimental option for eviction: #94439
- Specialize client hook prerender abort reasons: #94494
- enable eviction on canary: #94451
- Remove turbopackMemoryLimit it is dead: #94483
- [turbopack] Enable Effects to be evicted: #94173
Credits
Huge thanks to @lukesandberg and @gnoff for helping!
- 16.3.0-canary.436 Jun 2026pre-release
Release notes
Open source →Misc Changes
- Revert "[ci] Increase TEST_CONCURRENCY from 8 to 12 (#94138)": #94517
Credits
Huge thanks to @bgw for helping!
- 16.3.0-canary.426 Jun 2026pre-release
Release notes
Open source →Misc Changes
- [turbopack] Treat local
constassignments as side-effect free: #94294 - [turbopack] Remove worker helpers from the default runtime: #94372
- Extract App Shell from static prefetches: #94095
- docs: correct wording and casing in turbopack tracing guide: #94469
- Turbopack: refactor ServerActionManifestAsset to be lazy: #94377
- docs: typos and errors outside docs, error, examples folders: #94472
- Update vendored lodash to 4.18.1: #94473
- chore: reword cacheComponents jsDoc to lead with partial prerendering: #94474
- Upgrade React from
f0dfee38-20260529to43bcbf80-20260603: #94440 - Turbopack: Perform issue filtering without turbo-task functions: #93885
- Keep Instant DevTools locked when opening error overlay: #94357
- Revert "ci: run Linux Playwright jobs in prebuilt Microsoft container (#93794)": #94366
- fix(deps): bump @vercel/[email protected]: #93979
- Simplify turbo-tasks-backend: collapse single-impl traits and remove redundant Arc layers: #93983
- Turbopack: refactor to use
get_ecma_transform_rule: #94485 - [ci] Switch release-next-rspack to a more explicit environment name: #94480
- [ci] Set
persist-credentials: falsefor all GH actions: #94214 - Turbopack: fixup cache handler tracing: #94477
- [turbopack] Remove turbotask functions from
trait ResolveOrigin: #94324
Credits
Huge thanks to @sampoder, @acdlite, @RazinShafayet2007, @mischnic, @icyJoseph, @timneutkens, @vercel-release-bot, @bgw, @devjiwonchoi, @styfle, and @lukesandberg for helping!
- [turbopack] Treat local
- 16.3.0-canary.415 Jun 2026pre-release
Release notes
Open source →Misc Changes
- make
TaskInput::is_resolvedinlinable everywhere: #94213 - [App Shells] staged shell rendering in cached navs: #94441
- [App Shells] staged shell rendering during build: #94442
- docs: fix typos in
testing.md: #94446 - Keep the dev React debug channel on Node streams end to end: #94433
- test: pin material-ui link fixture dependencies: #94354
- Revert "Keep the dev React debug channel on Node streams end to end": #94459
- [turbopack] Only ship top-level async support in the runtime when needed: #94376
- Reland the debug channel on native Node streams, fixed for React 18: #94462
- Allow
unstable_retryfrom TS plugin check in Next.js Error APIs: #94460 - docs: fix typos in contribution guide: #94375
Credits
Huge thanks to @lukesandberg, @lubieowoce, @RazinShafayet2007, @unstubbable, @timneutkens, @eps1lon, @sampoder, and @devjiwonchoi for helping!
- make
- 16.3.0-canary.404 Jun 2026pre-release
Release notes
Open source →Misc Changes
- docs: add GitHub SSH authentication guidance: #94360
- Deprecate undocumented custom server methods: #94348
- Trace cacheHandler and cacheHandlers when using adapters: #94197
- refactor: make stage advancing logic more generic: #94349
- docs: document Cache Components behavior for navigation hooks: #94387
- fix: build hangs if sync IO aborts before root chunk is flushed: #94365
- refactor: make early/late checks stricter: #94358
- refactor: remove delayUntilRuntimeStage: #94350
- DiskFileSystem: store Effect full_path as Arc<Path>: #94332
- refactor: indicate which stage is the last stage in staged prerenders: #94430
- [CC] add shell stages: #94438
- instant: prompts on all fix cards, [group]-tagged CLI bullets, new docs slugs: #94017
- [turbopack] Add
BumpVec(vector implementation that takes aBump): #94296 - Ensure aborting has the same inputs as render: #94436
- [App Shells] App shells in runtime prefetches: #93801
- [turbopack] Optimize TaskInput implementations: #94202
Credits
Huge thanks to @timneutkens, @lubieowoce, @aurorascharff, @sokra, @sampoder, @eps1lon, and @lukesandberg for helping!
- 16.3.0-canary.393 Jun 2026pre-release
Release notes
Open source →Misc Changes
- Upgrade React from
c0cd4d5d-20260527tof0dfee38-20260529: #94245 - Turbopack: fix pages index normalization for --debug-build-paths: #94341
Credits
Huge thanks to @vercel-release-bot and @mischnic for helping!
- Upgrade React from
- 16.3.0-canary.383 Jun 2026pre-release
Release notes
Open source →Misc Changes
- [cd] Stop fetching all tags when searching for ancestor tag: #94302
- chore: lint-language output only warnings and errors: #94261
- DiskFileSystem: run write effects on a spawned task: #94140
- Disable
default-caseESLint rule for type-checked TypeScript files: #94316 - Handle a purged browser cache on back navigation: #94317
- Persist debug channel via
IndexedDBwithout blocking hydration: #94243 - Fix debug channel not closing on the client with Node streams: #94268
- refactor: use named arguments for StagedRenderingController: #94345
- Avoid bundling HMR refresh reducer in production: #94305
- Remove the instantNavigationDevToolsToggle flag: #94322
- doc: clarify rewrites execution order: #93765
- docs: update draftMode guide: #94155
- docs: cached functions from the client: #94301
- skip render dev overlay ux under private flag: #94346
- Turbopack: fix bundle-analyzer for NFT change: #93363
- Devirtualize the backend api inside of turbo_tasks and turbo-tasks-backend: #94007
- Delay Node Fizz piping until after render task: #94347
- Enable Node streams by default: #94311
- [tests] Use snapshots in debug-build-paths: #94352
- Turbopack: support turbopackIgnore on more traced calls: #94361
- [turbopack] Treat assignments to
module.exportsas side-effect free: #94293 - instant: enable navigation validation by default: #94312
- Turbopack: Move turbo-tasks/src/raw_vc.rs to turbo-tasks/src/vc/raw.rs: #94239
Credits
Huge thanks to @eps1lon, @icyJoseph, @sokra, @unstubbable, @lubieowoce, @timneutkens, @samselikoff, @huozhi, @mischnic, @lukesandberg, @sampoder, @aurorascharff, and @bgw for helping!
- 16.3.0-canary.372 Jun 2026pre-release
Release notes
Open source →Misc Changes
- Switch
TotalOrderF64tof64inConstantNumberto correctly handleNaN === NaNand0 === -0inside the Turbopack analyzer: #94172 - Use
serde_json::NumberinCompileTimeDefineValueand removeTotalOrderF64: #94177 - docs: bodySizeLimit measures raw HTTP body: #94137
- Update ctor from 0.10 to 1.0.6: #94045
- Include
--portinnext internal query-tracestartup hint and help example: #93961 - Turbopack: refactor NFT to add Endpoint.traced_files: #94224
- Turbopack: show codeframe when tracing too much: #94207
- fix(instrumentation): await instrumentation in RouteModule.prepare: #94306
- [turbopack] Function pointers are copy: #94273
- docs: accuracy and pappercuts: #94299
Credits
Huge thanks to @sampoder, @icyJoseph, @sokra, @mischnic, and @lukesandberg for helping!
- Switch
- 16.3.0-canary.3630 May 2026pre-release
Release notes
Open source →Misc Changes
- Turbopack analyzer: analyze ternaries + promises in string & nullish methods: #94187
- [turbopack] Break up
graph.rsin the analyzer into smaller files: #94211 - [turbopack] Add
explain()methods toWellKnownObjectKindandWellKnownFunctionKind: #94217 - [turbopack] Handle negative numbers as constants in the analyzer: #94218
- [turbopack] Use
ast_path.kinds()instead of mapping overast_pathin the analyzer: #94221 - [CLI] Exit non-zero with a clear message when next typegen fails: #94241
Credits
Huge thanks to @sampoder and @gaojude for helping!
- 16.3.0-canary.3530 May 2026pre-release
Release notes
Open source →Misc Changes
- Exclude static metadata and viewport from error recovery prerender when cache-components is enabled: #94134
- [turbopack] Shrink ReadRawVcFuture from 80 to 64 bytes: #94201
- [turbopack] Move
WellKnownObjectKind&WellKnownFunctionKindintowell_known/kinds.rsin the analyzer: #94209 - [turbopack] Move
require.context-related code into a seperate file in the analyzer: #94210
Credits
Huge thanks to @gnoff, @lukesandberg, and @sampoder for helping!