<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Sitecore</title>
    <description>The latest articles on DEV Community by Sitecore (@sitecore).</description>
    <link>https://dev.to/sitecore</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F867%2F85d21531-40e1-4c2d-92bb-f181730c413e.png</url>
      <title>DEV Community: Sitecore</title>
      <link>https://dev.to/sitecore</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sitecore"/>
    <language>en</language>
    <item>
      <title>Sitecore Search - Debugging Crawling Errors</title>
      <dc:creator>Rob Earlam</dc:creator>
      <pubDate>Tue, 27 Feb 2024 21:45:06 +0000</pubDate>
      <link>https://dev.to/sitecore/sitecore-search-debugging-crawling-errors-58cl</link>
      <guid>https://dev.to/sitecore/sitecore-search-debugging-crawling-errors-58cl</guid>
      <description>&lt;p&gt;The latest video in my series on #Sitecore #Search was published this week, discussing how you can debug crawling errors.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/jWch9tCePvE"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>sitecore</category>
      <category>sitecoresearch</category>
      <category>debugging</category>
    </item>
    <item>
      <title>Sitecore Search SDK - Breaking Change</title>
      <dc:creator>Rob Earlam</dc:creator>
      <pubDate>Fri, 02 Feb 2024 00:00:00 +0000</pubDate>
      <link>https://dev.to/sitecore/sitecore-search-sdk-breaking-change-1bmh</link>
      <guid>https://dev.to/sitecore/sitecore-search-sdk-breaking-change-1bmh</guid>
      <description>&lt;h2&gt;
  
  
  Updating packages in Sitecore’s Developer Portal
&lt;/h2&gt;

&lt;p&gt;Recently my colleague &lt;a href="https://twitter.com/markvanaalst" rel="noopener noreferrer"&gt;Mark van Aalst&lt;/a&gt; was updating the package versions for the &lt;a href="https://developers.sitecore.com/" rel="noopener noreferrer"&gt;Sitecore Developer Portal&lt;/a&gt;. This also included updating the version of the Sitecore Search React SDK from &lt;code&gt;v2.0.0&lt;/code&gt; to &lt;code&gt;v2.2.2&lt;/code&gt;, among other packages that were updated at the same time. Once this had been deployed, we got reports that faceting was no longer working on the search results page. We quickly rolled back and started to look into what had happened.&lt;/p&gt;

&lt;h2&gt;
  
  
  Breaking changes in the Faceting UI component
&lt;/h2&gt;

&lt;p&gt;I reached out to the team that owns the SDK and apparently there was a breaking change introduced in a previous version and we needed to update how we were leveraging the UI components being used to render the Search Results page.&lt;/p&gt;

&lt;p&gt;Previously we were wrapping out Facets in the &lt;code&gt;AccordionFacets.Root&lt;/code&gt; component, like so&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;AccordionFacets.Root defaultFacetTypesExpandedList={facets.map((x) =&amp;gt; x.name)} onFacetValueClick={onFacetClick}&amp;gt;
    ….
&amp;lt;/AccordionFacets.Root&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;However, this approach is no longer valid, we should now be using &lt;code&gt;SearchResultsAccordionFacets&lt;/code&gt; component instead. As follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;SearchResultsAccordionFacets defaultFacetTypesExpandedList={facets.map((x) =&amp;gt; x.name)} onFacetValueClick={onFacetClick}&amp;gt;
    …
&amp;lt;/SearchResultsAccordionFacets&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This was a fairly straightforward change, which meant we could bump the Developer Portal up to be running on the latest version of the Search SDK 🎉.&lt;/p&gt;

&lt;p&gt;To see the complete set of changes we had to make for the Developer Portal, you can view the PR that was opened for this fix &lt;a href="https://github.com/Sitecore/developer-portal/pull/641" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>sitecore</category>
      <category>sitecoresearch</category>
    </item>
    <item>
      <title>Converting a Unicorn project to Sitecore Content Serialization (SCS)</title>
      <dc:creator>Jason St-Cyr</dc:creator>
      <pubDate>Wed, 29 Nov 2023 13:01:00 +0000</pubDate>
      <link>https://dev.to/sitecore/converting-a-unicorn-project-to-sitecore-content-serialization-scs-1jjd</link>
      <guid>https://dev.to/sitecore/converting-a-unicorn-project-to-sitecore-content-serialization-scs-1jjd</guid>
      <description>&lt;p&gt;Today I want to cover an important piece when migrating to XM Cloud: transitioning Unicorn serialization formats to the new Sitecore Content Serialization (SCS) format. In this article, I'll walk you through some of the reasons for the switch, but mostly focus on the tools and process for migrating your Unicorn configurations to SCS.   &lt;/p&gt;

&lt;p&gt;I want to throw a big shout-out to the Unicorn community that helped me with this article. I haven't used Unicorn before and I had to lean on a lot of smart folks to gather the information together. Thanks to Mark Cassidy, Kamruz Jaman, Michael West, Richard Seal, Justin Laster, Dylan Young, Mihaly Arvai, Martin Miles, and probably others that I forgot!&lt;/p&gt;

&lt;h2&gt;
  
  
  Why migrate from Unicorn to SCS? 
&lt;/h2&gt;

&lt;p&gt;First things first, let's address the "why" behind making this transition. While Unicorn is an excellent choice for serialization on Sitecore XM or Sitecore XP solutions, there are some reasons to make a move to SCS: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Future-Proofing:&lt;/strong&gt; As Sitecore continues to evolve, it's clear that SCS is the direction that Sitecore is heading in. By transitioning to SCS now, you're ensuring your development workflow is aligned with the Sitecore roadmap. &lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Migration to XM Cloud:&lt;/strong&gt; While you have options for serialization tools in self-hosted installations of Sitecore XM/XP, XM Cloud only fully supports SCS flows today. There are ways to keep Unicorn in your flow (which I'll cover next) but XM Cloud is designed for developers using SCS. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  But what if I want to stay on Unicorn with XM Cloud? 
&lt;/h2&gt;

&lt;p&gt;This is absolutely not recommended by Sitecore, and I wouldn't personally recommend it for any customer use cases, but I did figure out a way to use Items as Resources (IAR) and the Sitecore CLI to support Unicorn serialization files, but still deploy to XM Cloud.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://jasonstcyr.com/2023/11/15/deploy-unicorn-serialization-to-xm-cloud-using-iar-a-hack-you-should-not-do" rel="noopener noreferrer"&gt;Read about deploying Unicorn to XM Cloud with IAR ▶&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Should I stay or should I go? 
&lt;/h2&gt;

&lt;p&gt;If you are not planning to migrate to XM Cloud now or in the future, or you are okay with the outlined workaround for using Unicorn with XM Cloud, then Unicorn might still be the right choice for you! The rest of this article assumes that you have already made the choice to convert to SCS and will walk through the steps.  &lt;/p&gt;

&lt;h2&gt;
  
  
  What are the differences between Unicorn and SCS
&lt;/h2&gt;

&lt;p&gt;Unicorn and SCS are not the same tools, so it's important to know the impact of moving from Unicorn to SCS. What will you will gain as extra capabilities? What things will you no longer have after the migration? While much is similar, in the below table are the unique features of each.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Unicorn features lost when moving to XM Cloud&lt;/th&gt;
&lt;th&gt;Sitecore Content Serialization (SCS) features you gain&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Open Source project strongly supported by the community&lt;/td&gt;
&lt;td&gt;Supported by Sitecore Support&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Supports database specified at an individual file level&lt;/td&gt;
&lt;td&gt;Create Items as Resources (IAR) packages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Real-time transparent syncs (similar to SCS 'watch' but more immediate)&lt;/td&gt;
&lt;td&gt;Can connect to multiple environments from same system&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Easily integrate as part of DevOps CI/CD&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Visual Studio plugin available (licensing required)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The Conversion Journey: A step-by-step migration guide 
&lt;/h2&gt;

&lt;p&gt;Now that we understand the "why", let's go through a sample plan for migrating your Unicorn configs to SCS. Here's a step-by-step guide to help you make a smooth transition: &lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Evaluate Your Existing Unicorn Project 
&lt;/h3&gt;

&lt;p&gt;Before you begin the migration, take a good look at your existing Unicorn project. Familiarize yourself with the folder structure, configurations, and the types of items being serialized. This knowledge will come in handy as you plan your SCS migration. &lt;/p&gt;

