Alokai

1.0

a new registry host, a Node 20/22 floor, and @alokai/connect in place of five core packages

Showing every integration. Set your stack in Preferences and this page hides what isn't yours.

Majorlatest 1.0.2 · 20 Jun 2025Node 20.* || >=22.14.0

Three changes block the upgrade before you change any code. Node 18 can't install this release, enterprise packages come from a new registry host, and the five @vue-storefront/* core packages are gone in favour of @alokai/connect. That last change alone is why every published package in 1.0.0 takes a major version, so a long version table here doesn't mean a long list of API changes. Read the locale change next: the locale moves from the vsf-locale cookie to an x-alokai-locale header, and that changes server-side code in both storefronts.

The two patches after 1.0.0 are small, but one of them isn't optional. If you installed a CMS or search module on 1.0.0, the install wrote release-candidate vendor pins into your own app manifests. 1.0.1 corrects those pins for new installs, but only you can correct the copies already in your manifests.

Highlights

Node 18 no longer installs - the floor is Node 20, and 22.14 in practice

Action neededCLI & tooling@alokai/cli
Why:

Every published package checks the Node version on install, so your runtime decides whether you can take anything else in this release.

The root manifest's engines.node moves from ^18 to 20.* || >=22.14.0. The published packages move their own engines.node from >=18 to the same range - @alokai/connect, @alokai/cli and @vsf-enterprise/sapcc-api among them. The release also expects @types/node at ^22.13.17 and .nvmrc / .node-version at 22.14.0.

For you:

On Node 18 the install is refused, so nothing else in this release reaches you until you move the runtime. Node 20 satisfies the range, but the release records it as untested and doesn't recommend it, so move to 22.14.0 or higher. Update every CI job that pins a Node version too - otherwise the pipeline fails on the same engine check.

See the step in the upgrade guide →

Enterprise packages now come from npm.alokai.cloud

Action neededCLI & tooling
Why:

A project that still points at the old registry host can't resolve any @alokai or @vsf-enterprise version in this release. The error looks like a missing package, not a registry change.

.npmrc maps the @vsf-enterprise: and @alokai: scopes to https://npm.alokai.cloud, replacing https://registrynpm.storefrontcloud.io.

For you:

Point .npmrc at the new host and log in against it before you install - your stored credentials belong to the old host. Until you do, none of this release's @alokai and @vsf-enterprise versions resolve, so the install fails before any code change matters.

See the step in the upgrade guide →

