Experience Sitecore ! | The Future is Now: Sitecore Content SDK 1.2 brings App Router into XM Cloud

Experience Sitecore !

More than 300 articles about the best DXP by Martin Miles

The Future is Now: Sitecore Content SDK 1.2 brings App Router into XM Cloud

For years, I’ve been navigating the ever-evolving landscape of Sitecore, and I’ve seen my fair share of game-changing updates. But let me tell you, the recent release of Sitecore Content SDK v1.2 feels different. This isn’t just another incremental update; it’s a fundamental shift in how we build for XM Cloud, and it’s bringing the power of the Next.js App Router to the forefront of Sitecore development. I’ve had the chance to dive deep into this release, and I’m thrilled to share my findings with you.

The Writing on the Wall: JSS, Content SDK, and the XM Cloud Trajectory

Let’s be honest: the transition to a composable DXP has been a journey. We’ve all been wondering about the future of JSS and how it fits into the XM Cloud picture. Well, Sitecore has made its stance crystal clear: the Content SDK is the only way to go for new XM Cloud projects.
Sitecore’s official support lifecycle KB article outlines everything.

Here’s the key takeaway:

JSS SDK 22.X will reach its end-of-life (EOL) in June 2026.
This means if you’re on JSS with XM Cloud, it’s time to start planning your upgrade. JSS will continue to be the SDK for on-premise XM/XP deployments, but for the cloud, the Content SDK is the designated path forward. This isn’t a bad thing - in fact, it’s a massive leap in the right direction.

Why the Content SDK is a Game-Changer

I’ve spent some time with the Content SDK, and I can tell you firsthand that it’s more than just a rebrand of JSS. It’s a leaner, meaner, and more focused toolkit designed specifically for the needs of XM Cloud. The community has been buzzing about this, and for good reason. As my friend at Fishtank puts it, the Content SDK is a major upgrade. Here’s a breakdown of the key differences:

Feature
JSS SDK
Content SDK
Supported Products
Sitecore XM/XP and XM Cloud
Exclusively for XM Cloud
Visual Editing
Experience Editor & XM Cloud Pages
XM Cloud Pages Builder only
Complexity & Size
Larger, more complex starter apps
Significantly smaller and simpler
Component Mapping
Automatic
Manual registration by default
Configuration
Scattered across multiple files
Centralized in sitecore.config.ts and sitecore.cli.config.ts
Data Fetching
Various data fetching plugins
Unified SitecoreClient class
Middleware
Separate middleware plugin files
Simplified with defineMiddleware in middleware.ts

Farewell, Experience Editor

One of the most significant changes is the removal of Experience Editor support. This might sound alarming at first, but it’s a strategic move. By focusing solely on the XM Cloud Pages Builder, the Content SDK sheds a tremendous amount of complexity. This results in a leaner codebase that’s easier to understand, maintain, and, most importantly, faster.

Enter the App Router: A New Era for Next.js in XM Cloud

The headline feature of Content SDK 1.2 is, without a doubt, the introduction of beta support for the Next.js App Router. This is a monumental step forward, aligning XM Cloud development with the latest and greatest from the Next.js ecosystem.
For those unfamiliar, the App Router is a new paradigm in Next.js that simplifies routing, data fetching, and component architecture. It introduces concepts such as server components, nested layouts, and streamlined data fetching, making the building of complex applications more intuitive than ever.
I’ve been exploring the xmcloud-starter-js repository, specifically the release/CSDK-1.2.0 branch, to see how all of this comes together.
Let’s take a look at some of the code.

The New App Router Structure

The folder structure itself tells a story. Gone is the pages directory, replaced by a more intuitive app directory:
src/
├── app/
│   ├── [site]/
│   │   ├── [locale]/
│   │   │   └── [[...path]]/
│   │   │       └── page.tsx
│   │   └── layout.tsx
│   ├── api/
│   ├── layout.tsx
│   ├── not-found.tsx
│   └── global-error.tsx
├── components/
├── lib/
└── middleware.ts
This structure is not only cleaner but also more powerful, allowing for features such as route groups and nested layouts that were previously cumbersome to implement in the Pages Router.

