Gluon upgrade guide
Use this guide when moving an existing application or workspace to a newer Gluon release line.
Supported upgrade path
Gluon is released as one lockstep package train. The current release line is
1.10.0, and every official @gluonjs/* package and create-gluon ship at
the same version in that line. When you upgrade, keep every consumed Gluon
package on the same release version as the rest of the train.
Supported release-to-release upgrades are the versioned lines recorded in the
release archive and changelog. For the maintained documentation set, the
current supported target is 1.10.0; older versioned docs remain available in
the archive until their release line leaves support.
Runtime prerequisites
- Use Node
^22.12.0 || ^24.0.0; this is the published package-engine range. - Run browser verification in the maintained Playwright Chromium, Firefox, and WebKit lanes. This is not a promise for every branded browser release.
- Browser styling requires constructable
CSSStyleSheet,replaceSync(), andadoptedStyleSheets; Gluon does not provide a<style>fallback.
Read the support matrix before changing the application's Node or browser baseline in the same upgrade.
Policy facts
The current release policy distinguishes three states:
-
stable: public package surfaces, release guidance, and shipped runtime contracts that the versioned docs and package READMEs describe;
-
experimental: explicitly labeled RFC-backed or opt-in surfaces;
-
unsupported: behaviors the contract rejects or leaves outside the supported boundary.
-
1.0introduced the current semver policy: an incompatible public API change requires a major release. -
A deprecated API remains for at least the next stable minor, and the documented alternative, migration instructions, changelog entry, and TypeScript metadata are provided where applicable.
-
The documentation tree and package portal use the same versioned release line as the released packages.
-
Application code must import public package entry points only. Private repository imports and deep package internals are unsupported, and Gluon does not provide automatic rewriting for them.
Before upgrading
- Start from a clean worktree or commit the pre-upgrade state on a dedicated branch so rollback cannot discard unrelated changes.
- Record the installed Gluon version from
package.jsonand the lockfile. - Inventory every consumed
@gluonjs/*package andcreate-gluon. - Review the release archive, changelog, and diagnostic catalog for the version you are moving to.
- Keep the package set lockstep on one version before and after the upgrade.
single-package app
Use these commands from the application root:
npm pkg get dependencies devDependencies
npm ls --depth=0 @gluonjs/core @gluonjs/reactivity @gluonjs/router @gluonjs/store @gluonjs/ssr @gluonjs/i18n @gluonjs/vite @gluonjs/gluon-components-vite @gluonjs/test-utils @gluonjs/devtools @gluonjs/devtools-api @gluonjs/graph @gluonjs/language-server @gluonjs/vue-migration-analyzer @gluonjs/quarks @gluonjs/atoms @gluonjs/molecules @gluonjs/organisms @gluonjs/json-forms create-gluon
npm install --save-exact @gluonjs/core@1.10.0 @gluonjs/reactivity@1.10.0 @gluonjs/router@1.10.0 @gluonjs/store@1.10.0
npm ci
git diff -- package.json package-lock.json
npm run typecheck
npm run build
npm test
The install line is an example for an application consuming those four
packages. Remove packages it does not consume and add every other consumed
official package with the same exact 1.10.0 target.
Workspace or root consumer
Use these commands from the workspace root:
npm pkg get workspaces
npm ls --depth=0 @gluonjs/core @gluonjs/reactivity @gluonjs/router @gluonjs/store @gluonjs/ssr @gluonjs/i18n @gluonjs/vite @gluonjs/gluon-components-vite @gluonjs/test-utils @gluonjs/devtools @gluonjs/devtools-api @gluonjs/graph @gluonjs/language-server @gluonjs/vue-migration-analyzer @gluonjs/quarks @gluonjs/atoms @gluonjs/molecules @gluonjs/organisms @gluonjs/json-forms create-gluon
npm install --workspace ./apps/storefront --save-exact @gluonjs/core@1.10.0 @gluonjs/router@1.10.0 @gluonjs/store@1.10.0
npm install --workspace ./apps/server --save-exact @gluonjs/ssr@1.10.0 @gluonjs/router@1.10.0 @gluonjs/store@1.10.0
npm ci
git diff -- package.json package-lock.json packages/*/package.json packages/*/package-lock.json
npm run typecheck
npm run build
npm test
Replace the example workspace paths and package lists with the real consumers.
If the workspace root itself consumes Gluon, update it with
npm install --include-workspace-root --save-exact and the same target version.
Opt into Chromium Trusted Types enforcement
Existing applications do not need a policy. An application that enables
require-trusted-types-for 'script' must create and allow one named policy,
then assign { policyName, policy } to app.config.trustedTypes before mount or
hydration. Pass the same configuration to direct hydrate() and
applyProgressivePatch() calls. Replace reviewed unsafeHTML() values with
trustedHTML() where policy-required ownership should be explicit; this does
not sanitize the markup. Test missing-policy and rejected-policy diagnostics in
the application's CSP environment. Gluon's conformance evidence is Chromium
specific and does not establish a cross-browser enforcement claim.
Rollback
If the upgrade does not validate, first inspect git diff and confirm that the
listed files contain only upgrade changes. Then restore the previous lockstep
release before making further edits:
git restore package.json package-lock.json
npm ci
npm run typecheck
npm run build
npm test
For a workspace, restore the same files in every affected package before re-running the clean install and verification commands.
Verification matrix
Match the supported release with the existing customer-flow evidence:
| Surface | Point to the real command or API |
|---|---|
| SSR and hydration | npm run test:ssr and tests/hydration.spec.ts |
| Router deep links and back/forward | npm run test:router-browser and tests/router.spec.ts |
| Store persistence | npm run test:store and tests/shop-example.spec.ts |
| Usage-driven component styles | npm run test:browser and tests/styles-and-element.spec.ts |
| Language server and editor tooling | npm run test:language-server and gluon-language-server --stdio |