Five @vue-storefront/* core packages collapse into one - @alokai/connect

Action neededAlokai Connect@alokai/connect@vue-storefront/next@vue-storefront/nuxt
Why:

Alokai's core shipped as five separate @vue-storefront/* packages. They become one package, and only the packaging changes - the names, signatures and behaviour stay the same.

@alokai/connect and its subpaths replace @vue-storefront/middleware, @vue-storefront/sdk, @vue-storefront/logger, @vue-storefront/unified-data-model and @vue-storefront/multistore. The subpaths are @alokai/connect/middleware, @alokai/connect/sdk, @alokai/connect/logger, @alokai/connect/integration-kit and @alokai/connect/config-switcher. The data models and the unified method declarations are at the @alokai/connect root.

Ten symbols and their types are on @alokai/connect/integration-kit, not on the root: apiClientFactory, validatePassword, unifiedExtensionFactory, createUnifiedCmsExtension, getNormalizers, assignToNormalizerContext, mergeNormalizers, getApiDefinitions, defineAddCustomFieldsFactory and toContextualizedNormalizers.

@alokai/connect itself is at 1.0.0. Every published integration, SDK and storefront package in this release is rebuilt against it, which is why all 62 of them take a major version.

For you:

The old package names aren't installable any more, so an untouched project doesn't build until you repoint every import. For most imports that's a find-and-replace. Multistore is the exception - its configuration changes shape, and it has a highlight of its own.

See the step in the upgrade guide →

Multistore becomes the config switcher, and its configuration changes shape

Action neededAlokai Connect@alokai/connect
Why:

Multistore is the one part of the move to @alokai/connect that isn't a rename. Its configuration object changes shape, so a project that only repoints the import doesn't compile.

@vue-storefront/multistore is now @alokai/connect/config-switcher, and createMultistoreExtension is now createConfigSwitcherExtension. The old fetchConfiguration / mergeConfigurations / cacheManagerFactory object becomes a single call.

Each store's settings nest one level deeper, under an api key. switchStrategy: "domain" reproduces the old behaviour. mergeConfigurations has no replacement and needs none. cacheTTL, in seconds, replaces cacheManagerFactory.

For you:

If you were using the multistore functionality, rewrite multistore.config.ts - repointing its import isn't enough. Delete the apps/storefront-middleware/multistore directory and its multistore:dev script too.

See the step in the upgrade guide →
Action neededStorefront@vue-storefront/next@alokai/cookies-bridge
Why:

The locale traveled in a cookie, and a CDN isn't handed cookies, so you couldn't cache responses that depended on the locale. Carrying it in a header makes them cacheable.

Every SDK request now carries an x-alokai-locale header. The middleware turns that header back into a vsf-locale cookie on each request, so integrations that read the cookie keep working.

In @vue-storefront/next, getSdk gains a getLocale option. Your own server-side wrapper in apps/storefront-unified-nextjs/sdk/index.ts becomes async, because it resolves the locale before it builds the SDK.

A project that doesn't use @alokai/connect gets the same conversion from @alokai/cookies-bridge. Install it and register createCookiesBridgeExtension([{ header: 'x-alokai-locale', cookie: 'vsf-locale' }]) as the first entry in each integration's extensions list.

For you:

The cost is server-side code in Next.js. You have to await getSdk() everywhere on the server and pass the locale in - sdk/index.ts, middleware.ts and components/providers.tsx all change.

See the step in the upgrade guide →
Action neededStorefront@vue-storefront/nuxt
Why:

The middleware writes the locale cookie itself now. A Nuxt app that keeps writing it sets a value the middleware overwrites on every request, and keeps a cookie on the responses the header change makes cacheable.

Nuxt stops writing the locale cookie and drops cookieNames.locale.

For you:

The cookie writes live in files your project owns, so remove them by hand from localization.ts and composables/useLocation/useLocation.ts.

See the step in the upgrade guide →

All changes by area

Every change in 1.0 has one entry here, grouped by area. The highlights, from above and from the patch sections, are here too, marked with a star. Open an area to see its changes, and open a change to read why it changed and what changed. The upgrade guide from 0.2.0 to 1.0.2 collects the migration steps for the whole line.

Alokai ConnectAction needed3 changes

changed Five @vue-storefront/* core packages collapse into one - @alokai/connect highlight Action needed

The old package names aren't installable any more, so an untouched project doesn't build until you repoint every import. For most imports that's a find-and-replace; multistore is the exception.

step →
What changed ▸
Why

Alokai's core shipped as five separate @vue-storefront/* packages. They become one package, and only the packaging changes - the names, signatures and behaviour stay the same.

Changed

@alokai/connect and its subpaths - @alokai/connect/middleware, @alokai/connect/sdk, @alokai/connect/logger, @alokai/connect/integration-kit, @alokai/connect/config-switcher - replace @vue-storefront/middleware, @vue-storefront/sdk, @vue-storefront/logger, @vue-storefront/unified-data-model and @vue-storefront/multistore.

Ten symbols and their types are on @alokai/connect/integration-kit, not on the root: apiClientFactory, validatePassword, unifiedExtensionFactory, createUnifiedCmsExtension, getNormalizers, assignToNormalizerContext, mergeNormalizers, getApiDefinitions, defineAddCustomFieldsFactory and toContextualizedNormalizers. Every published package is rebuilt against @alokai/connect, which is why all 62 take a major version.

@alokai/connect@vue-storefront/next@vue-storefront/nuxt

changed Multistore becomes the config switcher, and its configuration changes shape highlight Action needed

If you were using the multistore functionality, rewrite multistore.config.ts - repointing its import isn't enough. Delete the apps/storefront-middleware/multistore directory and its multistore:dev script too.

step →
What changed ▸
Why

Multistore is the one part of the move to @alokai/connect that isn't a rename. Its configuration object changes shape, so a project that only repoints the import doesn't compile.

Changed

@vue-storefront/multistore is now @alokai/connect/config-switcher, and createMultistoreExtension is now createConfigSwitcherExtension. Each store's settings nest one level deeper, under an api key. switchStrategy: "domain" reproduces the old behaviour, mergeConfigurations has no replacement and needs none, and cacheTTL, in seconds, replaces cacheManagerFactory.

@alokai/connect

changed The middleware upload ceiling doubles to 20MB

The default maxFileSize is still 5MB. You can now set the limit higher, but if you don't set it, you get the same limit as before.

What changed ▸
Changed

In @alokai/connect, the middleware's absolute cap on uploaded file size doubles from 10MB to 20MB.

@alokai/connect
StorefrontAction needed13 changes

changed Locale travels as the x-alokai-locale header instead of the vsf-locale cookie highlight Action needed

In a Next.js project, you have to await getSdk() everywhere on the server and pass the locale in - sdk/index.ts, middleware.ts and components/providers.tsx all change.

step →
What changed ▸
Why

The locale traveled in a cookie, and a CDN isn't handed cookies, so you couldn't cache responses that depended on the locale. Carrying it in a header makes them cacheable.

Changed

Every SDK request carries an x-alokai-locale header. The middleware turns it back into a vsf-locale cookie, so integrations that read the cookie keep working. getSdk in @vue-storefront/next gains a getLocale option, which makes your own apps/storefront-unified-nextjs/sdk/index.ts wrapper async.

A project that doesn't use @alokai/connect gets the same conversion by registering createCookiesBridgeExtension([{ header: 'x-alokai-locale', cookie: 'vsf-locale' }]) from @alokai/cookies-bridge as the first entry in each integration's extensions list.

@vue-storefront/next@alokai/cookies-bridge

changed Nuxt stops writing the locale cookie highlight Action needed

Remove the locale cookie writes by hand from your own localization.ts and composables/useLocation/useLocation.ts - they live in files your project owns.

step →
What changed ▸
Why

The middleware writes the locale cookie itself now. A Nuxt app that keeps writing it sets a value the middleware overwrites on every request, and keeps a cookie on the responses the header change makes cacheable.

Changed

Nuxt stops writing the locale cookie and drops cookieNames.locale.

@vue-storefront/nuxt

added The mock CMS gains an injectEnvironment endpoint

You can change the mock's configuration per run, for example in end-to-end tests.

What changed ▸
Changed

@vsf-enterprise/cms-mock-api has a new injectEnvironment endpoint. It overwrites the predefined cms-mock configuration.

@vsf-enterprise/cms-mock-api

added createAlokaiMiddleware and a Nuxt server handler append the request path headers

Your server-side code can read the request path from x-pathname, instead of reconstructing it.

What changed ▸
Changed

createAlokaiMiddleware in @vue-storefront/next wraps your own Next.js middleware and registers the Alokai-specific logic. It appends x-pathname and x-search to the Next.js request object.

@vue-storefront/nuxt has a new server middleware handler that appends the same two headers to the Nuxt request object.

@vue-storefront/next@vue-storefront/nuxt

changed getPathnameFromRequestHeaders is not in the shipped release

Don't plan around getPathnameFromRequestHeaders. Read the pathname from the x-pathname header that createAlokaiMiddleware appends.

What changed ▸
Changed

One entry of this release announces getPathnameFromRequestHeaders as added to @vue-storefront/next, and another announces it as removed. The shipped 6.0.0 doesn't export the function.

@vue-storefront/next

added defineSdkModule lets each SDK module live in its own file

Nothing forces the layout on an existing project. But @vsf-enterprise/module-kit now writes installed modules in that shape, so if your config stays inline, the modules you install don't match the rest of it.

step →
What changed ▸
Changed

With defineSdkModule, each SDK module can live in its own file, instead of inline in the SDK config. The files go under sdk/modules/ in Next.js or sdk-modules/ in Nuxt, and an index.ts re-exports them. A widened defineSdkConfig accepts those re-exported modules.

@vue-storefront/next@vue-storefront/nuxt

added The storefront can set the config-switcher header itself

Your storefront can set the x-alokai-middleware-config-id header itself, instead of relying on whatever the middleware infers.

What changed ▸
Changed

@vue-storefront/next re-exports defineGetConfigSwitcherHeader from @alokai/connect/sdk, and Nuxt registers it as an auto-import. The defaultRequestConfig of middlewareModule accepts a getConfigSwitcherHeader function.

@vue-storefront/next@vue-storefront/nuxt

fixed cms-components-utils drops lodash-es for Edge Runtime compatibility

The package now runs on the Edge Runtime. Before, it couldn't.

What changed ▸
Changed

@vsf-enterprise/cms-components-utils no longer depends on lodash-es, which doesn't work on the Edge Runtime. The package has its own kebab-case helper instead.

@vsf-enterprise/cms-components-utils

fixed The Nuxt cart page stops throwing on jw-paginate in dev mode Action needed

If you run the Nuxt storefront in dev mode, add jw-paginate to the dev optimizeDeps.include list in nuxt.config.ts yourself. Production builds were never affected.

step →
What changed ▸
Why

In dev mode, the Nuxt cart page threw SyntaxError: The requested module '/node_modules/jw-paginate/lib/jw-paginate.js' does not provide an export named 'default'.

Changed

The fix is a jw-paginate entry in the dev optimizeDeps.include list of nuxt.config.ts. That file belongs to your project, so no package in the upgrade changes it.

fixed The Nuxt server middleware gains its missing h3 imports

The fix comes with the package version, so you have nothing to change.

What changed ▸
Changed

The Nuxt server middleware in @vue-storefront/nuxt now imports defineEventHandler and getRequestURL from h3. Before, these imports were missing.

@vue-storefront/nuxt

changed The storefront metatag content carries the current company name

The metatags are in your own app files, so your copies keep the old name until you edit them.

What changed ▸
Changed

The metatag content in both storefronts uses the current company name.

changed The Nuxt Tailwind preset is replaced wholesale Action needed

Replace the file by hand, then run yarn build:packages so the apps see the new preset.

step →
What changed ▸
Why

packages/tailwind-config/src/nuxt.ts is a file in your project, not a package, so the version bump doesn't update it.

Changed

The whole Nuxt Tailwind preset in packages/tailwind-config/src/nuxt.ts is new. It builds on @storefront-ui/react/tailwind-config, with sfTypography as a plugin. The screen breakpoints sit under theme.extend.

fixed A newly generated project's version field is a real version number highlight 1.0.2

This reaches only the projects you generate from now on, never an existing project through an upgrade. If your project was generated before 1.0.2, it still has the tag string, carrying whichever version generated it. Nothing consumes it - that manifest is private: true - so there's nothing to repair.

What changed ▸
Why

The version field of a generated project held the ecosystem tag string where a version number belongs.

Changed

The CLI writes the version number alone into the root package.json of a generated project, where it used to write "version": "@alokai/ecosystem@1.0.1". The same value goes to the root manifest and to every apps/*/package.json.

