Alokai

Alokai versions

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

The legacy version refers to all releases prior to the introduction of the new versioning model (before version v0).

You can upgrade your Alokai project to the next compatible version by running yarn alokai version upgrade.

Looking for what changed in a package before Alokai ecosystem 1.0.0? The per-package history is archived in the legacy package changelogs.

Pick where the project is and where it is going. The table shows every package version in between for your stack, and the upgrade guide beneath it lists every step in that range.

Dependencies (54)
2.4.22.5.0
@alokai/connect(upgrade required)2.5.02.5.1
@alokai/cli(upgrade required)2.8.12.9.0
@alokai/cli-plugin-review(upgrade required)0.3.00.3.1
@alokai/ai-toolkit(upgrade required)1.1.01.2.0
@alokai/compass(upgrade required)7.0.07.1.0
@alokai/cli-plugin-compass(upgrade required)1.1.111.2.0
@vue-storefront/nuxt(upgrade required)13.0.013.0.1
@vue-storefront/next(upgrade required)10.0.010.1.0
@vsf-enterprise/sapcc-api(upgrade required)14.0.014.1.0
@vsf-enterprise/unified-api-sapcc(upgrade required)9.0.010.0.0
@vsf-enterprise/sapcc-types(upgrade required)4.1.24.2.0
@vsf-enterprise/sapcc-sdk(upgrade required)10.0.010.0.1
@vsf-enterprise/commercetools-api(upgrade required)11.0.111.0.2
@vsf-enterprise/unified-api-commercetools(upgrade required)8.0.18.0.2
@vsf-enterprise/commercetools-types(upgrade required)3.0.43.0.5
@vsf-enterprise/commercetools-sdk(upgrade required)9.0.09.0.1
@vsf-enterprise/sfcc-api3.1.03.1.0
@vsf-enterprise/unified-api-sfcc(upgrade required)8.0.08.0.1
@vsf-enterprise/bigcommerce-api(upgrade required)12.0.012.0.1
@vsf-enterprise/unified-api-bigcommerce(upgrade required)8.0.08.0.1
@vsf-enterprise/magento-api(upgrade required)12.0.012.0.1
@vsf-enterprise/unified-api-magento(upgrade required)9.0.09.0.1
@vsf-enterprise/magento-types(upgrade required)4.0.54.0.6
@vsf-enterprise/amplience-api(upgrade required)10.0.010.0.1
@vsf-enterprise/amplience-sdk(upgrade required)8.0.08.0.1
@vsf-enterprise/bloomreach-content-api(upgrade required)7.0.07.0.1
@vsf-enterprise/bloomreach-content-manager(upgrade required)6.0.06.0.1
@vsf-enterprise/bloomreach-content-sdk(upgrade required)9.0.09.0.1
@vsf-enterprise/builderio-api(upgrade required)8.0.08.0.1
@vsf-enterprise/builderio-sdk(upgrade required)8.0.08.0.1
@vsf-enterprise/contentful-api(upgrade required)10.0.010.0.1
@vsf-enterprise/contentful-sdk(upgrade required)10.0.010.0.1
@vsf-enterprise/contentstack-api(upgrade required)10.0.010.0.1
@vsf-enterprise/contentstack-sdk(upgrade required)10.0.010.0.1
@vsf-enterprise/smartedit-api(upgrade required)9.0.010.0.0
@vsf-enterprise/smartedit-sdk(upgrade required)6.0.06.1.0
@vsf-enterprise/storyblok-api(upgrade required)7.0.07.0.1
@vsf-enterprise/storyblok-sdk(upgrade required)6.0.06.0.1
@vsf-enterprise/cms-components-utils(upgrade required)3.2.13.2.2
@vsf-enterprise/cms-mock-api(upgrade required)7.0.07.0.1
@vsf-enterprise/coveo-api(upgrade required)7.0.07.0.1
@vsf-enterprise/algolia-api(upgrade required)10.0.010.0.1
@vsf-enterprise/storefront-cli(upgrade required)3.3.63.3.7
@vsf-enterprise/redis-sdk(upgrade required)6.0.06.0.1
@vsf-enterprise/middleware-headers(upgrade required)7.0.07.0.1
@alokai/middleware-axios-error-adapter(upgrade required)4.0.04.0.1
@alokai/middleware-fetch-error-adapter(upgrade required)4.0.04.0.1
@alokai/cookies-bridge1.0.41.0.4
@vue-storefront/eslint-config(upgrade required)5.1.35.1.4
@vue-storefront/middlewareN/AN/A
@vue-storefront/multistoreN/AN/A
@vue-storefront/unified-data-modelN/AN/A
@vue-storefront/magento-apiN/AN/A
Nodev22.14v22.14

