Repository navigation
chore(web): upgrade to Node 26, TypeScript 7, Next 16.4 and pnpm 12 - #159
Merged
Yash Shrivastava (alephys26) merged 16 commits intoOct 28, 2026
Merged
Conversation
- Node 26 in .nvmrc, the Docker images and CI; install pnpm directly since Node 25+ no longer bundles corepack - pnpm 12.15.0, migrating ignoredBuiltDependencies to allowBuilds - TypeScript 7 for tsc, aliased alongside @typescript/typescript6 so typescript-eslint keeps the TS 6 API - next and eslint-config-next 16.4.3, eslint 10, @types/node 26, js-yaml 5, prettier-plugin-tailwindcss 0.8.1 - Track @patterninc/pattern-ui latest and replace the removed I18nEnglishProvider with SimpleProvider - Regenerate the lockfile
Contributor
There was a problem hiding this comment.
🔵 Needs a closer look
The coordinated major-version upgrades need final human validation, particularly because the Docker build remains untested.
No open issues 🎉
What changed in this PR
Updates the web toolchain across local builds, CI, and Docker, and adapts the app’s providers to the latest Pattern UI package.
Changes:
- Upgrades Node, pnpm, Next.js, and related dependencies, with separate TypeScript 7 compiler and TypeScript 6 tooling packages.
- Replaces Corepack-based pnpm setup and updates CI caching and dependency-build settings.
- Switches to
SimpleProviderand applies a formatting-only change to filter types.
| File | Description |
|---|---|
web/src/components/FilterMenu/filterTypes.ts |
Reformats a union type without changing behavior. |
web/src/common/ClientLayout/AppRoot.tsx |
Replaces separate localization, tooltip, and pulse providers with SimpleProvider. |
web/pnpm-workspace.yaml |
Migrates dependency-build restrictions to allowBuilds. |
web/package.json |
Updates dependencies and configures compiler/tooling aliases. |
web/.nvmrc |
Selects Node 26 for local development and CI. |
Dockerfile |
Updates Node images and installs pnpm directly through npm. |
build.sh |
Installs the pinned pnpm version when pnpm is absent. |
.github/workflows/build.yml |
Adds explicit Node and pnpm setup with caching. |
Review effort: Balanced
- Build Next with output: 'standalone' and run its server.js in Docker, so the runtime image no longer needs pnpm or the full node_modules - Build the web stage on the Pattern parent Node image (public.ecr.aws/patterninc/parent-image/nodejs:26) - Skip the optional sharp dependency so the standalone output has no native binaries and runs on Debian after an Alpine build - Convert next.config.mjs to next.config.ts and document why ignoreBuildErrors stays - Run next typegen before tsc so type-check works on a fresh checkout, and type check before building - Add the Next.js managed AGENTS.md block in web/ and link it from the root AGENTS.md - Remove the legacy .eslintrc.json, the unused index.html, and the duplicate src/app/public/favicon.png
…one Node ARG - The web builder installs the pnpm version named in web/package.json packageManager, so the version is pinned in one place - One NODE_MAJOR build arg feeds both Node base images - Allow pnpm's install script in npm 11's allowScripts so the native pnpm binary is set up
- Build the web stage on node:26-bookworm again and copy the full web app into the runtime image - Start the UI with the installed next binary, so the runtime image still doesn't need pnpm - Remove the NODE_MAJOR build arg - Install sharp again now that the standalone output no longer has to avoid native binaries
- Build the web stage on node:26-bookworm-slim - List sharp in ignoredOptionalDependencies since Heimdall doesn't use next/image
Yash Shrivastava (alephys26)
approved these changes
Oct 28, 2026
sanketjadhavSF
approved these changes
Oct 28, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Upgrades the web toolchain and outdated dependencies.
this superseeds #155 and if we merge this we can close that
web/.nvmrc, CI, and both Docker stagesweb/package.json. That makespackageManagerthe only place the version is pinned.pnpm/setup@v3, replacing the hand-rolled cache step.ignoredBuiltDependenciesbecameallowBuildsfor pnpm 12. BecauseallowBuildsalready blocks dependency scripts,--ignore-scriptswas dropped frompnpm install.minimumReleaseAge: 1440, since that is now pnpm's default.typescriptis aliased to@typescript/typescript6for typescript-eslint and Next.@typescript/nativeis aliased totypescript@^7, sotscandpnpm type-checkrun TS 7.next build. RemovedignoreBuildErrors, so every build (CI, Docker and local) fails on type errors.@patterninc/pattern-uitrackslatest. It removedi18n-english-provider, soAppRootnow usesSimpleProvider, which also suppliesTooltipProviderandPulseProvider.build.ymlwas still testing on 1.25.0. It now matches.Next 16 cleanup
next.config.mjswas converted to typescript, which is what next would do by default for a new project.type-checkrunsnext typegen && tsc --noEmit, so it works on a fresh checkout.web/AGENTS.mdwith the Next.js-managed block..eslintrc.json(ESLint 10 ignores it), the unusedweb/index.html, and a duplicateweb/src/app/public/favicon.pngthat was never served.sharpis inignoredOptionalDependencies, so it's never installed, because Heimdall doesn't usenext/imageoptimization (makes docker image smaller)../node_modules/.bin/next start.Testing
pnpm lint,pnpm type-check(TS 7),pnpm prettier-checkand./build.sh --uipass locally on Node 26 / pnpm 12.15.0.next buildfails on a deliberate type error.