Our blog contains the activity stream of Orchard Dojo: general news, new resources or tutorials are announced here.

Copilot Integration, Last call: Speaker application for Orchard Harvest 2026 - This week in Orchard (01/05/2026)

This week, Mike Alhayek shows how to use Copilot directly inside Orchard Core!

But before that, check out some code where you can see that, starting now, Orchard supports static data migration methods, and suppressions are no longer required for migration steps that don't use instance state.

Welcome the first contribution from Jack Liu, who made the pagination of the List Part configurable to decide whether to show a full pager with page numbers or just the arrows to navigate to the previous and next pages.

Do you know that since 2013, we've been working with Óbuda University in a hands-on way to teach web development? If you are interested in our Orchard Core courses at the university, check out our post on our site!

As we mentioned, we started publishing last year's Harvest recordings to YouTube. Check them out for some inspiration, and don't forget to apply to be a speaker for this year's Harvest by the 5th of May, midnight, anywhere on Earth!

Ready to explore? Let's dive in!

Latest tutorials

Featured tags

AI
IIS
MCP
API
SMS
SEO
All tags >

Speaker application for Orchard Harvest 2026 and Orchard Harvest 2025 recordings - This week in Orchard (17/04/2026)

This week in Orchard, we've got some exciting updates you won't want to miss!

Mike Alhayek showcases new AI Documents features that bring Retrieval-Augmented Generation (RAG) to both Chat Interactions and Profiles.

Benedek Farkas introduces independent Render Liquid and Sanitize HTML settings for HTML and Markdown components, and thanks to Hisham Bin Ateya, there is a new Liquid filter that localizes dynamic data strings using the current culture.

And don't miss our Avastec case study, highlighting how we supported the event management backend for one of the largest retailers.

Oh, and have we mentioned that we will start publishing last year's Harvest recordings starting next Monday? Check them out for some inspiration and apply to be a speaker for this year's Harvest!

Ready to explore? Let's dive in!

Ability to delete Content Part and Content Type from the list page, Orchard Core-integrated AI modules now available on DotNest - This week in Orchard (22/08/2025)

Secure your early bird ticket to the Orchard Harvest conference! Our topics for this week are adding an ability to delete Content Part and Content Type from the list page, and adding an AdditionalProperties collection for BuildDocumentIndexContext! Oh, and have we mentioned that the Orchard Core-integrated AI modules are now available on DotNest? Without further ado, let's get started!

Reorganize the Admin Menu, Add PollingTime & MinimumIdleTime to BackgroundServiceOptions - This week in Orchard (13/12/2024)

This week's topics are adding PollingTime and MinimumIdleTime to BackgroundServiceOptions and showing the Remove Field/Part button when it is system-defined. The community is reorganizing the Admin Menu, and we need your valuable feedback to build the best admin menu for Orchard Core!

Auto Attach the DashboardPart to content types with DashboardWidget stereotype, how to add import/export to an ASP.NET Core app - This week in Orchard (29/11/2024)

This week's topics include auto-attaching the DashboardPart to content types with the DashboardWidget stereotype and supporting randomly ordering results in SQL queries. Don't forget to check out our newest Orchard Nuggets post about adding import/export to an ASP.NET Core app! Let's see the details!

Orchard Core 1.8, add a way to provide a custom Elasticsearch query - This week in Orchard (12/01/2024)