CLI & toolingAction needed22 changes

changed Node 18 no longer installs - the floor is Node 20, and 22.14 in practice highlight Action needed

On Node 18 the install is refused. Node 20 satisfies the range but is recorded as untested, so move to 22.14.0 or higher - and update every CI job that pins a Node version too.

step →
What changed ▸
Why

Every published package checks the Node version on install, so your runtime decides whether you can take anything else in this release.

Changed

engines.node moves to 20.* || >=22.14.0 in the root manifest (from ^18) and in the published packages - @alokai/connect, @alokai/cli and @vsf-enterprise/sapcc-api among them. The release also expects @types/node at ^22.13.17 and .nvmrc / .node-version at 22.14.0.

@alokai/cli

changed Enterprise packages now come from npm.alokai.cloud highlight Action needed

Point .npmrc at the new host and log in against it - until you do, none of this release's @alokai and @vsf-enterprise versions resolve.

step →
What changed ▸
Why

A project that still points at the old registry host can't resolve any @alokai or @vsf-enterprise version in this release. The error looks like a missing package, not a registry change.

Changed

.npmrc maps the @vsf-enterprise: and @alokai: scopes to https://npm.alokai.cloud, replacing https://registrynpm.storefrontcloud.io.

security express moves to ^4.20.0, closing a security advisory

