<rss version="2.0">
  <channel>
    <link>https://orcharddojo.net/Contents/ContentItems/orcharddojoblog00000000000</link>
    <description><![CDATA[]]></description>
    <item>
      <title>Orchard Harvest 2026 Early Bird tickets, exploring Orchard Core's Next-Gen Visual Layout Editor Feature - This week in Orchard (05/06/2026)</title>
      <link>https://orcharddojo.net/blog/orchard-harvest-2026-early-bird-tickets-exploring-orchard-core-s-next-gen-visual-layout-editor-feature-this-week-in-orchard-05-06-2026</link>
      <description><![CDATA[<h2>Orchard Core updates</h2><h3>How to create and install a custom module?</h3><p>Did you know that with just a few configuration tweaks and a single project reference, you can extend Orchard Core CMS with your very own custom module that is fully integrated into the admin UI and discoverable at runtime? Thanks to <a href="https://github.com/Manuel-dev-ing" target="_self">Manuel Tamayo Montero</a>, this guide in the <a href="https://docs.orchardcore.net/en/latest/guides/create-install-custom-module/" target="_self">Orchard Core documentation</a> reveals the simple steps that most developers overlook when trying to get a custom module up and running.</p><p><img alt="How to create and install a custom module" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260605/create-and-install-a-custom-module-guide.png"></p><h3>Category filtering for Deployment Steps</h3><p>If you have the <em>Workflows</em> feature enabled, you can let users visually implement business rules using flowchart diagrams. Whenever you add events or tasks to your workflow, the modal organizes them into categories, and you also have a filter to find the next executable step more easily.</p><p>And this is a nice, helpful experience for users, so why don't we have it for the deployment steps too? <a href="https://github.com/MikeAlhayek" target="_self">Mike Alhayek</a> thought that the same UI could be helpful when adding <em>Deployment Steps</em> to <em>Deployment Plans</em>. To check it out, head to <em>Tools -&gt; Deployments -&gt; Plans</em> and click on the <em>Add Deployment Plan</em> button. Give it a name, then add steps to your plan. And as you can see on the screen below, the <em>Available Steps</em> modal now also shows categories, helping you find the step you want to add to your plan much more quickly.</p><p><img alt="Category filtering for Deployment Steps" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260605/category-filtering-for-deployment-steps.png"></p><h3>Demos</h3><h4>New visual Layout Editor for Orchard Core</h4><p>This time, we will see a visual drag-and-drop editor for arranging content type editor fields into tabs, cards, and columns in Orchard Core. Here you can find <a href="https://github.com/Buzz-Interactive/Buzz.OrchardCore.EditorLayout" target="_self">the repository for the Editor Layout feature</a> developed by <a href="https://github.com/buzznick" target="_self">Nick Jackson</a>.</p><p>By default, Orchard Core renders all parts and fields on a content type's editor in a single flat list. This module lets you organize them into a structured layout using a drag-and-drop interface, without writing any placement.json or code.</p><p>So, after adding this module to your Orchard Core web project as a project reference, we can set up our site. For the demo, we used the <em>Blog</em> recipe. Once our site is up, we need to enable the <em>Editor Layout</em> feature under <em>Configuration -&gt; Features</em>. Let's try this out by modifying the content definition of the predefined <em>Blog Post</em> content type. To do that, we navigated to <em>Content -&gt; Content Definition -&gt; Content Types,</em> then clicked <em>Edit</em> next to the <em>Blog Post</em> content type. At the bottom of the content type editor, we will find a button labeled <em>Editor Layout</em>. Click on it and use the switch to enable the editor layout, which shows us a visual representation of what we can build in the editor.</p><p><img alt="Blog Post editor layout" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260605/blog-post-editor-layout.png"></p><p>Here we can arrange our parts and fields:</p><ul><li>Add tabs to create tabbed sections on the editor.</li><li>Add cards within a tab to group fields in a bordered card.</li><li>Add columns within a tab or card to place fields side by side.</li><li>Drag items from the Available Items sidebar into tabs, cards, or columns.</li><li>Reorder items by dragging them within or between containers.</li></ul><p>First, we added a new column to the <em>Content</em> card placed on the <em>Content</em> tab. It means we now have two columns in the <em>Content</em> card, and both columns will be set to 50% width by default to fill the space. But of course, we can change the width if we want. Once we have that, we move the <em>Banner Image</em> field to this new column inside the <em>Content</em> card.</p><p>We can also add new tabs by clicking on the <em>Add Tab</em> button. In the <em>Add Tab</em> modal, we can set the name of the new tab. We decided to move the <em>Autoroute Part</em> to the default <em>Content</em> card of this newly created <em>Settings</em> tab. We can easily do that by selecting the <em>Autoroute</em> on the left and dropping this into this card. Orchard will automatically notice that we have already used this part in the <em>Content</em> tab and remove it from there.</p><p>Save this editor layout and edit our predefined <em>Blog Post</em> content item to check how our new editor for this content type will look. As you can see, the blog post editor reflects the layout we set up.</p><p><img alt="Editor Layout" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260605/editor-layout.gif"></p><p>And you can build a much more complex editor by using this feature! If you are curious about how you can do that, <a href="https://www.youtube.com/watch?v=nLqRLybkl9s" target="_self">head to YouTube for a recording</a>!</p><p class="embed-container"><iframe width="840" height="473" src="https://www.youtube-nocookie.com/embed/nLqRLybkl9s" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" spellcheck="false"></iframe></p><h2>News from the community</h2><h3>Orchard Harvest 2026 Early Bird tickets!</h3><p>We're excited to open registration for Orchard Harvest 2026!</p><p>This year, we've also created a short "convince your boss" one-pager to help you make the case for attending. It highlights the practical takeaways, business value, and networking opportunities waiting at the event.</p><p>If you want to learn from real-world Orchard Core use cases, get a better sense of where the platform is heading, and connect with experts and active community members, this is for you. We'll be sharing this year's speakers and topics over time, so stay tuned!</p><p><a href="https://www.tickettailor.com/events/lombiqtechnologiesltd/2247098" target="_self">Secure your spot today for the early bird pricing</a> and get ready to level up your skills at Orchard Harvest!</p><p><img alt="Orchard Harvest 2026" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260605/orchard-harvest-2026-pager.jpg"></p><h3>Orchard Dojo Newsletter</h3><p>Lombiq's Orchard Dojo Newsletter has 416 subscribers! We have started this newsletter to keep the Orchard community informed about the latest platform news. By subscribing to this newsletter, you will receive an email whenever a new post is published to Orchard Dojo, including <em>'This Week in Orchard'</em>, of course.</p><p>Do you know of other Orchard enthusiasts who would like to read our weekly articles? Tell them to <a href="https://orcharddojo.us12.list-manage.com/subscribe?u=32f819a768237590e479c9d0a&amp;id=039db8f13f">subscribe here</a>!</p><h5>If you are interested in more news about Orchard and the details of the topics above, don't forget to check out the recording of <a href="https://www.youtube.com/watch?v=g--d4HCA1Fc" target="_self">this Orchard meeting</a>!</h5>]]></description>
      <pubDate>Fri, 05 Jun 2026 09:00:14 GMT</pubDate>
      <guid isPermaLink="true">https://orcharddojo.net/blog/orchard-harvest-2026-early-bird-tickets-exploring-orchard-core-s-next-gen-visual-layout-editor-feature-this-week-in-orchard-05-06-2026</guid>
    </item>
    <item>
      <title>Let Your AI Agents Talk to Each Other - A2A in Orchard Core, Who Are We Building the New OrchardCore.net For? - This week in Orchard (29/05/2026)</title>
      <link>https://orcharddojo.net/blog/let-your-ai-agents-talk-to-each-other-a2a-in-orchard-core-who-are-we-building-the-new-orchardcore-net-for-this-week-in-orchard-29-05-2026</link>
      <description><![CDATA[<h2>Orchard Core updates</h2><h3>Sort user roles alphabetically in the admin UI</h3><p><a href="https://github.com/gvkries" target="_self">Georg von Kries</a> made this change to ensure that user roles are consistently displayed in alphabetical order across the admin interface. This affects role filters, user edit forms, and user role displays, improving usability and readability. Let's see some samples for this!</p><p>If you navigate to the admin UI of Orchard Core and head to <em>Access Control -&gt; Users</em>, you can see all of the available users in your site. If you hit the <em>Role</em> dropdown, you can see the <em>Filter by role</em> list, where the roles are now ordered alphabetically. And if you hit <em>Edit</em> near any of the users, you can see the list of the roles that you can assign to the currently-selected user. As you can see, the roles here are also ordered alphabetically.</p><p><img alt="Sort user roles alphabetically in admin UI" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260529/sort-user-roles-alphabetically-in-admin-ui.png"></p><h3>Add DocumentsAddedOrUpdated and DocumentsDeleted events to IDocumentIndexHandler</h3><p><a href="https://github.com/MikeAlhayek" target="_self">Mike Alhayek</a> added new events needed to allow other projects to implement the <em>IDocumentIndexHandler</em> for synchronization, such as when an index is updated or when another data source is updated. It means these events help keep external systems in sync with changes to the document index.</p><p>The news events are:</p><ul><li><strong>DocumentsAddedOrUpdatedAsync</strong>, that notifies the handler after documents have been added to or updated in a provider-specific index.</li><li><strong>DocumentsDeletedAsync</strong>, that notifies the handler after documents have been removed from a provider-specific index.</li></ul><p>If we check it out quickly, we may notice how these new events are utilized across Orchard Core. As you may know, we have three different index managers in Orchard to support Lucene, Elasticsearch, and Azure AI Search. If we check out one, for example, the <em>LuceneIndexManager.cs</em>, you can see how we utilize the new events at the end of the <em>DeleteDocumentsAsync</em> and <em>AddOrUpdateDocumentsAsync</em> methods.</p><p><img alt="Utilizing new events in LuceneIndexManager" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260529/documentsaddedorupdated-and-documentsdeleted-events-to-idocumentindexhandler.png"></p><h3>Demos</h3><h4>Let Your AI Agents Talk to Each Other - A2A in Orchard Core</h4><p>One of the issues you will notice is that the more code you write using AI, the more you couple your code with your system. Long system prompts in your code come really nasty, really quickly if you have a whole lot of them. <a href="https://github.com/MikeAlhayek" target="_self">Mike Alhayek</a> created a structure that lets you define AI templates for prompts and profiles. Let's see an example for each of them!</p><p>Prompt templates are discovered from module files and other registered Orchard template providers. The common Orchard pattern is to place them in a module under <em>Templates/Prompts/</em>. You can find one here, called <a href="https://github.com/CrestApps/CrestApps.OrchardCore/blob/main/src/Modules/CrestApps.OrchardCore.Omnichannel.Sms/Templates/Prompts/sms-conclusion-analysis.md" target="_self">SMS Conclusion Analysis</a>.</p><p>The <em>Prompts</em> folders contain markdown files with prompts that support Liquid to generate the system prompt. So, you don't have to define it in the code. You can see that they contain a <em>title</em>,<em>a description</em>, etc., and, of course, the <em>prompt</em> itself. The good thing about that is you don't really have to couple your code with prompts. Everything is separated, and with the help of Liquid, it's really helpful because we don't have to have system code all over the place, and we can reuse it or inject one into another.</p><p><img alt="Prompt template" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260529/promp-template.png"></p><p>The other one is a set of templates for AI Profiles, which are very similar in structure. AI profile templates are the Orchard Core-friendly way to stamp out repeatable AI profile configurations inside the admin UI and recipes. <a href="https://github.com/CrestApps/CrestApps.OrchardCore/blob/main/src/Modules/CrestApps.OrchardCore.AI/Templates/Profiles/executor-agent.md" target="_self">Here you can see a sample of it</a>, this one called <em>Executor Agent</em>. It's preconfigured; you can just apply it.</p><p><img alt="Profile template" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260529/profile-template.png"></p><p>Now let's see how you can use these along with another new feature called the <em>Agent-to-Agent Protocol (A2A)</em>. The A2A modules bring the Agent-to-Agent protocol to Orchard Core, enabling tenants to connect to remote agents or expose local agent profiles to other clients. We will demo all of these by navigating to the admin UI and clicking the <em>Add Profile</em> button on the <em>Artificial Intelligence -&gt; Profiles</em> page. Here, you will notice the new <em>Apply Template</em> dropdown, which contains predefined templates from the markdown files. We don't need to use them, but if we do and select one, it prefills everything based on the template right after we click on the <em>Apply</em> button. Obviously, you can override and change everything here that you want.</p><p><img alt="Using a Profile template" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260529/using-a-profile-template.png"></p><p>If you notice, there is a new profile type, called <em>Agent</em>. By creating a new profile type called <em>Agent</em>, you're creating an agent accessible via the A2A protocol. Before accessing that profile, we need to enable the <em>Agent-to-Agent (A2A) Host</em> feature, which exposes all AI Agent profiles through the A2A protocol, enabling external agents and clients to discover and communicate with locally hosted agents.</p><p>Now we open another app provided by the <a href="https://github.com/CrestApps/CrestApps.OrchardCore" target="_self">AI Suite</a> called <em>A2AClientSample</em>. The easiest way to have this is to set the <em>CrestApps.Aspire.AppHost</em> as the startup project of the solution, and run it. It will start an Aspire host, which will also set up this sample project for you. Once you have it, click on the <em>Go to Agents</em> button to discover all agents exposed by the A2A host, view their skills, and send messages. Here you can see that we created two agents, the <em>Planner Agent</em> and the <em>Research Agent,</em> via profile templates. We can access those two via the A2A protocol and send prompts to them using the <em>Message text</em> area.</p><p><img alt="A2A Client" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260529/agents-a2a-protocol.png"></p><p>And that's still not all of it! If you want to see these features in action, <a href="https://www.youtube.com/watch?v=aMVt_4RqDgc" target="_self">head to YouTube for a recording</a> by <a href="https://github.com/MikeAlhayek" target="_self">Mike Alhayek</a>!</p><p class="embed-container"><iframe width="840" height="473" src="https://www.youtube-nocookie.com/embed/aMVt_4RqDgc" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" spellcheck="false"></iframe></p><h2>News from the community</h2><h3>Who Are We Building the New OrchardCore.net For?</h3><p><a href="https://github.com/buzznick" target="_self">Nick Jackson</a> started a proposal to identify the target audience for a redesigned <a href="https://orchardcore.net/" target="_self">OrchardCore.net website</a>, which identifies two main groups.</p><p>The primary audience is the .NET Developers, who have already chosen .NET and are evaluating Orchard Core as a framework to avoid building common features (user accounts, permissions, multi-tenancy, etc.) from scratch. Three personas are outlined: architects/tech leads, developers building sites or products, and existing contributors. Key competitors named are Umbraco (for content sites) and abp.io (for business applications). These users want to quickly assess code quality, maintenance health, getting-started steps, and built-in features.</p><p>The secondary audience is the Business Decision-Makers, people who fund or approve platform choices but don't write code, like agency owners, product managers, CTOs, and clients whose agency chose Orchard Core for them. They care about cost, longevity, licensing, hiring availability, and plain-language explanations of what the platform does.</p><p>The core design philosophy is that, rather than trying to appeal to all developers, the site deliberately focuses on the .NET audience, so every page can be specific and relevant by using .NET terminology, naming .NET alternatives, and showing .NET code instead of being vague for everyone.</p><p>Who should the <a href="https://orchardcore.net/" target="_self">OrchardCore.net</a> redesign speak to? Take a look at our audience proposal and share your thoughts. Do you agree with the personas? Are we missing anyone? Chime in, push back, and help shape the redesign's direction <a href="https://github.com/orgs/orchardCMS/discussions/19264" target="_self">in this GitHub discussion</a>.</p><p><img alt="Orchard Core website renewal" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260529/orchard-core-website-renewal.png"></p><h3>Orchard Dojo Newsletter</h3><p>Lombiq's Orchard Dojo Newsletter has 417 subscribers! We have started this newsletter to keep the Orchard community informed about the latest platform news. By subscribing to this newsletter, you will receive an email whenever a new post is published to Orchard Dojo, including <em>'This Week in Orchard'</em>, of course.</p><p>Do you know of other Orchard enthusiasts who would like to read our weekly articles? Tell them to <a href="https://orcharddojo.us12.list-manage.com/subscribe?u=32f819a768237590e479c9d0a&amp;id=039db8f13f">subscribe here</a>!</p><h5>If you are interested in more news about Orchard and the details of the topics above, don't forget to check out the recording of <a href="https://www.youtube.com/watch?v=g--d4HCA1Fc" target="_self">this Orchard meeting</a>!</h5>]]></description>
      <pubDate>Fri, 29 May 2026 11:30:17 GMT</pubDate>
      <guid isPermaLink="true">https://orcharddojo.net/blog/let-your-ai-agents-talk-to-each-other-a2a-in-orchard-core-who-are-we-building-the-new-orchardcore-net-for-this-week-in-orchard-29-05-2026</guid>
    </item>
    <item>
      <title>How Does AI Stay Personalized Across Sessions? Orchard Harvest 2025 recordings are up! - This week in Orchard (22/05/2026)</title>
      <link>https://orcharddojo.net/blog/how-does-ai-stay-personalized-across-sessions-orchard-harvest-2025-recordings-are-up-this-week-in-orchard-22-05-2026</link>
      <description><![CDATA[<h2>Orchard Core updates</h2><h3>File Upload Limit documentation</h3><p>There was a question about how to set file upload size limits, and we came up with an idea to have a global solution so we don't have to set custom limits every time we create new actions. <a href="https://github.com/hishamco" target="_self">Hisham Bin Ateya</a> added a new section to the <a href="https://docs.orchardcore.net/en/latest/reference/modules/Media/#file-upload-limit" target="_self">Orchard Core documentation</a> explaining how file upload limits work and how to customize them.</p><p><img alt="File upload limit documentation" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260522/file-upload-limit-documentation.png"></p><h3>New Transliterate Liquid Filter</h3><p><a href="https://github.com/urbanit" target="_self">Sotiris Roussos</a> introduced a new <em>transliterate</em> Liquid filter to the <em>OrchardCore.Liquid</em> module. It converts Unicode text (e.g., Greek, Cyrillic, Arabic, Chinese, etc.) into its closest ASCII/Latin representation using the <a href="https://github.com/anyascii/anyascii" target="_self">AnyAscii library</a>. It also means that, from now on, the <em>Slugify</em> string filter transliterates the provided string. The same applies to the <em>Media Slugify</em> module (if enabled) for Media files. Let's see how this works!</p><p>We set up our site using the <em>Agency</em> recipe, which enables the <em>Templates</em> module by default and provides a template for the <em>Landing Page</em> content type, which we can use for our small presentation. But first, don't forget to enable the <em>Localization</em> feature, as the <em>transliterate</em> filter is part of it.</p><p>Another thing to mention is the <em>Media Slugify</em> module, which transforms newly created folders and files into SEO-friendly versions by generating slugs. By default, transliteration happens when the feature is enabled. But there are configuration values you can use to enable or disable transliteration. You can read more about it in the <a href="https://docs.orchardcore.net/en/latest/reference/modules/Media.Slugify/" target="_blank">Media Slugify module's documentation</a>.</p><p>But for now, let's navigate to <em>Design -&gt; Templates</em> and edit the predefined <em>Content__LandingPage</em> template. As you can see, we used the <em>transliterate</em> filter in line 6, which transliterates the non-Latin text to <em>Ellinika</em>.</p><p><img alt="New Transliterate Liquid Filter" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260522/new-transliterate-liquid-filter.png"></p><h3>Demos</h3><h4>How Does AI Stay Personalized Across Sessions?</h4><p>The <em>AI Memory</em> feature of the <a href="https://orchardcore.crestapps.com/docs/intro" target="_self">AI Suite for Orchard Core</a> provides persistent, user-scoped AI memory, enabling the AI to remember durable, non-sensitive preferences and background details for authenticated users across multiple conversations.</p><p>To test this quickly, <a href="https://github.com/CrestApps/CrestApps.OrchardCore" target="_blank">clone the repository from GitHub</a>, then head to Orchard's admin UI and select <em>Tools -&gt; Features</em>. Here you will find three features related to memory:</p><ul><li><strong>AI Memory</strong>: Provides persistent, user-scoped AI memory for AI profiles and chat interactions.</li><li><strong>AI Memory indexing using Azure AI Search</strong>: Provides services to index AI memory in Azure AI Search indexes.</li><li><strong>AI Memory indexing using Elasticsearch</strong>: Provides services to index AI memory in Elasticsearch indexes.</li></ul><p>For now, we want authenticated user memories to be stored in the core AI Memory feature and indexed into Elasticsearch for semantic lookup, so we will enable the <em>AI Memory indexing using Elasticsearch</em> feature. After, we have to make sure that we have an AI Memory (Elasticsearch) index set up (we can do that under <em>Search -&gt; Indexes</em>).</p><p>But why is it good for us, or what's the advantage of using AI Memory? We can use memory for durable, non-sensitive information, like:</p><ul><li>response style preferences,</li><li>formatting preferences,</li><li>active projects or workstreams,</li><li>recurring topics the user commonly asks about,</li><li>stable background context that the user explicitly wants remembered.</li></ul><p><img alt="Set up an AI Profile" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260522/set-up-ai-profile.png"></p><p>OK, now let's see it in action using a <em>Profile</em>. Head to <em>Artificial Intelligence -&gt; Profiles</em> and create a new one or edit an existing <em>AI Profile</em>. Here, you will notice that we have ticked the <em>Enable user memory</em> checkbox. Now start a chat with this profile and ask something like, <em>"Who am I?</em>"</p><p>As you can see, the profile has information about me; it knows my name because it's stored in the memory (this information comes from the internal memory).</p><p><img alt="Chat with an AI Profile" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260522/chat-with-a-profile.png"></p><p>And as always, if you want to see this feature in action, <a href="https://www.youtube.com/watch?v=dsjxCNQrbGE" target="_self">head to YouTube for a recording</a> by <a href="https://github.com/MikeAlhayek" target="_self">Mike Alhayek</a>!</p><p class="embed-container"><iframe width="840" height="473" src="https://www.youtube-nocookie.com/embed/dsjxCNQrbGE" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" spellcheck="false"></iframe></p><h2>News from the community</h2><h3>Orchard Harvest 2025 recordings are up!</h3><p>The 8th Orchard Harvest Conference was held in Prague on the 11th and 12th of November, 2025. It was an excellent opportunity to share knowledge, discuss development plans and ideas, and, foremost, meet the community.</p><p>We recorded every session, and they are now available on YouTube (the last recording will be available in a few hours)! If you haven't done so yet, <a href="https://www.youtube.com/@OrchardCore" target="_self">subscribe to this YouTube channel</a>, and you can find the playlist of last year's Harvest recordings <a href="https://www.youtube.com/playlist?list=PLpCsCyd254FodB6zUxTUj7g3hGIeEotvB" target="_self">here</a>.</p><p><img alt="Orchard Harvest 2025 Recordings" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260522/orchard-harvest-2025-playlist.png"></p><h3>Orchard Dojo Newsletter</h3><p>Lombiq's Orchard Dojo Newsletter has 417 subscribers! We have started this newsletter to keep the Orchard community informed about the latest news on the platform. By subscribing to this newsletter, you will receive an email whenever a new post is published to Orchard Dojo, including <em>'This Week in Orchard'</em>, of course.</p><p>Do you know of other Orchard enthusiasts who would like to read our weekly articles? Tell them to <a href="https://orcharddojo.us12.list-manage.com/subscribe?u=32f819a768237590e479c9d0a&amp;id=039db8f13f">subscribe here</a>!</p><h5>If you are interested in more news about Orchard and the details of the topics above, don't forget to check out the recording of <a href="https://www.youtube.com/watch?v=g--d4HCA1Fc" target="_self">this Orchard meeting</a>!</h5>]]></description>
      <pubDate>Fri, 22 May 2026 09:22:44 GMT</pubDate>
      <guid isPermaLink="true">https://orcharddojo.net/blog/how-does-ai-stay-personalized-across-sessions-orchard-harvest-2025-recordings-are-up-this-week-in-orchard-22-05-2026</guid>
    </item>
    <item>
      <title>Content Transfer module, a new website using Orchard Core - This week in Orchard (15/05/2026)</title>
      <link>https://orcharddojo.net/blog/content-transfer-module-a-new-website-using-orchard-core-this-week-in-orchard-15-05-2026</link>
      <description><![CDATA[<h2>Orchard Core updates</h2><h3>SMS Health Checks feature</h3><p>The <em>Health Checks</em> module enables the health checks feature from ASP.NET Core, and the health check endpoint is available at <em>/health/live</em> for each tenant. This module now includes a health check that reports the status of the Twilio SMS service. Thanks for the contribution by <a href="https://github.com/hishamco" target="_self">Hisham Bin Ateya</a>!</p><p>To make this work, don't forget to enable <em>Health Checks</em> and <em>SMS</em> features under <em>Tools -&gt; Features</em>. Once you have that, head to <em>Settings -&gt; Communication -&gt; SMS</em> and set up your Twilio Account Info on the <em>Twilio</em> tab. As you can see here, the status is <em>Healthy</em>, which means we set up our Twilio account correctly and Twilio itself is working.</p><p><img alt="SMS Health Check feature" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260515/sms-health-check-feature.png"></p><h3>Reduce allocations by using .TryGet&lt;&gt; method over .As&lt;&gt;</h3><p>The <em>ISite</em> interface now includes a new method, <em>bool TryGet&lt;T&gt;(out T settings)</em>, to support checking for optional site settings without allocating a new instance when a settings object is missing.</p><p>This is a minor breaking change for custom <em>ISite</em> implementations, which must now implement this method.</p><p>So, if you check out the changes in Orchard, you can see that we prefer <em>.TryGet&lt;&gt;</em> method over <em>.As&lt;&gt;</em> to reduce allocations, and prefer <em>.TryGet&lt;&gt;</em> and <em>.GetOrCreate&lt;&gt;</em> extensions to improve readability. Thanks for the contribution by <a href="https://github.com/MikeAlhayek" target="_self">Mike Alhayek</a>!</p><p><img alt="Reduce allocations" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260515/reduce-allocations.png"></p><h3>Demos</h3><h4>Content Transfer module</h4><p>This time, <a href="https://github.com/MikeAlhayek" target="_self">Mike Alhayek</a> introduces the new <em>Content Transfer</em> module, which provides bulk import and export of content items using Excel files. You can find the code for this module <a href="https://github.com/OrchardCMS/OrchardCore/pull/14630" target="_self">in this pull request</a>.</p><p>First, let's head to <em>Tools -&gt; Features</em> and enable the <em>Content Transfer</em> module to import and export content to and from Excel files. This allows us to configure a content type to make it importable and exportable.</p><p>Let's say we want to make the <em>Article</em> content type importable and exportable. To do that, we need to navigate to <em>Design -&gt; Content Definition -&gt; Content Types</em> and hit <em>Edit</em> near the <em>Article</em> one. Put a tick in the <em>Allow bulk import</em> and <em>Allow bulk export</em> checkboxes.</p><p><img alt="Allow Bulk import export" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260515/allow-bulk-import-export.png"></p><p>Once you have that, you can go to <em>Content</em>, where you will see the two new options: <em>Bulk Export</em> and <em>Bulk Import</em>. We want to export, so we select the <em>Bulk Export</em> option and click the <em>Export</em> button in the upper right. We select the <em>Article</em> from the <em>Content type</em> drop-down (that's the only content type we can export right now), and if we select <em>Partial Export</em> as the <em>Export scope</em>, we can filter down the data. We can filter by owners or version, or specify the date range for created and modified. For now, we simply export all published and click the <em>Export Data</em> button.</p><p><img alt="Bulk export" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260515/bulk-export.png"></p><p>When you do that, it provides you with these files in two ways. If there are only a few items, it returns the file in real time. If there are too many, it will queue them for later access. And to access it later, you can use the list on the <em>Bulk Export</em> page to download the data you require.</p><p>If we want to import data, we need to select the <em>Bulk Import</em> option from the menu. Hitting the <em>Import</em> button in the top-right corner lets you select the content type you want to import. First of all, based on the content type, you can see the file's requirements, such as accepted file formats and file size limits. Under you can see the column requirements, such as which fields are required. You can also download a template to see a sample of the accepted file format.</p><p><img alt="Bulk import" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260515/bulk-import.png"></p><p>Hitting <em>Upload</em> will start importing the records in the background. At the list on the <em>Bulk Import</em> page, you can see the progress of the import, and the errors if you have any (like "<em>Your permalink is already in use</em>" if the <em>AutoroutePart_Path</em> contains an existing permalink).</p><p><img alt="Imported content" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260515/imported-content.png"></p><p>As you can see, the <em>Bulk Import</em> page shows we imported 232 articles, and the process completed without any errors. If we navigate to <em>Content -&gt; Content Items</em>, we can see several Article content items that we just created a few minutes ago.</p><p>And as always, if you want to see this feature in action, <a href="https://www.youtube.com/watch?v=cZMVh52DspE" target="_self">head to YouTube for a recording</a>!</p><p class="embed-container"><iframe width="840" height="473" src="https://www.youtube-nocookie.com/embed/cZMVh52DspE" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" spellcheck="false"></iframe></p><h2>News from the community</h2><h3>A new website using Orchard Core: JobsIreland</h3><p>At JobsIreland, they aim to help people to get jobs and help employers connect with the right people. Whether you're looking for your next job or finding the right person to join your team, JobsIreland can help you. <a href="https://showorchard.com/gallery/business/jobsireland" target="_self">Check out their Orchard Core site here</a>!</p><p><img alt="JobsIreland Show Orchard" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260515/jobs-ireland.jpg"></p><p>If you are interested in more websites using Orchard and Orchard Core, don't forget to visit <a href="https://showorchard.com/" target="_self">Show Orchard</a>. Show Orchard is a website that showcases representative Orchard CMS and Orchard Core websites from around the internet. Ryan Drew Burnett started it, but since he no longer works with Orchard, it is now maintained by our team at <a href="https://lombiq.com/" target="_self">Lombiq Technologies</a>. Oh, and in case you haven't heard about it yet, Show Orchard is also running on Orchard Core in <a href="https://dotnest.com/" target="_self">DotNest</a> for more than two years now! Here's the <a href="https://dotnest.com/blog/show-orchard-case-study-migrating-an-orchard-1-dotnest-site-to-orchard-core" target="_self">case study</a> about how we migrated it from Orchard 1!</p><p>If you're considering migrating your Orchard 1 website to Orchard Core, this is an excellent time. Should you have any questions or encounter challenges, don't hesitate to reach out to us. We're always ready to bring our expertise to your unique project needs. <a href="https://dotnest.com/contact-us" target="_self">Get in touch with us today</a>, and let's start making your Orchard Core website even better!</p><h3>Orchard Dojo Newsletter</h3><p>Lombiq's Orchard Dojo Newsletter has 418 subscribers! We have started this newsletter to keep the Orchard community informed about the latest news on the platform. By subscribing to this newsletter, you will receive an email whenever a new post is published to Orchard Dojo, including <em>'This Week in Orchard'</em>, of course.</p><p>Do you know of other Orchard enthusiasts who would like to read our weekly articles? Tell them to <a href="https://orcharddojo.us12.list-manage.com/subscribe?u=32f819a768237590e479c9d0a&amp;id=039db8f13f">subscribe here</a>!</p><h5>If you are interested in more news about Orchard and the details of the topics above, don't forget to check out the recording of <a href="https://www.youtube.com/watch?v=tzAyFAxyJXE" target="_self">this Orchard meeting</a>!</h5>]]></description>
      <pubDate>Fri, 15 May 2026 11:43:10 GMT</pubDate>
      <guid isPermaLink="true">https://orcharddojo.net/blog/content-transfer-module-a-new-website-using-orchard-core-this-week-in-orchard-15-05-2026</guid>
    </item>
    <item>
      <title>AI Initial Prompt Behavior and AI Chat Session Analytics, Speaker application deadline for Orchard Harvest extended to May 15 - This week in Orchard (08/05/2026)</title>
      <link>https://orcharddojo.net/blog/ai-initial-prompt-behavior-and-ai-chat-session-analytics-speaker-application-deadline-for-orchard-harvest-extended-to-may-15-this-week-in-orchard-08-05-2026</link>
      <description><![CDATA[<h2>Orchard Core updates</h2><h3>Improve feature dependency display and interactivity</h3><p>There is a minor UI issue on the <em>Features</em> page: the dependency tags for some features can be crowded because they recursively list all dependencies for a module.</p><p><a href="https://github.com/hishamco" target="_self">Hisham Bin Ateya</a> had an idea to fix this by not listing all the dependencies here. And after a discussion with <a href="https://github.com/gvkries" target="_self">Georg von Kries</a>, the final decision was to show only the direct dependencies by default. Transient dependencies are hidden by default and revealed by clicking the ellipsis icon, which then displays a <em>Show indirect dependencies</em> tooltip.</p><p><img alt="Improve feature dependency display and interactivity" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260508/improve-feature-dependency-display-and-interactivity.png"></p><p>As you can see, we are on the <em>Features</em> page under <em>Tools</em>, and we hover over the ellipsis icon next to the <em>Layers</em> feature. The <em>Layers</em> feature has three direct dependencies (<em>Widgets</em>, <em>Scripting</em>, <em>Rules</em>), and clicking the ellipsis icon shows the indirect dependencies as well.</p><h3>New protect global method provider</h3><p><a href="https://github.com/MikeAlhayek" target="_self">Mike Alhayek</a> added a new global method provider, <em>protect</em>, to the list of JavaScript methods provided by Orchard Core, which can be used to protect the specified value using the ASP.NET Core Data Protection API with the given purpose string. Let's see how it's working!</p><p>First, we navigated to <em>Tools -&gt; Features</em> and enabled the <em>View or Download Content as JSON</em> feature, which added the <em>JSON Import</em> option under the <em>Tools -&gt; Deployments</em> submenu. Here you can see that we stored our <em>my-secret-value</em> secret in the <em>ApiKey</em> setting, which is part of the <em>MyModule</em> module.</p><p><img alt="New protect global method provider" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260508/new-protect-global-method-provider.png"></p><p>Please note that the protect function is intended for use only in development and testing scenarios. Storing secrets in recipe files for production environments is not recommended and should be avoided. Use a secure secret management solution (e.g., Azure Key Vault, environment variables) for production deployments.</p><h3>Demos</h3><h4>AI Initial Prompt Behavior and AI Chat Session Analytics</h4><p>In the Profiles now, you have more power, more capabilities to do more things in the <a href="https://github.com/CrestApps/CrestApps.OrchardCore" target="_self">AI Suite</a>, like data processing after the session has ended.</p><p>But before that, there is another thing that <a href="https://github.com/MikeAlhayek" target="_self">Mike Alhayek</a> added, which is to set up an initial prompt. If the initial prompt is enabled on the profile, the session is created immediately with an assistant message from the configured Initial prompt, which appears in chat history when the page loads or when a new session is started. It's a nice-to-have feature, for example, <a href="https://orcharddojo.net/blog/ai-chat-admin-widget-and-frontend-widget-dotnest-has-a-new-look-this-week-in-orchard-24-04-2026" target="_self">for chat widgets</a>, where the chat widget can immediately welcome the user with some initial message. We have a profile called GitHub profile, and immediately after we start a new chat session with it, it greets us with the initial prompt we provided.</p><p><img alt="Initial prompt for profiles" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260508/initial-prompt-for-profiles.png"></p><p>Now let's move on to the <em>Data Processing &amp; Metrics</em> tab. If you want to extract data or do something with the data for a chat session, you can enable data extraction by putting a tick in the <em>Enable data extraction checkbox,</em> and you can add extraction entries by clicking the <em>Add Entry</em> button. Here you can see we say to extract the customer's first name, last name, and email address.</p><p><img alt="Data extraction" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260508/data-extraction.png"></p><p>There is another option called post-session processing, which you can enable by putting a tick in the <em>Enable post-session processing</em> checkbox. Here, you can add tasks you want to do after the session ends. Like, create a task here that just generates a summary of the conversation and sends me an email. In this case, we will know what people are doing with our chat widgets. And in the <em>Instructions</em>, we say to create a summary, use the sendEmail tool, and set up the email subject, body, and so on.</p><p><img alt="Post session processing" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260508/post-session-processing.png"></p><p>You can also enable session metrics. When you do that, session metrics such as usage, token consumption, response latency, and user feedback are captured for analytics. Metrics can be viewed in the <em>Chat Analytics dashboard</em>. The other thing you can do is to enable conversation metrics. When enabled, AI evaluates each session against defined goals and assigns scores to measure session success and conversion rates. This operates independently of session metrics.</p><p>Now let's talk about analytics! The <em>AI Chat Session Analytics</em> feature provides comprehensive analytics and reporting for AI chat sessions. By using it, you can track conversation metrics, user engagement, model performance, and user satisfaction through an admin dashboard. Once you enable the <em>AI Chat Session Analytics</em> feature under <em>Tools -&gt; Features</em>, you will find the analytics dashboard under <em>Artificial Intelligence -&gt; Reports -&gt; AI Chat Session Analytics</em>. The analytics dashboard provides a comprehensive view of AI chat performance through multiple report sections. You can use the filters panel at the top to narrow results by date range and AI profile.</p><p><img alt="AI Chat session analytics" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260508/ai-chat-session-analytics.png"></p><p>And as always, if you want to see this feature in action, <a href="https://www.youtube.com/watch?v=VqM57tqax1U" target="_self">head to YouTube for a recording</a> by <a href="https://github.com/MikeAlhayek" target="_self">Mike Alhayek</a>, and don't forget to <a href="https://orchardcore.crestapps.com/docs/ai/chat-analytics#metrics-reference" target="_self">check out the official documentation</a> to read more about the dashboard and the metrics!</p><p class="embed-container"><iframe width="840" height="473" src="https://www.youtube-nocookie.com/embed/VqM57tqax1U" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" spellcheck="false"></iframe></p><h2>News from the community</h2><h3>Speaker application deadline for Orchard Harvest extended to May 15</h3><p>The next Orchard Core conference will take place in Vancouver, Canada, on the 10th and 11th of September.</p><p>Do you have an interesting Orchard Core-related topic that you'd like to present to the community? Development techniques, memorable case studies, and useful experiences that you'd like to share?</p><p>This year's leading themes:</p><ul><li>From CMS to content platform: where Orchard Core fits in 2026.</li><li>Automation superpowers: AI tools, recipes, and workflows in everyday projects.</li><li>Performance and reliability in Orchard Core.</li><li>Looking beyond Orchard Core 3.0: what’s next for the platform and community.</li></ul><p>Application form: <a href="https://forms.office.com/pages/responsepage.aspx?id=Wt6elek45kStyIVVO-uCICDdeeZFbXdAlSWTkdgpZAtUQzA3UzVNUERJTk4zVlEwRUtXNkM2SlI4Sy4u" target="_self">https://forms.office.com/pages/responsepage.aspx?id=Wt6elek45kStyIVVO-uCICDdeeZFbXdAlSWTkdgpZAtUQzA3UzVNUERJTk4zVlEwRUtXNkM2SlI4Sy4u</a></p><p>Apply to be a speaker by the <strong>15th of May</strong>, midnight, anywhere on Earth! We'll notify you whether your talk is selected for Harvest in 1 or 2 weeks after the application period. The chosen speakers will receive complimentary tickets for the event.</p><p><img alt="Orchard Harvest 2026 speaker application" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260508/speaker-application-form-extended.png"></p><p>The 8th Orchard Harvest Conference was held in Prague on the 11th and 12th of November, 2025. We recorded every session, and are currently publishing them on the <a href="https://www.youtube.com/@OrchardCore" target="_self">Orchard Core YouTube channel</a>. The videos are published every Monday, Wednesday, and Friday at 4:00 PM UTC. If you haven't done so yet, <a href="https://www.youtube.com/@OrchardCore" target="_blank">subscribe to this YouTube channel</a> for the Harvest videos and some inspiration if you are considering being a speaker this year! <a href="https://www.youtube.com/watch?v=_uRlR6k0OeE&amp;list=PLpCsCyd254FodB6zUxTUj7g3hGIeEotvB" target="_self">Here you can find the playlist</a> for last year's Harvest recordings.</p><h3>Orchard Dojo Newsletter</h3><p>Lombiq's Orchard Dojo Newsletter has 419 subscribers! We have started this newsletter to keep the Orchard community informed about the latest news on the platform. By subscribing to this newsletter, you will receive an email whenever a new post is published to Orchard Dojo, including <em>'This Week in Orchard'</em>, of course.</p><p>Do you know of other Orchard enthusiasts who would like to read our weekly articles? Tell them to <a href="https://orcharddojo.us12.list-manage.com/subscribe?u=32f819a768237590e479c9d0a&amp;id=039db8f13f">subscribe here</a>!</p><h5>If you are interested in more news about Orchard and the details of the topics above, don't forget to check out the recording of <a href="https://www.youtube.com/watch?v=Eme0163E4CQ" target="_self">this Orchard meeting</a>!</h5>]]></description>
      <pubDate>Fri, 08 May 2026 12:24:25 GMT</pubDate>
      <guid isPermaLink="true">https://orcharddojo.net/blog/ai-initial-prompt-behavior-and-ai-chat-session-analytics-speaker-application-deadline-for-orchard-harvest-extended-to-may-15-this-week-in-orchard-08-05-2026</guid>
    </item>
    <item>
      <title>Copilot Integration, Last call: Speaker application for Orchard Harvest 2026 - This week in Orchard (01/05/2026)</title>
      <link>https://orcharddojo.net/blog/copilot-integration-last-call-speaker-application-for-orchard-harvest-2026-this-week-in-orchard-01-05-2026</link>
      <description><![CDATA[<h2>Orchard Core updates</h2><h3>Support static data migration methods</h3><p>Public static data migration methods are now supported for <em>Create</em>, <em>CreateAsync</em>, <em>UpdateFromX</em>, <em>UpdateFromXAsync</em>, <em>Uninstall</em>, and <em>UninstallAsync</em>, so CA1822 suppressions are no longer required for migration steps that don't use instance state. It means that all methods could now be static if we don't use services, and we can remove the warnings that say mark members as static.</p><p><img alt="Support static data migration methods" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260501/support-static-data-migration-methods.png"></p><h3>Make List Part pagination configurable</h3><p>From now on, for the <em>List Part</em>, you can choose to use the current <em>PagerSlim</em>, which just shows next and previous, or use page numbers as well. But don't forget that showing page numbers, too, requires an additional database query to determine the total item count. By default, we are still using <em>PagerSlim</em>. Thanks to <a href="https://github.com/ahlxjg" target="_self">Jack Liu</a> for his first contribution!</p><p>We can try this out quickly by setting up our site using the <em>Blog</em> recipe. The <em>Blog</em> recipe provides us with the <em>Blog</em> content type, which has the <em>List Part</em> attached. If we navigate to <em>Design -&gt; Content Definition -&gt; Content Types</em> and click <em>Edit</em> next to <em>Blog</em>, we can find the attached <em>List Part</em>, where we can see the new <em>Show full pager</em> checkbox.</p><p><img alt="List Part show full pager" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260501/list-part-show-full-pager.png"></p><p>Now, let's see the differences between using a full pager and not using one. On the left side of the screen, we can see the full pager in use. In this case, you can see the page numbers and the &lt;&lt; &gt;&gt; arrows to be able to jump to the first and the last page of the list. The right side of the screen shows you the <em>PagerSlim usage</em>, where you can only navigate to the previous and next pages.</p><p><img alt="PagerSlim and Full Pager differences" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260501/pager-slim-full-pager-differences.png"></p><h3>Demos</h3><h4>Copilot Integration</h4><p>Let's continue our journey with the <a href="https://github.com/CrestApps/CrestApps.OrchardCore/" target="_self">AI suite</a>, this time with the AI Copilot Orchestrator!</p><p>If you navigate to <em>Tools -&gt; Features</em> and enable the <em>AI Copilot Orchestrator</em> feature, it will provide a GitHub Copilot SDK-based orchestrator for AI chat sessions. Then, you can go to <em>Settings -&gt; Artificial Intelligence</em>, where you will see a new <em>Copilot</em> section. You can set the authentication type and choose between <em>GitHub Signed-in User</em> and <em>API Key (BYOK)</em>. The API Key can be used if you have this service hosted in Azure. For the sake of the demo, we chose the GitHub signed-in user authentication type and followed the steps mentioned to create a GitHub app.</p><p><img alt="Copilot authentication" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260501/copilot-authentication.png"></p><p>Now, we can go to <em>Artificial Intelligence -&gt; Chat Interactions</em>, where we can create a new chat or continue an existing one. Here you can select the orchestrator to use for this chat interaction. The orchestrator controls how tools are selected and how the AI execution loop is managed. If you select the <em>GitHub Copilot Orchestrator</em> here, the site will ask you to log in to your GitHub account. Once you have it, a new drop-down will display where you can select the Copilot model to use for this interaction.</p><p><img alt="Chat with Copilot" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260501/chat-with-copilot.png"></p><p>Copilot will be aware of all the capabilities that you select under the <em>Capabilities</em> tab, and it is also aware of the documents that you can attach under the <em>Documents</em> tab. And the same applies to profiles. You can reach profiles under <em>Artificial Intelligence -&gt; Profiles</em>, where you can edit/create profiles and set the orchestrator nearly the same way. Here you can <a href="https://orcharddojo.net/blog/managing-ai-models-and-profiles-reorganize-the-admin-menu-this-week-in-orchard-21-02-2025" target="_self">read more about Profiles and Chat Interactions</a>.</p><p>And as always, if you want to see this feature in action, <a href="https://www.youtube.com/watch?v=nnLqWw8e1YM" target="_self">head to YouTube for a recording</a> by <a href="https://github.com/MikeAlhayek" target="_self">Mike Alhayek</a>, and don't forget to check out the <a href="https://orchardcore.crestapps.com/docs/ai/copilot/" target="_self">official documentation about the Copilot Integration</a>!</p><p class="embed-container"><iframe width="840" height="473" src="https://www.youtube-nocookie.com/embed/nnLqWw8e1YM" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" spellcheck="false"></iframe></p><h2>News from the community</h2><h3>Speaker application for Orchard Harvest 2026 and Orchard Harvest 2025 recordings</h3><p>The next Orchard Core conference will take place in Vancouver, Canada, on the 10th and 11th of September.</p><p>Do you have an interesting Orchard Core-related topic that you'd like to present to the community? Development techniques, memorable case studies, and useful experiences that you'd like to share?</p><p>This year's leading themes:</p><ul><li>From CMS to content platform: where Orchard Core fits in 2026.</li><li>Automation superpowers: AI tools, recipes, and workflows in everyday projects.</li><li>Performance and reliability in Orchard Core.</li><li>Looking beyond Orchard Core 3.0: what’s next for the platform and community.</li></ul><p>Application form: <a href="https://forms.office.com/pages/responsepage.aspx?id=Wt6elek45kStyIVVO-uCICDdeeZFbXdAlSWTkdgpZAtUQzA3UzVNUERJTk4zVlEwRUtXNkM2SlI4Sy4u" target="_self">https://forms.office.com/pages/responsepage.aspx?id=Wt6elek45kStyIVVO-uCICDdeeZFbXdAlSWTkdgpZAtUQzA3UzVNUERJTk4zVlEwRUtXNkM2SlI4Sy4u</a></p><p>Apply to be a speaker by the <strong>5th of May</strong>, midnight, anywhere on Earth! We'll notify you whether your talk is selected for Harvest in 1 or 2 weeks after the application period. The chosen speakers will receive complimentary tickets for the event.</p><p><img alt="Orchard Harvest 2026 speaker application" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260417/orchard-harvest-2026-speaker-application.png"></p><p>The 8th Orchard Harvest Conference was held in Prague on the 11th and 12th of November, 2025. We recorded every session, and are currently publishing them on the <a href="https://www.youtube.com/@OrchardCore" target="_self">Orchard Core YouTube channel</a>. The videos are published every Monday, Wednesday, and Friday at 4:00 PM UTC. If you haven't done so yet, <a href="https://www.youtube.com/@OrchardCore" target="_blank">subscribe to this YouTube channel</a> for the Harvest videos and some inspiration if you are considering being a speaker this year! <a href="https://www.youtube.com/watch?v=_uRlR6k0OeE&amp;list=PLpCsCyd254FodB6zUxTUj7g3hGIeEotvB" target="_self">Here you can find the playlist</a> for last year's Harvest recordings.</p><h3>Bringing Orchard Core into the classroom at Óbuda University</h3><p>Ever wonder how a CMS can make university courses more practical? At <a href="https://uni-obuda.hu/en/" target="_self">Óbuda University</a>, Orchard Core did just that. Students learn ASP.NET Core by building live sites on DotNest. They go through milestones, create custom forms and workflows. We talked with our project leader, <a href="https://github.com/domonkosgabor" target="_self">Gábor Domonkos</a>, about how it started, what students build, and why it prepares them for real careers.</p><p>Students gain practical experience, the university gets a more hands-on subject, and the industry gets people who are better prepared for real projects. We believe more universities could benefit from this kind of collaboration, whether with Orchard Core or other open-source technologies. And if you are exploring something similar, we are always happy to share what has worked for us so far.</p><p>Check out <a href="https://lombiq.com/blog/bringing-orchard-core-into-the-classroom-at-obuda-university" target="_self">the full interview here</a>!</p><p><img alt="Orchard Core University interview" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260501/orchard-core-university-interview.png"></p><h3>Orchard Dojo Newsletter</h3><p>Lombiq's Orchard Dojo Newsletter has 419 subscribers! We have started this newsletter to keep the Orchard community informed about the latest news on the platform. By subscribing to this newsletter, you will receive an email whenever a new post is published to Orchard Dojo, including <em>'This Week in Orchard'</em>, of course.</p><p>Do you know of other Orchard enthusiasts who would like to read our weekly articles? Tell them to <a href="https://orcharddojo.us12.list-manage.com/subscribe?u=32f819a768237590e479c9d0a&amp;id=039db8f13f">subscribe here</a>!</p><h5>If you are interested in more news about Orchard and the details of the topics above, don't forget to check out the recording of <a href="https://www.youtube.com/watch?v=GujHioQ17Bs" target="_self">this Orchard meeting</a>!</h5>]]></description>
      <pubDate>Fri, 01 May 2026 09:03:41 GMT</pubDate>
      <guid isPermaLink="true">https://orcharddojo.net/blog/copilot-integration-last-call-speaker-application-for-orchard-harvest-2026-this-week-in-orchard-01-05-2026</guid>
    </item>
    <item>
      <title>AI Chat Admin Widget and Frontend Widget, DotNest has a new look - This week in Orchard (24/04/2026)</title>
      <link>https://orcharddojo.net/blog/ai-chat-admin-widget-and-frontend-widget-dotnest-has-a-new-look-this-week-in-orchard-24-04-2026</link>
      <description><![CDATA[<h2>Orchard Core updates</h2><h3>Warn against unsafe Liquid output in SQL queries</h3><p>A SQL query is actually a Liquid template. This allows your queries to be shaped based on the parameters it gets. But you could srew up with SQL and Liquid if you start by injecting Liquid in a value, as you can see below. Because in that case, you can inject any SQL and expose all your databases. So, do not inject user-provided values directly with Liquid output expressions, as this can lead to SQL injection.</p><p>Use SQL parameters (<em>@name</em> or <em>@name:default</em>) for all user-provided values, and only use Liquid templates to change the shape of the query.</p><p><img alt="Warn against unsafe Liquid output in SQL queries" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260424/warn-against-unsafe-liquid-output-in-sql-queries.png"></p><p>This change by <a href="https://github.com/gvkries" target="_blank">Georg von Kries</a> adds some validation, so whenever you edit a SQL query like the one we mentioned, it will tell you not to use this kind of usage in Liquid. The <em>SqlLiquidOutputExpressionDetector</em> will detect the issues based on the resolved <em>FluidParser</em>. What matters here is the <em>OutputStatementDetector</em>, which inherits from <em>AstVisitor</em> in Fluid and lets you detect specific statements. Here you can see the <em>VisitOutputStatement</em>, which checks for curly braces; when it finds them, the <em>ContainsOutputStatement</em> checks whether they contain curly braces. And in this case, we emit a warning to let users know to be careful when doing that.</p><p><img alt="SqlLiquidOutputExpressionDetector" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260424/sqlliquidoutputexpressiondetector.png"></p><p>And we can easily try it out by navigating to <em>Search -&gt; Queries -&gt; All Queries</em> and adding the query we mentioned above. Once we hit save, Orchard warns us that potentially unsafe Liquid output expressions (<em>'{ ... }'</em>) were detected in this query template.</p><p><img alt="Unsafe Liquid SQL Query sample" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260424/unsafe-liquid-sql-query-sample.png"></p><h3>Add IJSLocalizer infrastructure and framework-agnostic JavaScript localization helpers</h3><p>This is about providing localization for JavaScript files. In a nutshell, this will load the localization from the PO files and make it available in JavaScript.</p><p>When a Vue, TypeScript, or plain JavaScript component needs translated strings, it cannot call <em>IStringLocalizer</em> directly. <em>IJSLocalizer</em> bridges this gap: each module registers one implementation that knows how to map a group name to a dictionary of localized strings, which a Razor view or layout can serialize and pass into a scoped module entry point before the script runs. Check out the <a href="https://docs.orchardcore.net/en/latest/reference/modules/Localize/javascript-localization/" target="_self">documentation of the JavaScript Localization</a> to see how you can register a custom implementation, pass localizations to the browser, use localizations in JavaScript or TypeScript, and more with examples!</p><p><img alt="JavaScript localization documentation" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260424/javascript-localization-docs.png"></p><h3>Demos</h3><h4>AI Chat Admin widget and Frontend widget</h4><p>Let's continue our journey with the <a href="https://github.com/CrestApps/CrestApps.OrchardCore/" target="_self">AI suite</a>, this time with the widgets!</p><p>If you head to <em>Design -&gt; Widgets</em> and hit the <em>Add Widget</em> button for one of the defined Zones, you will find a new option called <em>Artificial Intelligence Chat</em>. Once you have it, you can select whichever profile you want to use with this widget. If you are not familiar with AI profiles, you can <a href="https://orcharddojo.net/blog/managing-ai-models-and-profiles-reorganize-the-admin-menu-this-week-in-orchard-21-02-2025" target="_self">check out our previous post</a> or head to the <a href="https://orchardcore.crestapps.com/docs/ai/#ai-profiles" target="_blank">official documentation for CrestApps Orchard Core</a> to learn more. Once you select your profile and navigate to the frontend of your site, you will notice the new AI Chat widget there, and you can start a chat with it.</p><p><img alt="AI Chat Frontend Widget" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260424/ai-chat-frontend-widget.png"></p><p>The other new feature that we want to highlight today is called <em>AI Chat Admin Widget</em>, which provides a floating AI chat widget on every admin page, allowing users to interact with a predefined AI profile. You can enable it under <em>Tools -&gt; Features</em>. Once you enable it, you can configure it under <em>Settings -&gt; Artificial Intelligence</em>, where you will find a new section called <em>Admin Widget</em>. Here, you need to select the API Profile to use for the admin widget. Users with the appropriate permission can chat with this profile from any admin page. But you can also set the maximum number of previous chat sessions to display in the widget history panel and the primary color for the admin chat widget. After that, you will see a UI similar to the frontend, with the same capabilities.</p><p><img alt="AI Chat Admin Widget" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260424/ai-chat-admin-widget.png"></p><p>And it's still not all of it! If you want to see these features in action, don't forget to <a href="https://www.youtube.com/watch?v=RLi9XCISItI" target="_self">head to YouTube for a demo</a> by <a href="https://github.com/MikeAlhayek" target="_self">Mike Alhayek</a>!</p><p class="embed-container"><iframe width="840" height="473" src="https://www.youtube-nocookie.com/embed/RLi9XCISItI" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" spellcheck="false"></iframe></p><h2>News from the community</h2><h3>Speaker application for Orchard Harvest 2026 and Orchard Harvest 2025 recordings</h3><p>The next Orchard Core conference will take place in Vancouver, Canada, on the 10th and 11th of September.</p><p>Do you have an interesting Orchard Core-related topic that you'd like to present to the community? Development techniques, memorable case studies, and useful experiences that you'd like to share?</p><p>This year's leading themes:</p><ul><li>From CMS to content platform: where Orchard Core fits in 2026.</li><li>Automation superpowers: AI tools, recipes, and workflows in everyday projects.</li><li>Performance and reliability in Orchard Core.</li><li>Looking beyond Orchard Core 3.0: what’s next for the platform and community.</li></ul><p>Application form: <a href="https://forms.office.com/pages/responsepage.aspx?id=Wt6elek45kStyIVVO-uCICDdeeZFbXdAlSWTkdgpZAtUQzA3UzVNUERJTk4zVlEwRUtXNkM2SlI4Sy4u" target="_self">https://forms.office.com/pages/responsepage.aspx?id=Wt6elek45kStyIVVO-uCICDdeeZFbXdAlSWTkdgpZAtUQzA3UzVNUERJTk4zVlEwRUtXNkM2SlI4Sy4u</a></p><p>Apply to be a speaker by the <strong>5th of May</strong>, midnight, anywhere on Earth! We'll notify you whether your talk is selected for Harvest in 1 or 2 weeks after the application period. The chosen speakers will receive complimentary tickets for the event.</p><p><img alt="Orchard Harvest 2026 speaker application" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260417/orchard-harvest-2026-speaker-application.png"></p><p>The 8th Orchard Harvest Conference was held in Prague on the 11th and 12th of November, 2025. We recorded every session, and are currently publishing them on the <a href="https://www.youtube.com/@OrchardCore" target="_self">Orchard Core YouTube channel</a>. The videos are published every Monday, Wednesday, and Friday at 4:00 PM UTC. If you haven't done so yet, <a href="https://www.youtube.com/@OrchardCore" target="_blank">subscribe to this YouTube channel</a> for the Harvest videos and some inspiration if you are considering being a speaker this year! <a href="https://www.youtube.com/watch?v=_uRlR6k0OeE&amp;list=PLpCsCyd254FodB6zUxTUj7g3hGIeEotvB" target="_self">Here you can find the playlist</a> for last year's Harvest recordings.</p><h3>DotNest has a new look!</h3><p>The previous site was starting to show its age. Not just visually, but also in day-to-day site management UX. So we took a step back and rebuilt the frontend from the ground up.</p><p>The new site is built with Tailwind CSS and a much more user-friendly content management approach. Our goal was a simple, straightforward UX that stays out of the way of the content, no unnecessary fluff, just clarity and focus. Stay tuned for an in-depth case study!</p><p>Take a look <a href="https://dotnest.com/blog/dotnest-has-a-new-look-0" target="_self">at this post here</a>, and if you're curious, you can <a href="https://dotnest.com/" target="_self">create Orchard Core sites here for free</a>!</p><p><img alt="DotNest has a new look!" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260424/dotnest-has-a-new-look-post.png"></p><h3>Orchard Dojo Newsletter</h3><p>Lombiq's Orchard Dojo Newsletter has 419 subscribers! We have started this newsletter to keep the Orchard community informed about the latest news on the platform. By subscribing to this newsletter, you will receive an email whenever a new post is published to Orchard Dojo, including <em>'This Week in Orchard'</em>, of course.</p><p>Do you know of other Orchard enthusiasts who would like to read our weekly articles? Tell them to <a href="https://orcharddojo.us12.list-manage.com/subscribe?u=32f819a768237590e479c9d0a&amp;id=039db8f13f">subscribe here</a>!</p><h5>If you are interested in more news about Orchard and the details of the topics above, don't forget to check out the recording of <a href="https://www.youtube.com/watch?v=Ngrl1ffZ2G4" target="_self">this Orchard meeting</a>!</h5>]]></description>
      <pubDate>Fri, 24 Apr 2026 10:25:28 GMT</pubDate>
      <guid isPermaLink="true">https://orcharddojo.net/blog/ai-chat-admin-widget-and-frontend-widget-dotnest-has-a-new-look-this-week-in-orchard-24-04-2026</guid>
    </item>
    <item>
      <title>Speaker application for Orchard Harvest 2026 and Orchard Harvest 2025 recordings - This week in Orchard (17/04/2026)</title>
      <link>https://orcharddojo.net/blog/speaker-application-for-orchard-harvest-2026-and-orchard-harvest-2025-recordings-this-week-in-orchard-17-04-2026</link>
      <description><![CDATA[<h2>Orchard Core updates</h2><h3>Independent Render Liquid and Sanitize HTML settings for HTML and Markdown components</h3><p>The current <em>SanitizeHtml</em> settings' hint could be a little bit misleading, and enabling or disabling it causes potentially unwanted behavior because the hint only refers to preventing custom scripts, which is true, but it does much more by default. This, in itself, is trivial to fix. However, the <em>SanitizeHtml</em> setting also governs whether Liquid markup is rendered. If <em>SanitizeHtml</em> is <em>false</em>, that means Liquid is rendered. This prevents a simple use case where (script) sanitization is desired, but Liquid should still be rendered.</p><p>Regardless of the setting, the Liquid code is always validated. This is problematic when Liquid code is included as a code sample (in a &lt;code&gt; block) and is invalid, e.g., because it references a Liquid tag that is not available in the current system. This affects <em>HtmlBody Part</em>, <em>Html Field</em>, <em>Markdown Part</em>, and <em>Markdown Field</em>.</p><p>Let's see <a href="https://github.com/BenedekFarkas" target="_self">Benedek Farkas</a>'s solution to this issue! If you set up your site using the <em>Blog</em> recipe, you will get a predefined <em>Blog Post</em> content type with the <em>MarkdownBody Part</em> attached. If you edit the settings of the attached <em>MarkdownBody Part</em>, you will notice the new <em>Render Liquid</em> option, which lets you control whether your Liquid markup is rendered or displayed raw. Please note that the Liquid rendering support is here only for backward compatibility and will be removed in version 4.0. As you can see, both settings are <em>false</em> in our case.</p><p><img alt="New Render Liquid setting" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260417/new-render-liquid-setting.png"></p><p>Now, let's create a new <em>Blog Post</em> with some sample content. As you can see in the screen below, the Liquid code is not validated because the <em>Render Liquid</em> option is disabled.</p><p><img alt="Creating a Blog Post" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260417/creating-a-blog-post.png"></p><h3>New Data Localization Liquid filter</h3><p>And while we are talking about Liquid, let's take a look at a new Liquid filter by <a href="https://github.com/hishamco" target="_self">Hisham Bin Ateya</a>, that localizes dynamic data string using the current culture. We fire up the blog post that we created earlier and make sure that the <em>Render Liquid</em> option is set to <em>true</em>. Then we have to make sure that our site supports multiple cultures under <em>Settings -&gt; Localization -&gt; Cultures</em>. We used the <em>Dynamic Translations UI</em> under <em>Settings -&gt; Localization -&gt; Dynamic Translations</em> to add a Hungarian translation for the <em>Blog Post</em> content type. If that UI is new to you, it's OK; that's quite a recent addition <a href="https://orcharddojo.net/blog/dynamic-translations-refactor-icontentdefinitionservice-for-improved-modularity-and-design-this-week-in-orchard-13-02-2026" target="_self">that you can read about in detail in this post</a>.</p><p><img alt="Dynamic Translations UI" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260417/dynamic-translations-ui.png"></p><p>Now let's see how that filter works! As you can see, we want to display the localized value of the <em>Blog Post</em> string, and the context for the string is <em>Content Types</em>. If we publish this content item and view it in the front end, we will see that the site displays the text <em>Blog Post</em> as <em>Blogposzt</em>.</p><p><img alt="New Data Localization Liquid Filter" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260417/new-data-localization-liquid-filter.png"></p><h3>Demos</h3><h4>AI Documents for Chat Interactions and Chat Sessions</h4><p>We will continue the demo from last week, where we discussed the <a href="https://github.com/CrestApps/CrestApps.OrchardCore/" target="_self">AI Data Source module of the AI Suite</a>, which provides AI data source management, knowledge base indexing, and RAG search capabilities for Orchard Core. If you haven't read it yet, <a href="https://orcharddojo.net/blog/ai-knowledge-base-indexing-arguments-source-generation-this-week-in-orchard-10-04-2026" target="_self">you can find it here</a>.</p><p>Let's say we don't want to have only data in the indexes; we also want to use the uploaded documents, work with them, and ask questions about them. The features called <em>AI Documents (OpenXML)</em> and <em>AI Documents (PDF)</em> extend the <em>AI Documents</em> feature by allowing PDF and OpenXML files (ie, docx, xlsx, pptx). If we enable the <em>AI Documents for Chat Interactions</em> feature, we will be able to upload documents in the Chat Interactions UI.</p><p>Now we can go to <em>Artificial Intelligence -&gt; Chat Interactions</em>, where we can start a new chat or continue an existing one. You will notice the <em>Documents</em> tab, which allows you to attach documents to chat against your own data. The content will be extracted and used as context for AI responses. But as you can see, it warns you to select an index profile for indexing documents in chat interactions.</p><p><img alt="Index not configured warning" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260417/index-not-configured-warning.png"></p><p>To do that, we need to navigate to <em>Settings -&gt; Artificial Intelligence</em> and select an index profile.</p><p><img alt="Select index profile for documents" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260417/select-index-profile-for-documents.png"></p><p>Now we can go back to the Chat Interactions UI, attach documents, and ask questions like "<em>summarize the file</em>". AI can do that because the document is processed and indexed, so we can retrieve data from the index.</p><p>There is another feature called <em>AI Documents for Chat Sessions</em>, which provides document upload and Retrieval-Augmented Generation (RAG) support for AI Chat Sessions and Widgets. The difference between <em>Chat Interaction</em> and <em>Chat Session</em> is that Chat Interaction is a playground that you can reach under <em>Artificial Intelligence -&gt; Chat Interactions</em>, the one that we showed you previously. There is nothing preconfigured.</p><p>If you want to have a Chat Session, you have to create a <em>Profile</em> first under <em>Artificial Intelligence -&gt; Profiles</em>. A Profile allows you to preconfigure system instructions, setting up an initial prompt, the Profile Type, and so on. But what's interesting for us here is the content of the <em>Documents</em> tab. If you enable the <em>AI Documents for Profiles</em> feature, you can allow Documents and Attachments in this tab, which means users can upload documents to chat sessions using this profile, as you can read. If we upload a file here and create a new chat based on the profile (which we can do by clicking on the <em>Actions</em> button and select the <em>New chat</em> from the drop-down menu near the profile under <em>Artificial Intelligence -&gt; Profiles</em>), we can chat about the content of the uploaded document without having the need to upload the given documents again and again because it's preconfigured.</p><p><img alt="Profile documents" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260417/profile-documents.png"></p><p>And it's still not all of it! If you want to see these features in action, don't forget to <a href="https://www.youtube.com/watch?v=bWkENl3UkCY" target="_self">head to YouTube for a demo</a> by <a href="https://github.com/MikeAlhayek" target="_self">Mike Alhayek</a>!</p><p class="embed-container"><iframe width="840" height="473" src="https://www.youtube-nocookie.com/embed/bWkENl3UkCY" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" spellcheck="false"></iframe></p><h2>News from the community</h2><h3>Speaker application for Orchard Harvest 2026 and Orchard Harvest 2025 recordings</h3><p>The next Orchard Core conference will take place in Vancouver, Canada, on the 10th and 11th of September.</p><p>Do you have an interesting Orchard Core-related topic that you'd like to present to the community? Development techniques, memorable case studies, and useful experiences that you'd like to share?</p><p>This year's leading themes:</p><ul><li>From CMS to content platform: where Orchard Core fits in 2026.</li><li>Automation superpowers: AI tools, recipes, and workflows in everyday projects.</li><li>Performance and reliability in Orchard Core.</li><li>Looking beyond Orchard Core 3.0: what’s next for the platform and community.</li></ul><p>Application form: <a href="https://forms.office.com/pages/responsepage.aspx?id=Wt6elek45kStyIVVO-uCICDdeeZFbXdAlSWTkdgpZAtUQzA3UzVNUERJTk4zVlEwRUtXNkM2SlI4Sy4u" target="_self">https://forms.office.com/pages/responsepage.aspx?id=Wt6elek45kStyIVVO-uCICDdeeZFbXdAlSWTkdgpZAtUQzA3UzVNUERJTk4zVlEwRUtXNkM2SlI4Sy4u</a></p><p>Apply to be a speaker by the 5th of May, midnight, anywhere on Earth! We'll notify you whether your talk is selected for Harvest in 1 or 2 weeks after the application period. The chosen speakers will receive complimentary tickets for the event.</p><p><img alt="Orchard Harvest 2026 speaker application" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260417/orchard-harvest-2026-speaker-application.png"></p><p>The 8th Orchard Harvest Conference was held in Prague on the 11th and 12th of November, 2025. We recorded every session, and starting next Monday, we will begin publishing them on the <a href="https://www.youtube.com/@OrchardCore" target="_self">Orchard Core YouTube channel</a>. The videos will be published every Monday, Wednesday, and Friday at 4:00 PM UTC. If you haven't done so yet, <a href="https://www.youtube.com/@OrchardCore" target="_blank">subscribe to this YouTube channel</a> for upcoming Harvest videos and some inspiration if you are considering being a speaker this year! <a href="https://www.youtube.com/watch?v=_uRlR6k0OeE&amp;list=PLpCsCyd254FodB6zUxTUj7g3hGIeEotvB" target="_self">Here you can find the playlist</a> for last year's Harvest recordings.</p><h3>Event management backend for one of the largest retailers - Avastec case study by Lombiq</h3><p>When a live, high–traffic event platform needs new features urgently, you don't get the luxury of rewrites or downtime.</p><p>That was the situation when <a href="https://avastec.com/" target="_self">Avastec</a> asked us to take over and continue the development of an Orchard Core–based headless event management backend used by one of the world's largest retailers.</p><p>The system was already in production, powering a public Node.js frontend. The goals were clear:</p><ul><li>ship new functionality quickly,</li><li>improve performance and reliability,</li><li>keep upgrades safe and traceable,</li><li>all without disrupting users.</li></ul><p>Our work focused on long-term maintainability under real delivery pressure:</p><ul><li>Replacing recipe-based data migrations with code-based migrations for better traceability.</li><li>Introducing automated UI tests to protect core user journeys.</li><li>Delivering new features like ticketing, GDPR integrations, multi-brand rollout, and QR code-based entry management.</li><li>Adding observability via Azure Application Insights to support stable operations.</li></ul><p>All of this was done incrementally, without breaking the live experience.</p><p>As <a href="https://www.linkedin.com/in/stevetayloruk" target="_self">Steve Taylor</a>, CTO and Founder of Avastec, put it:</p><p><em>"They (...) delivered improvements without disrupting a live, high-traffic platform… balancing rapid feature delivery with long-term maintainability and performance."</em></p><p>This project is a good example of what Orchard Core enables when combined with disciplined engineering practices: fast change, low risk, and systems that keep improving instead of accumulating debt.</p><p>Read the <a href="https://lombiq.com/blog/event-management-backend-for-one-of-the-largest-retailers" target="_self">full case study here</a>!</p><p><img alt="Avastec case study" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260417/avastec-case-study.png"></p><p>Do you want to launch an event management platform on Orchard Core? We have actually built several more too, <a href="https://lombiq.com/contact-us" target="_self">get in touch with us</a>!</p><h3>Orchard Dojo Newsletter</h3><p>Lombiq's Orchard Dojo Newsletter has 421 subscribers! We have started this newsletter to keep the Orchard community informed about the latest news on the platform. By subscribing to this newsletter, you will receive an email whenever a new post is published to Orchard Dojo, including <em>'This Week in Orchard'</em>, of course.</p><p>Do you know of other Orchard enthusiasts who would like to read our weekly articles? Tell them to <a href="https://orcharddojo.us12.list-manage.com/subscribe?u=32f819a768237590e479c9d0a&amp;id=039db8f13f">subscribe here</a>!</p><h5>If you are interested in more news about Orchard and the details of the topics above, don't forget to check out the recording of <a href="https://www.youtube.com/watch?v=cL4wwcB78AM" target="_self">this Orchard meeting</a>!</h5>]]></description>
      <pubDate>Fri, 17 Apr 2026 12:03:20 GMT</pubDate>
      <guid isPermaLink="true">https://orcharddojo.net/blog/speaker-application-for-orchard-harvest-2026-and-orchard-harvest-2025-recordings-this-week-in-orchard-17-04-2026</guid>
    </item>
    <item>
      <title>AI Knowledge Base Indexing, Arguments Source Generation - This week in Orchard (10/04/2026)</title>
      <link>https://orcharddojo.net/blog/ai-knowledge-base-indexing-arguments-source-generation-this-week-in-orchard-10-04-2026</link>
      <description><![CDATA[<h2>Orchard Core updates</h2><h3>New OrchardCore.ContentFields.Core module</h3><p>Every time you want to use any content field, for example, creating your own migrations, you have to reference the <em>OrchardCore.</em><em>ContentFields</em> project. But it's unnecessary because in this case, you don't really need anything more than the class derived from <em>ContentField</em> and the corresponding settings.</p><p>Thanks to <a href="https://github.com/hishamco" target="_self">Hisham Bin Ateya</a>, all the content fields were moved to a new <em>OrchardCore.ContentFields.Core</em> project. From now on, if you just want to use the fields, you don't need to include the entire <em>OrchardCore.ContentFields</em> module, just the core one.</p><p><img alt="New OrchardCore.ContentFields.Core module" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260410/new-orchardcore-contentfields-core-module.png"></p><h3>Arguments Source Generation</h3><p>This is to improve the performance. The idea is that we have a <em>From</em> method here in the <a href="https://github.com/OrchardCMS/OrchardCore/blob/main/src/OrchardCore/OrchardCore.DisplayManagement/Arguments.cs" target="_self">Arguments class</a>. When we create shapes, we can pass custom properties. These properties have to be in an instance of type <em>INamedEnumerable</em>. It lets you list arguments and also get them by name and position. And by using the <em>Arguments.From</em>, you can pass any kind of objects, including anonymous objects, and it will convert these objects to an <em>INamedEnumerable</em>. And it will do that by reflection.</p><p>The idea from <a href="https://github.com/gvkries" target="_self">Georg von Kries</a> is to use source generators. The first case is when we do <em>Arguments.From</em> and then we pass a custom class. What it will do is enhance this custom class, which has to be partial. It will return a dedicated <em>INamedEnumerable</em> instance that won't use reflection.</p><p><img alt="Source Generators Documentation" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260410/source-generators-docs.png"></p><p>You can also see an <em>ArgumentsFromInterceptor</em>, which is a next-level source generator. It's when you call something like the <em>From</em> method, but it won't actually call it. It will replace the invocation of <em>From</em> with something else, such as directly instantiating an object that implements <em>INamedEnumerable</em>. And it will use the <em>From</em> method as a marker.</p><p><img alt="ArgumentsFromInterceptor" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260410/argumentsfrominterceptor.png"></p><p> Check out Orchard Core's <a href="https://docs.orchardcore.net/en/latest/topics/source-generators/" target="_blank">documentation for</a> real-world examples, the migration guide, architecture details, and best practices!</p><h3>Demos</h3><h4>AI Knowledge Base Indexing</h4><p>Before redesigning the UI in the <a href="https://orchardcore.crestapps.com/docs/ai/" target="_self">AI Suite</a> and integrating everything into the AI mechanism, we used multiple providers and relied heavily on the <a href="https://learn.microsoft.com/en-us/dotnet/ai/microsoft-extensions-ai" target="_self">Microsoft.Extensions.AI libraries</a>. It was a provider-driven communication, and there was no such thing as trying to understand what this user wants, or trying to give that user as much power as we can, or trying to rewrite their prompt. The whole design now looks like a standalone orchestrator. This means the prompt goes to the orchestrator, which is determined by your settings. It is not responsible for a lot more than just sending the prompt. Now we have a true orchestrator.</p><p>So, the orchestrator was redesigned to handle prompt routing, provider selection, and data retrieval, enabling the use of any index as a data source for AI interactions, and supporting document upload and retrieval-augmented generation (RAG).</p><p>How does that all work? First, don't forget to <a href="https://github.com/CrestApps/CrestApps.OrchardCore/" target="_blank">clone the CrestApps Orchard Core Modules repository</a> and run the solution. Once you are done, enter the admin area and go to <em>Search -&gt; Indexes</em>, where you will see two new sources when you click the <em>Add index</em> button. Let's focus on the <em>AI Knowledge Base Index</em>!</p><p><img alt="AI Knowledge Base Index" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260410/new-ai-knowledge-base-index.png"></p><p>That index automatically lets you embed any data from any index. It can become available for the orchestrator. So, it automatically chunks, embeds, and indexes source documents into a master AI Knowledge Base index for efficient vector search.</p><p>We also created another index for content, which we called <em>articles</em>. It stores the data for Article content items.</p><p><img alt="Articles index" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260410/articles-index.png"></p><p>We want to expose this data to AI. To do that, we navigated to <em>Artificial Intelligence -&gt; Data Sources</em> and clicked the <em>Add data source</em> button. This UI has changed a lot. Now you can select whichever index that you want to pull the data from and the knowledge base index. And then you can define whichever fields you want.</p><p><img alt="Creating a new Data Source" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260410/creating-a-new-data-source.png"></p><p>Now you have a data source! It means we can go to <em>Artificial Intelligence -&gt; Chat Interactions</em> and add a new interaction. Here you can see the <em>Data source</em> drop-down, which is similar to what we had in the past. And now, if you ask questions, it will look up the data in the selected index and pull it from there, too.</p><p><img alt="Chat Interactions" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260410/chat-interactions.png"></p><p>If you want to see this feature in action, don't forget to <a href="https://www.youtube.com/watch?v=wgabQmwbuFw" target="_self">head to YouTube for a demo</a> by <a href="https://github.com/MikeAlhayek" target="_self">Mike Alhayek</a>!</p><p class="embed-container"><iframe width="840" height="473" src="https://www.youtube-nocookie.com/embed/wgabQmwbuFw" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" spellcheck="false"></iframe></p><h2>News from the community</h2><h3>Helping out the builders of Ontario - RESCON case study by Lombiq</h3><p>When your homepage shows outdated content, it's not just a bug; it affects credibility.</p><p><a href="https://rescon.com/" target="_self">Residential Construction Council of Ontario (RESCON)</a> runs a headless Orchard Core backend with a separate Vue frontend. Over time, their homepage widgets started surfacing older news and posts again, even though everything looked fine right after publishing.</p><p>We investigated the architecture, traced the issue back to a search indexing inconsistency, and made a deliberate choice: Instead of endlessly hardening the setup, we simplified the system. In the case study, we walk through:</p><ul><li>The original architectural setup.</li><li>The real root cause.</li><li>Why simplify beat hardening?</li><li>What we improved beyond the immediate fix.</li></ul><p>If you're running Orchard Core in a headless or multi-layer setup, this will likely feel familiar. <a href="https://lombiq.com/blog/helping-out-the-builders-of-ontario-rescon-case-study" target="_self">Read the full case study here</a>!</p><p><img alt="RESCON case study Lombiq" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260410/rescon-case-study-lombiq.png"></p><p>If your Orchard Core application behaves unpredictably, whether it's publishing inconsistencies, performance issues, or architectural drift over time, we can help diagnose and stabilize it. <a href="https://lombiq.com/contact-us" target="_self">Get in touch</a> and let's take a look!</p><h3>Orchard Dojo Newsletter</h3><p>Lombiq's Orchard Dojo Newsletter has 421 subscribers! We have started this newsletter to keep the Orchard community informed about the latest news on the platform. By subscribing to this newsletter, you will receive an email whenever a new post is published to Orchard Dojo, including <em>'This Week in Orchard'</em>, of course.</p><p>Do you know of other Orchard enthusiasts who would like to read our weekly articles? Tell them to <a href="https://orcharddojo.us12.list-manage.com/subscribe?u=32f819a768237590e479c9d0a&amp;id=039db8f13f">subscribe here</a>!</p><h5>If you are interested in more news about Orchard and the details of the topics above, don't forget to check out the recording of <a href="https://www.youtube.com/watch?v=cL4wwcB78AM" target="_self">this Orchard meeting</a>!</h5>]]></description>
      <pubDate>Fri, 10 Apr 2026 11:06:18 GMT</pubDate>
      <guid isPermaLink="true">https://orcharddojo.net/blog/ai-knowledge-base-indexing-arguments-source-generation-this-week-in-orchard-10-04-2026</guid>
    </item>
    <item>
      <title>Admin Menus Localization support, MCP Prompts and MCP Resources support - This week in Orchard (03/04/2026)</title>
      <link>https://orcharddojo.net/blog/admin-menus-localization-support-mcp-prompts-and-mcp-resources-support-this-week-in-orchard-03-04-2026</link>
      <description><![CDATA[<h2>Orchard Core updates</h2><h3>Remove implicit CancelAsync from ValidateAsync</h3><p>This change means the code won't cancel the current session if an issue occurs during validation in the <em>DefaultContentManager.ValidateAsync()</em> method. It's up to the caller of the validation, because this can discard unrelated pending changes from other components sharing the session.</p><p>So, session cancellation is now the caller's responsibility, matching the expected pattern in which the consumer decides how to handle a validation failure. <em>ValidateAsync()</em> only performs validation and returns the result. It no longer cancels the session on failure. The change has been mentioned <a href="https://docs.orchardcore.net/en/latest/releases/3.0.0/#content-manager-validateasync-behavior" target="_self">in the release notes of the upcoming v3 of Orchard Core</a>. There is another page in the documentation that describes how to create a new content type, adding content parts to a type, consuming content parts and fields from C#, etc. That page also <a href="https://docs.orchardcore.net/en/latest/reference/modules/ContentTypes/#consuming-content-parts-and-fields-from-csharp" target="_self">contains an example</a> of consuming your content item as your content part in a controller. And in that code, you can see that inside the <em>UpdateProductPriceAsync</em> method, we first validate the content item. If validation fails, we cancel the session to discard any pending changes.</p><p><img alt="Remove implicit CancelAsync from ValidateAsync" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260403/remove-implicit-cancelasync-from-validateasync.png"></p><h3>Fluent Placement Location Builder</h3><p>A new <em>PlacementLocationBuilder</em> fluent API has been added as a type-safe alternative to manually constructing placement location strings in display drivers. The builder uses a single class where all methods return the same instance for easy chaining, following the placement nesting hierarchy (Zone -&gt; Tab -&gt; Card -&gt; Column). Each method in the chain returns the same builder instance, so all methods are available at any point after <em>.Zone()</em>. Note that levels can be skipped, for example <em>.Zone().Card()</em> without a <em>.Tab()</em> is valid.</p><p>To help you better understand this change, <a href="https://github.com/MikeAlhayek" target="_blank">Mike Alhayek</a> also updated the documentation with the available methods and added <a href="https://docs.orchardcore.net/en/latest/reference/modules/Placement/#examples_1" target="_self"> some nice examples</a>!</p><p><img alt="Fluent Location API Examples" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260403/fluent-location-api-examples.png"></p><h3>Demos</h3><h4>Admin Menus Localization support</h4><p>The <a href="https://docs.orchardcore.net/en/latest/reference/modules/AdminMenu/" target="_self">Admin Menu module</a> allows users to create custom admin menus in the Admin UI. If you set up your site using the <em>Blog</em> recipe, you will notice that it provides an admin menu by default, which you can see under <em>Tools -&gt; Admin Menus</em>.</p><p><a href="https://github.com/hishamco" target="_self">Hisham Bin Ateya</a> shows the new feature here, which is about having a way to localize admin menus as well. To test this quickly, make sure your site supports at least two cultures under <em>Settings -&gt; Localization -&gt; Cultures</em>. It's also recommended to enable the <em>Admin Culture Picker</em> feature under <em>Tools -&gt; Features</em>, which provides a culture picker shape for the admin area.</p><p>Now, thanks to the <a href="https://orcharddojo.net/blog/dynamic-translations-refactor-icontentdefinitionservice-for-improved-modularity-and-design-this-week-in-orchard-13-02-2026" target="_self">Dynamic Translations feature</a> and this addition, we can easily translate admin menus by going to <em>Settings -&gt; Localization -&gt; Dynamic Translations</em>. Here, you can select the <em>Admin Menus</em> under the <em>Category</em> drop-down and add translations to the available admin menus on your site, as well as to their admin menu nodes. Let's add the Hungarian translations to these!</p><p><img alt="Admin Menus dynamic translations" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260403/admin-menus-dynamic-translations.png"></p><p>Now let's head to <em>Tools -&gt; Admin Menus</em> and use the admin culture picker to switch to Hungarian. And as you can see, all of the nodes will display in the selected culture for which we have added translations.</p><p><img alt="Localized Admin Menus" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260403/localized-admin-menus.png"></p><p>If you want to see this feature in action, <a href="https://www.youtube.com/watch?v=pYGCslhYhp4" target="_self">head to YouTube for a recording</a>!</p><p class="embed-container"><iframe width="840" height="473" src="https://www.youtube-nocookie.com/embed/pYGCslhYhp4" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" spellcheck="false"></iframe></p><h4>MCP Prompts and MCP Resources support</h4><p>Last year, <a href="https://orcharddojo.net/blog/model-context-protocol-mcp-client-feature-improve-title-part-settings-this-week-in-orchard-25-04-2025" target="_blank">we wrote about</a> the MCP Client features that you can use to connect your application to remote MCP servers using standard HTTP requests and to connect your application to MCP servers running locally, typically in containers.</p><p>Now let's talk about MCP Servers! The <em>MCP Server Feature</em> allows your Orchard Core application to expose its AI tools and capabilities to external MCP clients. This feature supports the SSE transport type, enabling real-time communication.</p><p>First of all, you need to clone the <a href="https://github.com/CrestApps/CrestApps.OrchardCore" target="_self">CrestApps - Orchard Core repository</a>, which contains the Artificial Intelligence Suite, which is a comprehensive and extensible AI ecosystem built on Orchard Core, designed to unify and streamline AI integration and management.</p><p>Now we can go to <em>Tools -&gt; Features</em> to enable the <em>Model Context Protocol (MCP) Server</em> feature. This time, we will focus on MCP Prompts and Resources, which we will find in the admin UI under <em>Artificial Intelligence -&gt; Model Context Protocol -&gt; Prompts/Resources</em>. Under the <em>Prompts</em> one, you can use the UI to add MCP Server prompts. Here you can see that we added an MCP Prompt named <em>analytics.user.activity</em> that returns a detailed activity report for a specific user within a given date range. And you can see that we defined some arguments as well, such as the user's unique identifier and the maximum number of records to return.</p><p><img alt="User Activity Report MCP Promtp" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260403/user-activity-report-mcp-prompt.png"></p><p>You can add MCP Server resources by hitting the <em>Resources</em> option on the menu. If you click the <em>Add Resource</em> button, you'll see a modal where you can choose from the available resource types.</p><p><img alt="Available Resource Types" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260403/available-resource-types.png"></p><p>For this demo, we selected the <em>Recipe Step Schema</em>, which provides a JSON schema for a specific recipe step.</p><p><img alt="Recipe Step Schema Resource Type" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260403/recipe-step-schema-resource-type.png"></p><p>The repository contains an <a href="https://aspire.dev/get-started/what-is-aspire/" target="_self">Aspire app</a> called <em>CrestApps.Aspire.AppHost</em>. If you run this application, it provides a sample app called <em>McpClientSample</em> that helps you to see what's available on your server. This sample app connects to the MCP server hosted by <em>CrestApps.OrchardCore.Cms.Web</em> and demonstrates listing tools, prompts, and resources.</p><p>If you hit <em>Go to Tools</em> in the navigation tabs, that will list all the MCP tools exposed by the MCP server and invoke them with custom arguments.</p><p>If you select <em>Go to Prompts</em>, the sample app will list all MCP prompts and retrieve each prompt's details. Here, you can see that the top two are the ones that we defined via the UI. The rest of those are coming from the Agent Skills project. If you haven't heard about it, <a href="https://orcharddojo.net/blog/crestapps-agent-skills-orchard-harvest-2026-survey-results-this-week-in-orchard-13-03-2026" target="_self">we wrote about this project a few weeks ago</a>.</p><p><img alt="MCP Prompts" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260403/mcp-prompts.png"></p><p>And if you click on <em>Resources</em>, the app will list concrete MCP resources with fixed URIs and read their content directly. All of these, again, come from the Agent Skills project.</p><p>Lastly, there is a <em>Resource Templates</em> option where you can browse parameterized resource templates, fill in variables, and read content. Here you can see the one that we defined earlier in the UI with a parameter. Here is our <em>RecipeStep</em> resource. If we provide a value for <em>stepName</em> (such as <em>feature</em>), you will actually get information about that feature. So, it just gives you information about the recipe step.</p><p><img alt="Calling our Resource Template" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260403/calling-our-resource-template.png"></p><p>And that's not all of it! As always, if you want to see more, <a href="https://www.youtube.com/watch?v=A3lD4N-S3zc" target="_self">head to YouTube for a recording</a> by <a href="https://github.com/MikeAlhayek" target="_self">Mike Alhayek</a>!</p><p class="embed-container"><iframe width="840" height="473" src="https://www.youtube-nocookie.com/embed/A3lD4N-S3zc" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" spellcheck="false"></iframe></p><h2>News from the community</h2><h3>Orchard Harvest 2026 Location</h3><p>After last year, the Orchard Harvest Conference will be held again in 2026. The first step was to assess the potential interest and what would be needed. We created a survey, and now we have the results! Thank you for your feedback so far regarding Orchard Harvest! We have received many responses, which have helped us get a better idea of the right place and time. It seems that most respondents are open to an in-person conference this year, with the USA receiving the most votes for location, followed by Europe and Canada, though the differences in votes were small. But a significant portion of respondents expressed reluctance to attend in the US; half of the 32 respondents did not want to go to the US, and some provided comments to that effect.</p><p>After Las Vegas in 2024 and Prague in 2025, the 2026 conference will take place in Vancouver, Canada. Why Vancouver? A few simple reasons:</p><ul><li>Last year was Europe, so repeating it would have locked out many attendees on the other side of the ocean.</li><li>As we mentioned, compared to a US location, we heard more explicit pushback this time, while Canada remained a broadly acceptable option.</li><li>Vancouver offers the best possible "in-between" choice: reachable from both North America and Europe and still a fresh destination for most of the community.</li></ul><p>So if you are building on Orchard Core, contributing to it, or evaluating it for your next platform, this is your chance to connect directly with maintainers, contributors, and fellow teams using Orchard in production.</p><p>We'll share dates and venue soon. For now, you can already start planning for 2026 September in Vancouver.</p><p>If you're considering attending, what would make Vancouver a "must go" for you: session topics, workshops, or community time? Please <a href="https://github.com/orgs/OrchardCMS/discussions/18889" target="_self">share your thoughts with us under this discussion</a>.</p><p><img alt="Orchard Harvest 2026 Vancouver" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260327/orchard-harvest-vancouver-2026.png"></p><p>And as always, as we move forward, we will keep community members informed of the details, and you will also find every detail in this newsletter.</p><h3>Orchard Dojo Newsletter</h3><p>Lombiq's Orchard Dojo Newsletter has 422 subscribers! We have started this newsletter to keep the Orchard community informed about the latest news on the platform. By subscribing to this newsletter, you will receive an email whenever a new post is published to Orchard Dojo, including <em>'This Week in Orchard'</em>, of course.</p><p>Do you know of other Orchard enthusiasts who would like to read our weekly articles? Tell them to <a href="https://orcharddojo.us12.list-manage.com/subscribe?u=32f819a768237590e479c9d0a&amp;id=039db8f13f">subscribe here</a>!</p><h5>If you are interested in more news about Orchard and the details of the topics above, don't forget to check out the recording of <a href="https://www.youtube.com/watch?v=cL4wwcB78AM" target="_self">this Orchard meeting</a>!</h5>]]></description>
      <pubDate>Fri, 03 Apr 2026 09:07:55 GMT</pubDate>
      <guid isPermaLink="true">https://orcharddojo.net/blog/admin-menus-localization-support-mcp-prompts-and-mcp-resources-support-this-week-in-orchard-03-04-2026</guid>
    </item>
    <item>
      <title>Orchard Harvest 2026 Location, Bulk option for attaching Localization Part to content types - This week in Orchard (27/03/2026)</title>
      <link>https://orcharddojo.net/blog/orchard-harvest-2026-location-bulk-option-for-attaching-localization-part-to-content-types-this-week-in-orchard-27-03-2026</link>
      <description><![CDATA[<h2>Orchard Core updates</h2><h3>Data Protection guide</h3><p>Thanks to <a href="https://github.com/lamualfa" target="_self">Laode Muhammad Al Fatih</a>, there is now a <a href="https://docs.orchardcore.net/en/latest/guides/data-protection/" target="_blank">new guide</a> that provides information on implementing data protection in Orchard Core applications, particularly in multi-tenant and load-balanced environments. The guide also explains when you should use Distributed Data Protection and what providers do that.</p><p>For detailed information about implementing data protection with Azure Blob Storage, including configuration options and Liquid templating, <a href="https://docs.orchardcore.net/en/latest/reference/modules/DataProtection.Azure/" target="_self">see the following page</a>.</p><p>For detailed information on implementing data protection with Redis, including configuration options and persistence considerations, <a href="https://docs.orchardcore.net/en/latest/reference/modules/Redis/#data-protection" target="_blank">see this page</a>.</p><p><img alt="Data Protection guide" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260327/data-protection-guide.png"></p><h3>Configurable EasyMDE editor settings to Markdown WYSIWYG editors</h3><p>Currently, the EasyMDE editor used by <em>the Markdown Field</em> and <em>Body Part</em> is not customisable. The toolbar buttons, spell checker, and other editor options are hardcoded, meaning site administrators have no way to tailor the editing experience to their needs, for example, removing unused toolbar buttons, enabling the spell checker, or adjusting other EasyMDE configuration options. This contrasts with the <em>HTML Body Part</em>'s Trumbowyg editor, which already supports configurable options via a settings panel.</p><p><a href="https://github.com/buzznick" target="_self">Nick Jackson</a> added the same level of configurability to both Markdown WYSIWYG editors. That means there is a new settings panel with a CodeMirror textarea for customizing EasyMDE editor options on both the <em>Markdown Field</em> and the <em>MarkdownBody Part</em> when using the WYSIWYG editor. The custom options are validated as valid JavaScript objects using <a href="https://github.com/adams85/acornima" target="_self">Acornima</a>. Toolbar button names are automatically mapped to their full definitions from mdeToolbar, preserving media/shortcode integration, and empty/null options fall back to the default toolbar configuration.</p><p>To try this out, let's set up a site using the <em>Blog</em> recipe. The <em>Blog</em> recipe provides us a <em>Blog Post</em> content type which has a <em>MarkdownBody Part</em> attached. Head to <em>Design -&gt; Content Definition -&gt; Content Types</em> and edit the content definition of the <em>Blog Post</em> content type. If we hit <em>Edit</em> near the attached <em>MarkdownBody Part</em>, we will see a textarea, where we can provide the editor options for the WYSIWYG editor. Let's say we wanted a very simple editor with just some basic options: undo/redo, text formatting, and the ability to insert Shortcodes and Images from the Media Library.</p><p><img alt="MarkdownBody Part WYSIWYG editor options" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260327/markdownbody-part-wysiwyg-editor-options.png"></p><p>If we hit <em>Save</em>, we can go to the <em>Blog</em> option on the menu and edit our predefined blog post. And as you can see, the MarkdownBody text area will only show the buttons on the toolbar that we have previously defined.</p><p><img alt="MarkdownBody toolbar" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260327/markdownbody-toolbar.png"></p><h3>Demos</h3><h4>Bulk option for attaching the Localization Part to content types</h4><p>After enabling the <em>Content Localization</em> feature, users must manually add the <em>Localization Part</em> to each content type they want to localize. This is not immediately obvious and can lead to confusion. Once the user enables the <em>Content Localization</em> feature, they would expect that localization to work on content types. But they discover that they need to manually edit each content type and attach the <em>Localization Part</em>. Users should be guided on what to do next after enabling the <em>Content Localizatio</em>n feature, or have an easier way to enable localization for multiple content types.</p><p>In this demo, <a href="https://github.com/hishamco" target="_self">Hisham Bin Ateya</a> provides a solution to that: a bulk attachment option. If you <a href="https://github.com/OrchardCMS/OrchardCore/pull/18899" target="_self">check out this PR</a>, you will see that he provided a settings page that lists all content types with checkboxes and allows users to add and remove the <em>Localization Part</em> to multiple content types at once. Now let's see this in action quickly!</p><p>First, make sure you have enabled the <em>Content Localization</em> module under <em>Tools -&gt; Features</em>. After, you will see a new option in the menu under <em>Settings -&gt; Localization</em>, called <em>Content Localization</em>. On this page, users can select multiple content types at once. We can say that we want to attach the <em>Localization Part</em> to the <em>Article</em>, <em>Blog Post</em>, and <em>Page</em> content types. Once you hit <em>Save</em> at the bottom of the page, the <em>Localization Part</em> will be attached to the content types you have selected. If you deselect a content type from this list, the <em>Localization Part</em> will be removed from that content type.</p><p><img alt="Content Localization Settings" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260327/content-localization-settings.png"></p><p>And as always, if you want to see this feature in action, <a href="https://www.youtube.com/watch?v=U14fkEKw0e4" target="_self">head to YouTube for a recording</a>!</p><p class="embed-container"><iframe width="840" height="473" src="https://www.youtube-nocookie.com/embed/U14fkEKw0e4" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" spellcheck="false"></iframe></p><h2>News from the community</h2><h3>Orchard Harvest 2026 Location</h3><p>After last year, the Orchard Harvest Conference will be held again in 2026. The first step was to assess the potential interest and what would be needed. We created a survey, and now we have the results! Thank you for your feedback so far regarding Orchard Harvest! We have received many responses, which have helped us get a better idea of the right place and time. It seems that most respondents are open to an in-person conference this year, with the USA receiving the most votes for location, followed by Europe and Canada, though the differences in votes were small. But a significant portion of respondents expressed reluctance to attend in the US; half of the 32 respondents did not want to go to the US, and some provided comments to that effect.</p><p>After Las Vegas in 2024 and Prague in 2025, the 2026 conference will take place in Vancouver, Canada. Why Vancouver? A few simple reasons:</p><ul><li>Last year was Europe, so repeating it would have locked out many attendees on the other side of the ocean.</li><li>As we mentioned, compared to a US location, we heard more explicit pushback this time, while Canada remained a broadly acceptable option.</li><li>Vancouver offers the best possible "in-between" choice: reachable from both North America and Europe and still a fresh destination for most of the community.</li></ul><p>So if you are building on Orchard Core, contributing to it, or evaluating it for your next platform, this is your chance to connect directly with maintainers, contributors, and fellow teams using Orchard in production.</p><p>We'll share dates and venue soon. For now, you can already start planning for 2026 September in Vancouver.</p><p>If you're considering attending, what would make Vancouver a "must go" for you: session topics, workshops, or community time? Please <a href="https://github.com/orgs/OrchardCMS/discussions/18889" target="_self">share your thoughts with us under this discussion</a>.</p><p><img alt="Orchard Harvest 2026 Vancouver" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260327/orchard-harvest-vancouver-2026.png"></p><p>And as always, as we move forward, we will keep community members informed of the details, and you will also find every detail in this newsletter.</p><h3>Orchard Dojo Newsletter</h3><p>Lombiq's Orchard Dojo Newsletter has 423 subscribers! We have started this newsletter to keep the Orchard community informed about the latest news on the platform. By subscribing to this newsletter, you will receive an email whenever a new post is published to Orchard Dojo, including <em>'This Week in Orchard'</em>, of course.</p><p>Do you know of other Orchard enthusiasts who would like to read our weekly articles? Tell them to <a href="https://orcharddojo.us12.list-manage.com/subscribe?u=32f819a768237590e479c9d0a&amp;id=039db8f13f">subscribe here</a>!</p><h5>If you are interested in more news about Orchard and the details of the topics above, don't forget to check out the recording of <a href="https://www.youtube.com/watch?v=mugneTGE3AA" target="_self">this Orchard meeting</a>!</h5>]]></description>
      <pubDate>Fri, 27 Mar 2026 09:22:21 GMT</pubDate>
      <guid isPermaLink="true">https://orcharddojo.net/blog/orchard-harvest-2026-location-bulk-option-for-attaching-localization-part-to-content-types-this-week-in-orchard-27-03-2026</guid>
    </item>
    <item>
      <title>AI-driven theme editor on the admin UI, Available Storage indicator for the Media Library - This week in Orchard (20/03/2026)</title>
      <link>https://orcharddojo.net/blog/ai-driven-theme-editor-on-the-admin-ui-available-storage-indicator-for-the-media-library-this-week-in-orchard-20-03-2026</link>
      <description><![CDATA[<h2>Orchard Core updates</h2><h3>Available Storage Indicator for the Media Library</h3><p>The idea behind this new addition is to somehow notify the user about the free space available on the local file system when storing media items. Your site can contain multiple items in the Media Library, and it's best to track available storage space directly in the admin UI.</p><p>Thanks to <a href="https://github.com/sarahelsaig" target="_self">Sára El-Saig</a> from <a href="https://lombiq.com" target="_self">Lombiq</a>, the Media Library screen now includes an <em>Available Storage</em> indicator. If the media items are stored on the local file system, it automatically shows the free disk space on the drive used for storage. The available storage is checked when uploading or copying files in the media store, providing a more informative warning when space is exhausted. If you enter the admin area of Orchard Core and select the <em>Library</em> submenu under <em>Media</em>, you will see the available storage indicator in the top-right corner. As you can see, we currently have 362.28 GB of free space on the local file system.</p><p><img alt="Available Storage indicator" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260320/available-storage-indicator.png"></p><p>But it's just applies when you are storing your media items on the local file system. If you use a different underlying file store (e.g., Azure Blob Storage, Amazon AWS) or want to enforce additional storage constraints (e.g., usage quotas), that's also possible. To do that, you need to create a new event handler that implements <em>IMediaEventHandler.MediaPermittedStorageAsync(MediaPermittedStorageContext)</em> method. Note that if you want to use multiple event handlers, you should update the <em>PermittedStorage</em> value using the <em>MediaPermittedStorageContext.Constrain(long)</em> method rather than manually editing the <em>PermittedStorage</em> value.</p><p><img alt="IMediaEventHandler.MediaPermittedStorageAsync method" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260320/imediaeventhandler-mediapermittedstorageasync-method.png"></p><h3>Anchor Tag Helper documentation</h3><p>We have had an <em>Anchor Tag Helper</em> for a while in Orchard Core, but the documentation was a bit outdated, as it only documented the <em>&lt;img&gt;</em> Tag Helpers, not the one for <em>&lt;a&gt;</em> tags. <a href="https://github.com/Manuel-dev-ing" target="_blank">Manuel Tamayo Montero</a> added some lines to <a href="https://docs.orchardcore.net/en/latest/reference/modules/Media/#razor-anchor-tag-helper" target="_blank">the documentation</a> to help developers use it.</p><p><img alt="Razor Anchor Tag Helper documentation" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260320/razor-anchor-tag-helper-documentation.png"></p><p>Please don't forget that when using tag helpers in Razor, you must take a direct reference to the <em>OrchardCore.Media</em> NuGet package in each theme or module that uses the Tag Helpers.</p><h3>Demos</h3><h4>AI-driven theme editor on the admin UI</h4><p><a href="https://github.com/barthamark" target="_self">Márk Bartha</a> from <a href="https://lombiq.com/" target="_self">Lombiq</a> started building a proof of concept for an admin UI-based theme editor with AI integration. If you want custom themes, you have the option to host your theme in the Media Library using the <a href="https://github.com/Lombiq/Hosting-Media-Theme" target="_self">Media Theme feature for Orchard Core</a>. It would be great if we could edit this theme right from the admin UI. Normally, you can edit templates using the <em>Templates</em> feature, but since it's in the Media Library, you don't have the option for that. This feature is to solve this problem.</p><p>Here you can see a sample project from a conference site with some dummy data. This editor UI shows the Media Theme folder from the Media Library. Here you can see the templates and all the assets used. You can edit them just as you would in your IDE. Of course, you can also create new templates right from this IDE. After you provide a name for the template and click <em>Save</em>, the template will be saved, and the specified shape will become active. And it applies to any other allowed file types, not just to templates.</p><p><img alt="Theme editor" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260320/theme-editor.png"></p><p>He also started to integrate AI into this editor. If you click on the <em>AI</em> button between <em>Delete </em>and <em>Shortcuts</em>, a new <em>Theme Editor AI</em> section will open where you can enter prompts, like "<em>Please implement the detail and summary shapes of the Talk content type</em>". Here, you can see the capabilities defined for the created profile, <em>ThemeEditor.</em><em>OpenAI</em>, where you can see what features the AI can access.</p><p><img alt="Theme editor tools" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260320/theme-editor-tools.png"></p><p>So, it can act as an agent, create or edit files, and you can review the changes. You don't need to accept these changes right away; they will be persisted in the DB. And once you review them, you can hit the <em>Apply</em> button. It means that these files will also be available in this IDE, and you can save them; the changes will be applied automatically.</p><p><img alt="Reviewing AI made changes" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260320/reviewing-ai-made-changes.png"></p><p>As with Copilot, you can include specific files in the context and add content types. Once you execute a new follow-up prompt, it will include all these and give you access to them as well.</p><p><img alt="Add content types to context" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260320/add-content-types-to-context.png"></p><p>And that's still not all of it! If you want to learn more about this feature, <a href="https://www.youtube.com/watch?v=l_EzVKWV5nA" target="_self">head to YouTube for a recording</a>!</p><div class="embed-container"><iframe width="840" height="473" src="https://www.youtube-nocookie.com/embed/l_EzVKWV5nA" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" spellcheck="false"></iframe></div><h2>News from the community</h2><h3>Orchard Harvest 2026 survey results</h3><p>After last year, the Orchard Harvest Conference will be held again in 2026. The first step was to assess the potential interest and what would be needed. We created a survey, and now we have the results! Thank you for your feedback so far regarding Orchard Harvest! We have received many responses, which have helped us get a better idea of the right place and time. Please keep in mind that these are just preliminary results and haven't led to any specific outcomes yet.</p><p>It seems that most respondents are open to an in-person conference this year, with the USA receiving the most votes for location, followed by Europe and Canada, though the differences in votes were small. But a significant portion of respondents expressed reluctance to attend in the US; half of the 32 respondents did not want to go to the US, and some provided comments to that effect.</p><p>During <a href="https://www.youtube.com/watch?v=t1Whd6Lrjm4" target="_self">our weekly meeting</a>, some attendees suggested that future surveys should list specific cities rather than countries to avoid ambiguity, as the size of the US and Canada makes country-level choices insufficient for planning. So, we discussed potentially creating a new questionnaire listing a limited set of candidate cities in Canada, North America, and Europe, allowing participants to rank their preferences to achieve a more democratic and actionable outcome. Whatever the next step will be, as we move forward, we will keep community members informed of the details, and you will also find every detail in this newsletter.</p><p><img alt="Orchard Harvest 2026 survey results" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260313/orchard-harvest-survey-2026-results.png"></p><h3>Orchard Dojo Newsletter</h3><p>Lombiq's Orchard Dojo Newsletter has 424 subscribers! We have started this newsletter to keep the Orchard community informed about the latest news on the platform. By subscribing to this newsletter, you will receive an email whenever a new post is published to Orchard Dojo, including <em>'This Week in Orchard'</em>, of course.</p><p>Do you know of other Orchard enthusiasts who would like to read our weekly articles? Tell them to <a href="https://orcharddojo.us12.list-manage.com/subscribe?u=32f819a768237590e479c9d0a&amp;id=039db8f13f">subscribe here</a>!</p><h5>If you are interested in more news about Orchard and the details of the topics above, don't forget to check out the recording of <a href="https://www.youtube.com/watch?v=AtHx-X-SRrI" target="_self">this Orchard meeting</a>!</h5>]]></description>
      <pubDate>Thu, 26 Mar 2026 15:03:46 GMT</pubDate>
      <guid isPermaLink="true">https://orcharddojo.net/blog/ai-driven-theme-editor-on-the-admin-ui-available-storage-indicator-for-the-media-library-this-week-in-orchard-20-03-2026</guid>
    </item>
    <item>
      <title>CrestApps Agent Skills, Orchard Harvest 2026 survey results - This week in Orchard (13/03/2026)</title>
      <link>https://orcharddojo.net/blog/crestapps-agent-skills-orchard-harvest-2026-survey-results-this-week-in-orchard-13-03-2026</link>
      <description><![CDATA[<h2>Orchard Core updates</h2><h3>Obsolete synchronous CustomSettingsService.GetSettingsType method</h3><p><a href="https://github.com/gvkries" target="_self">Georg von Kries</a> updated <em>CustomSettingsDisplayDriver</em> to use the asynchronous <em>GetSettingsTypeAsync</em> method instead of the synchronous <em>GetSettingsType</em> in both the <em>EditAsync</em> and <em>UpdateAsync</em> methods. He also updated <em>CustomSettingsService.GetSettingsAsync(string settingsTypeName, Action isNew)</em> to use <em>await GetSettingsTypeAsync</em> instead of the synchronous version, and refactored the return pattern to be fully async.</p><p>And finally, he marked <em>CustomSettingsService.GetSettingsType</em> as obsolete, with a message directing users to use <em>GetSettingsTypeAsync</em> instead. This change improves performance by avoiding blocking calls and prepares the codebase for the future removal of the synchronous API.</p><p><img alt="Obsolete synchronous CustomSettingsService.GetSettingsType method" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260313/obsolete-synchronous-customsettingsservice-getsettingstype-method.png"></p><h3>Refactor ShapeResult for less allocations</h3><p>This is about having an optimized storage for display type locations. Instead of always allocating the <em>_otherLocations</em> dictionary for display type/location pairs, the code now stores up to two pairs in dedicated fields (<em>_firstDisplayType</em>, <em>_firstLocation</em>, <em>_secondDisplayType</em>, <em>_secondLocation</em>) before falling back to a dictionary for additional pairs. This reduces memory allocations for common cases with only one or two display types.</p><p>As you can see in the screen below, there is a <em>Location(string displayType, string location)</em> method. Inside that method, we checked the value of the <em>_otherLocations</em> dictionary. If <em>_otherLocations</em> has no value, let's update it and use the provided location. Otherwise, if this is the <em>_firstDisplayType</em>, then we don't need to create a dictionary. We save the display type allocation again. If there is a first display type, then maybe it's the second one. So, still no dictionary. Otherwise, let's create a new dictionary with the first, with the second, and with the custom display type. It means converting the properties for the first and the second location into the <em>_otherLocations</em> dictionary and resetting the <em>_firstDisplayType</em>, <em>_firstLocation</em>, <em>_secondDisplayType</em>, and <em>_secondLocation</em> fields.</p><p><img alt="Refactor ShapeResult for less allocations" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260313/refactor-shaperesult-for-less-allocations.png"></p><p><a href="https://github.com/gvkries" target="_self">Georg von Kries</a> also refactored fluent API methods (e.g., <em>Prefix</em>, <em>Location</em>, <em>Displaying</em>, <em>Processing</em>, <em>Name</em>, <em>Differentiator</em>, <em>OnGroup</em>, <em>Cache</em>, <em>RenderWhen</em>) to appear before the core implementation logic, improving code organization and discoverability.</p><h3>Demos</h3><h4>CrestApps Agent Skills</h4><p>In the Model Context Protocol Server (MCP), the server provides tools, such as actions. It can also serve prompts, like the things you can reuse, and also something called resources. It means the MCP can provide resources, can provide tools, and prompts. You can ask MCP to provide you with a document, for example, and that would be a resource that it could use. For more information about the MCP integration with Orchard Core, <a href="https://orcharddojo.net/blog/model-context-protocol-mcp-client-feature-improve-title-part-settings-this-week-in-orchard-25-04-2025" target="_self">check out our blog post from last year</a>.</p><p>So, how can we take skills and provide them as part of the MCP server's resources? It means that if someone wants to connect to the MCP server, they will have access to all these skills and the resources to define their modules.</p><p><a href="https://github.com/MikeAlhayek" target="_self">Mike Alhayek</a> created a new repository called <a href="https://github.com/CrestApps/CrestApps.AgentSkills" target="_self">CrestApps.AgentSkills</a> that contains shared AI agent skills and MCP tooling for .NET applications and Orchard Core-based projects. There are three parts to this project:</p><ul><li>CrestApps.AgentSkills.Mcp: Provides a reusable MCP skill engine for any .NET app without building custom parsers/providers.</li><li>CrestApps.AgentSkills.OrchardCore: Used for Orchard Core local development by copying skills to .agents/skills.</li><li>CrestApps.AgentSkills.Mcp.OrchardCore: Exposes Orchard Core skills as MCP prompts and MCP resources at runtime.</li></ul><p>Another project inside is a <a href="https://github.com/CrestApps/CrestApps.AgentSkills/tree/main/src/CrestApps.AgentSkills" target="_self">non-packagable skill repository</a> that serves as the single source of truth for all agent skills in this solution. As you can see, it contains a bunch of Orchard-related skills. This package is intended for local development. Once installed in your web project, it automatically provides a wide range of Orchard Core skills out of the box. After installation, you should see an <em>.agents</em> folder at your solution root. As long as you keep the NuGet package up to date, you'll always get the latest Orchard Core skills, and your agent will automatically discover them.</p><p><img alt="CrestApps.AgentSkills" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260313/crestapps-agentskills.png"></p><p>If you want to learn more, <a href="https://crestapps.com/orchard-core/the-ai-agent-skills" target="_self">check out this blog post</a> from Mike about this ecosystem for more details! And as always, don't forget to <a href="https://www.youtube.com/watch?v=e_QqViJTncQ" target="_self">head to YouTube for a recording</a>!</p><p class="embed-container"><iframe width="840" height="473" src="https://www.youtube-nocookie.com/embed/e_QqViJTncQ" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" spellcheck="false"></iframe></p><p>And while we are speaking about skills, if you remember, we showed our agent skills for Orchard Core that can also help you with many Orchard Core-related tasks, such as implementing appropriate shape templates with correct alternates. If you haven't heard about it yet, <a href="https://orcharddojo.net/blog/orchard-harvest-2026-survey-lombiq-orchard-core-agent-skills-this-week-in-orchard-27-02-2026" target="_self">check out this post</a>, where you can also see a demo of the <a href="https://github.com/lombiq/orchard-core-agent-skills" target="_self">Lombiq Orchard Core Agent Skills project</a>!</p><p>And that's still not all of it! Last week, we mentioned that <a href="https://github.com/sebastienros" target="_self">Sébastien Ros</a> also had the idea of adding Agent Skills to Orchard Core, primarily for developers. The goal is that when you clone Orchard, you will have access to these skills. You can <a href="https://orcharddojo.net/blog/enhanced-blocks-editor-for-content-creators-last-call-orchard-harvest-2026-survey-this-week-in-orchard-06-03-2026" target="_self">read about those new skills here</a>.</p><h2>News from the community</h2><h3>Orchard Harvest 2026 survey results</h3><p>After last year, the Orchard Harvest Conference will be held again in 2026. The first step was to assess the potential interest and what would be needed. We created a survey, and now we have the results! Thank you for your feedback so far regarding Orchard Harvest! We have received many responses, which have helped us get a better idea of the right place and time. Please keep in mind that these are just preliminary results and haven't led to any specific outcomes yet.</p><p>It seems that most respondents are open to an in-person conference this year, with the USA receiving the most votes for location, followed by Europe and Canada, though the differences in votes were small. But a significant portion of respondents expressed reluctance to attend in the US; half of the 32 respondents did not want to go to the US, and some provided comments to that effect.</p><p>During <a href="https://www.youtube.com/watch?v=t1Whd6Lrjm4" target="_self">our weekly meeting</a>, some attendees suggested that future surveys should list specific cities rather than countries to avoid ambiguity, as the size of the US and Canada makes country-level choices insufficient for planning. So, we discussed potentially creating a new questionnaire listing a limited set of candidate cities in Canada, North America, and Europe, allowing participants to rank their preferences to achieve a more democratic and actionable outcome. Whatever the next step will be, as we move forward, we will keep community members informed of the details, and you will also find every detail in this newsletter.</p><p><img alt="Orchard Harvest 2026 survey results" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260313/orchard-harvest-survey-2026-results.png"></p><h3>Orchard Dojo Newsletter</h3><p>Lombiq's Orchard Dojo Newsletter has 423 subscribers! We have started this newsletter to keep the Orchard community informed about the latest news on the platform. By subscribing to this newsletter, you will receive an email whenever a new post is published to Orchard Dojo, including <em>'This Week in Orchard'</em>, of course.</p><p>Do you know of other Orchard enthusiasts who would like to read our weekly articles? Tell them to <a href="https://orcharddojo.us12.list-manage.com/subscribe?u=32f819a768237590e479c9d0a&amp;id=039db8f13f">subscribe here</a>!</p><h5>If you are interested in more news about Orchard and the details of the topics above, don't forget to check out the recording of <a href="https://www.youtube.com/watch?v=t1Whd6Lrjm4" target="_self">this Orchard meeting</a>!</h5>]]></description>
      <pubDate>Thu, 26 Mar 2026 16:24:10 GMT</pubDate>
      <guid isPermaLink="true">https://orcharddojo.net/blog/crestapps-agent-skills-orchard-harvest-2026-survey-results-this-week-in-orchard-13-03-2026</guid>
    </item>
    <item>
      <title>Enhanced Blocks Editor for content creators, Last call: Orchard Harvest 2026 survey - This week in Orchard (06/03/2026)</title>
      <link>https://orcharddojo.net/blog/enhanced-blocks-editor-for-content-creators-last-call-orchard-harvest-2026-survey-this-week-in-orchard-06-03-2026</link>
      <description><![CDATA[<h2>Orchard Core updates</h2><h3>Orchard Core - Agent Skills</h3><p>The idea here was to have <a href="https://agentskills.io/home" target="_self">Agent Skills</a> inside Orchard Core, primarily for developers. That's the reason why it's in the <em>.agents/skills</em> folder. The goal is that when you clone Orchard, you will have access to these skills. The new skills are:</p><ul><li>orchardcore-module-creator: Creates new Orchard Core modules with proper structure, manifest, startup, and patterns. Use when the user needs to create a new module, add content parts, fields, drivers, handlers, or admin functionality.</li><li>orchardcore-tester: Tests Orchard Core CMS features through browser automation. Use when the user needs to build, run, set up, or test Orchard Core functionality, including admin features, content management, media library, and module testing.</li><li>orchardcore-theme-creator: Creates new Orchard Core themes with proper structure, manifest, layouts, and assets. Use when the user needs to create a new theme, customize layouts, or set up frontend assets.</li></ul><p>This will be automatically loaded, for example, by Copilot, when developing on Orchard Core. Thanks to <a href="https://github.com/sebastienros" target="_self">Sébastien Ros</a> for the contribution!</p><p><img alt="Orchard Core Agent Skills" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260306/orchard-core-agent-guidelines.png"></p><p>If you remember, last week we showed our agent skills for Orchard Core that can also help you with many Orchard Core-related tasks, such as implementing appropriate shape templates with correct alternates. If you haven't heard about it yet, <a href="https://orcharddojo.net/blog/orchard-harvest-2026-survey-lombiq-orchard-core-agent-skills-this-week-in-orchard-27-02-2026" target="_self">check out our post from last week</a>, where you can also see a demo of the <a href="https://github.com/lombiq/orchard-core-agent-skills" target="_self">Lombiq Orchard Core Agent Skills project</a>! Don't forget to share your experience, feedback, and contributions so we can keep refining the skills in the open and roll improvements back based on real project usage.</p><h3>Implement Result pattern</h3><p>We used to use a pattern that returns an object containing messages regarding error or success messages. For example, the <em>EmailResult</em> class was used to represent the result of sending an email, and the <em>SmsResult</em> class was used to represent the result of sending an SMS. These classes have been replaced by <em>Result</em>, which provides a more consistent and flexible way to handle operation results.</p><p>So, <a href="https://github.com/hishamco" target="_self">Hisham Bin Ateya</a> introduced a lightweight <em>Result</em> pattern to represent operation outcomes without throwing exceptions for control flow. The new <em>Result</em> and <em>Result&lt;T&gt;</em> types indicate success/failure and may carry zero or more <em>ResultError</em> entries (supporting <em>LocalizedString</em> for localized messages).</p><p><img alt="Implement Result Pattern" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260306/implement-result-pattern.png"></p><h3>Demos</h3><h4>Enhanced Blocks Editor for content creators</h4><p>If you remember, <a href="https://github.com/buzznick" target="_self">Nick Jackson</a> introduced a new block-style editor for Flow Part and Bag Part that provides a modern, visual content type picker with thumbnail previews, category filtering, and search functionality. This enhances the content-editing experience by allowing editors to browse and select content types more intuitively. If you haven't heard about it, <a href="https://orcharddojo.net/blog/block-content-type-picker-for-flow-part-and-bag-part-christmas-in-lombiq-this-week-in-orchard-19-12-2025" target="_self">check out our corresponding post</a> with it, along with a demo. This feature was just merged to the main branch of Orchard Core a few weeks ago, but improvements are already coming!</p><p>He started his demonstration by showing the ability to insert blocks at any position within the Bag Part using a plus icon, similar to the Flow Part, eliminating the need to add blocks only at the end and then rearrange them.</p><p>The demo included new options to duplicate a block within the same page and to copy a block from one page to another, streamlining content creation and reducing repetitive manual entry. You can do this by right-clicking the block header and selecting <em>Copy</em> or <em>Duplicate</em> from the contextual menu.</p><p><img alt="Copy and duplicate blocks" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260306/copy-duplicate-blocks.png"></p><p>The <em>Duplicate</em> feature duplicates the selected block directly beneath it, creating an exact clone.</p><p>If you want to copy a block from one page to another, you have to select the <em>Copy</em> option from the contextual menu. This feature provides you with two ways to insert your block. The first one is using the <em>Paste Block</em> button under the blocks. It will add the block at the end of the list. Or if we click on the plus icon and select the <em>Paste Block</em> option, it will copy that block at the selected location (CTA (Call to Action) here is the name of the block we want to copy).</p><p><img alt="Paste a block" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260306/paste-a-block.png"></p><p>Now, let's see the concept of <em>Global Blocks</em>, which are content items that can be referenced across multiple pages. Editing a <em>Global Block</em> updates all instances, and users can detach it to create an independent copy for further customization. If you want to create a <em>Global Block</em> based on your block, you need to select the <em>Convert to Global Block</em> option from the contextual menu. It will open up a modal where you can set a descriptive name for your <em>Global Block</em>.</p><p>But how to use this <em>Global Block</em>? If you remember, there was a <em>Global Block</em> button at the bottom of the Bag Part and Flow Part editor. If you click that, we get a little modal window that lists all the available <em>Global Blocks</em> in the system. Here you have a search feature to find your <em>Global Block</em> by name, and if you hit the <em>Add</em> button, the <em>Global Block</em> will be inserted into the editor.</p><p><img alt="Adding a Global Block" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260306/adding-a-global-block.png"></p><p>If you want to edit your <em>Global Block</em>, you can do it in two ways. First, you can hit the <em>Edit</em> button within the editor of your Flow Part or Bag Part, which will redirect you to the editor of the selected <em>Global Block</em>. The other way is to select the new <em>Global Blocks</em> option under the <em>Blocks</em> menu. This page shows you all of the available <em>Global Blocks</em> you have defined in Orchard Core. And of course, you can create new <em>Global Blocks</em> here by selecting the <em>New Global Block</em> button, and hitting the <em>Edit</em> button will allow you to edit the selected <em>Global Block</em>.</p><p><img alt="Managing Global Blocks" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260306/managing-global-blocks.png"></p><p>And it's still just the surface! <a href="https://www.youtube.com/watch?v=aFixA2EIEko" target="_self">Head to YouTube for a recording</a> to see more, including the technical structure behind <em>Global Blocks</em>, like handling of content item references, and the use of local storage and custom controllers for copy-paste operations!</p><p class="embed-container"><iframe width="840" height="473" src="https://www.youtube-nocookie.com/embed/aFixA2EIEko" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" spellcheck="false"></iframe></p><h2>News from the community</h2><h3>Last call: Orchard Harvest 2026 survey</h3><p>After last year, the Orchard Harvest Conference will be held again in 2026. Last time, it was held in Prague, and for this year, we're planning to bring it to North America.</p><p>We would like to understand what actually matters to the Orchard Core community:</p><ul><li>What's your travel budget reality?</li><li>Which locations and dates work best with your schedule?</li><li>What conference format gets you the most value?</li></ul><p>If you've ever attended Harvest, thought about attending, or are just active in the Orchard Core community, your answers would really help us shape the event. You can <a href="https://forms.office.com/pages/responsepage.aspx?id=Wt6elek45kStyIVVO-uCIJKA6v6WjG9DpML1ER1pm15UMUZMMjk1TllZTE1SUklBUlhKMEQwT1FYTSQlQCN0PWcu" target="_self">fill out the questionnaire here</a> until March 9th!</p><p>We're committed to making Orchard Harvest accessible and valuable for as many community members as possible. Thanks for helping us!</p><p><img alt="Orchard Harvest 2026 survey" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260227/orchard-harvest-conference-2026-survey.png"></p><h3>Orchard Dojo Newsletter</h3><p>Lombiq's Orchard Dojo Newsletter has 424 subscribers! We have started this newsletter to keep the Orchard community informed about the latest news on the platform. By subscribing to this newsletter, you will receive an email whenever a new post is published to Orchard Dojo, including <em>'This Week in Orchard'</em>, of course.</p><p>Do you know of other Orchard enthusiasts who would like to read our weekly articles? Tell them to <a href="https://orcharddojo.us12.list-manage.com/subscribe?u=32f819a768237590e479c9d0a&amp;id=039db8f13f">subscribe here</a>!</p><h5>If you are interested in more news about Orchard and the details of the topics above, don't forget to check out the recording of <a href="https://www.youtube.com/watch?v=O9d0kXg4yiY" target="_self">this Orchard meeting</a>!</h5>]]></description>
      <pubDate>Thu, 26 Mar 2026 16:24:34 GMT</pubDate>
      <guid isPermaLink="true">https://orcharddojo.net/blog/enhanced-blocks-editor-for-content-creators-last-call-orchard-harvest-2026-survey-this-week-in-orchard-06-03-2026</guid>
    </item>
    <item>
      <title>Orchard Harvest 2026 survey, Lombiq Orchard Core Agent Skills - This week in Orchard (27/02/2026)</title>
      <link>https://orcharddojo.net/blog/orchard-harvest-2026-survey-lombiq-orchard-core-agent-skills-this-week-in-orchard-27-02-2026</link>
      <description><![CDATA[<h2>Orchard Core updates</h2><h3>Allow "mailto" and "tel" links in HTML sanitizer configuration</h3><p>Imagine you have a <em>Link Field</em> where you want to enter a value like <em>mailto:someone@example.com</em>. But the field validation rejects it as an invalid URL, even though <em>mailto:</em> is a valid and commonly used URI scheme for links. So, the <em>Link Field</em> should accept <em>mailto:</em> URLs and treat them as valid links, allowing the content item to be saved. And this is caused by HTML sanitization because the HTML Sanitizer in Orchard Core does not allow <em>mailto:</em> by default.</p><p>So, the fix here, by <a href="https://github.com/gvkries" target="_self">Georg von Kries</a>, is to add <em>mailto:</em> and even <em>tel:</em> to the list of allowed URL schemes <a href="https://docs.orchardcore.net/en/latest/reference/modules/Sanitizer/#defaults-configuration" target="_self">in the HTML sanitizer</a>, enabling support for email links and phone numbers in sanitized HTML content.</p><p><img alt="Allow mailto and tel links in HTML sanitizer configuration" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260227/allow-mailto-and-tel-links-in-html-sanitizer-configuration.png"></p><h3>Allow override Reverse Proxy from configuration</h3><p>You can configure the reverse proxy settings from the admin UI by navigating to <em>Settings -&gt; Reverse Proxy</em> (if you have enabled the <em>Reverse Proxy Configuration</em> feature under <em>Tools -&gt; Features</em>, of course). The following settings are available:</p><ul><li>X-Forwarded-For: Enables forwarding of the client IP address.</li><li>X-Forwarded-Host: Enables forwarding of the original host requested by the client.</li><li>X-Forwarded-Proto: Enables forwarding of the protocol (HTTP or HTTPS) used by the client.</li></ul><p>These settings are stored in the site configuration and can be managed per tenant.</p><p>And from now on, you can use configuration values from <em>appsettings.json</em> to configure reverse proxy settings by calling the <em>ConfigureReverseProxySettings()</em> extension method on <em>OrchardCoreBuilder</em> when initializing the app. Check out <a href="https://docs.orchardcore.net/en/latest/reference/modules/ReverseProxy/" target="_blank">the Reverse Proxy module's documentation</a> to see the configuration options and configuration precedence, keeping in mind security and multi-tenant considerations. Thanks for the contributions from <a href="https://github.com/gvkries" target="_self">Georg von Kries</a> and <a href="https://github.com/hishamco" target="_self">Hisham Bin Ateya</a>!</p><p><img alt="Allow override Reverse Proxy from configuration" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260227/allow-override-reverse-proxy-from-configuration.png"></p><h3>Demos</h3><h4>Lombiq Orchard Core Agent Skills</h4><p>We would like to show you our agent skills for Orchard Core (a simple, open format for giving agents new capabilities and expertise) that can help you with many Orchard Core-related tasks, such as implementing appropriate shape templates with correct alternates. It can update recipes and even create workflows for you. So, there are a lot of features <a href="https://github.com/lombiq/orchard-core-agent-skills" target="_blank">in our repository,</a> as you can see in the screen below, too!</p><p><img alt="Lombiq Orchard Core Agent Skills included skills" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260227/lombiq-orchard-core-agent-skills-included-skills.png"></p><p>In this demo, <a href="https://github.com/barthamark" target="_self">Márk Bartha</a> from <a href="https://lombiq.com/" target="_self">Lombiq</a> shows you how he re-implemented his own personal website using agents, but agents still can't really implement Orchard Core shapes/recipes/etc. reliably. One reason is that the documentation is still not ideal for them to consume and learn from. An option would be to let the agent explore the Orchard Core source itself and figure things out, but that would require a lot of context.</p><p>How about recreating the documentation brick by brick and optimizing it for agents? Well, that's what you will find in this solution. The heart of this solution is <a href="https://github.com/Lombiq/Orchard-Core-Agent-Skills/blob/dev/skills/orchard-core-theming/references/TASK-MAP.md" target="_self">this TASK-MAP.md file</a>.</p><p><img alt="TASK-MAP file" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260227/task-map-file.png"></p><p>This is something the agent must read and consume continuously. It provides agents with a map of scenario types the user might request. Like, create content type/part/field definitions, or use particular templates to create shapes and things like these. It can even connect to a SQLite database to retrieve content items, so you can export them to recipes without using deployment plans.</p><p>The way Márk built this is that he told the agent to implement an actual task, discover all related information (like all the Liquid filters), and put everything into an agent-optimized Markdown template. The same goes for every other piece of knowledge he needed to develop his personal site, such as Bag Parts and Flow Parts.</p><p><img alt="Márk Bartha personal site" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260227/mark-bartha-personal-site.png"></p><p>Are you curious about how Márk built his personal website that is completely generated by AI? And the showcase of our <a href="https://github.com/Lombiq/Tailwind-Agent-Skills" target="_self">Lombiq Tailwind Agent Skills repository</a>, which contains agent skills for Tailwind v4 development tasks? Then <a href="https://www.youtube.com/watch?v=ddwm-YKJFW4" target="_self">head to YouTube for a demo</a>!</p><p>Share your experience, feedback, and contributions so we can keep refining the skills in the open and roll improvements back based on real project usage.</p><p class="embed-container"><iframe width="840" height="473" src="https://www.youtube-nocookie.com/embed/ddwm-YKJFW4" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" spellcheck="false"></iframe></p><h2>News from the community</h2><h3>Orchard Harvest 2026 survey</h3><p>After last year, the Orchard Harvest Conference will be held again in 2026. Last time, it was held in Prague, and for this year, we're planning to bring it to North America.</p><p>To make that decision with real community input, we've put together a short questionnaire about where you'd be interested in attending Orchard Harvest in principle, and what you'd need to make it work (location, travel, budget, etc.).</p><p>If you've ever attended Harvest, thought about attending, or are just active in the Orchard Core community, your answers would really help us shape the event. You can <a href="https://forms.office.com/pages/responsepage.aspx?id=Wt6elek45kStyIVVO-uCIJKA6v6WjG9DpML1ER1pm15UMUZMMjk1TllZTE1SUklBUlhKMEQwT1FYTSQlQCN0PWcu" target="_self">fill out the questionnaire here</a>.</p><p><img alt="Orchard Harvest 2026 survey" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260227/orchard-harvest-conference-2026-survey.png"></p><h3>Orchard Dojo Newsletter</h3><p>Lombiq's Orchard Dojo Newsletter has 425 subscribers! We have started this newsletter to keep the Orchard community informed about the latest news on the platform. By subscribing to this newsletter, you will receive an email whenever a new post is published to Orchard Dojo, including <em>'This Week in Orchard'</em>, of course.</p><p>Do you know of other Orchard enthusiasts who would like to read our weekly articles? Tell them to <a href="https://orcharddojo.us12.list-manage.com/subscribe?u=32f819a768237590e479c9d0a&amp;id=039db8f13f">subscribe here</a>!</p><h5>If you are interested in more news about Orchard and the details of the topics above, don't forget to check out the recording of <a href="https://www.youtube.com/watch?v=O9d0kXg4yiY" target="_self">this Orchard meeting</a>!</h5>]]></description>
      <pubDate>Thu, 26 Mar 2026 16:24:44 GMT</pubDate>
      <guid isPermaLink="true">https://orcharddojo.net/blog/orchard-harvest-2026-survey-lombiq-orchard-core-agent-skills-this-week-in-orchard-27-02-2026</guid>
    </item>
    <item>
      <title>Secrets module, Lombiq GitHub Actions v4.2.0 - This week in Orchard (20/02/2026)</title>
      <link>https://orcharddojo.net/blog/secrets-module-lombiq-github-actions-v4-2-0-this-week-in-orchard-20-02-2026</link>
      <description><![CDATA[<h2>Orchard Core updates</h2><h3>Dynamic Cache Options documentation</h3><p>The <a href="https://docs.orchardcore.net/en/latest/reference/modules/DynamicCache/#cache-options" target="_self">Orchard Core documentation</a> has been updated by <a href="https://github.com/hishamco" target="_self">Hisham Bin Ateya</a> with some lines about the Cache Options. If you navigate to <em>Settings -&gt; General</em> on the admin UI and select the <em>Cache</em> tab, you will see four options that can be configured for Dynamic Cache:</p><ul><li>From environment: Enables the Dynamic Cache feature in the Production ASP.NET Core environment.</li><li>Enabled: Enables the Dynamic Cache feature.</li><li>Disabled: Disables the Dynamic Cache feature.</li><li>Enabled with cache debug mode: Enables the Dynamic Cache feature and activates debug mode, which logs the cache context metadata on the page as HTML comments. This is useful for troubleshooting cache-related issues.</li></ul><p><img alt="Dynamic Cache Options documentation" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260220/dynamic-cache-options.png"></p><h3>New Content Manager Delete behavior</h3><p>Let's say you have some content items in your system that admins must never delete (e.g., because they have a specific status). But if you navigate to <em>Content -&gt; Content Items</em> and bulk delete these content items, you can't easily prevent it for a specific content item. Until now!</p><p>As you can see, the <em>IContentManager.RemoveAsync()</em> method now supports cancelable deletes and returns a <em>bool</em> indicating whether the delete operation actually occurred or was cancelled by a handler. This means that if the content handler for your content sets the <em>RemoveContentContext.Cancel</em> property to <em>true</em>, Orchard will cancel the deletion of your content item. Thanks for your first contribution, <a href="https://github.com/shivampandey0709" target="_self">Shivam Pandey</a>!</p><p><img alt="New Content Manager Delete behavior" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260220/new-content-manager-delete-behavior.png"></p><h3>Demos</h3><h4>Secrets module</h4><p>The Secrets module provides a secure, centralized way to store and manage sensitive data, including passwords, API keys, connection strings, and certificates. It addresses common challenges in managing secrets across development, staging, and production environments.</p><p>Managing sensitive configuration in web applications presents several challenges, which can be solved by using the module that provides. Some of these challenges are:</p><ul><li>Encrypted Storage: Storing passwords and API keys in <em>appsettings.json</em> or environment variables can lead to accidental exposure through source control, logs, or configuration dumps. All secrets are encrypted using ASP.NET Core Data Protection before being stored in the database.</li><li>Deployment Support: When using deployment plans or recipes to set up new tenants, secrets cannot be included directly, as this compromises security. This module provides deployment support for exporting secret metadata (not values) and importing secrets from environment variables during setup.</li><li>Centralized Management: Different environments (development, staging, production) often need different secrets, making configuration management complex. Using this module, you can use a single admin UI to view, create, update, and delete all secrets.</li></ul><p>To enable the module, head to <em>Tools -&gt; Features</em> and enable the <em>Secrets</em> feature (if you want to use Azure Key Vault to store and retrieve secrets, enable the <em>Secrets - Azure Key Vault</em> feature too). After, you can navigate to <em>Settings -&gt; Security -&gt; Secrets</em> to open the secrets management page. This page displays all stored secrets, including their names, types, stores, and last updated dates. Clicking on the <em>Add Secret</em> button lets you choose the type of secret.</p><p><img alt="Select Secret type" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260220/select-secret-type.png"></p><p>Every UI here is dynamic, every secret type is extensible, and you can define the editor for every single type. Here, we selected the <em>Text Secret</em> type to store a secret called <em>SmtpPassword</em> in the <em>Database</em>. The database store uses ASP.NET Core Data Protection to encrypt secrets before storing them.</p><p><img alt="Create Text secret" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260220/create-text-secret.png"></p><p>Secrets can have an optional expiration date. Its purpose is to track when secrets should be rotated or renewed. Expected secrets continue to work; the expiration does not automatically disable them, but on the secrets management page, you will see visual indicators in the form of badges:</p><ul><li>Expired secrets show a red <em>Expired</em> badge.</li><li>Secrets expiring within 30 days show a yellow <em>Expiring</em> badge.</li><li>The secrets list highlights expired/expiring secrets with colored backgrounds.</li></ul><p>And as you can see here, we set the expiration date to next Monday, which is within 30 days, which is why you can see the yellow <em>Expiring</em> badge.</p><p><img alt="An expiring secret" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260220/expiring-secret.png"></p><p>Now it's time to try out our secret! We called our secret <em>SmtpPassword</em>, so we will use it to set up our SMTP Provider! Before doing that, we have to make sure that the <em>SMTP Email Provider</em> and the <em>SMTP Email Secrets</em> features are enabled. The first provides an email service provider that uses Simple Mail Transfer Protocol (SMTP), and the second allows us to store SMTP credentials as secrets rather than in settings. Go to <em>Settings -&gt; Communication -&gt; Email</em> and click the <em>SMTP</em> tab. Put a tick in the <em>Enable SMTP Provider</em> checkbox and in the <em>Require credentials</em> one. To authenticate, you need to provide a username and a password. And as you can see in the screen below, now you don't have to type the password here; instead, you can use a dropdown to set the password from the secrets we set on the secrets management page previously.</p><p><img alt="Using the SMTP password secret" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260220/using-the-smtp-password-secret.png"></p><p>And as always, if you want to see this feature in action, <a href="https://www.youtube.com/watch?v=mGJd-b08Ido" target="_self">head to YouTube for a demo</a> by <a href="https://github.com/sebastienros" target="_self">Sébastien Ros</a>!</p><p class="embed-container"><iframe width="840" height="473" src="https://www.youtube-nocookie.com/embed/mGJd-b08Ido" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" spellcheck="false"></iframe></p><h2>News from the community</h2><h3>Lombiq GitHub Actions v4.2.0</h3><p>The <a href="https://github.com/Lombiq/GitHub-Actions" target="_self">Lombiq GitHub Actions project</a> contains extensions that make a lot of things very easy in an Orchard Core or an Orchard Core-based project. If you don't know GitHub Actions or aren't entirely clear with the terminology, GitHub actions are GitHub's automation platform or CI/CD platform. Orchard Core, of course, also uses it to run various builds. And how you define a pipeline is by creating workflows and/or composite actions. Workflows are what actually run, and actions are things you can add on your own; these are things workflows can call. A workflow is kind of like a program, and an action is like a library your program calls into. And of course, actions can be third-party as well. The point here is that you can use GitHub actions to automate a lot of things, like .NET builds, running tests, and doing various verifications on a pull request, and you can also do all kinds of modularization between these builds.</p><p>Under this project, we have workflows and actions. Workflows that you can call from your own workflows. Pretty much like one-liners, for example, to run the .NET build and execute a test. Actions are the building blocks you can use if you just want something specific. And we have quite a lot of actions and workflows here.</p><p><img alt="Lombiq GitHub Actions" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260220/lombiq-github-actions.png"></p><p>This week, we released the latest version of GitHub Actions, with several new additions and improvements, like:</p><ul><li>The Elasticsearch setup step broke on GitHub-hosted runners. This release adds a reimplemented step that works in the same way but is compatible with the current runner images, too. If you have used Elasticsearch for UI testing before, we recommend that you update to this release ASAP.</li><li>New <a href="https://github.com/Lombiq/GitHub-Actions/blob/dev/Docs/Workflows/Productivity/AssetLinting.md" target="_self">Asset Linting workflow</a>.</li><li>Indicate if a PR has breaking changes and <a href="https://github.com/Lombiq/GitHub-Actions/issues/467" target="_self">generate CompatibilitySuppressions.xml file files</a>.</li><li>Action/workflow to <a href="https://github.com/Lombiq/GitHub-Actions/issues/502" target="_self">automatically open a PR</a>.</li></ul><p><img alt="Asset Linting Lombiq GitHub Actions" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260220/asset-linting-lombiq-github-actions.png"></p><p>Visit the Lombiq GitHub Actions repository and <a href="https://github.com/Lombiq/GitHub-Actions/releases/tag/v4.2.0" target="_self">check out the new release for all the goodies</a>!</p><h3>Orchard Dojo Newsletter</h3><p>Lombiq's Orchard Dojo Newsletter has 426 subscribers! We have started this newsletter to keep the Orchard community informed about the latest news on the platform. By subscribing to this newsletter, you will receive an email whenever a new post is published to Orchard Dojo, including <em>'This Week in Orchard'</em>, of course.</p><p>Do you know of other Orchard enthusiasts who would like to read our weekly articles? Tell them to <a href="https://orcharddojo.us12.list-manage.com/subscribe?u=32f819a768237590e479c9d0a&amp;id=039db8f13f">subscribe here</a>!</p><h5>If you are interested in more news about Orchard and the details of the topics above, don't forget to check out the recording of <a href="https://www.youtube.com/watch?v=SirWMR1-1ME" target="_self">this Orchard meeting</a>!</h5>]]></description>
      <pubDate>Thu, 26 Mar 2026 16:25:07 GMT</pubDate>
      <guid isPermaLink="true">https://orcharddojo.net/blog/secrets-module-lombiq-github-actions-v4-2-0-this-week-in-orchard-20-02-2026</guid>
    </item>
    <item>
      <title>Dynamic Translations, refactor IContentDefinitionService for improved modularity and design - This week in Orchard (13/02/2026)</title>
      <link>https://orcharddojo.net/blog/dynamic-translations-refactor-icontentdefinitionservice-for-improved-modularity-and-design-this-week-in-orchard-13-02-2026</link>
      <description><![CDATA[<h2>Orchard Core updates</h2><h3>DisplayedAs was renamed to WithDisplayName, and Named was renamed to WithName for consistency</h3><p>When you define the type definition for your content type, you can define its <em>Technical Name</em> and <em>Display Name</em> using the <em>ContentTypeDefinitionBuilder</em>. You can also attach content parts to it, add various settings, and more. Most method names in <em>ContentTypeDefinitionBuilder</em> start with the word <em>With</em>, which means "define my content type with this name, with this part, etc." But that was not the case when you defined the <em>Name</em> and the <em>Display Name</em>. From now on, <a href="https://github.com/hishamco" target="_self">Hisham Bin Ateya</a> was renamed the <em>DisplayedAs</em> method to <em>WithDisplayName</em>, and the <em>Named</em> method to <em>WithName</em> for consistency. We kept the old <em>Named</em> and <em>DisplayAs</em> methods for now, but we marked them as obsolete ones.</p><p><img alt="Renamed DisplayedAs to WithDisplayName" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260213/renamed-displayedas-to-witdisplayname.png"></p><h3>Refactor IContentDefinitionService for improved modularity and design</h3><p>The <em>IContentDefinitionService</em> interface was moved from the <em>OrchardCore.ContentTypes</em> module to <em>OrchardCore.ContentTypes.Abstractions</em>: the <em>ContentDefinitionService</em> doesn't implement any methods that return view models. So, this interface was not just moved; it was also updated to remove all methods for manipulating or creating view models. These methods were moved to the <em>AdminController</em> itself, which needs the view models, so it uses the <em>ContentDefinitionManager</em> directly and creates its own view models from the business data. And we also have documentation for the <em>IContentDefinitionService</em> interface.</p><p><img alt="Refactor IContentDefinitionService for improved modularity and design" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260213/refactor-icontentdefinitionservice-for-improved-modularity-and-design.png"></p><h3>Demos</h3><h4>Dynamic Translations</h4><p>The <em>Data Localization</em> module provides a database-backed localization system for translating dynamic content that cannot be handled by static PO files, such as:</p><ul><li>Content Type and Content Field display names.</li><li>Permission names and descriptions.</li><li>Any custom dynamic strings via <em>ILocalizationDataProvider</em>.</li></ul><p>To enable this module, go to <em>Tools -&gt; Features</em> and enable the <em>Data Localization</em> module. It means that you will find a new <em>Dynamic Translations</em> option in <em>Settings -&gt; Localization</em>. For each of these data-localizable items, we have a translation editor. This editor displays all translatable strings grouped by category:</p><ul><li>Culture Selector: Choose which culture to edit translations for.</li><li>Search: Filter strings by original text or translation.</li><li>Category Filter: Focus on a specific category.</li><li>Auto-save: Toggle automatic saving (enabled by default, saves after 2 seconds of inactivity).</li><li>Save Button: Manually save all changes.</li></ul><p>Our demo site supports two cultures: English and Hungarian. We selected the Hungarian culture using the culture selector and filtered for the <em>Content Types</em> category. We already started providing translations for Content Type strings. As you can see, we translated 6 of the 16 strings.</p><p><img alt="Dynamic Translations" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260213/dynamic-translations.png"></p><p> We keep the <em>Auto-save</em> checkbox checked, which means the site automatically saves our modifications without needing to click the <em>Save</em> button at the bottom of the screen.</p><p>If we switch to Hungarian, we could see the UI and the data in Hungarian (but we have no Hungarian PO files). If we click the <em>New</em> button to create new content items based on existing content types, we can see the translated names of those content types. The <em>Taxonomy</em> is there because we haven't translated it.</p><p><img alt="Localized Content Types" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260213/localized-content-types.png"></p><p>If we go back to the <em>Dynamic Translations</em> page, we will find a button labeled <em>Statistics</em> at the bottom that opens the statistics dashboard. The statistics dashboard shows translation completion progress:</p><ul><li>Overall Progress: Total translation progress across all cultures.</li><li>By Culture: Progress bar and completion count for each supported culture.</li><li>By Category: Detailed breakdown per category for a selected culture.</li></ul><p>Progress bars are color-coded:</p><ul><li>Green (≥75%): Good progress.</li><li>Yellow (25-74%): In progress.</li><li>Red (&lt;25%): Needs attention.</li></ul><p>Here you can see that we translated 6 strings of 226, and all 6 are under the Content Types category.</p><p><img alt="Dynamic Translation Statistics" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260213/dynamic-translation-statistics.png"></p><p>And as always, if you want to see this new feature in action, <a href="https://www.youtube.com/watch?v=02qLfWoCqV4" target="_self">head to YouTube for a recording</a> by <a href="https://github.com/sebastienros" target="_self">Sébastien Ros</a>!</p><p class="embed-container"><iframe width="840" height="473" src="https://www.youtube-nocookie.com/embed/02qLfWoCqV4" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" spellcheck="false"></iframe></p><h2>News from the community</h2><h3>Modernizing a legacy Orchard 1 site</h3><p>Last month, we rebuilt <a href="http://hajosnep.hu" target="_self">hajosnep.hu</a>, Hungary's oldest maritime history association's website, with Orchard Core on DotNest, improving design, usability, and maintainability. <a href="https://dotnest.com/blog/modernizing-hajosnep-hu-rebuilding-an-orchard-1-website-with-orchard-core-on-dotnest" target="_self">Check out our case study</a> to learn why modernization was important, the technical details (including the use of <a href="https://github.com/Lombiq/DotNest-Core-SDK" target="_self">Lombiq's DotNest Core SDK</a> for theme development), the key challenges and solutions, and the future plans.</p><p>The renewed <a href="http://hajosnep.hu" target="_self">hajosnep.hu website</a> now provides a modern, mobile-friendly platform for the association to share content, engage with the community, and showcase Hungary's maritime history. The site is fully maintainable, accessible, and prepared for future multilingual expansion, ensuring it can evolve alongside the association's needs for years to come.</p><p>If you are considering a website renewal or migration, especially on Orchard Core or DotNest, this project demonstrates how a robust theme foundation and an automated asset pipeline can help modernize even complex legacy sites in a maintainable and future-proof way.</p><p>If you’d like to build something similar, you can <a href="https://dotnest.com/DotNest.Frontend/UserSiteManagement/EditSite" target="_self">create your own Orchard Core site on DotNest</a> and start experimenting right away. As Orchard Core grows in popularity, so does our experience with it. If you'd like to take advantage of the platform's various improvements, <a href="https://lombiq.com/contact-us" target="_self">don't hesitate to reach out to us here</a>.</p><p><img alt="Modernizing hajosnep.hu case study" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260213/modernizing-hajosnep-case-study.png"></p><h3>Orchard Dojo Newsletter</h3><p>Lombiq's Orchard Dojo Newsletter has 425 subscribers! We have started this newsletter to keep the Orchard community informed about the latest news on the platform. By subscribing to this newsletter, you will receive an email whenever a new post is published to Orchard Dojo, including <em>'This Week in Orchard'</em>, of course.</p><p>Do you know of other Orchard enthusiasts who would like to read our weekly articles? Tell them to <a href="https://orcharddojo.us12.list-manage.com/subscribe?u=32f819a768237590e479c9d0a&amp;id=039db8f13f">subscribe here</a>!</p><h5>If you are interested in more news about Orchard and the details of the topics above, don't forget to check out the recording of <a href="https://www.youtube.com/watch?v=jhwLXmMZJHY" target="_self">this Orchard meeting</a>!</h5>]]></description>
      <pubDate>Thu, 26 Mar 2026 16:25:16 GMT</pubDate>
      <guid isPermaLink="true">https://orcharddojo.net/blog/dynamic-translations-refactor-icontentdefinitionservice-for-improved-modularity-and-design-this-week-in-orchard-13-02-2026</guid>
    </item>
    <item>
      <title>IntelliSense for recipes, Orchard Core Commerce 3.1 - This week in Orchard (06/02/2026)</title>
      <link>https://orcharddojo.net/blog/intellisense-for-recipes-orchard-core-commerce-3-1-this-week-in-orchard-06-02-2026</link>
      <description><![CDATA[<h2>Orchard Core updates</h2><h3>Replace dynamic ContentCard shapes with strongly typed shapes</h3><p>The dynamic shape creation using <em>_shapeFactory.New.ContentCard(...)</em> has been replaced with strongly typed shapes, <em>using CreateAsync&lt;T&gt;</em> to improve performance and type safety. It means new shape classes in the <em>OrchardCore.ContentTypes.Abstractions</em> library:</p><ul><li><strong>ContentCardShape</strong> - encapsulates all <em>ContentCard</em> properties</li><li><strong>ContentCardFieldsEditShape</strong> - for <em>ContentCard_Fields_Edit</em> shape</li><li><strong>ContentCardFrameShape</strong> - for <em>ContentCard_Frame</em> wrapper shape</li></ul><p>Here you can see an example of the updated shape creation pattern for both the controllers and the views:</p><p><img alt="Updated shape creation pattern" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260206/updated-shape-creation-pattern.png"></p><p>To see a real-life example, here you can see using the new strongly typed shape when working with <em>Bag Parts</em>.</p><p><img alt="Bag Part strongly typed shape" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260206/bag-part-strongly-typed-shape.png"></p><h3>Update UserDisplayName shape documentation</h3><p>The <em>UserDisplayName</em> shape provides a flexible way to display user information throughout Orchard Core, particularly in admin lists. This shape is commonly used when displaying content authors, audit trail users, or any user reference. The updated <a href="https://docs.orchardcore.net/en/latest/reference/modules/Templates/#customizing-user-display-in-admin-lists" target="_self">Templates page in the Orchard Core documentation</a> describes how to create the <em>UserDisplayName</em> shape, with customization examples in both Razor and Liquid. You can also see how to access the full <em>user</em> object with custom properties and content parts, how to display the full name instead of the username, or how to create a user-specific template for a particular username.</p><p><img alt="Update UserDisplayName shape documentation" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260206/update-userdisplayname-shapes-documentation.png"></p><p>You can also <a href="https://docs.orchardcore.net/en/latest/reference/modules/Liquid/#users_by_name-filter" target="_self">read about how to use the new users_by_name filter here</a>, which loads one or more user objects from the database by username(s). The username is automatically normalized before querying.</p><p><img alt="Users_by_name filter documentation" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260206/users-by-name-filter-docs.png"></p><h3>Demos</h3><h4>IntelliSense for recipes</h4><p>Recipes are a powerful thing in Orchard Core. It allows you to do a lot with just JSON. It's more powerful now that we have AI! So, we can just have AI-generated recipes and execute them, and things can get done. However, there are a few issues with our current recipe setup. One is that you can't register recipes the way you register a service; they have to be files, and you can't create a recipe from code, for example.</p><p>The other issue is that we just don't have a way to control the schema. We currently have no way to ask the AI to provide us with really good recipes because the recipe structure is unknown. We have documentations and AI utilizes those documents, but we don't have everything documented.</p><p>If we have a JSON schema for the recipes, we can do a lot more things with it. For example, we can try unifying the recipe and the deployment. It means that if we change the recipe's structure or schema, it will affect both the recipe and the deployment, allowing us to export and import structured data.</p><p><a href="https://github.com/MikeAlhayek" target="_self">Mike Alhayek</a> tried to ask the AI to do things for us and to change how recipes are handled in the code. Here you can find <a href="https://github.com/OrchardCMS/OrchardCore/pull/18742" target="_self">the PR for this feature</a>.</p><p>Now let's navigate to the admin UI and enable the <em>View Or Download Content As JSON</em> feature under <em>Tools -&gt; Features</em>. After, we can navigate to <em>Tools -&gt; Deployments</em> and select the <em>JSON Import</em> option from the menu. Here, you will notice IntelliSense. This, by itself, adds a lot of value from a UI perspective when you get that IntelliSense.</p><p><img alt="IntelliSense for recipes" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260206/json-import-intellisense.png"></p><p>And we still have a lot to cover! If you want to know more details about this feature, <a href="https://www.youtube.com/watch?v=Bag7LS0fP6o" target="_self">head to YouTube for a recording</a>!</p><p class="embed-container"><iframe width="840" height="473" src="https://www.youtube-nocookie.com/embed/Bag7LS0fP6o" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" spellcheck="false"></iframe></p><h2>News from the community</h2><h3>Orchard Core Commerce 3.1</h3><p>Orchard Core Commerce is an Orchard Core port and partial rewrite of the open-source <a href="https://github.com/bleroy/Nwazet.Commerce" target="_self">Nwazet Commerce</a> module that was built for Orchard CMS 1.x. Nwazet Commerce was initially built in 2012 by <a href="https://github.com/bleroy" target="_self">Bertrand Le Roy</a>, loosely based on a commerce sample by <a href="https://github.com/sfmskywalker" target="_self">Sipke Shoorstra</a>. The initial goal of Nwazet Commerce was to power the website of the hardware startup Nwazet. While Nwazet is no longer operating, the Nwazet Commerce project continued and was further developed by a group of passionate contributors who use the platform for their own and their customers' websites.</p><p>Like Orchard, Nwazet Commerce was built with extensibility in mind and, as such, includes its own extensions (typical examples include local tax and shipping modules). It's also a pure, idiomatic Orchard.</p><p>Orchard Core represents a major evolution of the Orchard design principles and is sufficiently different that running Nwazet Commerce on it will necessitate significant work. As such, the community decided that starting from a blank slate was the best approach, so they will port Nwazet Commerce piece by piece, carefully applying Orchard Core's new design principles. The community also decided to adopt a new name that will shed its now-obsolete origins and establish our ambition for the module to become the go-to commerce module for Orchard Core.</p><p>Back in 2022, <a href="https://www.youtube.com/watch?v=EVvwS1UaIk4" target="_self">we published a demo</a> that showed the module's current state. A few months later, we reached another milestone when we completed the basic implementation of the <a href="https://orcharddojo.net/blog/content-relationships-guide-orchard-core-commerce-stripe-payment-this-week-in-orchard-09-09-2022" target="_self">Stripe Payment integration</a> (without taxation, shipping, etc.). Stripe is a payment service provider that business owners can use to accept dozens of payment methods, from credit cards to buy-now, pay-later services. Stripe Payments handles the steps between a customer providing their card information and learning that their payment has been accepted.</p><p>As you may know, <a href="https://www.lombiq.com/" target="_self">Lombiq</a> provides stewardship for the Orchard Core Commerce module. That means that we do code reviews and work on features and fixes. At the beginning of 2023, we released the 1.0 version of the Orchard Core Commerce module! You can <a href="https://orcharddojo.net/blog/orchard-core-commerce-mvp-make-features-module-optional-to-non-default-tenant-this-week-in-orchard-03-02-2023" target="_self">read some of the key features of the release in this post</a>. You can easily try it out by <a href="https://github.com/OrchardCMS/OrchardCore.Commerce" target="_self">cloning this repo</a> and building and running the <em>OrchardCore.Commerce.Web</em> project. Thanks to <a href="https://docs.orchardcore.net/en/latest/docs/reference/modules/AutoSetup/" target="_self">Auto Setup</a>, the site will be set up with the <em>OrchardCore Commerce - Development</em> recipe. Afterward, go to the dashboard using the credentials <em>admin</em> and <em>Password1!</em>, then go to <em>Content -&gt; Content Items</em> to create your first <em>Product</em>.</p><p>At the beginning of 2025, we released the 3.0 version of the Orchard Core Commerce module, which was a major version increment due to some breaking changes, so watch out! One of the breaking changes was that we dropped Newtonsoft.Json support, replaced the <em>IPayment</em> interface, and now services and modules use Payment directly, which was also moved into the <em>OrchardCore.Commerce.Abstractions</em> library.</p><p>Last week, we released version 3.1 of the module, the final release for Orchard Core 2.x. The next release will depend on Orchard Core 3.0. We now have a new feature, <em>Orchard Core Commerce - Subscription,</em> with basic support for subscription-type products. Currently, it's only for Stripe, which natively supports this payment model. We have also added <a href="https://learn.microsoft.com/en-us/aspnet/core/fundamentals/minimal-apis/overview" target="_self">minimal APIs</a> for some shopping cart and payment activities.</p><p>Check out <a href="https://github.com/OrchardCMS/OrchardCore.Commerce/releases/tag/v3.1.0" target="_self">the full list of changes here</a>!</p><p><img alt="Orchard Core Commerce 3.1" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260206/orchard-core-commerce-31.png"></p><h3>Orchard Dojo Newsletter</h3><p>Lombiq's Orchard Dojo Newsletter has 426 subscribers! We have started this newsletter to keep the Orchard community informed about the latest news on the platform. By subscribing to this newsletter, you will receive an email whenever a new post is published to Orchard Dojo, including <em>'This Week in Orchard'</em>, of course.</p><p>Do you know of other Orchard enthusiasts who would like to read our weekly articles? Tell them to <a href="https://orcharddojo.us12.list-manage.com/subscribe?u=32f819a768237590e479c9d0a&amp;id=039db8f13f">subscribe here</a>!</p><h5>If you are interested in more news about Orchard and the details of the topics above, don't forget to check out the recording of <a href="https://www.youtube.com/watch?v=W61BdGWoeCs" target="_self">this Orchard meeting</a>!</h5>]]></description>
      <pubDate>Thu, 26 Mar 2026 16:25:24 GMT</pubDate>
      <guid isPermaLink="true">https://orcharddojo.net/blog/intellisense-for-recipes-orchard-core-commerce-3-1-this-week-in-orchard-06-02-2026</guid>
    </item>
    <item>
      <title>Agent Guidelines for Orchard Core, new marketing site on DotNest - This week in Orchard (30/01/2026)</title>
      <link>https://orcharddojo.net/blog/agent-guidelines-for-orchard-core-new-marketing-site-on-dotnest-this-week-in-orchard-30-01-2026</link>
      <description><![CDATA[<h2>Orchard Core updates</h2><h3>Remove default implementations from interfaces and obsolete members for Orchard Core 3.0</h3><p>We addressed the breaking changes introduced in previous versions and removed all members that were obsolete in those versions. It means removing default implementations from interfaces and obsolete members in preparation for Orchard 3.0.</p><p>Starting with Orchard Core 3.0, several interfaces, classes, default implementations, and extension methods have been removed. If you <a href="https://docs.orchardcore.net/en/latest/releases/3.0.0/#removed-interfaces-and-default-implementations" target="_self">check out the release notes of Orchard Core 3.0</a>, you will find a list of the removed code.</p><p><img alt="Removed interfaces and default implementations docs" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260130/removed-interfaces-and-default-implementations-docs.png"></p><h3>Agent Guidelines for Orchard Core</h3><p><a href="https://github.com/sebastienros" target="_self">Sébastien Ros</a> added <a href="https://github.com/OrchardCMS/OrchardCore/blob/main/AGENTS.md" target="_self">a new MD file at the root of the Orchard Core repository</a> that explains to LLMs how to build, test, and run Orchard. This document provides comprehensive guidelines for LLM agents working with the Orchard Core codebase, covering building, testing, and creating new features. It describes how to create a module or theme by showcasing its structure and how to register services using dependency injection in the startup file. It includes functional tests, how they are organized and working, so we can ask them to create functional tests too. And many more!</p><p><img alt="Orchard Core Agent Guidelines" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260130/orchard-core-agent-guidelines.png"></p><h2>News from the community</h2><h3>Shoogr case study: A stunning, high-converting marketing website with lead magnets on DotNest</h3><p>High-converting marketing website with lead magnets on Orchard Core?</p><p>Meet <a href="https://shoogr.com/" target="_self">Shoogr</a>, a modern marketing website built for Hungarian marketing strategist and coach <a href="https://www.linkedin.com/in/sugarjudit" target="_self">Sugár Judit</a>, developed by <a href="https://github.com/barthamark" target="_self">Márk Bartha</a>. Designed with Magic Patterns, brought to life with Orchard Core, and hosted on <a href="https://dotnest.com/" target="_self">DotNest</a> for seamless performance.</p><p>Learn how easily you can launch a beautiful, SEO-ready, and conversion-focused Orchard Core website on DotNest. Thanks to Orchard Core's modularity and DotNest's managed hosting, Judit now has a website that's easy to update, scalable for future needs, and perfectly aligned with her brand. Read the <a href="https://dotnest.com/blog/shoogr-case-study-a-stunning-high-converting-marketing-website-with-lead-magnets-on-dotnest" target="_self">full case study here</a>!</p><p><img alt="Shoogr case study" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260130/shoogr-case-study.png"></p><p>If you’d like to build something similar, you can <a href="https://dotnest.com/DotNest.Frontend/UserSiteManagement/EditSite" target="_self">create your own Orchard Core site on DotNest</a> and start experimenting right away. As Orchard Core grows in popularity, so does our experience with it. If you'd like to take advantage of the platform's various improvements, don't hesitate to <a href="https://lombiq.com/contact-us" target="_self">reach out to us here</a>.</p><h3>Orchard Dojo Newsletter</h3><p>Lombiq's Orchard Dojo Newsletter has 426 subscribers! We have started this newsletter to keep the Orchard community informed about the latest news on the platform. By subscribing to this newsletter, you will receive an email whenever a new post is published to Orchard Dojo, including <em>'This Week in Orchard'</em>, of course.</p><p>Do you know of other Orchard enthusiasts who would like to read our weekly articles? Tell them to <a href="https://orcharddojo.us12.list-manage.com/subscribe?u=32f819a768237590e479c9d0a&amp;id=039db8f13f">subscribe here</a>!</p><h5>If you are interested in more news about Orchard and the details of the topics above, don't forget to check out the recording of <a href="https://www.youtube.com/watch?v=6TirkaUiK4M" target="_self">this Orchard meeting</a>!</h5>]]></description>
      <pubDate>Fri, 30 Jan 2026 11:03:41 GMT</pubDate>
      <guid isPermaLink="true">https://orcharddojo.net/blog/agent-guidelines-for-orchard-core-new-marketing-site-on-dotnest-this-week-in-orchard-30-01-2026</guid>
    </item>
    <item>
      <title>AI Chat Interactions module, migrate Media and Resources modules from Gulp to asset manager pipeline - This week in Orchard (23/01/2026)</title>
      <link>https://orcharddojo.net/blog/ai-chat-interactions-module-migrate-media-and-resources-modules-from-gulp-to-asset-manager-pipeline-this-week-in-orchard-23-01-2026</link>
      <description><![CDATA[<h2>Orchard Core updates</h2><h3>Add ShapeResult.Cache() docs</h3><p><em>ShapeResult.Cache()</em> is a simple way to cache shapes created from drivers. It uses <em>Dynamic Cache</em> in a similar way <a href="https://docs.orchardcore.net/en/latest/reference/modules/DynamicCache/#caching-a-shape" target="_self">as ShapeMetadata.Cache() does</a>, but unlike that, it's not documented and, most likely related to that, is also underutilized (only the <em>Notifications</em> project uses it).</p><p>From now on, you will find some lines about how to use the <em>ShapeResult.Cache()</em> method <a href="https://docs.orchardcore.net/en/latest/reference/modules/DynamicCache/#cachecontext-members" target="_self">in the documentation of the Dynamic Cache module</a>, thanks to <a href="https://github.com/hishamco" target="_self">Hisham Bin Ateya</a>!</p><p><img alt="ShapeResult.Cache documentation" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260123/shaperesult-cache-documentation.png"></p><h3>Migrate Media and Resources modules from Gulp to the asset manager pipeline</h3><p>Orchard Core included a processing pipeline for client-side assets (typically scripts and stylesheets), which was used to perform front-end development workflow tasks such as transpilation, minification, and bundling in both core projects and extensions (i.e., modules and themes).</p><p>The client-side asset pipeline was powered by <a href="http://gulpjs.com" target="_self">Gulp</a>, a popular open-source task runner built on <a href="https://nodejs.org" target="_blank">Node.js</a> that automates a wide variety of tasks in a development workflow.</p><p>From now on, the Gulp pipeline is removed and can no longer be executed. The goal of this change is to migrate the <em>Media</em> and <em>Resources</em> modules to the new asset manager pipeline and remove the entire Gulp infrastructure. This means you will not find a <em>gulpfile.js</em> file, as we will no longer need Gulp. <a href="https://github.com/sebastienros" target="_blank">Sébastien Ros</a> also removed 19 Gulp dependencies, Gulp scripts, and integration. Instead, you will find an <em>Assets.json</em> file in the <em>Media</em> module and in the <em>Resources</em> module to support the new pipeline.</p><p>The migration involved updating asset actions to use environment variables to pass large lists of files, and addressing command-line argument length limitations, particularly in Windows CI environments. It means that all modules now use the modern asset manager pipeline exclusively.</p><p>You will find everything you need to know about using the <em>Assets Manager</em> in <a href="https://docs.orchardcore.net/en/latest/guides/assets-manager/" target="_self">this updated guide</a> from the Orchard Core documentation.</p><p><img alt="Assets Manager documentation" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260123/assets-manager-documentation.png"></p><h3>Demos</h3><h4>AI Chat Interactions module</h4><p>At the beginning of last year, we <a href="https://orcharddojo.net/blog/openai-feature-including-azure-openai-integration-expose-properties-of-itrackingconsentfeature-and-cookie-policy-in-liquid-this-week-in-orchard-17-01-2025" target="_self">mentioned a new module</a> created by <a href="https://github.com/MikeAlhayek" target="_self">Mike Alhayek</a>, which is an implementation of AI that allows you to interact with any AI model. He worked extensively on that solution and, from time to time, added many new features, which <a href="https://orcharddojo.net/blog/managing-ai-models-and-profiles-reorganize-the-admin-menu-this-week-in-orchard-21-02-2025" target="_self">we mentioned here</a> and <a href="https://orcharddojo.net/blog/openai-feature-updates-automate-orchard-core-deployment-on-aws-ecs-with-cloudformation-this-week-in-orchard-14-03-2025" target="_self">here</a>. After that, we highlighted the <a href="https://orcharddojo.net/blog/model-context-protocol-mcp-client-feature-improve-title-part-settings-this-week-in-orchard-25-04-2025" target="_self">Model Context Protocol (MCP) Client and Model Context Protocol (Local MCP) Client features</a>, as well as the <a href="https://orcharddojo.net/blog/be-a-speaker-at-orchard-harvest-2025-orchard-core-ai-agent-module-this-week-in-orchard-09-05-2025" target="_self">Orchard Core AI Agent feature</a>. And last time, you could read about the <a href="https://orcharddojo.net/blog/ai-data-source-management-feature-allow-the-use-of-the-site-s-time-zone-in-workflow-timer-activities-this-week-in-orchard-13-06-2025" target="_self">AI Data Source Management feature</a>. Here is the <a href="https://github.com/CrestApps/CrestApps.OrchardCore" target="_self">GitHub repository</a> for this project, along with its corresponding <a href="https://www.nuget.org/packages/CrestApps.OrchardCore.AI/" target="_self">NuGet package</a>.</p><p>There have been many changes since the AI Data Source Management feature was introduced; the AI Suite now includes 23 features! The one we will check out today is the AI Chat Interactions module, which provides a playground where you can create a chat instance, configure it however you want, and chat with that AI model. Here you can find several new features that enable ad-hoc AI chat interactions.</p><p><img alt="AI Chat Interactions features" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260123/ai-chat-interactions-features.png"></p><p>After enabling these features, you will see a new option under <em>Artificial Intelligence</em>, called <em>Chat Interactions</em>. If you click on the <em>New Chat</em> button on that screen, you can add a new interaction. After that, you can select whichever provider you want to use. In our case, we selected the <em>Azure OpenAI</em> one.</p><p>And as you see, the playground is ready. The <em>Title</em> is a descriptive name for this chat interaction. It helps you identify and find this conversation in your history. You can select the AI model to use for this chat interaction from the <em>Deployment</em> drop-down. If not selected, the default deployment will be used. The <em>System instructions</em> text area provides the AI with instructions on how to behave, what role to play, and what style to use in its responses. This is the "persona" or "context" that guides all AI responses.</p><p><img alt="Azure OpenAI Chat" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260123/azure-openai-chat.png"></p><p>If you enable the <em>Orchard Core AI Agent</em> feature, you can use natural language to run tasks, manage content, interact with Orchard Core features, and do much more with integrated AI-powered tools. And that's the one that provides you with the <em>Tools</em> tab here. If you want to create content, you can say, "Create a Blog post for me about a specific topic".</p><p><img alt="Azure OpenAI Chat Tools" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260123/azure-open-ai-chat-tools.png"></p><p>If you have the <em>AI Chat Interactions - Documents</em> feature enabled, it extends ad-hoc AI chat interactions by allowing you to upload documents and chat about them. Under the <em>Documents</em> tab, you can attach any document you want and chat about it. If you have a bunch of files you want to run analytics on or ask a bunch of questions on, you can just drag and drop them here.</p><p><img alt="Azure OpenAI Chat Documents" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260123/azure-open-ai-chat-documents.png"></p><p>And that's not all of it! To learn more about this module, <a href="https://www.youtube.com/watch?v=fvmrjHn8Y3w" target="_self">watch a YouTube recording</a>! And guess what! This feature has evolved so much since this original demo!</p><p>With document attachments, Chat Interactions goes far beyond basic RAG. It understands intent, making responses smarter, more accurate, and far more useful. What can you do today?</p><ul><li>Upload an Excel file and ask questions about the data.</li><li>Summarize, aggregate, or analyze spreadsheets.</li><li>Attach reports, project plans, or business documents.</li><li>Ask for meaningful summaries, insights, trends, or key takeaways.</li></ul><p>Think of it as having an intelligent analyst right inside the chat. The possibilities are endless. And the best part is all of this power is already available!</p><p class="embed-container"><iframe width="840" height="473" src="https://www.youtube-nocookie.com/embed/fvmrjHn8Y3w" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" spellcheck="false"></iframe></p><h3>Orchard Dojo Newsletter</h3><p>Lombiq's Orchard Dojo Newsletter has 428 subscribers! We have started this newsletter to keep the Orchard community informed about the latest news on the platform. By subscribing to this newsletter, you will receive an email whenever a new post is published to Orchard Dojo, including <em>'This Week in Orchard'</em>, of course.</p><p>Do you know of other Orchard enthusiasts who would like to read our weekly articles? Tell them to <a href="https://orcharddojo.us12.list-manage.com/subscribe?u=32f819a768237590e479c9d0a&amp;id=039db8f13f">subscribe here</a>!</p><h5>If you are interested in more news about Orchard and the details of the topics above, don't forget to check out the recording of <a href="https://www.youtube.com/watch?v=bgTf00afc1A" target="_self">this Orchard meeting</a>!</h5>]]></description>
      <pubDate>Thu, 26 Mar 2026 16:25:42 GMT</pubDate>
      <guid isPermaLink="true">https://orcharddojo.net/blog/ai-chat-interactions-module-migrate-media-and-resources-modules-from-gulp-to-asset-manager-pipeline-this-week-in-orchard-23-01-2026</guid>
    </item>
  </channel>
</rss>