We are thrilled to announce that Orchard Core 1.8 is now available! Check out this post to know everything about the latest release of Orchard Core. In the upcoming weeks, we will check out the newest features and additions of Orchard Core 1.8. Let's get started! Orchard Core updates Fix an exception when creating content type without any content part Let's assume the scenario where you create a new content type with a name but you are not adding any content parts to it. If you hit Save without any added content parts, you will get a NullReferenceException. The fix here is to check if the partNames array is null. The same check applies to the fieldNames array as well. Add a way to provide a custom Elasticsearch query In the search module, the only available option to conduct a search is using query-string or multi-match query by providing a list of default fields to search. What if we want to customize the query, for example, by using fuzziness or other options? Currently, there is no simple way to configure the default search to use advanced search options. This is a new feature such that you can define what is sent to Elasticsearch when you type some terms in the search box. As you can see in the following screencast; you can define the following custom query to perform advanced operations like fuzziness. { "query": { "match": { "Content.ContentItem.FullText": { "query": "{{ term }}", "fuzziness": "AUTO", "analyzer": "whitespace" } } }} The documentation page of the Elasticsearch module has also been updated, and the example for setting the default search settings accepts a SearchType option where you can use 'custom' for a custom query in DefaultQuery and 'query_string' for a Query String Query search. Leave it blank for the default, which is a Multi-Match Query search. News from the community Orchard Core 1.8 and Orchard Core 1.8.1 The community recently released the latest 1.8 version of Orchard Core with several new features and additions! In this update, we've introduced several significant changes that may require your attention before upgrading. Additionally, performance-related enhancements have been implemented to optimize your app's scalability, especially when dealing with a large number of tenants. The Admin Theme was upgraded to Bootstrap 5, and from now on, the theme mode is set to auto, which allows us to use the default device color preference, which could be dark or light. A new option for restarting a specific Workflow instance has been incorporated, involving adjustments to both the IActivity and IWorkflowManager interfaces, and the HTTP error views are now in the form of shapes. The upper navigation bar has been transformed into a customizable shape (Navbar shape), allowing for easy integration of items. As an enhancement for the Elasticssearch feature, we introduced a new option that permits the definition of a custom query for the default search. And we have a lot more to cover! Here are all the details of the release. Note that this release removes support for net6.0 and net7.0. Only net8.0 is supported. Orchard Core 1.8.1 was released a few days after the 1.8 one to address some issues of the 1.8 release. If you open up nuget.org and search for the OrchardCore.Application.Cms.Targets package, you will find the newest released version of Orchard Core! Upgrade your solution to 1.8.1 now! Feel free to drop on the dedicated Gitter chat or use the Discussions on GitHub and ask questions! As we mentioned, Orchard Core is available as a NuGet package which you can easily add to your ASP.NET Core solution. Here's how you can get started with Orchard Core. Orchard Dojo Newsletter Lombiq's Orchard Dojo Newsletter has 480 subscribers! We have started this newsletter to inform the community around Orchard of the latest news about the platform. By subscribing to this newsletter, you will get an e-mail whenever a new post is published to Orchard Dojo, including This week in Orchard of course. Do you know of other Orchard enthusiasts who would like to read our weekly articles? Tell them to subscribe here! 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 this Orchard meeting!

Google Service improvements, Lombiq Content Editors for Orchard Core - This week in Orchard (07/07/2023)