The upgrade brings in the fix. You have no credential to rotate and no code to change.

What changed ▸
Changed

express moves to ^4.20.0 in every package that embeds it, @vsf-enterprise/stripe-commercetools included. The update fixes the vulnerability in GHSA-qw6h-vgh9-j6wx.

changed axios moves to ^1.7.9 across the integration packages

The new version comes inside the packages you install, so you have nothing to change.

What changed ▸
Changed

axios moves to ^1.7.9 in 18 of the integration packages.

added @alokai/cli is new to your project and owns the store lifecycle

The binary comes with the package. The store script is a line in your own root package.json.

What changed ▸
Changed

@alokai/cli is new to your project at 1.0.0. The store add, store move, store remove, store build, store dev, store start, store test, store changed, and store deploy commands all run through its alokai-cli binary. A generated project exposes the binary as a store script in its root package.json.

@alokai/cli

added store deploy takes framework, project-name and cloud-region flags

A deploy that would have failed halfway now fails at the start and names what's missing.

What changed ▸
Changed

store deploy takes --framework, --project-name, and --cloud-region. They take precedence over the matching alokai.config.json values. You can't combine them with --all.

store deploy also checks for missing dependencies before it starts, instead of failing part-way through a deploy.

@alokai/cli

added store changed takes --deployable

With --deployable, a store with no deployment configuration no longer appears in the report.

What changed ▸
Changed

