Using Feature Flags in Sitecore: A Practical Example

Safeguard your Sitecore deployments: A hands-on guide to feature flags with JSS and Next.js

March 27, 2025

By David Austin

Code Management Can Be Challenging

Teams can distinguish between code deployment and feature release with the use of Feature flags, which are an effective tool in software development. You may reduce risks, roll out upgrades gradually, and safely test new functionality by gating functions behind flags. This blog article will discuss how to properly manage new modifications and potential problems by utilizing Feature Flags in conjunction with a Sitecore component. We'll walk through an example where a major bug is introduced by a new feature and how the Feature Flag keeps it from affecting production.

What We'll Cover

  1. Building an initial Sitecore component.
  2. Using environment variables as a Feature Flag.
  3. Adding a new feature gated by the Feature Flag.
  4. Simulating a bug in the new feature.
  5. Demonstrating how the Feature Flag protects the production environment.

Let’s Create a Hero Banner Component

Step 1: Creating the Initial Component

Let's start by creating a basic Sitecore JSS component. In this example, we'll build a Hero Banner that displays a title and an image.

// components/HeroBanner.tsx
import React from 'react';
import { Text, ImageField, Field } from '@sitecore-jss/sitecore-jss-nextjs';
import Image from 'next/image';

interface HeroBannerProps {
  fields: {
    title: Field<string>;
    image: ImageField;
  };
}

const HeroBanner: React.FC<HeroBannerProps> = ({ fields }) => {
  return (
    <div className="text-center p-5 bg-gray-100">
      <Text field={fields.title} tag="h1" className="text-3xl font-bold" />
      {fields.image?.value?.src && (
        <Image
          src={fields.image.value.src}
          alt={fields.image.value.alt || 'Hero Banner'}
          width={800}
          height={400}
          className="mx-auto mt-4"
        />
      )}
    </div>
  );
};

export default HeroBanner;

This simple component takes title and image fields from Sitecore and renders them in a styled container using Tailwind CSS classes. It also uses the next/image component for optimized image handling.

Step 2: Introducing the Feature Flag

To manage feature rollouts, we'll use an environment variable as a Feature Flag. Add the following line to your .env file:

NEXT_PUBLIC_FEATURE_NEW_COMPONENT=true

This environment variable will toggle the new feature on or off.

Step 3: Enhancing the Component

Suppose we want to add a new subtitle field to the Hero Banner. We'll wrap this feature in a conditional block controlled by the Feature Flag.

// components/HeroBanner.tsx
import React from 'react';
import { Text, ImageField, Field } from '@sitecore-jss/sitecore-jss-nextjs';
import Image from 'next/image';

interface HeroBannerProps {
  fields: {
    title: Field<string>;
    image: ImageField;
    subtitle?: Field<string>;
  };
}

const HeroBanner: React.FC<HeroBannerProps> = ({ fields }) => {
  const isNewFeatureEnabled = process.env.NEXT_PUBLIC_FEATURE_NEW_COMPONENT === 'true';

  return (
    <div className="text-center p-5 bg-gray-100">
      <Text field={fields.title} tag="h1" className="text-3xl font-bold" />
      {fields.image?.value?.src && (
        <Image
          src={fields.image.value.src}
          alt={fields.image.value.alt || 'Hero Banner'}
          width={800}
          height={400}
          className="mx-auto mt-4"
        />
      )}
      {isNewFeatureEnabled && fields.subtitle?.value && (
        <Text field={fields.subtitle} tag="h2" className="text-xl text-gray-600 mt-2" />
      )}
    </div>
  );
};

export default HeroBanner;

When the NEXT_PUBLIC_FEATURE_NEW_COMPONENT variable is set to true, the component will render the subtitle. The isEditing check ensures that the subtitle is always visible in editing mode, even if the Feature Flag is disabled.

Step 4: Simulating a Bug

To illustrate the importance of Feature Flags, let's introduce a bug in the new feature. Suppose the subtitle field is missing from some Sitecore content items. This would cause the new code to throw an error without proper checks.

{(isNewFeatureEnabled && fields.subtitle?.value && (
  <Text field={fields.subtitle} tag="h2" className="text-xl text-gray-600 mt-2" />
)}

Without the Feature Flag, this issue could break the application in production. However, by setting the Feature Flag to false in production, the buggy code will not execute.

Step 5: Demonstrating Bug Containment

In your production .env file, set the Feature Flag to false:

NEXT_PUBLIC_FEATURE_NEW_COMPONENT=false

Deploy the application. The subtitle feature will remain inactive, ensuring that the bug does not impact end users. Meanwhile, you can safely debug and fix the issue in your development environment.

In this example, we saw how to use a Feature Flag to manage a new feature in a Sitecore component, simulate a bug, and protect the production environment. Feature Flags are invaluable for reducing risk and improving deployment flexibility. Start using them in your projects to deliver features with confidence!

Image of Fishtank employee David Austin

David Austin

Development Team Lead | 4x Sitecore Technology MVP

David is a decorated Development Team Lead with 4 Sitecore Technology MVPs and Coveo MVP awards, as well as Sitecore CDP & Personalize Certified. He's worked in IT for 25 years; everything ranging from Developer to Business Analyst to Group Lead helping manage everything from Intranet and Internet sites to facility management and application support. David is a dedicated family man who loves to spend time with his girls. He's also an avid photographer and loves to explore new places.