Fix Google Service dependencies and include Google Analytics and Tag Manager when the user consents. This week's demo is about the new Lombiq Content Editors for the Orchard Core module! Check out our post for the details! Orchard Core updates Fix Google Service dependencies Google Tag Manager (GTM) is a bridge/middle-man service, that would allow you to enable other services like Google Analytics on your website. So, if you have GTM installed on your website, you can use the GTM portal to enable Google Analytics using the Measurement ID. You can also enable Google Analytics without the use of GMT if you want. The two features OrchardCore.Google.TagManager and OrchardCore.Google.Analytics should not depend on each other as one should enable either. If you enable the Google Tag Manager feature by navigating to Configuration -> Features, you will find a new option under Configuration -> Settings. It is called Google Tag Manager, where you can specify the container ID defined in your Google Tag Manager account. Include Google Analytics and Tag Manager when the user consents And while we are talking about Google-related services, let's check out another improvement regarding Google-related services! The Google Analytics feature always includes the Google Analytics tracking script in GoogleAnalyticsFilter. Instead, it should only include this if the user gave consent to tracking otherwise, it's a legal risk under GDPR for EU companies. Potentially something similar for websites run by other entities around the world too. Fortunately, the built-in ASP.NET Core feature can be used for this, just by adding the below check to GoogleAnalyticsFilter. Demos Lombiq Content Editors for Orchard Core This time we will check out the Lombiq Content Editors for Orchard Core module. This feature was originally built for Orchard 1 a couple of years ago, and it contained a lot of interesting features for advanced content editing, including async editors, which we will focus on today. It was a closed-source module of Lombiq, and this is the rewritten version of that for Orchard Core. As we mentioned, the primary feature of this module is the Async Editor feature, which we already used when we built the License Request form for Smithsonian Folkways Recordings. We wrote a blog post about how we upgraded that site to Orchard Core, and you can also check out a demo video of the app and our experiences developing it here. So, the Async Editor feature of this module provides an infrastructure for creating editors that can load and save content asynchronously. The editor can optionally render multiple pages where each page can load and save data independently. To demonstrate this feature, we will utilize our Open-Source Orchard Core Extensions solution that contains most of Lombiq's open-source Orchard modules and themes, as well as related utilities and libraries. Last week we mentioned that this solution has been updated to the latest and greatest 1.6 Orchard Core version. If you clone this repository and set up your site using the TEST: Lombiq's Open-Source Orchard Core Extensions recipe, the Lombiq Content Editors - Samples feature will be enabled by default which - of course - contains samples for Lombiq Content Editors. Meaning that if you click on the Employee (admin) option from the Content Editors Samples drop-down menu after your site has been set up, you will be redirected to the admin UI of Orchard Core, where you will see an editor of the Employee content item. To be more precise, this is the first editor group (PersonalDetails) of this content item. If you fill out the first group and click Save and Next, it will post the form to the API and won't reload the page. The backend will validate the form, and then if everything goes right, it will show you the HTML code of the next editor group and load it to the editor. Once you click on the Submit button on the second editor group, the editor will publish the content item. You can see the editor groups with a nice name (Personal Details, Employment Details), which provides some pagination to you as well, so you can go back and forth by clicking on these. And of course, you can utilize the async editors on the front end as well, and a good example of that is the License Request form for Smithsonian Folkways Recordings that we have just mentioned. If you would like to know more about this feature, check out this video on YouTube where you can see some code as well. And don't forget to check out the samples module too, where you can find the code of the previously mentioned editor with tons of comments about how you can utilize this async editor in your own Orchard Core site! News from the community Orchard Dojo Newsletter Lombiq's Orchard Dojo Newsletter has 471 subscribers! We have started this newsletter to inform the community around Orchard of the latest news about the platform. By subscribing to this newsletter, you will get an e-mail whenever a new post is published to Orchard Dojo, including This week in Orchard of course. Do you know of other Orchard enthusiasts who would like to read our weekly articles? Tell them to subscribe here! 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 this Orchard meeting!

Add AlterAsync for a named part, Transliteration Feature - This week in Orchard (14/04/2023)

Add AlterAsync for a named part, updating documentation to use Program.cs instead of Startup.cs, and a demo about the Transliteration Feature! Check out our post for the details! Orchard Core updates Updating documentation to use Program.cs instead of Startup.cs Within .NET 6, Startup.cs has been sunsetted. In the new world, it is still possible to use a Startup.cs, however, it is not a mandatory class anymore. This means when upgrading, you do not need to do anything if you wish so. However, if you want your code to use some of the latest framework features, you will need to perform some refactoring by munging the two files together. And now, the documentation for Orchard Core has been updated with new code samples to show you how to register Orchard CMS service in your Program.cs file when creating a new ASP.NET Core Web Application using Visual Studio. Add AlterAsync for a named part There is an Alter extension method in Orchard Core that you can use to modify a new or existing content element by name. But the awaitable AlterAsync was missing from ContentExtensions. Now you will find an AlterAsync extension method that supports named parts like Alter. Demos Transliteration Feature Transliteration helps us to pronounce words in another language whereas translation gives us the meaning of words. Transliteration changes the words from one language or alphabet into another corresponding, with similar-sounding letters with different characters. So, for this demo, we will clone the following GitHub repository, which contains a set of modules for Orchard Core CMS that is driven by community members who love Orchard Core. This will encourage all the passionate developers to build modules that aren't included in Orchard Core. Such modules may be necessary for the community or essential for any sort of CMS. The module that enables transliteration using the default implementation of the ITransliterationService service is called the Transliteration feature. If you run this solution and enter the admin site using the admin username and admin@OCC123 password, you can navigate to Configuration -> Features. Search for the "transliteration" word to enable the Transliteration feature. Now you can inject the ITransliterationService, then use Transliterate() method to transliterate from one script to another. Here you can see we injected the ITransliterationService and passed the script and the text itself which we wanted to transliterate. There is a DefaultTransliterateRuleProvider that supports converting Cyrillic and Arabic letters to Latin. Meaning that in our example, we wanted to convert a Cyrillic text to Latin. Let's run the solution and check out the content of this page! And as you can see, we wrote "Welcome to Orchard Core" and "Feel free to browse the menu and discover all its possibilities" two times here. For the first time, we used Latin letters, and for the second time, we used Cyrillic letters. And by using the TransliterationService, the Cyrillic letters were converted to Latin. And as always, if you would like to learn more about this module, don't forget to check out this recording on YouTube! News from the community Orchard Dojo Newsletter Lombiq's Orchard Dojo Newsletter has 435 subscribers! We have started this newsletter to inform the community around Orchard of the latest news about the platform. By subscribing to this newsletter, you will get an e-mail whenever a new post is published to Orchard Dojo, including This week in Orchard of course. Do you know of other Orchard enthusiasts who would like to read our weekly articles? Tell them to subscribe here! 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 this Orchard meeting!