store changed takes --deployable. With it, the report lists only the changes to deployable stores.

@alokai/cli

added store test takes --playwright-options

Your CI can now detect a failing store test run.

What changed ▸
Changed

store test takes --playwright-options (-p), for example alokai-cli store test --playwright-options="--project=nuxt-desktop --headed". A run over several stores tests them one after another, not in parallel through Turbo's pipeline. The command returns exit code 1 when it fails, and it works with --ui.

@alokai/cli

changed Store composition reads ancestor env files and symlinks node_modules

Inside a store, hoisted and non-hoisted copies of a dependency no longer disagree about types.

What changed ▸
Changed

Store composition looks for .env and .env.example in ancestor stores before it falls back to the base apps. It creates .env from an overridden .env.example in every app. It also symlinks node_modules into each app under stores/.

@alokai/cli

changed Adopting the CLI needs cross-env on Windows and a renamed config field

Your editor reads the schema from the installed CLI, so the schema stays in step with the version you're on.

What changed ▸
Changed

On Windows, adopting the CLI needs cross-env in the project - yarn add cross-env -W -D. alokai.config.json carries deployment.framework instead of deployment.frontend. Its $schema points at node_modules/@alokai/cli/lib/static/alokaiConfigSchema.json instead of a copy checked into the repository.

@alokai/cli

changed create builds a project from the published release bundle Action needed

If you call create from a script, template, or pipeline, replace --inheritance-only with --template there. The old name gets an unknown-flag error, not a warning.

step →
What changed ▸
Why

A scaffolding pipeline that passes the old flag name to create breaks the next time it runs.

Changed

create builds a project from the published release bundle, not from a repository checkout. Its --inheritance-only flag is renamed to --template. The new consoleProjectName and cloudRegion flags write the Console project name and cloud region into alokai.config.json.

add-module installs modules at that release's version. It takes --store-id to name the store to install into.

@vsf-enterprise/storefront-cli

removed module-kit 3.0.0 removes three pieces of its authoring API Action needed

If you have your own installation schemas or file visitors, update them, or they don't compile against 3.0.0.

step →
What changed ▸
Why

Schemas written against 2.1.1 use symbols that no longer exist, so they fail to compile rather than behave differently.

Changed

The module installation context no longer has appsDirectory - a store object replaces it. addSdkMiddlewareModule replaces modifySdkConfig. createRemoveSdkPropertyVisitor is removed.

createAddMiddlewareModuleVisitor emits export const x = defineSdkModule(...). It passes a headers variable instead of the output of getRequestHeaders(). modifyFile is optional on defineSchema.

baseCmsSchemas also patches the PLP and PDP imports, adds the unifiedCms SDK module, and fixes the Nuxt Accordion import.

@vsf-enterprise/module-kit

fixed file-modifier handles export const and creates a missing input path

Both fixes apply the next time a module installation runs.

What changed ▸
Changed

pushExport handles export const declarations and overwrites an existing export of the same name. With type: "javascript", modifyFile creates the inputPath when it's missing.

@vsf-enterprise/file-modifier

changed storefront-cli detects @alokai/connect and keeps .gitignore and .npmrc in new projects

A project you generate with create gets its .gitignore and .npmrc intact.

What changed ▸
Changed

The CLI detects @alokai/connect in a project instead of the legacy middleware package. create now restores .gitignore and .npmrc in the project it generates. npm pack leaves both out of the published bundle, so they ship with a .template suffix that create strips.

@vsf-enterprise/storefront-cli

fixed Fixes land across the CLI packages

The upgrade brings in all of these fixes.

What changed ▸
Changed

store changed on a repository with a single commit is fixed, and so is the deployment of nested stores. The spinner no longer hides --verbose logs for start and build. A generated start:standalone script no longer ignores an existing start script.

In dev mode, middleware and SSR URLs keep a path suffix such as /api. The extensions on the CLI bin scripts are fixed. The missing defu, get-port-please, and tiny-exec dependencies are added.

@alokai/cli@vsf-enterprise/storefront-cli

added @alokai/cli reads CONSOLE_API_URL and says more when a deploy fails

You can point a deploy at a non-default Console endpoint, and a failed deploy gives you more to go on.

What changed ▸
Changed

The CLI reads CONSOLE_API_URL from the environment. deploy prints more debug output when it fails.

@alokai/cli

fixed The CMS and search modules you install now pin stable vendor packages, not release candidates highlight Action needed 1.0.1

If you added a CMS or search module while on 1.0.0, your app manifests still pin the release candidates, and the upgrade doesn't touch them. Bump them yourself. If you install one of these modules after upgrading, you get the stable versions with nothing to do.