&lt;p&gt;This is also a good time to identify any irrelevant or inconsistent serialization configurations. Over time, items may have been added into serialization that are either no longer required or should no longer be managed through source control. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Very important:&lt;/strong&gt; Make sure to check which default Sitecore items are overridden! In some projects, there are custom security settings or other changes applied to areas of the content tree that are normally shipped with the product. These are often overlooked when migrating to SCS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A caveat about XM Cloud:&lt;/strong&gt; The content items shipped with XM Cloud are delivered using Items as Resources (IAR). Depending on your sync choices, your configuration could prevent updates from the Sitecore XM Cloud team from being deployed. Content in the database (i.e. your sync'd items) will override those IAR values. Examine your overrides to make sure they are absolutely necessary. &lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Install SCS and Prerequisites 
&lt;/h3&gt;

&lt;p&gt;Ensure that your local Sitecore development environment is compatible with Sitecore Content Serialization (SCS) and ready to push to Sitecore XM Cloud. Install the necessary Sitecore modules and SCS-related tools.  &lt;/p&gt;

&lt;p&gt;Read about the requirements in the docs:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://doc.sitecore.com/xmc/en/developers/xm-cloud/install-sitecore-command-line-interface.html" rel="noopener noreferrer"&gt;Install the Sitecore CLI&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;  &lt;a href="https://doc.sitecore.com/xmc/en/developers/xm-cloud/install-sitecore-for-visual-studio.html" rel="noopener noreferrer"&gt;Install Sitecore for Visual Studio&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 3: Convert Unicorn configs to SCS 
&lt;/h3&gt;

&lt;p&gt;There are a few tools that can help take your existing Unicorn configs and start converting them to SCS configuration files. The Unicorn and SCS configurations are quite similar, so the example scripts tend to find your serialization.config files and then convert them to the equivalent JSON module file.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A sample Unicorn config file&lt;/strong&gt;&lt;br&gt;
&lt;br&gt;
 &lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;configuration&lt;/span&gt; &lt;span class="na"&gt;xmlns:patch=&lt;/span&gt;&lt;span class="s"&gt;"http://www.sitecore.net/xmlconfig/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;sitecore&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;unicorn&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;configurations&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;configuration&lt;/span&gt;
          &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"Project.HelixBase"&lt;/span&gt;
          &lt;span class="na"&gt;description=&lt;/span&gt;&lt;span class="s"&gt;"HelixBase site content"&lt;/span&gt;
          &lt;span class="na"&gt;dependencies=&lt;/span&gt;&lt;span class="s"&gt;"Foundation.*,Feature.*,Project.Common"&lt;/span&gt;
          &lt;span class="na"&gt;patch:after=&lt;/span&gt;&lt;span class="s"&gt;"configuration[@name='Foundation.Serialization']"&lt;/span&gt;
          &lt;span class="na"&gt;extends=&lt;/span&gt;&lt;span class="s"&gt;"Helix.Feature.Base"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;predicate&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;include&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"Project.HelixBase.Templates"&lt;/span&gt; &lt;span class="na"&gt;database=&lt;/span&gt;&lt;span class="s"&gt;"master"&lt;/span&gt; &lt;span class="na"&gt;path=&lt;/span&gt;&lt;span class="s"&gt;"/sitecore/templates/Project/HelixBase"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;include&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"Project.HelixBase.Renderings"&lt;/span&gt; &lt;span class="na"&gt;database=&lt;/span&gt;&lt;span class="s"&gt;"master"&lt;/span&gt; &lt;span class="na"&gt;path=&lt;/span&gt;&lt;span class="s"&gt;"/sitecore/layout/renderings/Project/HelixBase"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;include&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"Project.HelixBase.Layouts"&lt;/span&gt; &lt;span class="na"&gt;database=&lt;/span&gt;&lt;span class="s"&gt;"master"&lt;/span&gt; &lt;span class="na"&gt;path=&lt;/span&gt;&lt;span class="s"&gt;"/sitecore/layout/layouts/Project/HelixBase"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;include&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"Project.HelixBase.PlaceholderSettings"&lt;/span&gt; &lt;span class="na"&gt;database=&lt;/span&gt;&lt;span class="s"&gt;"master"&lt;/span&gt; &lt;span class="na"&gt;path=&lt;/span&gt;&lt;span class="s"&gt;"/sitecore/layout/placeholder settings/Project/HelixBase"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;include&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"Project.HelixBase.Models"&lt;/span&gt; &lt;span class="na"&gt;database=&lt;/span&gt;&lt;span class="s"&gt;"master"&lt;/span&gt; &lt;span class="na"&gt;path=&lt;/span&gt;&lt;span class="s"&gt;"/sitecore/layout/models/Project/HelixBase"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;include&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"Project.HelixBase.Content"&lt;/span&gt; &lt;span class="na"&gt;database=&lt;/span&gt;&lt;span class="s"&gt;"master"&lt;/span&gt; &lt;span class="na"&gt;path=&lt;/span&gt;&lt;span class="s"&gt;"/sitecore/content/HelixBase"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;include&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"Project.HelixBase.Media"&lt;/span&gt; &lt;span class="na"&gt;database=&lt;/span&gt;&lt;span class="s"&gt;"master"&lt;/span&gt; &lt;span class="na"&gt;path=&lt;/span&gt;&lt;span class="s"&gt;"/sitecore/media library/Project/HelixBase"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
              &lt;span class="nt"&gt;&amp;lt;exclude&lt;/span&gt; &lt;span class="na"&gt;children=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/include&amp;gt;&lt;/span&gt;

          &lt;span class="nt"&gt;&amp;lt;/predicate&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/configurations&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/unicorn&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/sitecore&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;em&gt;(Example Serialization.config from Mihaly Arvai: &lt;/em&gt;&lt;a href="https://gist.github.com/Mitya88/5c9e29b9d04f1eff42700568f5bd8541/" rel="noopener noreferrer"&gt;https://gist.github.com/Mitya88/5c9e29b9d04f1eff42700568f5bd8541/&lt;/a&gt;&lt;em&gt;)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;After converting to SCS &lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"namespace"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;"Project.HelixBase"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"references"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
                       &lt;/span&gt;&lt;span class="s2"&gt;"Foundation.*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                       &lt;/span&gt;&lt;span class="s2"&gt;"Feature.*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                       &lt;/span&gt;&lt;span class="s2"&gt;"Project.Common"&lt;/span&gt;&lt;span class="w"&gt;
                   &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"items"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
                  &lt;/span&gt;&lt;span class="nl"&gt;"includes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
                                   &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
                                       &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;"Project.HelixBase.Templates"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                                       &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;"/sitecore/templates/Project/HelixBase"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                                       &lt;/span&gt;&lt;span class="nl"&gt;"database"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;"master"&lt;/span&gt;&lt;span class="w"&gt;
                                   &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
                                   &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
                                       &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;"Project.HelixBase.Renderings"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                                       &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;"/sitecore/layout/renderings/Project/HelixBase"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                                       &lt;/span&gt;&lt;span class="nl"&gt;"database"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;"master"&lt;/span&gt;&lt;span class="w"&gt;
                                   &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
                                   &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
                                       &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;"Project.HelixBase.Layouts"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                                       &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;"/sitecore/layout/layouts/Project/HelixBase"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                                       &lt;/span&gt;&lt;span class="nl"&gt;"database"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;"master"&lt;/span&gt;&lt;span class="w"&gt;
                                   &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
                                   &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
                                       &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;"Project.HelixBase.PlaceholderSettings"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                                       &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;"/sitecore/layout/placeholder settings/Project/HelixBase"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                                       &lt;/span&gt;&lt;span class="nl"&gt;"database"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;"master"&lt;/span&gt;&lt;span class="w"&gt;
                                   &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
                                   &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
                                       &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;"Project.HelixBase.Models"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                                       &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;"/sitecore/layout/models/Project/HelixBase"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                                       &lt;/span&gt;&lt;span class="nl"&gt;"database"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;"master"&lt;/span&gt;&lt;span class="w"&gt;
                                   &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
                                   &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
                                       &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;"Project.HelixBase.Content"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                                       &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;"/sitecore/content/HelixBase"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                                       &lt;/span&gt;&lt;span class="nl"&gt;"database"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;"master"&lt;/span&gt;&lt;span class="w"&gt;
                                   &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
                                   &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
                                       &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;"Project.HelixBase.Media"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                                       &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;"/sitecore/media library/Project/HelixBase"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                                       &lt;/span&gt;&lt;span class="nl"&gt;"database"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;"master"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                                       &lt;/span&gt;&lt;span class="nl"&gt;"scope"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;"SingleItem"&lt;/span&gt;&lt;span class="w"&gt;
                                   &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
                               &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;(Example module.json from Mihaly Arvai: &lt;a href="https://gist.github.com/Mitya88/38b508019016e6998972350d8f3aaedd" rel="noopener noreferrer"&gt;https://gist.github.com/Mitya88/38b508019016e6998972350d8f3aaedd&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; The above code samples are directly from the article by Mihaly Arvai (linked below).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check out these community scripts that you can extend for your needs to convert your Unicorn to SCS!&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://medium.com/@mitya_1988/convert-unicorn-serialization-configs-into-sitecore-content-serialization-module-json-with-1a4e93661616" rel="noopener noreferrer"&gt;Mihaly Arvai --- Convert Unicorn Serialization configs into Sitecore Content Serialization module JSON with Powershell&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;  &lt;a href="https://gist.github.com/MartinMiles/f0b1ceaa00640a15765fceb41852ca16" rel="noopener noreferrer"&gt;Martin Miles --- Convert Unicorn to Sitecore CLI serialization&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 4: Test and Iterate 
&lt;/h3&gt;

&lt;p&gt;Before you declare victory, you need to thoroughly test your new SCS configs to ensure that all serialized content is being correctly deployed and pulled against your local instance. Verify that the items, templates, and configurations work as expected. &lt;/p&gt;

&lt;p&gt;This is where you may need to adjust the logic or configurations used to convert your Unicorn configurations if you are not seeing the results you expect.&lt;/p&gt;

&lt;p&gt;There are a few tools you can use to start checking your serialization configs: &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Run a validation of your config&lt;/strong&gt;\&lt;br&gt;
The &lt;code&gt;sitecore ser validate&lt;/code&gt; command can be used to look for any problems in your config. If any are found, you can then run &lt;code&gt;sitecore ser validate --fix&lt;/code&gt; to fix common problems. See the &lt;a href="https://doc.sitecore.com/xmc/en/developers/xm-cloud/validate-serialized-content-items.html" rel="noopener noreferrer"&gt;docs on validation&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Get a sync explanation report&lt;/strong&gt;\&lt;br&gt;
By using the &lt;code&gt;sitecore ser explain&lt;/code&gt; command, you can get detailed information on why certain paths are included in the sync. See the docs on the &lt;a href="https://doc.sitecore.com/xmc/en/developers/xm-cloud/the-cli-serialization-command.html#the-explain-subcommand" rel="noopener noreferrer"&gt;explain subcommand&lt;/a&gt;. &lt;/p&gt;
&lt;h3&gt;
  
  
  Step 5: Update Your Deployment Pipeline 
&lt;/h3&gt;

&lt;p&gt;With your content serialization configurations finalized, you will now need to update your deployment pipeline for content. This might involve adjusting your local deployment process, continuous integration pipelines, and ensuring all team members are aware of the new workflow. &lt;/p&gt;

&lt;p&gt;Watch this video by Rob Earlam to see how the Sitecore DevRel team converted their CI/CD DevOps flow to work with XM Cloud and the Sitecore CLI:&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/VNbieipVGk4"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 6: Test Deployments 
&lt;/h3&gt;

&lt;p&gt;With your full flow now updated, you will need to test that your updates through CI/CD pipelines are being sent (or ignored) correctly as you make changes to your content and serialize them into your source control repository. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Remember to test these scenarios: &lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Adding new content that should be deployed &lt;/li&gt;
&lt;li&gt; Adding new content that should NOT be deployed &lt;/li&gt;
&lt;li&gt; Making a change to content that should override the target version &lt;/li&gt;
&lt;li&gt; Making a change to content that should NOT override the target version &lt;/li&gt;
&lt;li&gt; Deleting a piece of content from all environments &lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Wrapping it up! 
&lt;/h2&gt;

&lt;p&gt;Migrating from Unicorn to Sitecore Content Serialization can be a manual process, but there are community tools that can help you get there faster! In either case, it requires careful consideration and planning. By following the steps outlined above, you can transition your project to SCS and start working with XM Cloud!&lt;/p&gt;

</description>
      <category>sitecore</category>
      <category>serialization</category>
      <category>unicorn</category>
      <category>xmcloud</category>
    </item>
    <item>
      <title>Converting a TDS project to Sitecore Content Serialization (SCS) </title>
      <dc:creator>Jason St-Cyr</dc:creator>
      <pubDate>Tue, 28 Nov 2023 13:14:06 +0000</pubDate>
      <link>https://dev.to/sitecore/converting-a-tds-project-to-sitecore-content-serialization-scs-4emk</link>
      <guid>https://dev.to/sitecore/converting-a-tds-project-to-sitecore-content-serialization-scs-4emk</guid>
      <description>&lt;p&gt;Today I want to dive into an important piece when migrating to XM Cloud: transitioning from a traditional TDS (Team Development for Sitecore) project to the new Sitecore Content Serialization (SCS) format. In this article, I'll walk you through some of the reasons for the switch, but mostly focus on the tools and process for migrating your TDS project to SCS. &lt;/p&gt;

&lt;h2&gt;
  
  
  Why Migrate from TDS to SCS? 
&lt;/h2&gt;

&lt;p&gt;First things first, let's address the "why" behind making this transition. While TDS has been a trusted companion for many developers over the years, there are some reasons to make a move to SCS: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Performance:&lt;/strong&gt; SCS is designed with performance in mind. It works natively with the Sitecore item provider and is optimized for speed, reducing the time it takes to sync items during development. Ongoing performance improvements are being done with SCS to make this even faster. &lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Future-Proofing:&lt;/strong&gt; As Sitecore continues to evolve, it's clear that SCS is the direction that Sitecore is heading in. By transitioning to SCS now, you're ensuring your development workflow is aligned with the Sitecore roadmap. &lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Migration to XM Cloud: &lt;/strong&gt;While you have options for serialization tools in self-hosted installations of Sitecore XM/XP, XM Cloud does not support TDS. If you want to migrate to XM Cloud, you should convert to SCS. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are not planning to migrate to XM Cloud now or in the future, then TDS might still be the right choice for you. This article assumes that you have already made that choice to convert to SCS and walks through the steps. &lt;/p&gt;

&lt;h2&gt;
  
  
  The Conversion Journey: a step-by-step migration guide 
&lt;/h2&gt;

&lt;p&gt;Now that we understand the "why", let's go through a sample plan for migrating your TDS project to SCS. Here's a step-by-step guide to help you make a smooth transition: &lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Evaluate Your Existing TDS Project 
&lt;/h3&gt;

&lt;p&gt;Before you begin the migration, first assess your existing TDS project. Understand the scope of your project, the templates, and items you need to migrate, and any custom configurations that are in place. &lt;/p&gt;

&lt;p&gt;This is also a good time to identify any irrelevant or inconsistent serialization configurations. Over time, items may have been added into serialization that are either no longer required or should no longer be managed through source control. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Very important:&lt;/strong&gt; Make sure to check which default Sitecore items are overridden! In some projects, there are custom security settings or other changes applied to areas of the content tree that are normally shipped with the product. These are often overlooked when migrating to SCS. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A caveat about XM Cloud: &lt;/strong&gt;The content items shipped with XM Cloud are delivered using Items as Resources (IAR). Depending on your sync choices, your configuration could prevent updates from the Sitecore XM Cloud team from being deployed. Content in the database (i.e. your sync'd items) will override those IAR values. Examine your overrides to make sure they are absolutely necessary. &lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Install SCS and Prerequisites 
&lt;/h3&gt;

&lt;p&gt;Ensure that your local Sitecore development environment is compatible with Sitecore Content Serialization (SCS) and ready to push to Sitecore XM Cloud. Install the necessary Sitecore modules and SCS-related tools.  &lt;/p&gt;

&lt;p&gt;Read about the requirements in the docs:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://doc.sitecore.com/xmc/en/developers/xm-cloud/install-sitecore-command-line-interface.html" rel="noopener noreferrer"&gt;Install the Sitecore CLI&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;  &lt;a href="https://doc.sitecore.com/xmc/en/developers/xm-cloud/install-sitecore-for-visual-studio.html" rel="noopener noreferrer"&gt;Install Sitecore for Visual Studio&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 3: Create an SCS-Compatible Serialization Folder 
&lt;/h3&gt;

&lt;p&gt;In your project, you will want to create a dedicated folder structure to store serialized content for SCS. SCS uses YAML files for serialization, so this folder will hold YAML files representing your Sitecore items.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Convert your TDS project definition to SCS 
&lt;/h3&gt;

&lt;p&gt;There are a few tools that can help take your existing definitions and start converting them to SCS configuration files. In general, a TDS project and an SVS configuration have some similar concepts regarding serialization configuration: &lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;strong&gt;TDS&lt;/strong&gt; &lt;/th&gt;
&lt;th&gt;
&lt;strong&gt;SCS&lt;/strong&gt; &lt;/th&gt;
&lt;th&gt;
&lt;strong&gt;Description&lt;/strong&gt; &lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;NeverDeploy &lt;/td&gt;
&lt;td&gt;ignored &lt;/td&gt;
&lt;td&gt;TDS serialization contains items that should not be deployed but exist to keep hierarchy relations.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SVS ignores the routes instead. &lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeployOnce &lt;/td&gt;
&lt;td&gt;CreateOnly &lt;/td&gt;
&lt;td&gt;This setting ensures a content item is only created if it does not exist. Existing items are not overwritten. &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AlwaysUpdate &lt;/td&gt;
&lt;td&gt;CreateUpdateAndDelete &lt;/td&gt;
&lt;td&gt;This setting ensures a content item will always be changed, regardless of the state in the target system. &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NoChildSynchronization &lt;/td&gt;
&lt;td&gt;SingleItem &lt;/td&gt;
&lt;td&gt;This setting ensures that only the content item specified is updated. None of the items that have it as a parent will be affected. &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KeepAllChildrenSynchronized &lt;/td&gt;
&lt;td&gt;ItemAndDescendants &lt;/td&gt;
&lt;td&gt;This setting forces the item and ALL children and sub-children through the item tree to be affected. &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KeepDirectDescendantsSynchronized &lt;/td&gt;
&lt;td&gt;ItemAndChildren &lt;/td&gt;
&lt;td&gt;This setting will force the update across the item and the immediate children but will not change content items further down the content tree. &lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;I found a few community tools that can parse through the TDS project definitions and generate SCS configuration JSON files by using this mapping. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://theagilecoder.files.wordpress.com/2023/11/image-10.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa8a876eoglkpcb8bjszl.png" width="728" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Get SCS Paths from TDS Project
&lt;/h3&gt;

&lt;p&gt;A PowerShell script by Sitecore MVP Aaron Bickle to generate SCS JSON files. Does not support role migration.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://gist.github.com/bic742/f77783c643420b704535d88fcbb5b18e" rel="noopener noreferrer"&gt;Get the Gist&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://theagilecoder.files.wordpress.com/2023/11/image-14.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0bpzump5v53rm86b2ob2.png" width="800" height="509"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Sitecore TDS to SCS Serialization Converter
&lt;/h3&gt;

&lt;p&gt;A .NET application by Sitecore Solution Architect Joseph Long that you can configure to parse through TDS projects and generate SCS JSON files. Supports role migration but does not migrate role inheritance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/josephjlong/sitecore-serialisation-converter" rel="noopener noreferrer"&gt;View GitHub Repo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These tools may not cover every single use case. You will likely need to extend them to your needs. You should also note that these convert the project configurations, but they do not deploy content during this step. You will do this in the next step. &lt;/p&gt;

&lt;p&gt;You could also do this manually, but I would recommend using a tool to get started so you have less work to do overall. &lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: Test and Iterate 
&lt;/h3&gt;

&lt;p&gt;Before you declare victory, you need to thoroughly test your new SCS configs to ensure that all serialized content is being correctly deployed and pulled against your local instance. Verify that the items, templates, and configurations work as expected. &lt;/p&gt;

&lt;p&gt;This is where you may need to adjust the logic or configurations used to convert your TDS projects if you are not seeing the results you expect. &lt;/p&gt;

&lt;p&gt;There are a few tools you can use to start checking your serialization configs: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Run a validation of your config: &lt;/strong&gt;The &lt;code&gt;sitecore ser validate&lt;/code&gt; command can be used to look for any problems in your config. If any are found, you can then run sitecore ser validate --fix to fix common problems. See the &lt;a href="https://doc.sitecore.com/xmc/en/developers/xm-cloud/validate-serialized-content-items.html" rel="noopener noreferrer"&gt;docs on validation&lt;/a&gt;. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Get a sync explanation report: &lt;/strong&gt;By using the &lt;code&gt;sitecore ser explain&lt;/code&gt; command, you can get detailed information on why certain paths are included in the sync. See the docs on the &lt;a href="https://doc.sitecore.com/xmc/en/developers/xm-cloud/the-cli-serialization-command.html#the-explain-subcommand" rel="noopener noreferrer"&gt;explain subcommand&lt;/a&gt;. &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Step 6: Update Your Deployment Pipeline 
&lt;/h3&gt;

&lt;p&gt;With your content serialization configurations finished, you will now need to update your deployment pipeline for content. This might involve adjusting your local deployment process, continuous integration pipelines, and ensuring all team members are aware of the new workflow. &lt;/p&gt;

&lt;p&gt;Watch this video by Rob Earlam to see how the Sitecore DevRel team converted their CI/CD DevOps flow to work with XM Cloud and the Sitecore CLI:&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/VNbieipVGk4"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 7: Test Deployments 
&lt;/h3&gt;

&lt;p&gt;With your full flow now updated, you will need to test that your updates through CI/CD pipelines are being sent (or ignored) correctly as you make changes to your content and serialize them into your source control repository. &lt;/p&gt;

&lt;p&gt;Remember to test these scenarios: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Adding new content that should be deployed &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Adding new content that should NOT be deployed &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Making a change to content that should override the target version &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Making a change to content that should NOT override the target version &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Deleting a piece of content from all environments&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Wrapping it up! 
&lt;/h2&gt;

&lt;p&gt;Migrating from TDS to Sitecore Content Serialization (SCS) can be a manual process, but there are tools that can help you get there faster! In either case, it requires careful consideration and planning. By following the steps outlined above, you can transition your project to SCS and start working with XM Cloud!&lt;/p&gt;

</description>
      <category>sitecore</category>
      <category>serialization</category>
      <category>tds</category>
      <category>xmcloud</category>
    </item>
    <item>
      <title>Deploy Unicorn serialization to XM Cloud using IAR – A proof of concept</title>
      <dc:creator>Jason St-Cyr</dc:creator>
      <pubDate>Wed, 15 Nov 2023 13:02:00 +0000</pubDate>
      <link>https://dev.to/sitecore/deploy-unicorn-serialization-to-xm-cloud-using-iar-a-proof-of-concept-de</link>
      <guid>https://dev.to/sitecore/deploy-unicorn-serialization-to-xm-cloud-using-iar-a-proof-of-concept-de</guid>
      <description>&lt;p&gt;Sitecore has been pretty clear that the only supported option for deploying items to XM Cloud was using Sitecore Content Serialization (SCS) format. But people love using Unicorn and there were enough clues lying around that Unicorn might work? But I couldn't be sure. To make my life as a DevRel professional at Sitecore easier, I was sort of hoping this Proof of Concept with Items as Resources (IAR) wasn't going to work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But it did.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So I'm writing this article so you can see how it works and also highlight some risks with trying to deploy Unicorn serialization to XM Cloud!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;⚠ IMPORTANT⚠&lt;/strong&gt;&lt;br&gt;
Sitecore does not officially support Unicorn deployment to XM Cloud.&lt;br&gt;
The approach in this article was done to prove something is &lt;strong&gt;POSSIBLE&lt;/strong&gt;, but also explain why you probably still shouldn't do it.&lt;br&gt;
Please?&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Jason, a concerned Sitecorian&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Why write this article, then?
&lt;/h2&gt;

&lt;p&gt;If this is something you shouldn't be doing, why document how to do it? Well, the fact of the matter is, I didn't know if it could be done or not. And when I talked to other people much more fluent in Unicorn than I, they also didn't know for sure. In fact, I couldn't find a single resource or example from Sitecore or others that showed why Unicorn could NOT be pushed to XM Cloud. There were plenty of statements saying that only the Sitecore CLI and Sitecore Content Serialization (SCS) format were supported. Nobody had figured out why, though.&lt;/p&gt;

&lt;p&gt;So I'm going to show you how to make it work, and then explain the risks.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's the TL;DR?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The challenge:&lt;/strong&gt; Take an existing Unicorn serialization file and have the item get created in XM Cloud.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The pieces that make it work:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Deploy pipeline in GitHub actions (or your favorite DevOps tool) that invokes the Sitecore CLI&lt;/li&gt;
&lt;li&gt; The Sitecore CLI &lt;strong&gt;itemres --unicorn&lt;/strong&gt; command to create an IAR .dat file from Unicorn serialization&lt;/li&gt;
&lt;li&gt; A placeholder .dat file in &lt;strong&gt;App_Data &lt;/strong&gt;that is part of the solution being deployed.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;The result:&lt;/strong&gt; It works. (With some things that are not 'clean') Definitely not supported by Sitecore, and could stop working at any time. Be aware of the risks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Follow along with the GitHub repo
&lt;/h2&gt;

&lt;p&gt;So you can see exactly how this all came together, you can find my fork of the XM Cloud foundation head in my GitHub: &lt;a href="https://github.com/jst-cyr/xmcloud-unicorn-deployment" rel="noopener noreferrer"&gt;https://github.com/jst-cyr/xmcloud-unicorn-deployment&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The key files to reference are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://github.com/jst-cyr/xmcloud-unicorn-deployment/blob/main/src/unicorn/Common.yml" rel="noopener noreferrer"&gt;src/unicorn/Common.yml&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://github.com/jst-cyr/xmcloud-unicorn-deployment/blob/main/src/platform/App_Data/items/master/items.master.unicorn.dat" rel="noopener noreferrer"&gt;src/platform/App_Data/items/master/items.master.unicorn.dat&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://github.com/jst-cyr/xmcloud-unicorn-deployment/blob/main/.github/workflows/deploy_xmCloud.yml" rel="noopener noreferrer"&gt;.github/workflows/deploy_xmCloud.yml&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  PART 1: Adding the Unicorn serialization files
&lt;/h2&gt;

&lt;p&gt;In my example, I have a single Unicorn serialization file that is used to test out the concept.&lt;/p&gt;

&lt;p&gt;Here are the steps I took:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;I forked the &lt;a href="https://github.com/sitecorelabs/xmcloud-foundation-head" rel="noopener noreferrer"&gt;xmcloud-foundation-head&lt;/a&gt; that is used by XM Cloud. This provided me a base solution that is ready to deploy to XM Cloud.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I found a simple serialized file from a 5-year old project that my colleague &lt;a href="https://dylanyoung.dev/" rel="noopener noreferrer"&gt;Dylan Young&lt;/a&gt; had in his GitHup repo. This file was a template folder so had limited references to other items and did not have a complex subitems tree I needed to worry about. The purpose was to have an example, but in a real scenario you would have many files across many projects/features that you might have to locate and add to your XM Cloud solution.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I added the serialized file into a folder that I named '&lt;a href="https://github.com/jst-cyr/xmcloud-unicorn-deployment/tree/main/src/unicorn" rel="noopener noreferrer"&gt;unicorn&lt;/a&gt;'. This was for testing purposes and made the later IAR generation step much easier, but you likely would have a more complex setup in a real situation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; I did not need to reference it in the project, I only needed to add it to source control.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I updated the &lt;strong&gt;Parent&lt;/strong&gt; ID value and the &lt;strong&gt;Path&lt;/strong&gt; to match with the folder in XM Cloud. In the repository I took the file from, it was also referencing a 'project' folder, but it didn't match with the default one shipped with XM Cloud.&lt;/p&gt;

&lt;p&gt;To make my life easier, and avoid needing to ship a new parent folder, I updated it to match with the &lt;strong&gt;/sitecore/templates/Project&lt;/strong&gt; folder that ships with XM Cloud. This actually didn't occur to me originally until my deployment failed and the item didn't get created, so I'm telling you now so you don't make my mistake!&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://theagilecoder.files.wordpress.com/2023/11/image.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyk9nbkfcjf4y0hq3qfux.png" alt="Screenshot of common.yml file showing an example Unicorn file" width="525" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Important note:&lt;/strong&gt; My use case was purposefully simple. No parent children to deploy, no child items, using an existing Project folder, and only pushing a single item. Your solution will not necessarily be that simple and you may have many files that you have to analyze for conflicting folder paths and invalid ID values.&lt;/p&gt;

&lt;p&gt;That being said, whether you want to use Unicorn or convert to SCS, you'll likely need to figure out those updates.&lt;/p&gt;

&lt;h2&gt;
  
  
  PART 2: Adding a placeholder item resources DAT file
&lt;/h2&gt;

&lt;p&gt;I'll be honest, I didn't do this as my second step when I was first putting this together. This was actually my last step because I had no idea I needed to do this until things didn't work for me.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The goal: &lt;/strong&gt;This file is going to be replaced in the DevOps pipeline with a real IAR DAT file and will tell XM Cloud to deploy it.&lt;/p&gt;

&lt;p&gt;The XM Cloud deployment will only look at the files you have referenced in your project. If you have a file in the right place, but it's not referenced by the project build, it isn't going to be pushed over to XM Cloud.&lt;/p&gt;

&lt;p&gt;I chose to do a text file that had the right file name (&lt;a href="https://github.com/jst-cyr/xmcloud-unicorn-deployment/blob/main/src/platform/App_Data/items/master/items.master.unicorn.dat" rel="noopener noreferrer"&gt;items.master.unicorn.dat&lt;/a&gt;). This is an invalid DAT file and I did this so that if XM Cloud deploy throws an error I would know that the file got there, but my actual IAR file had not. (Basically my equivalent of a "Here!" write to the console log).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://theagilecoder.files.wordpress.com/2023/11/image-1.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbl72v9xibsu7efwl1wq6.png" alt="Screenshot of the contents of the items.master.unicorn.dat file. The file reads " width="800" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  PART 3: Adding GitHub Action for triggering deployments on push to the branch
&lt;/h2&gt;

&lt;p&gt;I stole this idea from our &lt;a href="https://github.com/Sitecore/XM-Cloud-Introduction" rel="noopener noreferrer"&gt;XM Cloud Introduction example repo&lt;/a&gt;. My colleague &lt;a href="https://robearlam.com/" rel="noopener noreferrer"&gt;Rob Earlam&lt;/a&gt; had built out a multisite DevOps pipeline with GitHub actions and it was easy enough to trim it down to just what I needed to push a project to XM Cloud. This was a good starting point.&lt;/p&gt;

&lt;p&gt;From what is in that repo, I created &lt;a href="https://github.com/jst-cyr/xmcloud-unicorn-deployment/blob/main/.github/workflows/CI-CD_XM_Cloud.yml" rel="noopener noreferrer"&gt;.github/workflow/CI-CI_XM_Cloud.yml&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;name: CI-CD - XM Cloud
on:
  workflow_dispatch:
  push:
    branches: [main]
  pull_request:
    branches: [main]
jobs:
  deploy:
    uses: ./.github/workflows/deploy_xmCloud.yml
    if: github.repository_owner == 'jst-cyr' &amp;amp;&amp;amp; ((github.event.pull_request.head.repo.full_name == github.repository) || (github.event_name == 'push'))
    with:
      environmentName: Unicorn
    secrets:
      XM_CLOUD_CLIENT_ID: ${{ secrets.XM_CLOUD_CLIENT_ID }}
      XM_CLOUD_CLIENT_SECRET: ${{ secrets.XM_CLOUD_CLIENT_SECRET }}
      XM_CLOUD_ENVIRONMENT_ID: ${{ secrets.XM_CLOUD_ENVIRONMENT_ID }}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This file will trigger on PRs and pushes to the repository and run the &lt;strong&gt;deploy_xmCloud.yml&lt;/strong&gt; GitHub action (more on that later). Important pieces:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;github.repository_owner == 'jstcyr'&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This ensures if somebody forks the repo and does a PR that it doesn't trigger a deployment to my environment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;environmentName: Unicorn&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This can be any value, but I use it in &lt;strong&gt;deploy_xmCloud.yml&lt;/strong&gt; to add it to the action name. This is useful in multi-site scenarios where we might deploy multiple sites and we want to see in the GitHub Actions dashboard which site is being pushed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;XM_CLOUD_CLIENTID&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The value here is used to authenticate with the Sitecore CLI. Essentially my username. You can get your Client ID from the &lt;a href="https://doc.sitecore.com/xmc/en/developers/xm-cloud/manage-client-credentials-for-an-xm-cloud-organization-or-environment.html" rel="noopener noreferrer"&gt;XM Cloud Deploy App&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;XM_CLOUD_CLIENT_SECRET&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The value here is used to authenticate with the Sitecore CLI. The password, if you will. You can your client secret when you get your client ID.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;XM_CLOUD_ENVIRONMENT_ID&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This specifies which environment the deployment should connect to. If you &lt;a href="https://doc.sitecore.com/xmc/en/developers/xm-cloud/the-cloud-environment-command.html#the-create-subcommand" rel="noopener noreferrer"&gt;use the console to create your environment&lt;/a&gt;, you can easily get the environment ID there. If you already have an environment, you can get it from the &lt;a href="https://doc.sitecore.com/xmc/en/developers/xm-cloud/manage-an-environment.html#view-environment-details" rel="noopener noreferrer"&gt;environment details page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I've used GitHub secrets here for sensitive environment/auth information so that I don't have to commit the values to the repository. I strongly suggest you do this for your XM Cloud deploy actions!&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  PART 4: Building the Deployment GitHub action
&lt;/h2&gt;

&lt;p&gt;With deployments being triggered, we now need the Sitecore CLI actions to actually push our solution to the environment. I again stole this from our XM Cloud Introduction repo and have a very simple job:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;name: Deploy the solution and items to an XM Cloud instance

on:
  workflow_call:
    inputs:
      environmentName:
        required: true
        type: string
    secrets:
      XM_CLOUD_CLIENT_ID:
        required: true
      XM_CLOUD_CLIENT_SECRET:
        required: true
      XM_CLOUD_ENVIRONMENT_ID:
        required: true

jobs:
  deploy:
    name: Deploy the XM Cloud ${{ inputs.environmentName }} Site
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-dotnet@v2
        with:
          dotnet-version: "6.0.x"
      - run: dotnet tool restore
      - run: dotnet sitecore --help
      - name: Authenticate CLI with XM Cloud
        run: dotnet sitecore cloud login --client-credentials --client-id ${{ secrets.XM_CLOUD_CLIENT_ID }} --client-secret ${{ secrets.XM_CLOUD_CLIENT_SECRET }} --allow-write
      - name: Deploy the CM assets to XM Cloud
        run: dotnet sitecore cloud deployment create --environment-id ${{ secrets.XM_CLOUD_ENVIRONMENT_ID }} --upload

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this deploy job, it does the following steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Ensure the Sitecore CLI is installed and ready&lt;/li&gt;
&lt;li&gt; Authenticate against XM Cloud using the client ID and client secret that were passed in&lt;/li&gt;
&lt;li&gt; Trigger a new deployment to the specified environment&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;At this point, when I commit code, it detects the change and pushes my project to XM Cloud.&lt;/p&gt;

&lt;h2&gt;
  
  
  PART 5: Generating the Unicorn IAR file
&lt;/h2&gt;

&lt;p&gt;One small line of code can be added to &lt;a href="https://github.com/jst-cyr/xmcloud-unicorn-deployment/blob/main/.github/workflows/deploy_xmCloud.yml" rel="noopener noreferrer"&gt;that deployment job&lt;/a&gt; to make the magic happen now:&lt;/p&gt;

&lt;p&gt;run: dotnet sitecore itemres unicorn --output src/platform/App_Data/items/master/unicorn --path "src/unicorn" --overwrite&lt;/p&gt;

&lt;p&gt;By running this command before we trigger the deployment, we can replace the placeholder DAT file with our generated one. The commands and parameters work as follows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;itemres:&lt;/strong&gt; This command generates an Item as Resources (IAR) package&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;unicorn:&lt;/strong&gt; This subcommand tells it to expect Unicorn serialization format&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;--output:&lt;/strong&gt; This specifies the path where we want the IAR file to be placed after it is created. We want this to match to the source path of where we put our placeholder DAT file. You might notice I don't specify the file name as it automatically uses the folder path in App_Data to create the file name. (items/master/unicorn becomes items.master.unicorn.dat)&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;--path:&lt;/strong&gt; This tells the command where in the file system to find the files to process into the DAT file.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  PART 6: Validating the deployment
&lt;/h2&gt;

&lt;p&gt;Now we need to check that everything went over. First we check to see that the file showed up in our deployment logs on XM Cloud.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;From the 'Build' section of the deployment we see:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://theagilecoder.files.wordpress.com/2023/11/image-2.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8pcrpoyv2z2k16g592n1.png" alt="Screenshot of a log output file from the XM Cloud Deploy logs, Build section. One of the visible log lines starts with the text " width="800" height="154"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This tells me that a DAT file with the right name got there, but it doesn't tell me if it was processed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;From the 'CM instance logs' Log file:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://theagilecoder.files.wordpress.com/2023/11/image-3.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhbwqls1ssm0zxi5pgbun.png" alt="Screenshot of a log output file from the XM Cloud CM log files. One of the visible log lines starts contains the text " width="800" height="152"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Since there was no error here, that means the file is not the invalid text file that was in my project, and is a valid IAR file that contains 1 item. However, that does NOT mean it successfully was imported (I learned that the hard way).&lt;/p&gt;

&lt;p&gt;For instance, if the IAR is a valid format, this part will show correctly. However, I originally had a parent that didn't exist in the database. So no errors occurred, but the item wasn't pushed. So I need to check in Content Editor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;From the Content Editor UI:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://theagilecoder.files.wordpress.com/2023/11/image-4.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbrtcuhud231qvpug6ul9.png" alt="Screenshot from Sitecore Content Editor interface shows part of the content tree on the left, with a " width="800" height="393"&gt;&lt;/a&gt;\&lt;br&gt;
I can see here that there is a Common folder in the Project templates folder, and that the Item ID matches the item I wanted to create that was in my Unicorn serialization.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://theagilecoder.files.wordpress.com/2020/12/maxresdefault1.jpg" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo0w8ujsijcxremoixmqj.jpg" alt="Success! Meme showing a baby with a closed fist and serious face, indicating having successfully overcome a great obstacle" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SUCCESS!&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Wait... it worked?
&lt;/h2&gt;

&lt;p&gt;What I had hoped to learn, when doing this investigation, was that the Unicorn-based IAR files could not be uploaded to XM Cloud and there was no way to get Unicorn serialization format to work. That would make my life a lot easier with the statement that Sitecore does not support Unicorn serialization with XM Cloud because it's a lot easier to say something isn't supported when it also just plain doesn't work. So life for me will be a little more complicated and nuanced!&lt;/p&gt;

&lt;p&gt;In doing this proof of concept, I did identify some risks with this solution.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⚠ Risk #1: No support&lt;/strong&gt;&lt;br&gt;
It works, but the way to get this to work is not supported by Sitecore. That means there is no way to get help from Sitecore about using this type of a flow if something goes wrong and no obligation from Sitecore to ensure it keeps working.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⚠ Risk #2: Brittle dependency&lt;/strong&gt;&lt;br&gt;
My approach relies on a mechanism of forcing files into a specific folder structure on the environment using the project file. That happens to work with XM Cloud's deploy app at the time of writing, but because this is SaaS the entire backend of how deployments work could shift on me and this could get broken. Also, because it's not supported, there would likely be no notifications sent out that it would no longer be working. You can always fix things later, when it breaks, I suppose? It's one of those "buyer beware" risks that some folks are willing to take on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⚠ Risk #3: Unknown serialization conversion complexity&lt;/strong&gt;&lt;br&gt;
My sample scenario used a single template folder with a simple parent relationship. I used out of the box parent folders and templates with no dependencies. Even then, I needed to edit a few things manually on the file to get it to work with XM Cloud's default items. I can imagine a large project of serialized items could become cost-prohibitive to manually get working.&lt;/p&gt;

&lt;p&gt;This is not really an issue with using Sitecore CLI, Unicorn, or the IAR approach, but more to point out what I got working here didn't really analyze the effort needed to migrate the serialization files to work with XM Cloud. You should factor that into your plans as an unknown risk factor to your timeline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⚠ Risk #4: The steps provided might take more effort for a real project&lt;/strong&gt;&lt;br&gt;
The &lt;em&gt;itemres&lt;/em&gt; command I used in the Sitecore CLI was pointed at a single folder of Unicorn serialized files. A real solution would have a Helix structure with many different locations that the files could be contained in for each feature. I did not check for how much work it would be to get that more complex structure pulled together. It's still technically possible to get it to work, but you should assume there will be more effort than shown here to get all of your serialized projects configured, working, and deployed through your DevOps pipeline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⚠ Risk #5: Unclean project structure&lt;/strong&gt;&lt;br&gt;
In order to tell XM Cloud to grab that IAR file, I needed to add placeholder files to my .NET solution. The whole approach feels wrong, adding a bunch of invalid DAT files into the project (and source control) just to make deployments work. I suppose you could manage a different project file just for the placeholder DATs, just to make it cleaner for devs who are working locally, but it screams of bad practice. This risk doesn't affect your effort levels or whether the solution would work, but it does impact your developer experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion? Maybe not a good idea?
&lt;/h2&gt;

&lt;p&gt;If you are going to work with XM Cloud, and you love Unicorn, you might be tempted to try to figure out a way to make it work. I did this experiment so that you can see what the challenges are, what steps you can take, and make an informed decision. I feel that converting your Unicorn serialization over to SCS is a much easier approach and there are tools for that already. I would definitely recommend taking that migration to SCS approach if you are building against XM Cloud, but if you really love Unicorn and are okay with the risks involved at least there is a way to make it work!&lt;/p&gt;

</description>
      <category>sitecore</category>
      <category>devops</category>
      <category>unicorn</category>
      <category>xmcloud</category>
    </item>
    <item>
      <title>Sitecore XM Cloud and Vercel Deployment Protection</title>
      <dc:creator>Jason St-Cyr</dc:creator>
      <pubDate>Mon, 06 Nov 2023 15:04:34 +0000</pubDate>
      <link>https://dev.to/sitecore/sitecore-xm-cloud-and-vercel-deployment-protection-cg1</link>
      <guid>https://dev.to/sitecore/sitecore-xm-cloud-and-vercel-deployment-protection-cg1</guid>
      <description>&lt;p&gt;Recently, Vercel made Deployment Protection the &lt;a href="https://vercel.com/changelog/deployment-protection-is-now-enabled-by-default-for-new-projects" rel="noopener noreferrer"&gt;default for all new projects in Vercel&lt;/a&gt;. This is great news! This means that all your deployments will automatically be able to be secured with authentication, passwords, or trusted IPs.&lt;/p&gt;

&lt;p&gt;However, your Sitecore XM Cloud build might not be set up yet to work with Vercel's Deployment Protection. You may encounter a 401 authentication error (unauthorized) when accessing static assets for things like CSS where your Next.js application is trying to use the VERCEL_URL to access these assets.&lt;/p&gt;

&lt;h2&gt;
  
  
  Updating your Next.js application to use deployment protection
&lt;/h2&gt;

&lt;p&gt;If you are planning on launching a new project on XM Cloud, you'll likely want to take a look at these docs so that you can make sure JSS app is loading these protected assets correctly:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://doc.sitecore.com/xmc/en/developers/xm-cloud/use-vercel-s-deployment-protection-feature-with-jss-apps.html" rel="noopener noreferrer"&gt;Use Vercel's cloud platform features to limit access to your site deployments&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  But what if I don't want this Vercel feature?
&lt;/h2&gt;

&lt;p&gt;You might have scenarios where you'd like to have overall security but in certain use cases you just want to bypass it altogether. Perhaps you are running End To End (E2E) testing, or maybe you have a particular preview environment you are sharing around to others for review. Vercel has a few steps you can take to bypass the deployment protection: &lt;a href="https://vercel.com/docs/security/deployment-protection/methods-to-bypass-deployment-protection" rel="noopener noreferrer"&gt;https://vercel.com/docs/security/deployment-protection/methods-to-bypass-deployment-protection&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also turn off the protections completely in the &lt;strong&gt;Project Settings ▶ Deployment Protection&lt;/strong&gt; tab of your Vercel project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo5bkv4g9gyggeji143w1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo5bkv4g9gyggeji143w1.png" alt="Project Settings Deployment Protection tab with protection disabled" width="800" height="353"&gt;&lt;/a&gt;]&lt;/p&gt;

</description>
      <category>sitecore</category>
      <category>devops</category>
      <category>vercel</category>
      <category>xmcloud</category>
    </item>
    <item>
      <title>SUGCON India 2023 goes off with a bang 💥</title>
      <dc:creator>Rob Earlam</dc:creator>
      <pubDate>Thu, 31 Aug 2023 00:00:00 +0000</pubDate>
      <link>https://dev.to/sitecore/sugcon-india-2023-goes-off-with-a-bang-58hl</link>
      <guid>https://dev.to/sitecore/sugcon-india-2023-goes-off-with-a-bang-58hl</guid>
      <description>&lt;p&gt;Last week I had the pleasure of attending SUGCON India 2023 in Delhi, India. This was the first time we’d run a SUGCON in India since 2019 and it was great to be back once more, interacting with the local Sitecore community. There was a lot of effort in involved in pulling the event off, and I do want to start by thanking all of the &lt;a href="https://india.sugcon.events/Organisation" rel="noopener noreferrer"&gt;organisers&lt;/a&gt; for the time they invested in making this event the success that it was.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flgmabt773o59ug7zt9z9.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flgmabt773o59ug7zt9z9.JPG" alt="SUGCON Organisers with Sitecore attendees" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I was privileged to be chosen to deliver one of the keynote sessions this year, where I talked about a recent project I worked on where we integrated Sitecore Search into our &lt;a href="https://developers.sitecore.com/" rel="noopener noreferrer"&gt;Developer Portal&lt;/a&gt;. This was very well received and led to many questions afterwards, and many further conversations throughout the event. It was great to see the amount of interest there is in Sitecore Search from the attendees!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ut8ll43rewgu0fjnqx3.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ut8ll43rewgu0fjnqx3.JPG" alt="Rob Earlam Delivering a keynote session at SUGCON India 2023" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The quality of the sessions that were delivered at the event was of a very high standard. They ranged from high-level sessions covering Composable DXP’s in general and the power they can bring to customers, all the way down to technical deep dives on specific features and use-cases. Some of my highlights were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The session by &lt;a href="https://twitter.com/pieterbrink123" rel="noopener noreferrer"&gt;Pieter Brinkman&lt;/a&gt; titled &lt;em&gt;Digital Experience is a team sport&lt;/em&gt;, where he talked about the different roles that play a part in successful Composable DXP implementation – it’s not just all about the developer!&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.linkedin.com/in/georgeksmith/" rel="noopener noreferrer"&gt;George Smith&lt;/a&gt; &amp;amp; &lt;a href="https://www.linkedin.com/in/sheetal-k-jain/" rel="noopener noreferrer"&gt;Sheetal Jain&lt;/a&gt; delivered an awesome session called &lt;em&gt;Beyond Buzzwords: Composable Tech and Generative AI for Real&lt;/em&gt;. Here they showed how OrderCloud, Sitecore Content Hub &amp;amp; Dall-E can be combined to allow customers to generate art on the fly and have it printed on a t-shirt for sale in an online store, cool stuff!&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Exploring the Experience Edge GraphQL Schema&lt;/em&gt; was a really interesting session delivered by &lt;a href="https://mastodon.social/@adeneys@hachyderm.io" rel="noopener noreferrer"&gt;Alistair Deneys&lt;/a&gt;. Here he gave a true deep-dive into the schema implemented for Edge and how you can leverage it in some really interesting ways. There’s also a cool surprise at the end of the session that I won’t give away here, but be sure to check it out if you get the chance.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Women in contemplating Darwin's Theory - To Break the Conventional Wheel&lt;/em&gt; was a great session by &lt;a href="https://www.linkedin.com/in/varalakshmi-md-sitecore/" rel="noopener noreferrer"&gt;Varalakshmi M D&lt;/a&gt; &amp;amp; &lt;a href="https://www.linkedin.com/in/raveena-mathur/" rel="noopener noreferrer"&gt;Raveena Mathur&lt;/a&gt; where they talked about the important role women have in ensuring successful outcomes for customers.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/iamandycohen" rel="noopener noreferrer"&gt;Andy Cohen&lt;/a&gt; delivered a great session titled &lt;em&gt;Build for XM Cloud according to the Architect of XM Cloud&lt;/em&gt;. Here he talked about the best practices for building with XM Cloud... he might have ruffled some feathers with some of the recommendations, but it was great to see it all layed out!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The closing keynote was also a highly enjoyable part of the event. Each of the representatives from Sitecore (Pieter, Nicole, Andy, Alistair and myself) held a panel discussion and open Q&amp;amp;A session. This gave the attendees the chance to ask any lingering questions that they hadn’t had the chance to ask already. The topics were very wide from specific feature questions on the products through to general questions about the best way that Sitecore can support the local Indian community… and of course the age-old question of Sandboxes and how people can get access to Sitecore’s newer SaaS products – we hear you and are working on a solution!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp5oo66ut4yf8lgq5pso2.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp5oo66ut4yf8lgq5pso2.JPG" alt="SUGCON India 2023 Closing Keynote Panel Discussion" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As much as I enjoyed everything I mentioned above, as with every event I seem to attend nowadays, the true highlight was getting to interact with the local community we have on the ground. It’s amazing to see the passion they have for Sitecore and our products. It was great to see so many familiar faces from the events back in 2018 &amp;amp; 2019, but it was also great to see so many new faces as well, a good balance that shows how healthy the Sitecore community in India is.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frmpy719moyaw3lewv162.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frmpy719moyaw3lewv162.png" alt="SUGCON India 2023 Photo Collage" width="800" height="640"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I just want to finish off by saying that of course trips like this aren’t always about work though, we always try to make sure that we get out and see some of the places we visit and India is no different. On this trip, we made the journey down to see the Taj Mahal after the event had finished, and it truly is an amazing site to see. Really all of the descriptions of it you hear just cannot do it justice, and it was great to experience it with the awesome team we had on-site.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftpwmqgkr432sqpj8rwt6.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftpwmqgkr432sqpj8rwt6.jpg" alt="Sitecore team photo at the Taj Mahal" width="800" height="1199"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, whether it’s the always friendly people, the amazing effort from the organisers &amp;amp; speakers, the food, the noise or the general sights you see around the city – India is one of my favourite places to visit and certainly one of my favourite SUGCON events.&lt;/p&gt;

&lt;p&gt;Here’s looking forward to doing it all again in 2024!&lt;/p&gt;

</description>
      <category>sitecore</category>
      <category>community</category>
      <category>events</category>
    </item>
    <item>
      <title>Migrating the XM Cloud Introduction Repo to a new Nuget feed.</title>
      <dc:creator>Rob Earlam</dc:creator>
      <pubDate>Thu, 27 Jul 2023 00:00:00 +0000</pubDate>
      <link>https://dev.to/sitecore/migrating-the-xm-cloud-introduction-repo-to-a-new-nuget-feed-1cag</link>
      <guid>https://dev.to/sitecore/migrating-the-xm-cloud-introduction-repo-to-a-new-nuget-feed-1cag</guid>
      <description>&lt;p&gt;Today I had to go through the process of migrating the XM Cloud Introduction repository to a new Nuget feed. This was required as the old feed was no longer available, and we needed to move to a new one on short notice. This post will cover the steps I needed to complete to migrate the solution to the new feed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Machine Tidy Up
&lt;/h2&gt;

&lt;p&gt;Now for anyone who hasn't run a Sitecore site before you can most likely skip this step. However, for anyone who has you should tidy up any references to the old feed that have been configured on your machine. In my case, this was the PowerShell Repository used to restore the &lt;code&gt;SitecoreDockerTools&lt;/code&gt; module used by this, and other Sitecore repositories.&lt;/p&gt;

&lt;h3&gt;
  
  
  Remove PS Repository
&lt;/h3&gt;

&lt;p&gt;The first thing to check is whether you have the old Sitecore Feed registered as a PowerShell Repository, you can do this by running the following command &lt;code&gt;Get-PSRepository&lt;/code&gt; and checking where there is a record named &lt;code&gt;SitecoreGallery&lt;/code&gt;. If you have one registered, then you can remove it by running &lt;code&gt;Unregister-PSRepository -Name SitecoreGallery&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Remove PS Modules
&lt;/h3&gt;

&lt;p&gt;Next, I tidied up any previous versions of the &lt;code&gt;SitecoreDockerTools&lt;/code&gt; module installed from the old feed. You can test whether you have any versions of that module installed by running the &lt;code&gt;Get-Module -ListAvailable&lt;/code&gt; and look for any named &lt;code&gt;SitecoreDockerTools&lt;/code&gt;. If you have those installed, you can quickly remove all installed versions of that package by running &lt;code&gt;Uninstall-Module -Name SitecoreDockerTools -AllVersions&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Update the Repository
&lt;/h2&gt;

&lt;p&gt;So now we’ve tidied our developer machine, we can update the repository to reference the new feed. This involved making two changes, an update to the &lt;code&gt;init.ps1&lt;/code&gt; script used to initialise the repository, and then an update to the &lt;code&gt;nuget.config&lt;/code&gt; to define the new location for the NuGet packages in use by the solution.&lt;/p&gt;

&lt;h3&gt;
  
  
  Updating the init.ps1 script
&lt;/h3&gt;

&lt;p&gt;The first thing the script does is install the &lt;code&gt;SitecoreDockerTools&lt;/code&gt; PowerShell module, so we need to update the location that it is installed from, in our case, we needed to use v2 of the Nuget feed to get it to work, so we needed to change it to &lt;code&gt;https://nuget.sitecore.com/resources/v2/&lt;/code&gt;. After making this change the init script ran successfully and installed the module from the new feed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Updating the nuget.config
&lt;/h3&gt;

&lt;p&gt;The final change we need to make is to update the &lt;code&gt;nuget.config&lt;/code&gt; file in the root of the repository that controls where custom NuGet packages are installed from. We had a couple of older references in there that we removed and condensed down to the single new feed reference. This resulted in us having the following line in our config:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;add key="Sitecore" value="https://nuget.sitecore.com/resources/v3/index.json" /&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Updating the XM Cloud Introduction repository to the new feed location was straight forward in the end. I would recommend any developers who have been running existing Sitecore solutions before follow the tidy-up steps at the start to ensure they remove any legacy references they have to the old feed. You can see the changes we had to make in the following &lt;a href="https://github.com/Sitecore/XM-Cloud-Introduction/pull/270/commits/2a20e2b69486c128bda055e0564d7cc736820dc1" rel="noopener noreferrer"&gt;commit&lt;/a&gt;. There may be other changes that you will need to complete to bring your codebase in line, but hopefully, this will help to get you started with what tasks are required for you.&lt;/p&gt;

</description>
      <category>nuget</category>
      <category>sitecore</category>
      <category>xmcloud</category>
    </item>
    <item>
      <title>MyGet outage impacts builds and deployments</title>
      <dc:creator>Jason St-Cyr</dc:creator>
      <pubDate>Wed, 26 Jul 2023 17:29:28 +0000</pubDate>
      <link>https://dev.to/sitecore/myget-outage-impacts-builds-and-deployments-3kmn</link>
      <guid>https://dev.to/sitecore/myget-outage-impacts-builds-and-deployments-3kmn</guid>
      <description>&lt;p&gt;Many development teams are seeing NuGet build issues and errors today with the &lt;a href="https://status.myget.org/" rel="noopener noreferrer"&gt;MyGet outage&lt;/a&gt;. You can resolve these issues by transitioning to our new NuGet package provider.&lt;/p&gt;

&lt;p&gt;Learn more about how to transition to our new #Sitecore package provider in this support article: &lt;a href="https://support.sitecore.com/kb?id=kb_article_view&amp;amp;sysparm_article=KB1002999" rel="noopener noreferrer"&gt;https://support.sitecore.com/kb?id=kb_article_view&amp;amp;sysparm_article=KB1002999&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Sitecore Search - Filtering vs Faceting</title>
      <dc:creator>Rob Earlam</dc:creator>
      <pubDate>Tue, 25 Jul 2023 23:28:45 +0000</pubDate>
      <link>https://dev.to/sitecore/sitecore-search-filtering-vs-faceting-o32</link>
      <guid>https://dev.to/sitecore/sitecore-search-filtering-vs-faceting-o32</guid>
      <description>&lt;p&gt;The latest video in my series on #Sitecore #Search was published this week, discussing Filtering vs Faceting.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/wxEdfNRFMvY"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Sitecore Search – Configuring your Domain</title>
      <dc:creator>Rob Earlam</dc:creator>
      <pubDate>Mon, 10 Jul 2023 00:51:26 +0000</pubDate>
      <link>https://dev.to/sitecore/sitecore-search-configuring-your-domain-3p7c</link>
      <guid>https://dev.to/sitecore/sitecore-search-configuring-your-domain-3p7c</guid>
      <description>&lt;p&gt;The second video in my series on #Sitecore #Search was published last week, showing how you can do the initial domain configuration&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/6HlhXygfnU0"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>sitecore</category>
      <category>search</category>
    </item>
    <item>
      <title>Sitecore Architect’s Guide to SaaS Migration – Classic XP with Simple Personalization</title>
      <dc:creator>Jason St-Cyr</dc:creator>
      <pubDate>Wed, 31 May 2023 11:55:00 +0000</pubDate>
      <link>https://dev.to/sitecore/sitecore-architects-guide-to-saas-migration-classic-xp-with-simple-personalization-228o</link>
      <guid>https://dev.to/sitecore/sitecore-architects-guide-to-saas-migration-classic-xp-with-simple-personalization-228o</guid>
      <description>&lt;p&gt;In this part of the &lt;a href="https://jasonstcyr.com/tag/sitecore-guide-to-saas-migration/" rel="noopener noreferrer"&gt;migration series&lt;/a&gt;, I am going to look at migrating an existing Sitecore Experience Platform (XP) solution that has been built as a classic Sitecore MVC implementation with simple personalization implemented. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The scenario breakdown:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Single MVC site built on Sitecore XP 8.2&lt;/li&gt;
&lt;li&gt;Basic session-based personalization in use, primarily using Geo IP to determine user location and campaign IDs in the URL&lt;/li&gt;
&lt;li&gt;No SXA or Sitecore JSS in use&lt;/li&gt;
&lt;li&gt;No custom site search, using third party search engine for site search&lt;/li&gt;
&lt;li&gt;Development team is all .NET developers, no desire to move to a JavaScript framework&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Follow the series to look at different Sitecore XM and XP scenarios and how you can gradually migrate your Sitecore platform solution over to a &lt;a href="https://developers.sitecore.com/learn/getting-started/introduction-to-composable-dxp" rel="noopener noreferrer"&gt;composable DXP architecture&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The goal is to walk through the example migration and highlight for you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What challenges will you face along the way?&lt;/li&gt;
&lt;li&gt;What options are available and when do they make sense?&lt;/li&gt;
&lt;li&gt;What are the benefits of making certain changes to your architecture?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every project is a little different, so hopefully this series can help you understand some of the questions to ask, and what options you have, to guide you in the right direction.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jasonstcyr.com/2023/05/31/sitecore-architects-guide-to-saas-migration-classic-xp-with-simple-personalization/" rel="noopener noreferrer"&gt;Continue reading "Sitecore Architect’s Guide to SaaS Migration – Classic XP with Simple Personalization"&lt;/a&gt;&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>sitecore</category>
      <category>dxp</category>
    </item>
  </channel>
</rss>