Add new permission to allow editing content owner, add new GetAsync extension - This week in Orchard (17/03/2023)

Updating Workflows documentation, adding new permission to allow editing content owner, and adding new GetAsync extension. Interested in the details? Well, then check out our post for the details! Orchard Core updates Update Workflows docs Let's say you have a workflow event (implemented EventActivity), and you want to print a property value using Liquid when using a for loop like this: <h4>Here is the responses</h4><ul> {% for item in Workflow.Input["ThresholdSummaries"] %} <li>The response to '{{ item.Title }}' was '{{ item.Respond }}' while threshold is '{{ item.Threshold }}'</li> {% endfor %}</ul> However, the notification replaces {{ item.Title }}, {{ item.Respond }}, and {{ item.Threshold }} by empty string instead of the actual value. The reason for that is from memory, you need to define a Liquid MemberAccessStrategy for this custom type to allow its properties to be accessed. The Orchard Core documentation has been updated to describe how you can trigger a custom event activity and register a member access strategy if you are looking to use Liquid to access the member of a custom object. Add new permission to allow editing content owner Currently, SiteOwner permission is required to be able to see/edit the Common Part info like the owner. Let's say you want to allow a moderator to change the owner of a specific content type. Currently, there is no way to do that without granting moderators SiteOwner which isn't acceptable. From now on, we have EditContentOwner and EditContentOwner_{} permission to control who can edit the owner of a content item when Common Part is attached. Let's see this quickly in action! Here we assume that you set up your site using the Blog recipe. First of all, we have to make sure that we are logged in with a user who has permission "Edit the owner of a content item permission". If you check out the permissions of the Administrator role, you will see that users within this role have this permission by default. Now, we will modify the content definition of the Blog Post content type a little bit, and attach the Common Part to it. We can do it under Content -> Content Definition -> Content Types where we need to hit the Edit button near the Blog Post. After that, we can simply add the Common Part to the Blog Post. Before finalizing editing the content definition, don't forget to edit the Common Part settings and put a tick into the "Display owner editor" checkbox. It's time to see the result of our work! We have one predefined blog post on the site, so we will edit that one. And as you can see, the first textbox here is the one called Owner (we can move this textbox anywhere of course) with the value "admin". That's because the username of our super user is "admin" and we set up the site with this user. And of course, now you can modify the owner user of this content item. But don't forget, here you have to provide the user's name of an existing user. In the following screen, we tried to change the owner to "admin2" but we faced an error because we don't have a user with that user name in our system. Add new GetAsync extension Currently, we have GetAsync(IEnumerable<string> contentItemIds, bool latest = false) and GetAsync(string contentItemId, VersionOptions options) but not GetAsync(IEnumerable<string> contentItemIds, VersionOptions options). When doing a bulk update, it is much more helpful to use GetAsync(IEnumerable<string> contentItemIds, VersionOptions options) than GetAsync(IEnumerable<string> contentItemIds, bool latest = false) if we want to get multiple VersionOptions.DraftRequired, not just the latest. And here you can see the new GetAsync method, which accepts the contentItemIds and the VersionOptions! News from the community Orchard Dojo Newsletter Lombiq's Orchard Dojo Newsletter has 412 subscribers! We have started this newsletter to inform the community around Orchard of the latest news about the platform. By subscribing to this newsletter, you will get an e-mail whenever a new post is published to Orchard Dojo, including This week in Orchard of course. Do you know of other Orchard enthusiasts who you think would like to read our weekly articles? Tell them to subscribe here! 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 this Orchard meeting!