Upgrade guide

2.4.2 → 2.5.0· covers2.5.0·15 steps

1Apply the versions from the tableAll projects

Applies to: All projects · Only if: always

Run the upgrade command first; it moves the core packages to the target column. Then set every remaining highlighted row to its target version in `package.json` and reinstall. The table above is already filtered to your stack, so every row in it is yours to move; nothing else in the release asks for a version change.

Command
yarn alokai version upgrade
# then bump the remaining rows in package.json and run yarn install
2Annotate the return type of createRequestFunction in your axios OpenAPI client2.5.0CLI & tooling

Applies to: All projects · Only if: your middleware has an integration generated with integration generate --template openapi --http-client axios, whose common.ts defines createRequestFunction

Find the generated clients:

find apps -type f -name common.ts -path '*/integrations/*' -not -path '*/node_modules/*' -exec grep -lF 'createRequestFunction' {} +

In each file, add a return type to the inner function and cast the request result:

 export const createRequestFunction = function (axiosArgs: RequestArgs, globalAxios: AxiosInstance, BASE_PATH: string, configuration?: Configuration) {
-    return <T = unknown, R = AxiosResponse<T>>(axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
+    return <T = unknown, R = AxiosResponse<T>>(axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH): Promise<R> => {
         const axiosRequestArgs = {...axiosArgs.options, url: (configuration?.basePath || axios.defaults.baseURL || basePath) + axiosArgs.url};
-        return axios.request<T, R>(axiosRequestArgs);
+        return axios.request<T, R>(axiosRequestArgs) as Promise<R>;
     };
 }

Redo this edit after every integration generate, because the generator still produces the file without it.

Don't pin axios below 1.19 to avoid the edit, because that leaves the security advisory GHSA-542g-h47m-68v8 open. If you added such a pin to resolutions, remove it.

3Pass a normalized class to SfScrollable in ProductSlider and the CMS Scrollable2.5.0Nuxt

Applies to: Nuxt · Only if: the lockfile resolves vue at 3.5.30 or newer

Check which Vue your lockfile resolves. The edit is safe to make below 3.5.30 too:

grep -A1 '^"\?vue@' yarn.lock

Find the copies of the two components, including per-store overrides:

find apps -type f -name Scrollable.vue -not -path '*/node_modules/*' -exec grep -lF '$attrs.class ??' {} + ; find apps -type f -name ProductSlider.vue -not -path '*/node_modules/*' -exec grep -lF ':wrapper-class="wrapperClass"' {} +

In components/cms/page/Scrollable.vue:

+import { normalizeClass } from 'vue';
-    :wrapper-class="$attrs.class ?? ''"
+    :wrapper-class="normalizeClass($attrs.class)"

In components/ProductSlider/ProductSlider.vue:

+import { normalizeClass } from 'vue';
-    :wrapper-class="wrapperClass"
+    :wrapper-class="normalizeClass(wrapperClass)"

In components/ProductSlider/types.ts:

-import type { HTMLAttributes } from 'vue';
+import type { ClassValue } from 'vue';

-  wrapperClass?: HTMLAttributes['class'];
+  wrapperClass?: ClassValue;
4Configure a FusionAuth application for Connect Admin before you deploy2.5.0Connect Admin

Applies to: Connect Admin · Only if: the Connect Admin editor is enabled on a production deployment, through CONNECT_ADMIN_FEATURE_EDITOR=true or CONNECT_ADMIN_ROLE=admin

Ask Alokai for a FusionAuth application, then set its id and secret on every middleware that serves the editor:

CONNECT_ADMIN_FUSIONAUTH_APPLICATION_ID=<your application id>
CONNECT_ADMIN_FUSIONAUTH_CLIENT_SECRET=<its client secret, if it needs one>

Do this before you deploy @alokai/connect-admin 1.1.0. Without it, the production editor answers every request with 404. Storefront reads through getFormValues keep working.

Set CONNECT_ADMIN_FUSIONAUTH_URL only if your SSO host isn't https://sso.vuestorefront.cloud.

Don't use the demo application id from .env.example in production, because anyone registered for it can sign in.

CONNECT_ADMIN_FEATURE_EDITOR=true still works. On your own machine, an application id means you sign in locally too, so leave it unset to develop without signing in.

5Move the AI review plugin to 0.3.12.5.0CLI & tooling

Applies to: All projects · Only if: you want AI code review running on your pull requests or merge requests

Check which version of the plugin you have. The upgrade doesn't move it, because CLI plugins aren't in package.json:

yarn alokai plugins

If it isn't listed and you don't want AI review, there's nothing to do. If it's above 0.3.1, leave it. Otherwise, install 0.3.1:

yarn alokai plugins install @alokai/cli-plugin-review@0.3.1
6Move Storefront UI to a version with the spin-slow keyframes2.5.0Storefront

Applies to: Storefront · Only if: packages/tailwind-config/package.json pins @storefront-ui/react below 4.0.2 or @storefront-ui/vue below 3.1.3

List the Storefront UI versions your project pins:

find packages apps -maxdepth 4 -type f -name package.json -not -path '*/node_modules/*' -exec grep -Hn '@storefront-ui/' {} +

In packages/tailwind-config/package.json, move both packages to the versions this release pins:

-    "@storefront-ui/react": "4.0.1",
+    "@storefront-ui/react": "4.0.3",
     "@storefront-ui/typography": "3.1.0",
-    "@storefront-ui/vue": "3.1.2",
+    "@storefront-ui/vue": "3.1.4",

Move the app versions to match: @storefront-ui/react to 4.0.3 in apps/storefront-unified-nextjs/package.json, and @storefront-ui/nuxt to 3.3.3 in apps/storefront-unified-nuxt/package.json. Then run yarn install.

7Remove the out-of-root Tailwind @source path2.5.0Next.js

Applies to: Next.js · Only if: a tailwind.scss in your project declares the @source path with six .. segments to @storefront-ui/react

Find the files with the longer path, including per-store overrides:

find apps -type f -name tailwind.scss -not -path '*/node_modules/*' -exec grep -lF '../../../../../../node_modules/@storefront-ui/react' {} + || true

If nothing prints, there's nothing to do. Otherwise, delete the longer path in each file:

 @source '../**/*.ts';
 @source '../**/*.tsx';
 @source '../../../../../node_modules/@storefront-ui/react';
-@source '../../../../../../node_modules/@storefront-ui/react';
8Re-export the onRequestError instrumentation hook2.5.0Next.js

Applies to: Next.js · Only if: you are adopting this release's onRequestError hook from @vue-storefront/next/instrumentation

Add the hook to the re-export in apps/storefront-unified-nextjs/instrumentation.ts:

-export { register } from '@vue-storefront/next/instrumentation';
+export { onRequestError, register } from '@vue-storefront/next/instrumentation';
9Provision Firestore for Connect Admin2.5.0Connect Admin

Applies to: Connect Admin · Only if: you run Connect Admin on a production deployment

Enable Firestore in your Google Cloud project and give the service account the Cloud Datastore User role.

Add a TTL policy to each of these collections:

  • workflowRuns on expiresAt
  • workflowRunOutputs on expiresAt
  • workflowRunLogs on expiresAt
  • featureEditorKv on expiresAt
  • featureEditorLocks on until

Set the three variables in the deployment's environment:

CONNECT_ADMIN_FIRESTORE_PROJECT_ID=<gcp project id>
CONNECT_ADMIN_FIRESTORE_CLIENT_EMAIL=<service account email>
CONNECT_ADMIN_FIRESTORE_PRIVATE_KEY=<service account private key>

Set CONNECT_ADMIN_FIRESTORE_DATABASE_ID only if your database isn't (default). On a shared dev project, give each person their own CONNECT_ADMIN_FIRESTORE_COLLECTION_PREFIX, and add the TTL policies to the prefixed collections.

You don't need to migrate data. The versions already in Redis move to Firestore on the first read.

10Pass a view reference to getFeatureVersions and drop the shared cursor2.5.0Connect Admin

Applies to: Connect Admin · Only if: your middleware code calls getFeatureVersions or reads currentId from the versions it returns

Find the calls in your middleware code:

find apps -type f \( -name '*.ts' -o -name '*.tsx' \) -path '*/storefront-middleware/*' -not -path '*/node_modules/*' -exec grep -lE 'getFeatureVersions\(|\.currentId' {} + || true

If nothing prints, there's nothing to do. Otherwise, pass the feature and the view instead of the feature id:

-const versions = await getFeatureVersions(context, "merchandising");
+const versions = await getFeatureVersions(context, { featureId: "merchandising", viewId: "rules" });

Remove every read of currentId. The server no longer tracks which version is open.

11Move the root zod resolution to 4.2.12.5.0Compass

Applies to: Compass · Only if: the root package.json has resolutions.zod below 4.2.1

Check the zod resolution in your root package.json:

grep -n '"zod"' package.json || true

If nothing prints, there's nothing to do. Otherwise, move it to 4.2.1 and run yarn install:

   "resolutions": {
-    "zod": "4.1.12"
+    "zod": "4.2.1"
   }
12Register the config switcher on the Compass integration2.5.0Compass

Applies to: Compass · Only if: you are adopting this release's configId eval variants or config switcher profiles

Copy this release's extensions/configSwitcher/index.ts into apps/storefront-middleware/sf-modules/compass/. Re-running npx @vsf-enterprise/storefront-cli add-module compass also writes the file, but it overwrites all your edits under sf-modules/compass.

Register the extension in sf-modules/compass/config.ts:

+import type { ApiClientExtension } from '@alokai/connect/middleware';
+
+import { configSwitcherExtension } from '@/sf-modules/compass/extensions';
 export const config = defineConfig({
   // ...
+  extensions: (extensions: ApiClientExtension[]) => [...extensions, configSwitcherExtension],
   location: '@alokai/compass/server',

Add the two variables to globalPassThroughEnv in the root turbo.json, so store dev passes them to the middleware:

   "globalPassThroughEnv": [
+    "ALOKAI_COMPASS_CONFIG_ID",
+    "ALOKAI_COMPASS_CONFIG_SWITCHER_PROFILES",
     // ...
   ]

Then select a configuration from a variant in eval-config.json:

{
  "variants": [
    { "name": "baseline" },
    { "name": "concise", "configId": "concise-prompt" }
  ]
}
13Move @alokai/cli-plugin-compass to 1.2.02.5.0Compass

Applies to: Compass · Only if: the CLI reports @alokai/cli-plugin-compass at a version below 1.2.0

Check which version of the plugin you have. The upgrade doesn't move it, because CLI plugins aren't in package.json:

yarn alokai plugins

If it isn't listed, there's nothing to do. If it's above 1.2.0, leave it. Otherwise, install 1.2.0:

yarn alokai plugins install @alokai/cli-plugin-compass@1.2.0

If you installed the Compass module, your root postinstall script reinstalls the newest plugin on every yarn install, which overrides the version you install here.

14Keep SmartEdit slot wrappers layout-transparent2.5.0SmartEdit

Applies to: SmartEdit · Only if: sf-modules/cms-smartedit is in your project

Find the files that don't have the fix yet:

find apps -type f -name render-cms-content.tsx -path '*/cms-smartedit/*' -not -path '*/node_modules/*' -exec grep -LF "classNames('contents', classes)" {} + ; find apps -type f -name RenderSlot.vue -path '*/cms-smartedit/*' -not -path '*/node_modules/*' -exec grep -LF 'class="contents"' {} + || true

In Next.js, in sf-modules/cms-smartedit/components/render-cms-content.tsx, add contents in getSmartEditProps and remove it from the two wrappers in RenderSlot:

 function getSmartEditProps(item: AgnosticCmsComponent | Slot) {
   const { properties = {} } = item;
   const { smartedit } = properties;

   if (!smartedit) {
-    return {};
+    return { className: 'contents' };
   }

   const { catalogVersionUuid, classes, componentId, componentType, componentUuid } = smartedit;

   return {
-    className: classes,
+    className: classNames('contents', classes),
     'data-smartedit-catalog-version-uuid': catalogVersionUuid,
     'data-smartedit-component-id': componentId,
     'data-smartedit-component-type': componentType,
     'data-smartedit-component-uuid': componentUuid,
   };
 }

 function RenderSlot({ aboveFold, item }: { aboveFold?: boolean; item: Slot }) {
   const { components: slotComponents } = item;

   return (
     <>
-      <div className="contents" {...getSmartEditProps(item)}>
+      <div {...getSmartEditProps(item)}>
         {slotComponents.map((component: AgnosticCmsComponent) => (
-          <div className="contents" {...getSmartEditProps(component)} key={component.id}>
+          <div {...getSmartEditProps(component)} key={component.id}>
             <RenderComponent aboveFold={aboveFold} item={component} />
           </div>
         ))}
       </div>
     </>
   );
 }

In Nuxt, in sf-modules/cms-smartedit/components/RenderCmsContent/RenderSlot.vue, add class="contents" to both wrappers:

 <template>
-  <div v-bind="getSmartEditProps(item)">
-    <div v-for="component in item.components" :key="component.id" v-bind="getSmartEditProps(component)">
+  <div class="contents" v-bind="getSmartEditProps(item)">
+    <div
+      v-for="component in item.components"
+      :key="component.id"
+      class="contents"
+      v-bind="getSmartEditProps(component)"
+    >
       <RenderCmsContent :item="component" />
     </div>
   </div>
 </template>

Steps carry the release that introduced them. When a later release supersedes an earlier step, the guide shows only the final state. Each step's release note is one click away: Alokai 2.5.