step →
What changed ▸
Why

On 1.0.0, installing a CMS or search module pinned release-candidate builds of its vendor packages in your app manifests. That's vendor code that was never meant to reach production.

Changed

Installing one of eight modules now pins the stable releases of its vendor packages. The eight are Amplience, Bloomreach Content, Builder.io, Contentful, Contentstack, SAP SmartEdit, Storyblok, and Coveo. The pins move like this: @vsf-enterprise/contentful-api and @vsf-enterprise/contentful-sdk 6.0.0-rc.3 -> 6.0.0, @vsf-enterprise/amplience-api 6.0.0-rc.3 -> 6.0.0 with @vsf-enterprise/amplience-sdk 4.0.0-rc.3 -> 4.0.0, @vsf-enterprise/bloomreach-content-manager 2.0.0-rc.3 -> 2.0.0 with @vsf-enterprise/bloomreach-content-sdk 5.0.0-rc.3 -> 5.0.0, @vsf-enterprise/builderio-sdk 4.0.0-rc.3 -> 4.0.0, @vsf-enterprise/contentstack-api 6.0.0-rc.3 -> 6.0.0 with @vsf-enterprise/contentstack-sdk 5.0.0-rc.3 -> 5.0.0, @vsf-enterprise/smartedit-api 3.0.0-rc.3 -> 3.0.0 with @vsf-enterprise/smartedit-sdk 2.0.0-rc.3 -> 2.0.0, @vsf-enterprise/storyblok-api 3.0.0-rc.3 -> 3.0.0 with @vsf-enterprise/storyblok-sdk 2.0.0-rc.2 -> 2.0.0, and @vsf-enterprise/coveo-api 3.0.0-rc.3 -> 3.0.0.

changed Project generation stops writing commercetools types into every project Action needed 1.0.1

A SAP Commerce Cloud, Salesforce Commerce Cloud, Magento, or BigCommerce project generated on 1.0.0 or earlier still carries the dependency, and the upgrade can't take it back. You can safely remove it: nothing outside a commercetools store's own checkout code imports it.

step →
What changed ▸
Why

Every generated project got a commercetools types package, whatever its platform. A -types package is how tooling and the next person to open your repository tell which platform a project integrates, so on any other platform it sent a false signal.

Changed

Project generation no longer writes @vsf-enterprise/commercetools-types into apps/storefront-middleware/package.json for platforms other than commercetools.

added Module authoring can write into an integration's middleware configuration 1.0.1

If you write modules, your module's install.js can add its own configuration keys instead of asking developers to paste them in.

What changed ▸
Changed

createAddIntegrationConfigPropertiesVisitor in @vsf-enterprise/module-kit adds properties to the configuration object in an integration's integrations/<integration>/config.ts. For example, createAddIntegrationConfigPropertiesVisitor('api: { uri: process.env.API_URI }') adds that api entry.

@vsf-enterprise/module-kit

added A per-store lint fix script ships with newly generated projects 1.0.1

The upgrade doesn't add this script to a project that already exists. If you want to lint a single store, add it yourself. Skip it and nothing breaks - you keep linting the whole workspace with lint:fix.

step →
What changed ▸
Changed

A newly generated project's root package.json has a lint:store:fix script, node scripts/lint-stores.mjs, and the @colors/colors devDependency it needs. scripts/lint-stores.mjs finds the folders to lint by reading apps/ instead of a hardcoded list. So it also covers any app your project added.

fixed Every alokai-cli store command works on a project with no frontend app highlight 1.0.2

If your project runs the middleware without a storefront app, store build, store dev, and store deploy now work on it. The fix is in @alokai/cli@1.0.1, and you get it only once you move to that version. Projects with a Next.js or Nuxt app never hit the error and see no difference.

What changed ▸
Why

On a project whose apps/ held only the middleware, any command that read alokai.config.json failed, not just deployment.

Changed

The CLI no longer throws Default framework not found when apps/ holds neither storefront-unified-nextjs nor storefront-unified-nuxt. It leaves deployment.framework empty in the resolved store config instead.

@alokai/cli

added The integration boilerplate is installable for the first time 1.0.2

If you're starting your own integration, you can install the boilerplate for the first time. If you aren't, there's nothing here for you.

What changed ▸
Changed

@alokai/boilerplate-integration was private: true until this release and was never on the registry. So 1.0.1 is its first published version, not an upgrade from an earlier one. Its engines.node is >=16.x, not the workspace floor.