Improved Feature Profiles feature, self-service tenant registration - This week in Orchard (03/03/2023)

Add placement example for dynamic parts, responsive Admin Theme, improve the Feature Profiles feature, and a demo about self-service tenant registration! Check out our post for the details! Orchard Core updates Added placement example for dynamic parts We have an article on the Orchard Core Documentation site that is about display management and placement files. Any module or theme can contain an optional placement.json file providing custom placement logic. This article describes the format of the placement.json file, how to render a shape, editor shape placement, and so on. Now you can see a new section here as well, telling you the structure of the placement file when you are working with dynamic parts. Responsive Admin Theme Last November, we mentioned that a huge improvement is coming to Orchard Core that makes the Admin Theme responsive. Note, that it's an option that is disabled by default, and you have to do some modifications in the appsettings.json file to make this work (under the StyleSettings section), and after that, your custom editors rendered in the admin have to support this, by utilizing the necessary helpers, like Orchard.GetEndCssClasses(). You can read more about how to set up the TheAdmin theme in the Change Logs of the upcoming release. Improve the Feature Profiles feature If a Feature Profile is renamed, it'll break existing tenants since the name is stored in the appsettings.json file, and also, other modules are not able to contribute to the Feature Profiles setup. We have had Feature Profiles for a long time now in Orchard Core, and if you haven't heard about it, you can check out a demo in this post. In a nutshell, this is about using app settings/configuration to add the ability to restrict the features and/or themes that are available to either a tenant and/or all tenants or a mix of both. You can add Feature Profiles under Configuration -> Tenant Feature Profiles once the Tenant Feature Profiles module is enabled. Here you can set the rules that you want to use. By default, you can have an Include and an Exclude rule. By using these, you can easily say that I don't want to allow the given feature for the assigned tenants or I want to allow my custom feature to the given tenants. The Expression contains the name of the feature, but it can include stars like OrchardCore.*Templates that will match the OrchardCore.Templates, OrchardCore.AdminTemplates and OrchardCore.ShortCodes.Templates feature as well. Let's say that we don't want to allow the TheAgencyTheme and the features with names that start with OrchardCore. and end with .Templates. And if you create a tenant, you can optionally specify which Feature Profile should be applied to the given tenant. You can rename the Feature Profile if you want, and renaming it could cause some issues. So, from now on when using Feature Profiles, we add an ID to the profile instead of using the existing editable name. This way renaming the profile won't break anything. To keep it backward compatible, we treat the current name as the ID for old entries. Note renaming old entries won't cause any issues since we consider the ID as the name before the new name is saved. If you check out the appsettings.json file of this tenant, you will see the ID here. And also, we allow the user to have multiple profiles more than explained in In a SaaS setup, how can the SaaS admin/owner manage the tenant features? Demos Self-service tenant registration In this demo, we can see a module created by Niraj Soni. He provides you with a new way to implement a site sign-up, so you actually create steps for someone to sign up, pay and get access to the tenant in a SaaS environment and everything happens right away. If you install the module, you will see a Registration Pages option in the menu under Multi Tenancy, where you can actually create the flow of the sign-up process. Here is a page called School, where you can capture school-related information using widgets during the sign-up process, like address, city, state, zip, etc. On another page, you can capture information to create an admin account, like user name, password, and email. There is also a step to verify email and capture payment. This contains integration with Stripe, so this will be utilizing Stripe. And finally, you can review and finish the whole process. Using this feature, you can add any page you want; you can remove a page if you want. And that's just the surface! If you would like to see this in action, check out this recording on YouTube! News from the community Orchard Dojo Newsletter Lombiq's Orchard Dojo Newsletter has 406 subscribers! We have started this newsletter to inform the community around Orchard of the latest news about the platform. By subscribing to this newsletter, you will get an e-mail whenever a new post is published to Orchard Dojo, including This week in Orchard of course. Do you know of other Orchard enthusiasts who would like to read our weekly articles? Tell them to subscribe here! 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 this Orchard meeting!

