All notable changes to this project will be documented in this file. The format is based on Keep a Changelog.
Major versions of this project will include breaking changes in core packages and align with Sitecore seasonal releases though not strictly bound to them.
Our versioning strategy is as follows:
- Patch: no breaking changes (e.g. bug fixes, minor improvements)
- Minor: non-breaking feature additions – no breaking changes (e.g. new features, improvements)
- Major: new features + breaking changes (e.g. framework upgrades, major architectural changes, major features)
- Search integration (#295)
[search]New@sitecore-content-sdk/searchpackage providing search functionalitySearchServiceclass for performing search queries with support for pagination, sorting, request cancellation.- Type-safe search parameters and responses with support for generic fields.
[react]Added React hooks for search functionalityuseSearchhook for paginated search queries with automatic state management, request cancellation, request status tracking.useInfiniteSearchhook for infinite scroll/search patterns withloadMorefunctionality, request cancellation, request status tracking.
[nextjs]Expand SXA redirects logic with support for isLanguagePreserved flag. This provides an option to preserve current locale when target redirect URL does not have a locale prefix (#305)- This changes the default redirects behavior out of the box.
- Previously,
/da/source -> /targetrule would redirect to/da/targetpath when default locale is notda - Now,
/da/source -> /targetrule would redirect to/targetpath, using default locale, unless theShall language be preserved upon redirect?checkbox is enabled in Redirect Map.
- Previously,
- This changes the default redirects behavior out of the box.
- Upgrade to Node.js 24.x (#332)
[nextjs][App Router]Form component throws a Server component error (#333)[nextjs]Add "use client" directive to import-map.ts for React hooks compatibility (#326)[nextjs][template/nextjs][template/nextjs-app-router]Fix middleware initialization errors when API configuration is missing (#325)[nextjs]Fixes Server Transfer (rewrite) redirects (#329)[nextjs]Sitecore Content SDK does not support X-Forwarded-Host, causing incorrect hostname resolution behind proxies (#330)
- Upgrade Next.js to the latest patch version (#322)
[create-content-sdk-app]Remove beta from files and paths in nextjs-app-router template (#321)[react]Disable variant generation mode for server components in Design Studio (#320)
[nextjs][App Router] Add support for server components in Design Studio (#280)(#300)(#301)(#303)- additional react components to handle dynamic rendering of server components
- includes refactoring of existing Design Library functionality
- this is a breaking change for applications based on Next.js App Router (beta) template. Please refer to the detailed upgrade guide for further instructions
- separate server and client import-map generation (#293)(#299
[core]Provide information about rendering host as part of code extraction (#286)[template/next-app-router]Add component runtime information to prevent invalid client/server component operations in Sitecore Pages (#291)[cli]Create short flags for CLI commands (#298)
- Added package.json "exports" field to ensure correct ESM/CJS module resolution for submodule imports. Previously defaulted to CJS bundles even when ESM was available. (#296)
[core]NativeDataFetcher error does not include Error instance properties (name, message, stack) (#295)[template/next-app-router]Remove component-level data fetching in favor of Server Components (#282)[core]NativeFetcher response does not match actual returned data (#284)[nextjs]Add regex variable substitution for absolute and external URL redirects. (#287)[nextjs][template/next-app-router][template/nextjs]Geo based Personalization not possible in Content SDK Personalize Middleware. (#288)[nextjs][template/next-app-router][template/nextjs]Geo based Personalization not possible in Content SDK Personalize Middleware. (#290)[nextjs]Remove locale property assignments in redirects middleware for App Router compatibility. (#292)[nextjs]Next Link props unavailable when using Sitecore Link component (#294) (#296)[nextjs][template/next-app-router][template/nextjs]Fix middleware initialization errors in local container development (#297)(#302)
- API Surface verification and reporting (#283)
[core][react]Remove "strictNullChecks: false" tsconfig property (#304)
[nextjs]Application build fails due to missing component variants (#277)
- Next.js App Router support (beta):
- Base template (#191)
- Robots.txt and Sitemap.xml support (#197)
- Editing and preview support (#198)
- Internationalization support (#202) (#214)
- Client-server component map separation (#230)(#232)(#234)(#235)(#241)
- Server components for FEAAS and BYOC (#248) (#262)
- Generic App router compatible placeholder (#258)
[core]IntroducescConfigproperty insitecore.cli.config(#244):- The
scConfigproperty is used to pass the Sitecore configuration to the CLI commands. - Build commands now receive arguments (e.g.
scConfig) to allow access to the CLI specific configuration settings. Now it's optional to passscConfigmanually to the command constructor.
- The
[nextjs]Slim down sample even more (#225)- Mark client components with
use clientdirective. (#226) - Add LLMs and Copilot instruction files for improved AI guidance (#239)
[core][nextjs]Enable component variants in component-map & also send variants files in code extraction (#245)(#251)[core]ExposegetDataonSitecoreClientto run raw GraphQL queries. (#249)- Add Claude AI guidance files for improved AI development support (#254)
- Add Windsurf AI rules for improved IDE development support (#255)
[nextjs]Error when rendering Preview when Multisite middleware is disabled (#256)[template/nextjs][template/next-app-router]Fix imports for SSR/SSG (#229)[template/next-app-router]Unable to render 'preview' without default sitename (#247)[template/next-app-router]Guard static params generation and harden not-found routes for XM Cloud (#242)[template/next-app-router]Prevent CloudSDK re-initialization on client-side navigation (#243)
[core][nextjs]Move Design Library logic from nextjs to core (#236)
[react][core]Unite capabilities of library | library-metadata with library-variant-generation modes.isVariantGenerationis honored only whenisDesignLibrary(library | library-metadata) is true andgeneration=variantquery string is passed to the editing render endpoint. (#208)- Add Cursor AI coding agent rules for consistent development patterns across the Content SDK repository (#207)
[nextjs]Support component-level data fetching in 404/500 pages (#199)- Migration from ESlint 8 -> ESLint 9 and introduction of the new Flat Config file (#176)
- Code generation for Design Library enablers:
[core][nextjs]Add import-map generation (#157)(#167)(#170)(#171)(#175)(#177)(#187) (#221)- New
writeImportMap(),combineImportEntries()methods anddefaultImportEntriesexport available from@sitecore-content-sdk/nextjs/codegen
- New
- Dynamic component rendering (#163)
- Updated API endpoint to new Edge Platform format (#162)
- Ensure editing state is enabled in Design Library mode (#181)
[core]Ensure displayName paths are properly UTF-8 encoded. (#179)[react]Addcomponent:statusevents for VariantGeneration (#190)
[react]Enhanced the Design Library cache buster format to hh-dd-mm-yyyy (#188)
[react][core]Unite capabilities of library | library-metadata with library-variant-generation modes.isVariantGenerationis honored only whenisDesignLibrary(library | library-metadata) is true andgeneration=variantquery string is passed to the editing render endpoint. (#208) (#215)
[nextjs]Optimization for editing render middleware: issue an internal server request for fetching page data during editing instead of doing temporary redirect (#195) (#196)- added new environment variable
SITECORE_INTERNAL_EDITING_HOST_URL- the internal host URL for the Next.js application, used for server-side requests for page rendering during editing - added a new setting in sitecore.config: sitecoreInternalEditingHostUrl. This setting allows you to define the internal host URL explicitly, overriding the corresponding environment variable.
- if none of the above is set:
- in XM Cloud environment server request will be issued to
http://localhost:3000 - in Vercel or Netlify scenarios, the host header of the incoming request will be used to make the internal request
- in XM Cloud environment server request will be issued to
- added new environment variable
[nextjs]Preserve default locale in external absolute urls (#201)[react]Custom properties are not applied to empty field in editing mode (#200)[core]Content styles fail to load due to incorrect contextId resolution (#192)[core]Duplicate dictionary requests in editing, preview, and design library modes (#161)SitecoreClient.getPreviewandSitecoreClient.getDesignLibraryDatano longer request dictionary data.Pagetype is not affected.- Updated
EditingService.fetchEditingData:- Removed
siteNameparameter. - No longer requests and returns dictionary data.
- Removed
[cli]Code extraction extends XM Cloud Rendering Host build by several minutes (#173)[core]Fix redirect regex processing to prevent over-escaping of question marks in regex patterns (#174)
[core][nextjs]Restore proper local connection fallback
- Design Library Early Access enablers:
-
Refactored
SitecoreProviderand enhancedSitecoreClient(#158):- Refactored components that use
SitecoreProviderand related utilities. SitecoreProvidernow accepts apageprop (Pagetype fromSitecoreClient) instead oflayoutData.- Context state updates:
pageContext→ renamed topage.pagerepresentsPageinterface.setContext→ renamed tosetPage. The method updates thepagestate.
- Removed
SitecoreProviderPageContextinterface.- Consumers should now access
pagevia thePageinterface.
- Consumers should now access
- Updated naming for clarity and consistency:
pageContext→pageupdateContext→updatePage
-
Type cleanup and consistency:
- Removed
NextjsPageinterface. - All methods that generate page data now return a consistent
Pageobject. - Properties
componentPropsandnotFoundare now part of theSitecorePagePropsinterface and are treated as optional. SitecorePagePropsnow requires a standalonepagefield instead of merging all data into one props object.
- Removed
-
New
getErrorPage()method:- Replaces
getErrorPages(), exposing only necessary data. - Introduces a new
ErrorPageenum to select specific error types (e.g.,ErrorPage.NotFound)
- Replaces
-
New
PageModeType- The
Pagetype now includes amodefield of typePageMode, providing runtime context (e.g. editing, design library, preview). - Replaces older properties like
pageState,pageEditing,componentType.
mode: { isNormal: boolean; isPreview: boolean; isEditing: boolean; isDesignLibrary: boolean; }
- The
- The
DesignLibrarycomponent no longer accepts alayoutDataprop. - It now accesses
pagedirectly fromSitecoreProvider.
- Refactored components that use
-
Refactor and simplify service names (#133):
You will be affected by the following changes only if:
- You are referencing Content SDK services directly rather than using the
SitecoreClientmethods.
If you're using the
SitecoreClientto access services, no changes are required.Service class and config names have been refactored for clarity and consistency:
- Renamed:
RestComponentLayoutService→ComponentLayoutServiceRestComponentLayoutServiceConfig→ComponentLayoutServiceConfigGraphQLEditingService→EditingServiceGraphQLEditingServiceConfig→EditingServiceConfigGraphQLDictionaryService→DictionaryServiceGraphQLDictionaryServiceConfig→DictionaryServiceConfigGraphQLLayoutService→LayoutServiceGraphQLLayoutServiceConfig→LayoutServiceConfigGraphQLPersonalizeService→PersonalizeServiceGraphQLPersonalizeServiceConfig→PersonalizeServiceConfigGraphQLErrorPagesService→ErrorPagesServiceGraphQLErrorPagesServiceConfig→ErrorPagesServiceConfigGraphQLRedirectsService→RedirectsServiceGraphQLRedirectsServiceConfig→RedirectsServiceConfigGraphQLRobotsService→RobotsServiceGraphQLRobotsServiceConfig→RobotsServiceConfigGraphQLSiteInfoService→SiteInfoServiceGraphQLSiteInfoServiceConfig→SiteInfoServiceConfigGraphQLSitemapXmlService→SitemapXmlServiceGraphQLSitemapXmlServiceConfig→SitemapXmlServiceConfigGraphQLSitePathService→SitePathServiceGraphQLSitePathServiceConfig→SitePathServiceConfig
- Removed
DictionaryServiceinterface
- You are referencing Content SDK services directly rather than using the
-
[core][nextjs][templates/nextjs]Refactor site resolution logic across packages (#141)(#155)- Removed
sitesparameter fromSitecoreClientInittype - Removed
SiteResolverdependency andresolveSite()fromSitecoreClient - Removed support for passing a custom siteResolver to
SitecoreClient - Updated
SitecoreClientto construct thePageusingsiteNameinstead of the fullSiteInfo. - Updated SitecoreClient's
getPagePaths()to accept asitesparameter - Modified the
getPagePathsmethod inSitecoreClientto accept asitesparameter. - Updated Next.js
SitemapMiddlewareandRobotsMiddlewareto use their own instance ofSiteResolverand accept asitesparameter via the constructor.
- Removed
[nextjs]Ensure Redirect Middleware handles case-insensitive path matching to prevent missed redirects due to casing differences (#159)[core][nextjs]Standardized way of handling contextId/clientContextId and related fallbacks (#150)
- Add Github action workflow to generate package size and test coverage metrics report (#151)
[create-content-sdk-app]: Refactoring/Cleanup for scss files in SXA components (#119)(#122)[core][nextjs][DesignLibrary] Include metadata in the Design Library rendering mechanism (#118)[core][nextjs][cli]Add automatic component map generation (#124 #128 #130)[create-sitecore-jss]Remove graphql introspection sample and scripts folder from next starter application (#135)[core][Content SDK] Update environment variable naming and associated config property (#143)
-
[create-content-sdk-app]Renamed package from@sitecore-content-sdk/create-apptocreate-content-sdk-app(unscoped package)- Users can now run
npx create-content-sdk-appinstead ofnpx @sitecore-content-sdk/create-app - Follows the same pattern as other popular initializers like
create-react-appandcreate-next-app
- Users can now run
-
[all]Renamed all JSS references to Content SDK across the codebase: (#131)- The create-sitecore-jss package has been renamed to create-content-sdk-app (unscoped package)
- Component types and props renamed:
ReactJssComponent→ReactContentSdkComponentNextJssComponent→NextjsContentSdkComponent
-
[react][nextjs]RefactorSitecoreContextnaming toSitecoreProvider(95):We've revisited and improved the
SitecoreContextnaming for clarity and consistency. This affects component names, types, hook, and HOC.-
Component:
SitecoreContext→SitecoreProvider
-
Properties:
contextproperty renamed topageContextto clarify that it holds page-specific data only
-
Interfaces:
SitecoreContextValue→SitecoreProviderPageContextSitecoreContextReactContext→SitecoreProviderReactContextSitecoreContextState→SitecoreProviderStateSitecoreContextProps→SitecoreProviderProps
-
Functions:
withSitecoreContext→withSitecoreuseSitecoreContext→useSitecore
-
Properties:
updateSitecoreContextproperty ->updateContextsitecoreContextproperty ->pageContext
-
Interfaces:
WithSitecoreContextOptions→WithSitecoreOptionsWithSitecoreContextProps→WithSitecorePropsWithSitecoreContextHocProps→WithSitecoreHocProps
-
-
[nextjs]Component-levelgetServerSidePropsandgetStaticPropsmethods have been replaced by a singlegetComponentServerPropsmethod for simplicity.- In case a separate logic is needed depending on SSR/SSG context, an
isServerSidePropsContexthelper method from@sitecore-content-sdk/nextjs/utilscan now be used.
- In case a separate logic is needed depending on SSR/SSG context, an
-
[nextjs][DesignLibrary] Script is requested from production even when a custom Edge URL is set (#98):- The
EditingScriptscomponent doesn't acceptsitecoreEdgeUrlproperty anymore. - The custom Edge URL is now accessed via the
apiproperty of theSitecoreProvidercomponent.
- The
-
[nextjs]defineCliConfigimport has been moved to@sitecore-content-sdk/nextjs/config-clisubmodule (#128). -
[core][nextjs][cli]Re-introduce component map generation logic (#124 #139) -
[create-content-sdk-app]Remove SXA components and style files from defaultnextjstemplate (#139) -
[core][nextjs][templates/nextjs]Environment variables' naming has been updated (#143)JSS_EDITING_SECRET→SITECORE_EDITING_SECRETNEXT_PUBLIC_SITECORE_SITE_NAME→NEXT_PUBLIC_DEFAULT_SITE_NAMEDISABLE_SSG_FETCH→GENERATE_STATIC_PATHSdisableStaticPathsconfig property →generateStaticPaths(with inverted logic for clarity)
[core]Fix for enabling debug logs previously not appearing during build execution (#137)[core]Fix for making clientContextId optional for client-side execution to avoid runtime errors (#121)[core][sitecore.config]Fallback values are not respected when framework specific value is empty & validate resolved config instead of base (#97)[nextjs]Improve device detection and prevent false prefetch handling in Personalize middleware and also ensure personalized responses are not served from prefetch cache and proper personalization was applied during client side navigation. (#129)[react]Suspense in ErrorBoundary component is not rendered when it is wrapping a BYOCWrapper to prevent client side hydration errors (#132)[nextjs]Fix component-level data fetching method is exposed in client bundle (#134)[react]Add an optionaldisableSuspenseflag to the Placeholder component to prevent error boundaries from rendering Suspense which helps contain errors for components. This can help avoid hydration issues in connected mode. (#96)
[react]Update feaas dependencies (#149)
[core][DesignLibrary] Call partial layout rendering endpoint via Envoy and ContextID (#111)
[nextjs]Rework and simplify .env (#89):- Introduced
.env.container.example- Intended for local development against a Sitecore container instance.
- Introduced
.env.remote.example- Intended for working with a remote Sitecore instance.
- Removed
GRAPH_QL_ENDPOINTenvironment variable No longer required or used. - Removed
GRAPH_QL_SERVICE_RETRIESenvironment variable This is not environment-specific and should be defined in the configuration instead. - Removed
DISABLE_SSG_FETCHenvironment variable- In XM Cloud, this is set to
trueby default as the application runs as an editing host. - It can still be configured via the
DISABLE_SSG_FETCHenvironment variable or thedisableStaticPathsconfig property if needed. - By default, it is set to
falsein the configuration.
- In XM Cloud, this is set to
- Introduced
[core][nextjs]IntroducedgetRobotsmethod inSitecoreClientand a newRobotsMiddlewarefor Next.js API routes (#83)- The
getRobots(siteName, fetchOptions?)method centralizes logic for fetchingrobots.txtcontent. - A new
RobotsMiddlewareclass encapsulates HTTP-level logic for generatingrobots.txtresponses in Next.js apps. - These additions follow the same extensible architecture as existing features enabling custom behavior via service overrides and improving consistency across endpoints.
- The
[cli]Introduce "project" subcommands (#73)[nextjs]Enhance customizability for Sitecore Client and SDK Middlwares (#87)[core][nextjs][create-content-sdk-app]Passing configuration object todefineConfigin sitecore.config is now optional. Introduced sitecore.config.ts.example (#90) (#93)[nextjs]Starter kit components clean up (#107):- Reduced code duplication
- Streamlined the implementation to improve consistency
- Removed outdated logic related to editing support
[core]SXA Form can't fire CloudSDK events due to initialization error (#63):- Form utilities have been moved from
@sitecore-content-sdk/core/formto the root of@sitecore-content-sdk/core. Update your imports to reflect this change if you are referencing these utilities.
- Form utilities have been moved from
[nextjs]Update React to version 19 and Next JS to version 15 (#76)
[nextjs]Fix for case sensitive redirects (make all redirects case-insensitive) (#70)[core]Fix for lookbehind regex. (not supported on ios 16) (#67)[nextjs]Render "unoptimized" Next Image in component rendering mode (#66)[react]ExtendwithDatasourceChecklogic to handle empty datasource in DesignLibrary mode (#62)[cli]Process env variables in both cli global and local mode by default. (#61)[react][nextjs]Do not render EditingScripts component in DesignLibrary component. Fix 'dataSourceId' query parameter name in editing render middleware. (#64)