@alokai/boilerplate-integration
SAP Commerce CloudAction needed3 changes

changed sapccModule is rebuilt on middlewareModule and two cart methods are renamed Action needed

Calls to the old cart method names no longer typecheck, so rename them. If you built the SAPCC module yourself, swap it for sapccModule to get the token refresh and the image utility.

step →
What changed ▸
Why

A SAPCC module you built yourself from middlewareModule and SapccEndpoints didn't refresh an expired token and had no image utility.

Changed

sapccModule in @vsf-enterprise/sapcc-sdk is built on middlewareModule and SapccEndpoints. It refreshes an expired token on its own and ships a transformImageUrl utility. addCartEntry and updateCartEntry are renamed to addToCart and updateCart.

@vsf-enterprise/sapcc-sdk

fixed Per-method token modes work again in the SAPCC API

If you set per-method token modes, they take effect with this version, so the methods you listed can now carry a different token than before.

What changed ▸
Changed

@vsf-enterprise/sapcc-api applies a methodsTokenModes map such as { getProduct: TokenModes.APPLICATION }. Before this release, it ignored the map and every request used the same token.

@vsf-enterprise/sapcc-api

changed The SAP ASM module writes its own asmUri configuration on install Action needed 1.0.1

If you installed the module before this release, you have neither, and the upgrade doesn't add them. The module can't reach the assisted service endpoints until you add both yourself.

step →
What changed ▸
Why

A sap-asm install performed before this release left the assisted service endpoints with no URI to call.

Changed

Installing the sap-asm module writes asmUri: process.env.SAPCC_ASM_API_URI into configuration.api in apps/storefront-middleware/integrations/sapcc/config.ts. It also appends SAPCC_ASM_API_URI to apps/storefront-middleware/.env.example.

commercetools1 change

fixed The Algolia adapter normalizes deeply nested categories

Category facets built from a deeply nested commercetools category tree no longer come back malformed.

What changed ▸
Changed

@vsf-enterprise/unified-api-commercetools/algolia normalizes deeply nested categories correctly.

@vsf-enterprise/unified-api-commercetools
Magento 2Action needed1 change

fixed Address regions now reach the Magento API Action needed

A free-text or display-only region that isn't valid for that country is now rejected instead of ignored, so a call that used to succeed fails. Before you upgrade a production project, map what your address forms put into region to the region codes Magento accepts for that country. Addresses already stored in Magento don't gain a region.

step →
What changed ▸
Why

The unified setCartAddress dropped the region before it reached Magento, so Magento never checked what your storefront put in region.

Changed

The unified setCartAddress in @vsf-enterprise/unified-api-magento resolves region and region_id from the shippingAddress argument. It passes both on to the Magento API.

@vsf-enterprise/unified-api-magento
Salesforce Commerce Cloud1 change

changed unified-api-sfcc picks up updated SFCC dependencies

The update stays behind the unified API, which doesn't change.

What changed ▸
Changed

@vsf-enterprise/unified-api-sfcc picks up updated @vsf-enterprise/sfcc-api and @vsf-enterprise/sfcc-types dependencies.

@vsf-enterprise/unified-api-sfcc
CI / deployment workflows2 changes

changed The generated CI workflow drops a dead Node matrix and moves to a standard runner 1.0.1

The upgrade doesn't touch the workflow in your project, so it keeps the unused matrix and the larger-runner label until you edit it.

What changed ▸
Changed

The generated project's .github/workflows/continuous-integration.yml no longer declares a node-version: ["18.20.2"] matrix. Nothing read that matrix: the setup action installs Node from .nvmrc through actions/setup-node. runs-on moves from ubuntu-latest-8core to ubuntu-latest, the runner every GitHub plan provides, instead of a larger-runner tier.

changed The affected-stores action reports only deployable stores 1.0.1

The upgrade doesn't touch the action file in your project. If you want this, add --deployable to its store changed call yourself.

What changed ▸
Changed

The generated project's .github/actions/affected-stores/action.yml calls store changed with --deployable. A store without frontend components no longer blocks the run. The --deployable flag itself isn't new in this release.

Patches in 1.0.x

1.0.2

20 Jun 2025 · Patch · 2 of 66 packages moved

The fix worth your attention is in @alokai/cli: a project whose apps/ directory holds only the middleware can now run the store commands. The other fix is in project generation and reaches only projects created after this release. Nothing here changes a default, removes an option, or moves the Node floor. The whole upgrade is one version bump in package.json.

Every alokai-cli store command works on a project with no frontend app