Add a way to retrieve a UTC now DateTime in Liquid, Responsive Admin Theme - This week in Orchard (04/11/2022)

Add a way to retrieve a UTC now DateTime in Liquid, change the Query Schema editor to Monaco Editor, allowing multiple INavigationManager, and a demo about the responsive Admin Theme! Let's get started! Orchard Core updates Add a way to retrieve a UTC now DateTime in Liquid Orchard Core has a new Liquid helper called utc, which converts a local date and time to the UTC date and time based on the site settings. Let's say we type in the following expressions: utc: {{ "utc" | local | date: "%c" }}local : {{ "now" | local | date: "%c" }}local is the default : {{ "now" | date: "%c" }} This will appear as follows. You can see the current date time in UTC and in the site time zone as well. This new helper is also added to the documentation of Orchard Core. Change the Query Schema editor to Monaco Editor If you have a site set up with the Blog recipe, you have one predefined query, called RecentBlogPosts. You can edit this query under Search -> Queries -> All queries. And as you may notice, the schema editor now uses the Monaco Editor that powers VS Code too. Allowing multiple INavigationManager In the past, if you were trying to have multiple INavigationManagers, you could not do that because the TryAddScoped is replacing the existing implementations. So, to be able to have multiple INavigationManager implementations, you have to use TryAddEnumerable, which adds a ServiceDescriptor if an existing descriptor with the same ServiceType and an implementation that does not already exist in services. And here, you can see that the NavigationShapes class can now handle multiple INavigationManager implementations. Demos Responsive Admin Theme This demo is about a feature that you can see in this pull request to make the Admin Theme responsive. First of all, you can see that fields are listed with the title being at the start point, in this case on the left. So, if you have an RTL text direction, it will be on the right. The cool thing about this is that you utilize more of the width of the screen when the screen is large and you reduce the scrolling if unnecessary. But if you have a smaller screen, the labels go back to the top as what you used to see. We have the same thing for content parts as well. Here you can see how everything appears if you have a wide or a narrow screen. But not everybody may like to see the labels on the left like this, it means this is optional, and by default, nothing will change unless you explicitly change it. This one was done by adding a new StyeSettings section under the TheAdminTheme section to the appseetings.json where you can define classes. If you chose to utilize this, you can add a setting per tenant, and you can customize the look and feel of the Admin Theme for every tenant. And how does this work is the classes are placed by helpers. Let's check out the TitlePart.Edit.cshtml for example. As you can see, the GetLabelCssClasses() and GetEndCssClasses() Orchard helpers read the settings and apply the class names that you have provided in the appsettings.json file. This means that if you want to use this feature, your custom views have to be updated to utilize these helpers. And all the new built-in views of the source code of Orchard Core have to use these helpers in the future. If you would like to know more about this feature, don't forget to check out this recording on YouTube! News from the community Orchard Harvest 2023 For those who are too young to remember, we had Orchard conferences, called Orchard Harvest. And the conference website was available under orchardharvest.org, but unfortunately, it's not anymore. The last one was in 2017 in New York. So, having another get-together is very much overdue. If you would like to see or get a feeling of how this looked like before, we have a couple of mood videos on the Orchard YouTube channel, like this one from the first conference. The point is that we should really think about organizing the next one, and we at Lombiq can take part in that or provide an organizing role with anybody who wants to take part. If you have any feedback or you are looking forward to having a Harvest again, please share your opinion with us by filling out this survey about the upcoming Orchard Harvest! Orchard Dojo Newsletter Lombiq's Orchard Dojo Newsletter has 386 subscribers! We have started this newsletter to inform the community around Orchard of the latest news about the platform. By subscribing to this newsletter, you will get an e-mail whenever a new post is published to Orchard Dojo, including This week in Orchard of course. Do you know of other Orchard enthusiasts who you think would like to read our weekly articles? Tell them to subscribe here! If you are interested in more news around Orchard and the details of the topics above, don't forget to check out the recording of this Orchard meeting!