<rss version="2.0">
  <channel>
    <link>https://orcharddojo.net/Contents/ContentItems/orcharddojoblog00000000000</link>
    <description><![CDATA[]]></description>
    <item>
      <title>Orchard Harvest 2026 program, Your website should integrate with your business systems - This week in Orchard (26/06/2026)</title>
      <link>https://orcharddojo.net/blog/orchard-harvest-2026-program-your-website-should-integrate-with-your-business-systems-this-week-in-orchard-26-06-2026</link>
      <description><![CDATA[<h2>Orchard Core updates</h2><h3>Set up tenants faster with improved shared and preset database support</h3><p>The idea here is that if you have a setup with multiple tenants on the same database, you will need some sort of prefix to distinguish which one belongs to which. Today, the UI doesn't even require you to select the pattern; only the prefix is there to use. But if you don't use the prefix, you might get an error. So the <em>RequireTablePrefix</em> lets you make it required. But then, if you don't want that altogether, maybe you will have some sort of auto-generated prefix, and then you don't have to prompt the user at all. You can say just make the prefix the same as the tenant name and use that pattern everywhere. It allows users to make the tenants a bit easier to follow by using a given pattern.</p><p>So, if you check out <a href="https://docs.orchardcore.net/en/latest/releases/3.0.0/#database-presets-required-prefixes-and-generated-database-names" target="_self">the release notes for Orchard Core 3</a>, you can see a new set of configuration options for creating table prefixes in multitenancy. The new <em>RequireTablePrefix</em> option can require a table prefix, and the new <em>TablePrefixPattern</em> lets you create a Liquid configuration like <em>ShellSettings.Name</em> to force the prefix to use the <em>ShellSettings.Name</em>. And this way, you don't have to provide it; it will be computed automatically. Thanks for the contribution from <a href="https://github.com/MikeAlhayek" target="_self">Mike Alhayek</a>!</p><p><img alt="Tenants Setup Improvements" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260626/tenants-and-setup-improvements.png"></p><h3>Add Settings Recipe Step sections in the docs</h3><p>We were missing some documentation on how to customize settings via recipe steps. So, we can configure all the settings, but there is no documentation on which properties to provide for each setting. This contribution by <a href="https://github.com/MikeAlhayek" target="_self">Mike Alhayek</a> is fixing the gap between what we can do and how we can do it. If people don't know what to do, then they will never do it. And if the Agent doesn't find the example, it will not know what to write in the recipe.</p><p>It means that from now on, you will find a <em>Recipe Configuration</em> section for all modules with settings that can be configured via the <em>Settings</em> recipe step. <a href="https://docs.orchardcore.net/en/latest/reference/modules/Users/#recipe-configuration" target="_self">Here you can find an example</a> showing how to configure the <em>Login</em>, <em>Registration</em>, and <em>Reset Password settings</em>, etc.</p><p><img alt="Settings recipe step sections in the docs" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260626/settings-recipe-step-sections-in-the-docs.png"></p><h3>Demos</h3><h4>Lock Down Your Health Checks</h4><p>The <a href="https://github.com/OrchardCoreContrib/OrchardCoreContrib.Modules" target="_self">OrchardCoreContrib.Modules repository</a> contains a set of modules for Orchard Core that are driven by the community members who love Orchard Core. The repository contains several modules, and this time we will focus on the <em>Health Checks Module</em>, which provides health checks for your website. You can also add this module <a href="https://www.nuget.org/packages/OrchardCoreContrib.HealthChecks/" target="_self">as a NuGet package</a> to your project. Now, if you go to <em>Tools -&gt; Features</em> and search for <em>Health Checks</em>, you will see four features:</p><ul><li><strong>Health Checks</strong>: Provides health checks for the website.</li><li><strong>Health Checks Blocking Rate Limiting</strong>: Adds blocking behavior to the health checks rate limiter. Clients exceeding the limit are temporarily blocked to prevent DoS attacks.</li><li><strong>Health Checks IP Restriction</strong>: Restricts access to health checks endpoints by IP address.</li><li><strong>Health Checks Rate Limiting</strong>: Limits requests to health checks endpoints to prevent DOS attacks.</li></ul><p>Let's see how we can configure and use those!</p><p>As you can see, we have an <em>AllowedIPs</em> array under <em>Access</em>, where we can set the collection of IP addresses permitted to access health check endpoints.</p><p>The <em>RateLimiting</em> provides configuration options for rate limiting applied to health check endpoints. Here you can see that we set the maximum number of concurrent permits to 5 and the time window for which rate limiting is applied to 10 seconds. The duration a client is blocked after the rate limit is exceeded is 10 seconds.</p><p><img alt="Health Checks" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260626/health-checks.png"></p><p>As you can see, the health check URL is <em>/health</em>. So, if we hit that, we will get a detailed response because <em>ShowDetails</em> is <em>true</em>, which lets us show the details of the checks' dependencies. The <em>Status</em> is <em>Unhealthy</em> because one tenant is not running (<em>Tenant's health check</em> is provided by the <a href="https://github.com/OrchardCoreContrib/OrchardCoreContrib.Modules/blob/main/src/OrchardCoreContrib.Tenants/README.md" target="_self">OrchardCoreContrib.Tenants module</a>).</p><p>If we hit the endpoint more times than allowed within a given time frame, we will be blocked for 10 seconds, as specified by the <em>BlockDuration</em> property. And as always, if you want to see this module in action, <a href="https://www.youtube.com/watch?v=yHSuyVPbi4g" target="_self">head to YouTube for a demo</a> of this module by <a href="https://github.com/hishamco" target="_self">Hisham Bin Ateya</a>!</p><p class="embed-container"><iframe width="840" height="473" src="https://www.youtube-nocookie.com/embed/yHSuyVPbi4g" 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>Your website should integrate with your business systems</h3><p>When visitors submit a form, your team shouldn't be copy-pasting data into CRMs, sending Slack messages, or updating spreadsheets by hand. That's slow, inconsistent, and doesn't scale. Orchard Core makes integration simple without requiring custom code by:</p><ul><li>Sending form submission data directly to Zapier, Make, or n8n.</li><li>Triggering CRM updates, email workflows, and team notifications automatically.</li><li>Receiving webhook calls from external systems to create or update content inside your CMS.</li></ul><p>The result: your website stays stable while your business workflows evolve freely in the automation layer.</p><p>Ready to connect your website to your business systems?</p><p>DotNest's managed Orchard Core hosting lets you set this up without any infrastructure overhead. <a href="https://lombiq.link/jmp/84faec9e" target="_self">Check out our post for the details</a> and <a href="https://lombiq.link/jmp/279d8ced" target="_self">get in touch</a> to explore what's possible for your team.</p><p><img alt="Your website should integrate with your business systems" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260626/your-website-should-integrate-with-your-business-systems-dotnest.png"></p><h3>Orchard Harvest 2026 Program</h3><p>The Orchard Harvest 2026 conference will be held in Vancouver, and we look forward to seeing you all this autumn in Canada. Our confirmed dates for this year are September 10th and 11th.</p><p>Don't miss this limited-time offer: just $280 for two days of all-access learning and networking. <a href="https://www.tickettailor.com/events/lombiqtechnologiesltd/2247098" target="_self">Secure your early-bird tickets</a> to the conference now!</p><p>The full Orchard Harvest 2026 program is live! Be sure to check out the <a href="https://orchardcore.net/harvest" target="_blank">conference's updated official website</a> for the program!</p><p>As we move forward, we will keep community members informed of the details, and you will find every detail in this newsletter, too!</p><p>Don't miss the biggest Orchard Core event of the year!</p><p><img alt="Orchard Harvest 2026 Program" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260626/orchard-harvest-2026-program.png"></p><h3>Orchard Dojo Newsletter</h3><p>Lombiq's Orchard Dojo Newsletter has 414 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=HbIYY-55so4" target="_self">this Orchard meeting</a>!</h5>]]></description>
      <pubDate>Fri, 26 Jun 2026 09:27:58 GMT</pubDate>
      <guid isPermaLink="true">https://orcharddojo.net/blog/orchard-harvest-2026-program-your-website-should-integrate-with-your-business-systems-this-week-in-orchard-26-06-2026</guid>
    </item>
    <item>
      <title>Orchard Core 3.0, Admin Theme in Orchard Core: The Developer cheat sheet - This week in Orchard (19/06/2026)</title>
      <link>https://orcharddojo.net/blog/orchard-core-3-0-admin-theme-in-orchard-core-the-developer-cheat-sheet-this-week-in-orchard-19-06-2026</link>
      <description><![CDATA[<h2>Orchard Core updates</h2><h3>Admin Theme in Orchard Core: The Developer cheat sheet</h3><p>When building modules or custom admin pages in Orchard Core, knowing how to work with the Admin Theme is essential for creating a consistent and maintainable user experience. Whether you're styling forms or building custom editors, Orchard Core gives you a clean, framework-agnostic toolkit to do it right.</p><p>Ready to build better admin experiences in Orchard Core? Dive into the <a href="https://docs.orchardcore.net/en/latest/reference/themes/admin-theme/" target="_self">Admin Theme Conventions documentation</a> added by our new contributor, <a href="https://github.com/JasonPG2007" target="_self">Quoc Bao An Nguyen</a>, and start crafting custom admin interfaces that are flexible, maintainable, and visually consistent, no matter which theme your users choose.</p><p><img alt="Admin Theme conventions" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260619/admin-theme-conventions.png"></p><h3>Skip the Admin Dashboard: Configure ReCaptcha programatically</h3><p>You currently need to configure ReCaptcha settings from settings. This is a good and necessary way to do it, but for environment-based settings (like different ones for staging and prod), it'd be better to make them configurable via configuration providers as well. <em>ReCaptchaSettings</em> is almost ready for this. We can solve this in a similar way to what we have in a lot of other modules:</p><ul><li>Provide an extension method to do environment configuration, similar to <em>ConfigureAzureADSettings()</em>.</li><li>Check that everywhere where <em>ReCaptchaSettings</em> is used, it's used as an <em>IOptions&lt;ReCaptchaSettings&gt;</em> and not directly as site settings (except when the site settings are edited). E.g., <em>ReCaptchaLoginFilter</em> goes directly to the site settings instead of going the options way.</li></ul><p>With the latest updates by <a href="https://github.com/ghazi1567" target="_self">ghazi1567</a>, you can now streamline this process using the <em>ConfigureReCaptchaSettings()</em> extension method. This allows you to map your settings directly from <em>appsettings.json</em>, ensuring the <em>SiteKey</em> and <em>SecretKey</em> are applied automatically during application initialization. Check out the <a href="https://docs.orchardcore.net/en/latest/reference/modules/ReCaptcha/#recaptcha-settings-configuration" target="_blank">documentation of the ReCaptcha module for the details,</a> and thanks again, <a href="https://github.com/ghazi1567" target="_blank">ghazi1567,</a> for your first contribution!</p><p><img alt="ReCaptcha settings configuration" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260619/recaptcha-settings-configuration.png"></p><h3>Demos</h3><h4>Route Smarter: Chat Response Handlers</h4><p>There is a feature in the <a href="https://orchardcore.crestapps.com/docs/ai/" target="_blank">AI Suite</a> that is extremely helpful if you are exposing a chat widget to the public. It can change the chat's response using a chat response handler. This allows you to handle cases, like handing over a connection or a chat happening with AI. It means, like, you start a conversation with AI, and then the AI can decide to route you to a real person. So, using Chat Response Handlers lets you register custom handlers that route prompts to external systems, such as live agent platforms (e.g., Genesys, Twilio, Flex, LivePerson), rather than to AI.</p><p>This enables scenarios like:</p><ul><li><strong>Live agent handoff</strong>: An AI function detects the user needs human support and transfers the session to a live agent queue.</li><li><strong>Hybrid AI + human</strong>: AI handles initial triage, then a human agent takes over mid-conversation.</li><li><strong>Non-AI chat profiles</strong>: Configure a profile to skip AI entirely and route all prompts to an external system from the start.</li></ul><p><img alt="Chat Response Handlers" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260619/chat-response-handlers.png"></p><p><a href="https://www.youtube.com/watch?v=1FkqkNS9ZWA" target="_self">Check out this recording on YouTube</a> to see how Orchard can transfer you to a human agent via the <a href="https://lombiq.link/jmp/3149e504" target="_self">AI Chat Admin Widget and Frontend Widget</a>. In this demo by <a href="https://github.com/MikeAlhayek" target="_self">Mike Alhayek</a>, you can see that the AI Suite sends over the session with the context to Genesys, where the user can continue the conversation with a human.</p><p class="embed-container"><iframe width="840" height="473" src="https://www.youtube-nocookie.com/embed/1FkqkNS9ZWA" 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 3.0</h3><p>The community yesterday released the third major version of Orchard Core with several new features and additions! This release is packed with performance improvements, bug fixes, and a variety of enhancements, making it our best version yet. Whether you're building a new project or maintaining an existing one, Orchard Core 3.0 brings stability and power to your fingertips. Why Upgrade to Orchard Core 3.0?</p><ul><li><strong>Enhanced Performance</strong>: Your sites and applications will run faster, smoother, and more efficiently.</li><li><strong>Rock-Solid Stability</strong>: We've squashed numerous bugs, ensuring a more reliable and enjoyable development experience.</li><li><strong>Seamless Development</strong>: By sticking to version control best practices, we've ensured no breaking changes in any patch or minor release, allowing developers to confidently create modules and libraries that will work across the entire 3.x series.</li></ul><p>Prior to initiating this upgrade, thoroughly review the <a href="https://docs.orchardcore.net/en/latest/releases/3.0.0/" target="_self">documented list of breaking changes</a> (such as Orchard Core 3.0 requiring .NET 10) to ensure a smooth, hassle-free transition.</p><p>Orchard Core is available as a NuGet package that you can easily add to your ASP.NET Core solution. Here's how you can <a href="https://docs.orchardcore.net/en/latest/getting-started/" target="_self">get started with Orchard Core</a>.</p><p>As you can see from the release notes, Orchard Core 3.0 contains many new additions compared to the previous version. From week to week, we try to summarize the latest features of the new release to make sure you will get the most out of your new version! If you are curious about what you can achieve, you will find all the information you need in this blog post series over the coming weeks!</p><p><img alt="Orchard Core 3 release notes" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260619/orchard-core-3-relese-notes.png"></p><h3>Lombiq at BeerUP Tech Fest</h3><p>We had a blast at <a href="https://digitalk.tech/beerup-tech-fest-2026" target="_self">Digitalk-tech's BeerUP Tech Fest</a>! It was indeed more like a festival, with two tracks of talks running late into the night and a festival atmosphere in the garden. Met many people from Budapest's wider tech community and made many valuable connections.</p><p><a href="https://github.com/barthamark" target="_self">Márk Bartha</a>, <a href="https://github.com/piedone" target="_self">Zoltán István Lehóczky</a>, <a href="https://github.com/I3undy" target="_self">Milán Keszthelyi</a>, and <a href="https://github.com/domonkosgabor" target="_self">Gábor Domonkos</a>, as pictured, manned our table at the <a href="https://www.linkedin.com/company/vivetech" target="_self">ViVeTech Nyrt</a>, booth and engaged with attendees. Zoltán also gave the ".NET web architecture in regulated environments: CMS or custom development" talk, sharing our experiences working with clients in the healthcare, finance, insurance, construction, and government sectors.</p><p><img alt="Lombiq at BeerUP Tech Fest" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260619/lombiq-beerup-tech-fest.png"></p><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 415 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=onZW40R6hII" target="_self">this Orchard meeting</a>!</h5>]]></description>
      <pubDate>Fri, 19 Jun 2026 10:20:58 GMT</pubDate>
      <guid isPermaLink="true">https://orcharddojo.net/blog/orchard-core-3-0-admin-theme-in-orchard-core-the-developer-cheat-sheet-this-week-in-orchard-19-06-2026</guid>
    </item>
    <item>
      <title>Mastering Lucene Query Syntax in Orchard Core, How to quickly spin off your Orchard Core site? - This week in Orchard (12/06/2026)</title>
      <link>https://orcharddojo.net/blog/mastering-lucene-query-syntax-in-orchard-core-how-to-quickly-spin-off-your-orchard-core-site-this-week-in-orchard-12-06-2026</link>
      <description><![CDATA[<h2>Orchard Core updates</h2><h3>Mastering Lucene Query Syntax in Orchard Core</h3><p>Lost in your content? Lucene's got the map. From fuzzy searches to regex wizardry, Orchard Core's query syntax lets you hunt down any document with pinpoint precision, wildcards, ranges, booleans, and all. Whether you're searching for "everything" (*:*) or something that almost matches, Lucene speaks your language.</p><p>Thanks to <a href="https://github.com/Manuel-dev-ing" target="_self">Manuel Tamayo Montero</a>, you can now find <a href="https://docs.orchardcore.net/en/latest/guides/lucene-query-syntax/" target="_self">a new guide in the Orchard Core documentation</a> with several examples of operators, expressions, fuzzy searches, and wildcard searches.</p><p><img alt="Lucene Query Syntax Documentation" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260612/lucene-query-syntax-documentation.png"></p><h3>Use Jint async scripting APIs</h3><p>Jint 4.8 can now await promises and .NET task interop asynchronously. Orchard's JavaScript scripting paths were still executing through synchronous evaluation, which meant script-exposed async services had to block with <em>GetAwaiter().GetResult()</em>.</p><p>This change by <a href="https://github.com/sebastienros" target="_self">Sébastien Ros</a> is about supporting async JavaScript scripts, but more importantly, supporting the asynchronous execution of any JavaScript script. Previously, the <em>Evaluate</em> method was not async; now there is an <em>EvaluateAsync</em> method in Jint. This way we don't have to call <em>GetAwaiter().GetResult()</em> on scripting, and we can just <em>await</em> the result. It allows workflows and other features relying on JavaScript to run asynchronously without blocking.</p><p><img alt="Use Jint async scripting APIs" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260612/use-jint-async-scripting-apis.png"></p><h3>Demos</h3><h4>How to quickly spin off your Orchard Core site?</h4><p>The idea is to have an Electron app for people who are not really technical, or for those who just want to experiment with Orchard Core and quickly spin off a site. <a href="https://github.com/buzznick" target="_self">Nick Jackson</a> demos an application that lets you do that without going to an IDE.</p><p>If you hit the <em>New</em> button, you can choose between two different creation modes to set up your site:</p><ul><li><strong>Express</strong>: Quick setup with sensible default. Here you just need to pick a name, email, and recipe.</li><li><strong>Custom</strong>: Full control over database port, directory, and more.</li></ul><p>In both cases, you can select which modules and themes you want to install. For a custom installation, you can select which Orchard Core version to install, choose the recipe, the database provider, and so on.</p><p><img alt="Electron app select modules and themes" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260612/electron-app-select-modules-and-themes.png"></p><p>So, it's just a quick experiment using a desktop app to see how it can run with Orchard. And as always, if you want to see how you can use this application, <a href="https://youtu.be/LiOWG8rEj8A" target="_self">head to YouTube for a quick demo</a>!</p><p class="embed-container"><iframe width="840" height="473" src="https://www.youtube-nocookie.com/embed/LiOWG8rEj8A" 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>Rebuilding DotNest.com: Orchard Core, Tailwind 4, and a more maintainable workflow</h3><p>As you may know, we recently rebuilt <a href="https://lombiq.link/jmp/71c416c5" target="_self">DotNest.com</a> (our managed Orchard Core hosting platform), treating it as more than a visual refresh. The project had three main focuses:</p><ul><li>Better Landing Page structure.</li><li>Modernized Front-End Workflow.</li><li>Practical AI-Assisted development.</li></ul><p><a href="https://lombiq.link/jmp/992937dc" target="_self">Our post</a> concludes that all three areas yielded real benefits: cleaner content management, faster UI development, and clearer insights into where AI assistance genuinely helps versus where human oversight is essential. That experience ultimately led to the <a href="https://github.com/Lombiq/Tailwind-Agent-Skills" target="_self">Tailwind Agent Skills</a> and <a href="https://github.com/Lombiq/Orchard-Core-Agent-Skills" target="_self">Orchard Core Agent Skills</a> repositories.</p><p>If you're planning an Orchard Core website, a redesign, or a modernization project, <a href="https://lombiq.com/contact-us" target="_self">reach out to us</a>. We're always happy to help teams build Orchard Core solutions that remain easy to evolve as requirements grow over time.</p><p><img alt="Rebuilding DotNest.com" src="/media/BlogPost/this-week-in-orchard-posts/2026/20260612/rebuilding-dotnest.png"></p><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=kMZXFRfacsk" target="_self">this Orchard meeting</a>!</h5>]]></description>
      <pubDate>Fri, 12 Jun 2026 09:22:21 GMT</pubDate>
      <guid isPermaLink="true">https://orcharddojo.net/blog/mastering-lucene-query-syntax-in-orchard-core-how-to-quickly-spin-off-your-orchard-core-site-this-week-in-orchard-12-06-2026</guid>
    </item>
    <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>
  </channel>
</rss>