No actionCLI & tooling1.0.2@alokai/cli
Why:

On a project whose apps/ held only the middleware, any command that read alokai.config.json failed, not just deployment.

The CLI no longer throws Default framework not found when apps/ holds neither storefront-unified-nextjs nor storefront-unified-nuxt. It leaves deployment.framework empty in the resolved store config instead.

For you:

If your project runs the middleware without a storefront app - a headless setup, or a store you deploy middleware-first - alokai-cli store build, alokai-cli store dev, and alokai-cli store deploy now work on it. If you still hit the error on Alokai 1.0.1, that's because the published package wasn't bumped for the fix then. The fix is in @alokai/cli@1.0.1, and you get it only once you move to that version. Projects with a Next.js or Nuxt app never hit the error and see no difference.

A newly generated project's version field is a real version number

No actionStorefront1.0.2
Why:

The version field of a generated project held the ecosystem tag string where a version number belongs.

The CLI writes the version number alone into the root package.json of a generated project, where it used to write "version": "@alokai/ecosystem@1.0.1". The same value goes to the root manifest and to every apps/*/package.json. The app manifests already held a plain number. Apart from that field and the @alokai/cli version the root manifest pins, a project generated at 1.0.2 is identical to one generated at 1.0.1.

For you:

This reaches only the projects you generate from now on, never an existing project through an upgrade. If your project was generated before 1.0.2, its root package.json still has the tag string of the version that generated it - a project created at 1.0.0 holds "version": "@alokai/ecosystem@1.0.0", not the version you're upgrading from. Nothing consumes it: that manifest is private: true, so yarn never validates the field, and no tooling in this release reads it. There's nothing to repair, and no step asks you to.

1.0.1

6 Jun 2025 · Patch · 2 of 65 packages moved

Alokai 1.0.1 exists for one fix: the CMS and search modules pinned release-candidate builds of their vendor packages, and now pin the stable releases. The fix applies to installs from 1.0.1 onwards. A module you installed on 1.0.0 keeps the version it got, and you correct it by hand in your own app manifests.

The SAP ASM module now writes its asmUri configuration for you. Four files the CLI writes at project creation also changed: the CI workflow's runner label and unused Node matrix, the affected-stores action, and a new per-store lint script. None of them reach a project that already exists. Neither does the dependency that generation stopped writing, @vsf-enterprise/commercetools-types, which every non-commercetools project still carries until you remove it.

The CMS and search modules you install now pin stable vendor packages, not release candidates

Action neededCLI & tooling1.0.1
Why:

On 1.0.0, installing a CMS or search module pinned release-candidate builds of its vendor packages in your app manifests. That's vendor code that was never meant to reach production.

Installing one of eight modules now pins the stable releases of its vendor packages. The eight are Amplience, Bloomreach Content, Builder.io, Contentful, Contentstack, SAP SmartEdit, Storyblok, and Coveo. The pins move like this: @vsf-enterprise/contentful-api and @vsf-enterprise/contentful-sdk 6.0.0-rc.3 -> 6.0.0, @vsf-enterprise/amplience-api 6.0.0-rc.3 -> 6.0.0 with @vsf-enterprise/amplience-sdk 4.0.0-rc.3 -> 4.0.0, @vsf-enterprise/bloomreach-content-manager 2.0.0-rc.3 -> 2.0.0 with @vsf-enterprise/bloomreach-content-sdk 5.0.0-rc.3 -> 5.0.0, @vsf-enterprise/builderio-sdk 4.0.0-rc.3 -> 4.0.0, @vsf-enterprise/contentstack-api 6.0.0-rc.3 -> 6.0.0 with @vsf-enterprise/contentstack-sdk 5.0.0-rc.3 -> 5.0.0, @vsf-enterprise/smartedit-api 3.0.0-rc.3 -> 3.0.0 with @vsf-enterprise/smartedit-sdk 2.0.0-rc.3 -> 2.0.0, @vsf-enterprise/storyblok-api 3.0.0-rc.3 -> 3.0.0 with @vsf-enterprise/storyblok-sdk 2.0.0-rc.2 -> 2.0.0, and @vsf-enterprise/coveo-api 3.0.0-rc.3 -> 3.0.0.

For you:

A module install writes those versions into your apps/storefront-middleware/package.json and your storefront app's package.json once, and never revisits them. So if you added a CMS or search module while on 1.0.0, those files still pin the release candidates, and the upgrade doesn't touch them. Bump them yourself. If you install one of these modules after upgrading, you get the stable versions with nothing to do.

See the step in the upgrade guide →

On this page