Data Fetching in Server Components

With the App Router, Server Components are the default. This means you can fetch data directly within your components without getServerSideProps or getStaticProps. Here’s a look at the new page.tsx:

// src/app/[site]/[locale]/[[...path]]/page.tsx

import { notFound } from 'next/navigation';
import { draftMode } from 'next/headers';
import client from 'src/lib/sitecore-client';
import Layout from 'src/Layout';

export default async function Page({ params, searchParams }: PageProps) {
  const { site, locale, path } = await params;
  const draft = await draftMode();

  let page;
  if (draft.isEnabled) {
    const editingParams = await searchParams;
    // ... handle preview and design library data
  } else {
    page = await client.getPage(path ?? [], { site, locale });
  }

  if (!page) {
    notFound();
  }

  return <Layout page={page} />;
}
Notice how clean and concise this is. We’re using async/await directly in our component, and Next.js handles the rest. This is a huge win for developer experience.

A New Approach to Layouts

The App Router also introduces a more powerful way to handle layouts. You can now create nested layouts that are automatically applied to child routes. Here’s a simplified example from the starter kit:
// src/app/[site]/layout.tsx

import { draftMode } from 'next/headers';
import Bootstrap from 'src/Bootstrap';

export default async function SiteLayout({
  children,
  params,
}: {
  children: React.ReactNode;
  params: Promise<{ site: string }>;
}) {
  const { site } = await params;
  const { isEnabled } = await draftMode();

  return (
    <>
      <Bootstrap siteName={site} isPreviewMode={isEnabled} />
      {children}
    </>
  );
}

This SiteLayout component wraps all pages within a given site, providing a consistent structure and allowing for site-specific logic.

Migrating from JSS to the Content SDK: A Checklist

For those of us with existing JSS projects, the migration to the Content SDK is now a top priority. While Sitecore provides a comprehensive migration guide, here’s a high-level checklist to get you started:
  1. Update Dependencies: Replace your jss-nextjscode> packages with the new @sitecore-content-sdk/nextjs packages.
  2. Centralize Configuration: Create sitecore.config.ts and sitecore.cli.config.ts to consolidate your settings.
  3. Refactor Data Fetching: Replace your data fetching logic with the new SitecoreClient class.
  4. Update Middleware: Consolidate your middleware into a single middleware.ts file using the defineMiddleware utility.
  5. Register Components: Manually register your components in the .sitecore/component-map.ts file.
  6. Update CLI Commands: Replace your jss CLI scripts with the new sitecore-tools commands.
  7. Remove Experience Editor Code: Clean up any code related to the Experience Editor, as it’s no longer supported.

This is a non-trivial effort, but the benefits in terms of performance, maintainability, and developer experience are well worth it.

The Rise of AI in Sitecore Development

Another fascinating aspect of the Content SDK is its deep integration with AI-assisted development. The repository now includes guidance files for Claude, GitHub Copilot, and other AI tools. This is more than just a novelty; it’s a serious productivity booster. These guidance files instruct your AI assistant on Sitecore-specific conventions, ensuring that the code it generates adheres to best practices.

I’ve been experimenting with this, and the results are impressive. When I ask my AI assistant to create a new component, it knows to:
  • Use the correct naming conventions.
  • Create the necessary props interface.
  • Use the Sitecore field components (<Text>, <RichText>, etc.).
  • Handle missing fields gracefully.
This is a huge time-saver, ensuring that even junior developers can write high-quality, consistent code.

The Road Ahead

The release of Content SDK 1.2 and the introduction of the App Router mark a pivotal moment for Sitecore XM Cloud. It’s a clear signal that Sitecore is fully committed to modern, composable architecture and is dedicated to delivering a world-class developer experience.
For those of us who have been in the Sitecore trenches for years, this is an exciting time. We’re seeing the platform evolve in ways that will allow us to build faster, more robust, and more engaging digital experiences than ever before. The road ahead is bright, and I, for one, can’t wait to see what we build with these new tools.

References

Loading