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

Orchard Harvest 2026 Early Bird tickets, exploring Orchard Core's Next-Gen Visual Layout Editor Feature - This week in Orchard (05/06/2026)

Explore a powerful new module for Orchard Core by Nick Jackson that lets you visually organize content type editor fields and parts into tabs, cards, and columns via an intuitive drag-and-drop interface, with zero coding or placement.json editing required!

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? Check out this brand-new guide by Manuel Tamayo Montero!

We're excited to open registration for Orchard Harvest 2026! Secure your spot today for the early bird pricing and get ready to level up your skills!

Latest tutorials

Featured tags

AI
IIS
SMS
MCP
API
SEO
All tags >

Taxonomy and contained content items routing, new options for TitlePart and AliasPart - This week in Orchard (28/02/2020)

New options for TitlePart and AliasPart, adding CodeMirror support for HtmlBodyPart and HtmlField, the Pager shape and demo about the taxonomy and contained content items routing are waiting for you in our upcoming post with many other cool features! And about the news from the community: there is a new Orchard Core website, news about the upcoming Harvest and welcome a new team member in Lombiq Technologies! Orchard Core updates Disable feature confirmation messages When we disable a feature we will get a warning that says that the feature that you would like to disable has dependent features that are enabled. Let's disable the Widgets feature. In this case, we will get the following warning message, because Flows and Layers are built on the Widgets module. New options for TitlePart and AliasPart There is a new setting, called AliasPartOptions. Using this new option you can define that the alias can be editable when editing a content item from the admin UI or make it disabled, which means it will be generated automatically using the defined pattern. And when using the TitlePart, you will also find a new option there, called EditableRequired. This means admins can edit the title of the content item and it needs to have a value because it's required. Html mode for CodeMirror on HtmlField and HtmlBodyPart standard editors CodeMirror is a versatile text editor implemented in JavaScript for the browser. It is specialized for editing code and comes with a number of language modes and addons that implement more advanced editing functionality. And now if you set up your site using the Blog recipe and create a new article, the editor of the HtmlBodyPart will come with the CodeMirror support! Furthermore, the Standard editor mode of the HtmlField is also got the CodeMirror support. Moreover, Orchard Core using the latest version of CodeMirror, which is 5.52.0. Pager shape At the bottom of the documentation of OrchardCore.Navigation you will find code examples both for C# and Liquid about how to use the Pager shape in Orchard Core. Add a recipe step to create scope for OpenID Now you can set the connect scope of the OpenID using recipe steps, that you can do in the following way, that could be found in the documentation of OrchardCore.OpenId. There is also a possibility to set the Token Validation Settings with recipe steps. Here you have to provide: Name: unique name of the validation settings. Audience: defines the intended recipient of the token that must be checked. Authority: the address of the remote OpenID Connect server that issued the token. Filter deployment steps There is a new search box on the UI for the deployment steps to filter the list of the available steps. To check out this feature create a new deployment plan under Configuration -> Import/Export -> Deployment Plans then add a new step to it. In this modal window, you will find the textbox with the Filter placeholder text in it. In our case, we typed settings, which means these three steps will be the results of our search. Sitemaps module We wrote about a very cool feature for Orchard Core, which is the Sitemaps support three times now: here, here and here. In every post, we described the features of this module and showed the way how you can use them. And you can also find a recording of this feature on YouTube. The reason why we mentioned that is because this feature is now merged in the dev branch of Orchard Core, thanks to Dean Marcussen! He also added nice documentation about how to create sitemaps, localize sitemaps, cache sitemaps and so on. Setting and Removing HttpContext.Items from Liquid template Now there is a new Liquid filter called httpcontext_add_items, that adds key/value to the HttpContext.Items collection. And you can also remove items from the HttpContext by using the httpcontext_remove_items Liquid filter. You can read more about these two new Liquid filters in the documentation. Do note though that there are possible security implications to this, see the discussion under the pull request. Support most commonly used error pages According to Pingdom research, the top 5 most common errors are 401, 400, 404, 403, 500. So, this is about adding more custom views for error codes that you can change in your themes. Check the content of the DiagnosticsController.cs in the OrchardCore.Diagnostics module. Demos Taxonomy and contained content items routing The main issue is that currently we don't have routing for taxonomies or contained content items. The taxonomy routing is about we would able to route an item inside a taxonomy for a term. The goal is to be able to list all the things that are associated with this term. The issue is that in the case of BagParts or anything that is contained in a content item can't be routed right now, because Autoroute doesn't work on sub-content items. The second thing we looked at was the dynamic routing to be able to define a patterned route in a content item. In this case, multiple URLs would match the same content item and the content item could use these route values to render something differently or do queries. These are two different things, but we are talking about them at the same time. If you are interested in how to do that in Orchard Core check out the following demo on YouTube about this upcoming feature! News from the community A new website using Orchard Core Luxury Card is a global leader in the premium credit card market. From patented metal cards to a 24/7 Concierge service and app, their mission is to shape the industry with innovation, value, and service. With leading airfare and cashback redemption rates along with first-class benefits, they believe your credit card can pay for itself. If you are interested in more websites using Orchard and Orchard Core, don't forget to visit Show Orchard. Show Orchard is a website for showing representative Orchard CMS (and now Orchard Core) websites all around the internet. It was started by Ryan Drew Burnett, but since he doesn't work with Orchard anymore, as announced earlier it is now maintained by our team at Lombiq Technologies. Freshest news about the next Harvest We have a room booked for the dates June 22-24. This is the reserved interval that we will have for sure now. The maximum people can fit in the room is 50 people. The only concern is that it could be not enough, it would be nice to know how many people are interested in coming to the next Harvest. There will be a questionnaire or something to be able to measure somehow the number of people who could be the possible attendees at the next conference. New team member in Lombiq We have a new team member, Gábor! Turned from English studies to competitive gaming to software development and Orchard Core. Check out his bio on our About us page! Orchard Dojo Newsletter Now we have 119 subscribers of the Lombiq's Orchard Dojo Newsletter! We have started this newsletter to inform the community around Orchard with the latest news about the platform. By subscribing to this newsletter, you will get an e-mail whenever a new post 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 week's Orchard meeting!

Display mode options to Parts, Search views for themes - This week in Orchard (14/02/2020)

Display mode options to Content Parts, adding search views for themes, import recipe from a JSON file and many other changes and new features come in our current post. After we will see a real-world example about how to use Orchard Core in production. Then check a new website built with Orchard Core and finally let's talk about the latest news about the Harvest! Orchard Core updates Add revision date in the documentation Now each page of the documentation will display the revision date of the current page. Open any page of the documentation and scroll down to the bottom of it. There you will see the date of the last update. Use ControllerModelUpdater on controller instead of implementing IUpdateModel When you want to Build, Update or Validate your model from controllers, you don't have to implement IUpdateModel, because each of them can be resolved by injecting the IUpdateModelAccessor. Here you can see the NodeController, where we need to build the display for the AdminNode using the TreeThumbnail display type (line 74). Instead of passing this, we can pass the _updateModelAccessor.ModelUpdater. Only show fields in Summary and Detail display types In the past, if you added a field (or a few fields) to a blog it's SummaryAdmin view shows in the list of blog posts. That's because the fields are automatically displayed in SummaryAdmin. Now, this feature prevents to display all the fields automatically in the SummaryAdmin. If you check out a driver of a field, you will see that the values of the Location now changed everywhere in the case of the Initialize method. Add display mode option to parts Now we can have custom display modes for Content Parts too! For example, now you could define which tag would you like for the title and the name of the tag could be the display mode of the TitlePart. Fix themes search views fix Changing all the themes to provide a nice view for the search feature. There was a default version of it, but now each theme has it's own and now it looks great in every built-in theme. If you want to change the look of the search form, you would override the SearchForm template, if you would like to override the search results page, the SearchResults template will be the one you are looking for. But of course, you can override the whole look and feel of the search template just by overriding the Search template. Here you could see the Agency theme with the search form and search results. And you could find really great and detailed documentation about how to implement a website full-text search and everything about the new templates. YesSQL: when to call Session.Save? You can call _session.Save(contentItem) as many times as you want, it's free. It's just marking a content item to be saved once the session will be disposed. There will nothing happen when you call _session.Save(contentItem). If you call it multiple times, the first time it will mark it, the second time it will say: It's already in the dictionary of things to be saved. It will be just a dictionary lookup. Call _session.Save(contentItem) when you think the thing should be saved once the session or the request is done. And if multiple things update a content item and you need to tell the session to save it, they can all call _session.Save(contentItem). Import recipe from a JSON file When you are importing a recipe, you have to upload a ZIP file. The logic then extracted that file and found the JSON file in it. From now you can pass a JSON file when importing a deployment package, not just a ZIP. Recipes documentation And if we are talking about that you can import a recipe from a JSON file, we also need to mention that the documentation of Orchard Core has got a great detailed page about the recipes. Here you could see the format of the recipe, the possible steps of the recipe and see samples about each of the steps (Roles Step, Queries Step, Media Step, Layers Step, etc.). RequireUniqueEmail message Now when you would like to register a new user with an email address, that already exists in the system, you will get an error message says that the email is already used. Demos SaaS and OpenID: a real-world example There is a solution called Trivest Connect (an Enterprise Resource Planning application) that currently includes five different companies. One problem that Trivest solves that everybody sends messages to each other and there is no standardization, that is not so optimal. In the use of Trives Connect with many other features there is a standard document format and with that, it is easier to exchange orders, invoices, VIA, etc. Trivest Connect is based on Orchard Core installed with the Software as a Service recipe that is using the built-in Open ID Server. Here you could see that there are really just a few modules enabled in the admin UI. What customers can do is they can send messages to other customers. This is just an administrator portal because, in reality, this is all done behind the scenes in the ERPs. If you would like to see the whole demo of this real-world example just head to YouTube and watch the recording! News from the community A new website using Orchard Core RA Capital Management is a multi-stage investment manager dedicated to evidence-based investing in public and private healthcare and life science companies developing drugs, medical devices, and diagnostics. And they decided to use Orchard Core to implement their website! If you are interested in more websites using Orchard and Orchard Core, don't forget to visit Show Orchard. Show Orchard is a website for showing representative Orchard CMS (and now Orchard Core) websites all around the internet. It was started by Ryan Drew Burnett, but since he doesn't work with Orchard anymore, as announced earlier it is now maintained by our team at Lombiq Technologies. Latest news about the Harvest There is a new offer from someone from the UK to host Harvest in their offices. They mention 50 people fit in the office. This office is located in London. The possible date for hold the Harvest is the last full week of June. We have to decide the length of the conference and talk about holding a workshop during Harvest. By the past, we have usually done it at the beginning of the week, because this way you can arrive at the weekend, take your time or get back from jetlag or do some tourism. And then if you want you can extend your stay to the week. So 22-23-24 might be the tentative dates. Usually, 2 days are too short and 3 days are too long, but we will see. What do you think about June 22-23? Feel free to comment on that on Gitter too! Orchard Dojo Newsletter Now we have 116 subscribers of the Lombiq's Orchard Dojo Newsletter! We have started this newsletter to inform the community around Orchard with the latest news about the platform. By subscribing to this newsletter, you will get an e-mail whenever a new post 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 week's Orchard meeting!

User disabled/enabled events, filter admin menu - This week in Orchard (07/02/2020)

Orchard Core has got several new features and fixes this week! With many others, we will see the new user disabled/enabled events, the new IAreaControllerRouteMapper implementation, the way how you can filter the admin menu then show you a demo about how to integrate stripe.js in your Orchard Core application with workflows. And finally, say some words about a new tentative date and location for the upcoming Harvest! Orchard Core updates Reduce the length of indexes for Content Fields Indexing Let's focus on the LinkFieldIndex and check these two columns: the Url and the BigUrl. The Url is the one that is trimmed and indexed, and the BigUrl is the original data that is not indexed. If you are using MySQL, the maximum length that this provider can support in an index under UTF8 collection is 768. Now we set the maximum length of the indexed columns is to not be longer than the supported length. Do not check "Include all content types" in deployment step by default When you create a content type deployment step, the default is to export all types. Now, this is unchecked by default. Adding User Disabled/Enabled Events The IUserCreatedEventHandler is changed to IUserEventHandler and there are two new events: DisabledAsync and EnabledAsync events. These two new events now triggered in the UserDisplayDriver that will trigger the two newly created workflow events to make it work in your workflows. Adding IAreaControllerRouteMapper Now there is an updated way how the admin prefix is applied by using custom convention and constraint that will ensure that the admin URLs start with the admin prefix. And also ensure that it is done correctly for the controllers that are named AdminController, not the ones that start with admin. Before every controller that starts with admin could be an admin controller, but now with this new convention, it has been decided that only controllers named AdminController can be an admin controller. For example, a controller named AdminItemController doesn't fall into this category, so it can't be an admin controller. A concrete implementation being AdminAreaControllerRouteMapper that uses AdminOptions to provide a default route pattern that is used in the OrchardCore.MVC startup. Just as a reminder, if you have admin controllers you have to name them AdminController or have the Admin attribute on that. This will ensure that the URL is strictly using the admin prefix (or whatever you set it), and the user has the admin permission and this will also apply the admin theme to the views from this controller. Filter admin menu Head to Configuration -> Settings -> Admin and put a tick near the Enable Admin Menu filter checkbox. Now you will have a new textbox at the top of the admin menu with a Filter placeholder text inside it. If you type something here you can filter the menu items and could find easier the option you want. And if you hit CTRL+SHIFT+F, this textbox will get the focus and you can type the menu option that you are looking for without needing to click into this textbox. Add menus content listing and create option If you navigate to the Content option of the admin menu you will find a new one, called Menus. This feature is listing all the menus of the system, and if you can see, there is a new button, called New Menu. By clicking on this button you can create a new Menu without needed the Menu content type to be creatable. Make lists sortable with ordering setting A few weeks ago we write about a way how you can make sortable lists using the Enable Ordering setting of the ListPart and you can also find a demo on YouTube about this feature. The good news is this feature is now merged to the dev branch of Orchard Core! Checkout to the latest changeset of the dev branch and try this feature now. Then don't forget to tell your opinion about it in the comments section! Razor Helpers documentation Now there is a new page in the Orchard Core documentation that contains the extension methods that are available in Razor using @Orchard. This documentation also contains the way how to use an extension method in a view and in a controller too. Demos Stripe.js and Workflows You can use Stripe.js’ APIs to tokenize customer information, collect sensitive card data using customizable Stripe Elements, and accept payments with browser payment APIs like Apple Pay and the Payment Request API. And of course, you can add Stripe.js to your Orchard Core site too! Let's create a registration form where users can register and after successful registration, they can pay the fee for a ticket. After the user submits the form, here comes a huge workflow, that will validate all the fields of the form. Here you can see the several validations, and when there is no error, the workflow will send an email, create an Enrollment in Orchard Core and redirect the user to stripe using a Fork. And there will be another workflow that will validate the payment using the response that Orchard Core will get from stripe.js. Now let's take a closer look at the Create Content Task that creates a new Enrollment content type. When you are creating a new content type using this task, you have to write the properties of the content. This is the JSON that is used to construct the given content item. As you can see, here you can use different Liquid expressions as well, for example, we could use the data coming from the form. You can see the website using this registration form under this URL. Here just click on the Register at the top right and select from the listed options. If you would like to see the whole demo just head to YouTube and watch the recording! News from the community A new tentative date and location for the next Harvest We have another tentative date for the next Harvest: the last week of June. In this date, we could do it in Europe and in a location that is easier to go from the USA too. London and Amsterdam have airports that can be reached easily from several other countries as well. What do you think about the new date and locations? Orchard Dojo Newsletter Now we have 114 subscribers of the Lombiq's Orchard Dojo Newsletter! We have started this newsletter to inform the community around Orchard with the latest news about the platform. By subscribing to this newsletter, you will get an e-mail whenever a new post 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 week's Orchard meeting!

Cors, user account activation - This week in Orchard (31/01/2020)

This week we would like to show you two new Orchard Core demos: the user account activation and the new CORS module. But before that let's take a quick look at the newest features and improvements of Orchard Core! Finally, let's see what about the next Harvest? Orchard Core updates Add more Resources documentation The Resources page of the Orchard Core documentation has been improved a lot. Now on this page, you can find examples about how to register a named resource by implementing the IResourceManifestProvider interface, how to render your registered resources in the different sections of the page using Liquid or Razor and many more! Update the OpenID YesSql stores to execute a concurrency check on updates We have a new feature in YesSql when saving a session. Check out the following line: _session.Save(application, checkConcurrency: true); In the code snippet above, we would like to save the Open ID application and check that nothing has changed the application between it was loaded in this process and saved with the current changes. And if there is an issue, it will throw an exception when we call await _session.CommitAsync(). Then it will catch the ConcurrencyException saying something else changed the application while you were saving it so, please try it again. Fix issue with layers that can be drag and dropped to zones The targets for the zone dragging were too loose and then you could drag a widget to a layer or a layer to a widget. Now it's fixed. Fix regression for Tag Helpers not working There was an issue that some things were working in development mode and not in release mode. In development, Orchard Core finds the Tag Helpers because views are compiled at run time in the context of the application, while published .Views.dll files have been precompiled in the context of their related module or theme. In production, it will not work, because for example if you would like to use the ContentItemTagHelper, the reference was missing from one module to the OrchardCore.Contents module. Dean Marcussen created a new OrchardCore.Contents.TagHelpers project, that contains the Tag Helpers of the OrchardCore.Contents module. And now whenever we have Tag Helpers, we put them in their *.TagHelpers library. So, when our themes and other modules will need those Tag Helper, we can just reference this library and not the full module. In the _ViewImports.cshtml files where we are using the OrchardCore.Contents assembly to find Tag Helpers we need to look for the assembly named OrchardCore.Contents.TagHelpers. It should not break any websites if you are using Liquid, but if you are not using Liquid, it's possible that the site will be broke after this change, meaning the Tag Helpers won't be found and as we said, you need to change your _ViewImports.cshtml. In the future, we have to do the same for all of the Tag Helpers. Standard display option for each field If you want to add a Display option for a field that does not have a standard one, when you re-edit the settings and save, the new one will be selected as the default even if you don't want it. To solve this issue we added a Standard option for all the fields. Let's see the HtmlField.DisplayOption.cshtml file as an example. Sort Workflow instances Your Workflow could have several Workflow instances and if you have many of them, it could be hard to find the one you want. In the past, you had the option to filter the instances by their status (all, faulted, finished), and now there is a new option to sort these instances. You can sort them by the recently created or the least recently created. Simplify part settings retrieval for ContentPartDisplayDrivers In the ContentPartDisplayDrivers, we need to resolve the ContentDefinitionManager, query the type definition and then find the part that is named the same that we are using, take the first one and get the settings. But in the BuildPartEditorContext and UpdatePartEditorContext we already have the TypePartDefinition of the part that we are currently editing, so we can just get the settings from there. This change made the code simpler and technically faster. Just take a look at the changes in the AutoroutePartDisplay! Demos User Account Activation Currently, Orchard Core supports registration and approval or manual entry. What about having a way to have the option to invite users onto the platform and let them choose their password and then activate their account? Let's see a possible future release for this feature! Install your site and then enable the Users Registration feature. Now head to Security -> Settings -> Registration, where you will find a new option: Administrators can send an activation email to a user. Put a tick in this box and select the AllowRegistration from the select list. Now go to Security -> Users and hit the Add User button. Here you could see a new switch called Send Activation Email?. If you create this user with this switch enabled and hit Save, this user will get an email that email will contain an activation link. If the user clicks on this link, they can choose a password for the account. After they set the password their account is activated and they can log in to the site using the newly created password. To do that, you should disable the account of the user when creating it. But what's behind this feature? Create two new Workflows to send emails. Let's call the first one to UserAccountActivation and add the Account Activation event as the startup event for this Workflow. Then add a Send Email task that will send the email to the user. This email will contain the activation URL of the user. Create another Workflow that will send another email that tells the user that their account is activated. Let's call this Workflow UserAccountActivated. Here you could use the Account Activated event as the startup event and again, add a Send Email task. The feature will be improved in the future because as you can see, the Send Activation Email switch is not really about sending an email, it's just about rising an event, that you can use in your Workflows. Instead of this, we could have for example a user state (Needs Activation) similar to the IsDisabled switch. And that's not all! If you would like to know more about this feature, head to YouTube, where you can find the full demo about the user account activation! Cross-Origin Resource Sharing (CORS) module If you head to Configuration -> Features and enable the Cors Configuration module, you will find a new option under Configuration -> Settings, called Cors. If you navigate here you can add as many policies as you want using the Add a policy button. On this page, you can add the name of the policy, set that as the default policy and configure everything that you will need to enable CORS. If you are interested in the full demo, don't forget to check out the recording on YouTube! News from the community The possible date of the next Harvest We had two possible dates for the next Harvest: one in February and one in April. Now it looks like it won't happen in February, so the only option left is to do a Harvest in April. The possible days could be between 13 and 17 in April. We also have two possible locations, which are Nice and Miami. Stay tuned for more information about the next Harvest! Tell us about your .NET performance challenges! - Hastlayer developer survey Help us build the nerdiest .NET thing, Hastlayer: It turns performance-critical sections of .NET programs into computer chips! If you fill out our short questionnaire you can win a cool compute accelerator board worth $265! Check it out here: https://forms.office.com/Pages/ResponsePage.aspx?id=Wt6elek45kStyIVVO-uCIMkFNjqW2E1Pm4v3YMcflMNUOVlDNUE3MlpDS044VDI1OEFSMUgxUkxSTC4u The reason we're asking this is that we're building a .NET hardware accelerator, Hastlayer (https://github.com/Lombiq/Hastlayer-SDK it turns your program into a chip!) and want to better understand what other developers do. Thank you in advance! Orchard Dojo Newsletter Now we have 114 subscribers of the Lombiq's Orchard Dojo Newsletter! We have started this newsletter to inform the community around Orchard with the latest news about the platform. By subscribing to this newsletter, you will get an e-mail whenever a new post 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 week's Orchard meeting!

This week in Orchard - 11/15/2019

This week we would like to show you two demos about the newest features of Orchard Core. First, you can take a look at the brand new content items UI, then we will dive a bit deeper and try out the new Trumbowyg editor for the Text Field and the HtmlBody Part. And of course, the discussion continues about the next Harvest! On Orchard Core Filter Features dependencies When you navigate to Configuration -> Features you have the ability to enable or disable the different features. To find the feature you want easier you can use a filter here and can type the name of the module. This filter only sort by the name of the feature. From now this filter checks for the different dependencies too! For example, if you type localization, you could see the Content Culture Picker in the list, because this module has dependencies with names like Content Localization or Localization. Harvest Core 2020 Sipke Schoorstra has connections in Nice and Miami, so that would be easier to organize the next Harvest one of these cities. Nice is in Europe, but Miami is warmer and easier to travel there from Europe because it's on the East Coast. The two possible dates are February and April, but the weather is not the same in these cities. If we do it in April, Nice would be the better option because of the weather. Miami is warmer in both months, so that wouldn't be an issue. Stay tuned for more information about the next Harvest! Demos New content items UI Now when you enter the admin site and go to Content -> Content Items, you will see a brand new UI. Under the Content Type dropdown, you can filter the items based on the selected or the typed type. You can filter the items by their status using the Show dropdown. And lastly the Sort dropdown is responsible to order the items by title, recently created, recently modified or published. If you select more than 1 item, you will see a new dropdown, called Actions, instead of the dropdowns we mentioned above. By using the Actions, you can publish, unpublish or delete the selected items. Lastly, we would like to mention the Filters dropdown near the textbox that has the Search all content items placeholder text. By using this you can filter the list by showing only the draft items, only the published items or the items owned by the logged-in user. Adding Trumbowyg editor for TextField and HtmlBody Let's set up a site using the Blog recipe. This recipe contains an Article content type. If you edit the definition of the Article under Content -> Content Definition -> Content Types you will see the attached HtmlBody Part. Hit Edit near it and select that you would like to use the Trumbowyg editor type. Under the editor options you can explicitly set the config you want to use, for example, which button you want to add to the toolbar. If you navigate to the OrchardCore.Resources module and check the content of the Assets folder, you will see the files that needed for the Trumbowyg plugins to work. Therefore you can use every existing plugin that is described on this page. Trumbowyg has a lot of plugins that you can use to customize your editor. Now let's add some new buttons to the editor! We will use the emoji, the giphy, and the font family plugin. All you need to do is to extend the btns section of the editor options like this: btns: [ ["viewHTML"], ['emoji', 'giphy', 'fontfamily'], ["undo", "redo"], ["formatting"], ["strong", "em", "del"], ["foreColor", "backColor"], ["superscript", "subscript"], ["link"], ["image"], ["align"], ["unorderedList", "orderedList"], ["horizontalRule"], ["removeformat"], ["fullscreen"]], plugins : { giphy: { apiKey: 'N5OwBrzBjP8nXXaFdv1TvVwZ82DWNUSz' }} Here you can see that the three new buttons will be placed after the View HTML button and will be near each other without a separator. The buttons you define in the same square brackets will be in one group. You could also see that we added a new section here, called plugins. Here you can define the options that needed for the different plugins. For example, to use giphy, you need to have an API key that will communicate with GIPHY. If you navigate to the Dashboard on the GIPHY Developers page you can create a new one by clicking on the Create an App button. Now you have successfully set up the editor options. It's time to create a new Article! Notice the three new dropdown buttons near the View HTML button and use them to create your awesome article! Another nice stuff is the template plugin, that manages a set of HTML templates to insert fast. In these options we only define the templates plugin with two options: { btns: [ ["template"] ], plugins: { templates: [ { name: 'Lorem ipsum', html: '<p>I am a Lorem ipsum template</p>' }, { name: 'Lorem ipsum 2', html: '<p>Another Lorem ipsum template</p>' } ] }} In this case, the editor will look like the following, where if we select the Lorem ipsum 2 option, the following HTML content will be injected to the editor. The same works for HTML Field too. If you add a new HTML Field to your content type and set the editor to Trumbowyg editor, you can define the editor options and you will get a customized Trumbowyg editor. On Lombiq Upload recordings of demos from the weekly meeting in separate videos We have an idea to upload recordings of demos from the weekly meeting in separate videos as well, so they can be found easier. To help us decide please visit our Tweet and choose from the following options: Good, I look for demos! Good, but don't need it. Bad, why more videos? Another idea, see reply! Searching for performance-intensive codes Do you write a performance-intensive code? Then help us build the nerdiest .NET thing! Drop us a line to [email protected] and we'll ask a few questions about the challenges you encounter, and in exchange, we'll show you how to make a chip out of your programs! Orchard Dojo Newsletter Now we have 102 subscribers of the Lombiq's Orchard Dojo Newsletter! We have started this newsletter to inform the community around Orchard with the latest news about the platform. By subscribing to this newsletter, you will get an e-mail whenever a new post 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 week's Orchard meeting!

This week in Orchard - 05/24/2019

In our post, we would like to show you some improvement of the content items list and the Markdown editor of Orchard Core. We also mention the Command Line support for Orchard Core. Check out our post for more! On Orchard 1.x Lombiq has an Orchard issue bug fixing hackathon and the goal was to fix as many issues for Orchard 1.x as we can. We made good progress and fixed several bugs. Let's see some of them! NumericField default value merge error fix The Default value of the NumericField was removed by accident after a merge. Now thanks to this PR, the textbox for specifying the Default value to NumericField was readded. Merge DraftFieldIndexService.cs into FieldIndexService.cs In Orchard 1.x, you could use the DraftFieldIndexService to save the draft and the FieldIndexService to save the published FieldIndexRecords. Because of these services do the quite same thing (the only difference is to save the Published or the Draft version of the record), it could be a good idea to remove DraftFieldIndexSerivice and keep only the FieldIndexService and have an enum to set which version you would like to save. You can find the implementation in this PR. Removing IProjectionManagerExtension There was an IProjectionManagerExtension interface to provide additional methods to the IProjectionManager. For example, you can get the content items by providing the ContentPart and a number to skip, which could be a great way to have pagination. Now the methods inside the IProjectionManagerExtension moved to the IProjectionManager and the IProjectionManagerExtension interface has been deleted. See the changes in this PR. Updating Newtonsoft.Json everywhere Orchard 1.x uses an outdated version of the Newtonsoft.Json library. We updated this package everywhere in Orchard to use the latest version. Fixing that stylesheets are not found on Dashboard Resource URLs are not replaced with file virtual path in StylesheetBindingStrategy leaving the URL pointing to TheAdmin theme folder instead of the related module path. Now when you visit the admin page of Orchard and open the Developer Tools in your browser, you will notice the missing 404 errors for the CSS files thanks to this PR. Fixing that Orchard.Workflows requires styles that don't exist We had a quite similar issue here as in the previous one, except there were also some empty CSS files that are included in the csproj files. You can see the fixes here. On Orchard Core Build error if a module with views doesn't use the Razor SDK If you create a module and you have views inside and you didn't correctly use the Microsoft.NET.Sdk.Razor SDK you will get a build error. In the project files, there is an SDK tag at the top and you can define which SDK the project should be built with. When you have Razor views, you need this SDK to be able to get precompiled views and embed them in the assemblies. Now if you have views and you didn't do that, the build will automatically fail to prevent failing in runtime because it could not find specific assets or views. Or maybe you started to implement your module with a standard class library, which didn't have views, then you add a view and don't understand why it doesn't work anymore. Consider Command Line support for Orchard Core There was some Command Line support in Orchard Core, but it was removed because of performance concerns. The code that is currently in for Command Line support for Orchard Core is using the same concept as Orchard 1, where modules can provide custom commands with the Command Line extensibility. The idea would be to have a CLI that is not in process of the Orchard host, but out of a process like a very separate .NET CLI, that will talk using HTTP with the host and the tenants. Therefore we could even use a CLI to remote control some tenants or instances. We don't have to run the CLI on the machine that runs Orchard. Being able to run remotely the CLI would be nice, and to automatically discover the commands from the API. You can find more details about the Command Line support for Orchard Core in this issue. Admin CSS: wrong BS4 version If you create a new pull request and don't update to the dev branch, then you will also submit an old version of Bootstrap and assets and people will have to fix it again. The only way to prevent that is by having a CI task that will ensure that the version is committed and rebuilding the assets doesn't change anything. We can't automate it, but we can fail the build to detect it. That would be an improvement because at least we could show the issue before we commit the issue. Orchard Harvest Based on the progress on Orchard Core, we could totally have something in September or October, like we did last time in a warm location. It would be about Orchard Core of course and a little bit about Orchard 1.11. That would be also a very good way to work on a free public online workshop during the Harvest. Orchard Core will be new for most of the people and they could learn the basics of Orchard Core here. Demos Filter content items on content items list page If you navigate to the admin page of Orchard Core and head to the Content Items page, you can search content items by title. You can also filter them by content types and by version. There was an error when you filter content items and hit the back button in your browser. In this case, you got a Confirm Form Resubmission, now it's fixed by using a GET request. Bulk actions in content items list You can also realize a Select All option here to select all the content items in the page. When using the Bulk Actions button, you can publish, unpublish and delete all the selected content items without needing to do these actions one by one. Markdown editor CSS and toolbar improvements This week the community fixed a bunch of styling issues with the SimpleMDE markdown editor. It used to look like with a dark border around the top and some horrible hovers and now it looks like this. It also couldn't go full screen because the z-index was below the Orchard navbar but it now goes fullscreen. Of course, the side by side preview mode works. It does also work on mobile as well. On Lombiq Orchard Dojo Newsletter Now we have 63 subscribers of the Lombiq's Orchard Dojo Newsletter! We have started this newsletter to inform the community around Orchard with the latest news about the platform. By subscribing to this newsletter, you will get an e-mail every time when a new post 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 week's Orchard meeting!

Orchard Harvest conference, day 2

Just as on the first day we're reporting in live from the 2017 Orchard Harvest conference! This blogpost will be updated as we go, so make sure to check back! Bertrand is doing the same thing again, so make sure to check out his blog for updates too. Antoine again as well, so also check out his blog. Theming in Orchard Core CMS by Steve Taylor Steve is from Avastec and works extensively with client-side technologies. He'll live code a new Orchard Core theme based on the Masonic Wordpress theme. A sneak peek into the new Orchard theming, also the casual use of Razor Tag Helpers for including resources, displaying a menu and a zone. The theme makes use of a Gulp pipeline for asset building. A sneak peek into the database storage format of Orchard Core and creating theme settings. Highway to the pager zone. (Sorry. Hate Salute Benedek for the joke.) Topic of the day: Statue of Liberty. We should have a Statue of Orchard. It could be a large monolith. (That, when you look closer, is built of beautifully crafted small, loosely coupled bricks.) Setting up indexing and adding a search box. Quite similar to Orchard 1.x. Taking a look at some of the familiar Orchard concepts from the admin to the extent needed for a theming demo: managing content types, adding menu items, widgets... If you use a lot of stuff the cool kids do like Angular and Knockout there's something for you. Present and future of Localization in Orchard by Benedek Farkas Benedek is from Lombiq, leading the development of Orchard client-projects and contributing bugfixes. He also asked us to take pictures. Lombiq does a lot of things with Orchard, so we'll refrain from listing those 96 things here, you can see for yourself. Benedek does a lot of things with Orchard too, including catering for the translation packages. How is "orchard" in various languages? Turns out probably we're best off with the English one. Word of the day: eltöredezettségmentesítőtlenítetthetetlenségtelenítőtlenkedhetnétek. You should only drink as long as you can pronounce this. When in doubt, use T-strings: Wrapping your user-facing labels into T() is the bare minimum. But it's easy to defeat the purpose, so here are some tips. Extracting T-strings from code with Vandelay Industries. Unfortunately the module is only compatible with Orchard 1.6, so please personally and repeatedly nudge Bertrand to update it. He'll appreciate the moral support. The module supports 1.10.x. Translating UI strings on Crowdin, for built-in and third-party modules. Klingons are really behind on translating Orchard. Head over to Crowdin and contribute some translation, Orchard needs you! Translating content items on the example of the Atlantis Programs & Pedalheads website. Also including some synchronization features to sync some data from the master item to the localized versions. Similar improvements are coming to Orchard itself too. Localizing Taxonomies and content fields, the new way. Design notes on improving localization. Building Client-side Apps and Components for Orchard by Daniel Stolt Daniel from IDeliverable returns. What's a client-side component? Shifting from the server-side to the client side. When do you want to use a client-side component? Mainly if you want a modern UX without page reloads. Various ways to create such components in Orchard, the simplest being a Layout Snippet. Demo of a component displaying stock market information. You wouldn't want that delay page load. Utilizing Orchard's Gulp pipeline for client-side assets. Do we put output files into source control? It depends, but preferably not. Configuring a client-side asset build pipeline with Gulp. If you don't know Browserify, check it out, it's good for you. Angular routing and how to combine it with Orchard's routing. Ways of runtime module loading. It will be awesome with HTTP 2. YesSql, what's that and why do I like it? by Sebastien Ros An ad-hoc, unplanned session by Sebastien about YesSql. It's a document database layer using SQL as the data store, so you get the best of both worlds: A trusted, tested storage with a fancy flexible data model. YesSql is also the data layer of Orchard Core. The plural of "index" is "indices". Learn this and you can look educated among your peers. Bonus: Do the same for "medium" and "matrix". Demo of the various use-cases you'd expect from such a data access layer by looking at the tests. Interesting clever querying and indexing concepts. What's next for .NET Core and C#? by Bertrand Le Roy Bertrand from Microsoft gives some insights into the future as we know it. It's multi-platform, which is a good thing. You'll need VS 2017 if you're using VS, which is bad thing. Project.json is dead and csproj is back, which is kind of a mixed thing. But this csproj is not the same csproj! One project system across all platforms: Now a bearded guy with a Linux laptop, a hipster with a MacBook and a cool engineer with an awesome Windows laptop can walk into a bar and be one .NET development team, not the start of a joke. We've seen some XML templates, but since it's XML no one will ever want to look at it, so whatevs. There's the One SDK running behind all IDEs, which is awesome. The .NET command line got even better, so you can feel like a Hollywood hacker. Even the Orchard command line could be part of the .NET CLI. The solution file format hasn't changed, which is sad. Introducing .NET Standard: one .NET API to use across all platforms, when writing .NET Framework, .NET Core or Xamarin apps. .NET Standard 2.0 will contain all the APIs .NET Framework has (minus the Windows-specific stuff). See for yourself on https://apisof.net/. What's up with C#? Everybody uses C# and everybody loves C#. No further questions. Bertrand just showed an array initialization that could be the prime exhibit in the Museum of Strange Brace Styles. And remember there's a thing called Pico. What's new in C# 7? Here's a recap. Pattern matching can be familiar from functional languages, but it has always long been a part of hardware description languages (and the wider concept in logic circuit design). And with Hastlayer you can create hardware from .NET! The holy trinity of C# language principles: expressiveness, convenience, performance, safety. Well, this was four. Some exotic things possibly coming up with C# 8. Orchard Core CMS by Sebastien Ros The goals of Orchard Core are like new year's resolutions you actually can keep: be worse at everything. Just kidding. Major changes: Built on ASP.NET Core, document-oriented storage (with YesSql, see above). The admin theme uses Bootstrap and there is no bug. The admin menu is now also a standard menu, so it's extensible in a better way. You can also configure the admin theme as easily as the frontend theme, neat! The basic content editing UI is in principle the same as in Orchard 1.x so you won't be confused. Content parts can be attached to a content type in multiple instances. Various things have changed a bit or a lot (even if not too apparent from the UI): Blogs use the Lists feature (so blogs are just a Lists configuration, not a feature written from scratch), widget layer rules can contain C# (and widgets can be dragged between zones from the UI)... New content type: Flows. These are basically widget pages, plus more. Recipes are now in JSON, not XML, and can use dynamic placeholders evaluated during cook time. The thing is fast, even without caching. >2000 request/s on a dev machine while debugging fast. And uses much less memory too. See the roadmap to get an idea of when Orchard Core will be ready. Panel with Daniel Stolt, Sipke Schoorstra and Zoltán Lehóczky Merging localization-related changes: Will mostly be done on dev, because breaking changes are allowed there. What about the new frontend theme? It's on Ryan Drew Bernett's branch (or maybe in a branch in the official repo). The design goals are mostly satisfied, but theme settings are not implemented. Are there any goals to make Orchard competitive against e.g. Wordpress? More themes and out-of-the-box site solutions would make content editors happy. That's true, but Wordpress is just a blog engine, even a lot of Orchard devs use Wordpress for their blogs. Orchard is mostly targeted at businesses.

Orchard Harvest conference, day 1

We're reporting in live from the 2017 Orchard Harvest conference! This blogpost will be updated as we go, so make sure to check back! Bertrand is doing the same thing, so make sure to check out his blog for updates too. Aaand, Antoine too, so also check out his blog. Keynote by Sebastien Ros Not everybody has badges because Sebastien failed Mail Merge, or Mail Merge failed Sebastien. Zoltán doesn't have a badge either :-(. Sebastien's always funny stand-up show starts, although he had a hard night after eating something bad. Let's see where all the attendees come from. It turns out, from a lot of countries and US states. Sebastien hands out some "choc-lates" to speakers. Now you're sorry you won't have a session! Public shaming of those who didn't want to be speakers! Public praise of those who're active in the community. Sebastien whining about organizing the conference. But we all know he just loves it. And he sounds like a parent with some little kids. Oh wait... Word of the day: "websiting". We all do Orchard websiting apparently. Apparently "Lombiq Technologies Ltd." is a long company name. So we'll just go with LMBQ from now on. There will be 4 ladies on the conference, which is maybe a record? Oh, and BTW we'll have some stuff about Orchard too. Outside In: Using external data with Orchard by Jorge Agraz Jorge is from Onestop, a full service ecommerce agency. They developed their platform on Orchard where they utilize Orchard's flexibility and content model. A CMS was needed to get engineers out of content management. But sometimes Orchard is hard to utilize or an overkill for their use-case. Product catalog information comes from an external system which is queried via API calls. They have "actor" and "carrier" shapes: platform-level business logic templates vs theme-level structural ones. See Jorge's session from last year. First the Onestop platform used widgets to provide pieces of functionaly for ecommerce sites, now mostly Layout Elements and content types for commerce pages. We now know what the address of the Onestop VPN is, but won't tell you here! One of the big points of the latest version of the platform is to reduce the number of shape templates needed for new sites: now just 6. A demo of how product pages are built with content parts. But as usual during demos, Visual Studio freezes :-). It seems Onestop discovered Dynamic Pages ;-). When Output Cache Just Isn't Enough by Chris Payne and Daniel Stolt Or "Make Output Cache Great Again" :-). They're from IDeliverable and developed IDeliverable.Donuts to handle various caching needs. A common scenario is personalized output, like having the user's name somewhere. This can be cached by keeping token-like placeholders and caching the output with that, evaluating for each request. A demo of how such placholders work. You can also see how the recent changes in the Output Cache module fit into this. Pro tip from Daniel: if you're presenting together with an English guy, use a Swedish keyboard layout. And Dvorak. In this talk we see images of cigars, in the last session there was a shoe with a cigar as the heel. Did we miss that the cigar is this conference's theme? Chris started a sentence with "Donut ships with..." and now I can't stop thinking of donut ships. A demo of the Item Level Cache part, which provides similar caching options but on the level of a single content item, not the whole page. This video apparently has something to do with caching. A demo of how cache entries can be reused across multiple pages. A demo of prerendering some items: even the first user gets a cached version, not first-time penalty. The drawback is that since the context is the request is not there, caching options are limited. What's new in ASP.NET MVC Core 2.0 by N. Taylor Mullen Hands up if you don't know ASP.NET MVC Core 1.0 either! Taylor is from Microsoft from the Razor team. The talk will be the better the more active the audience is. Remember, this is the first talk after lunch. So... Introducing Razor Pages: a bit like ASP.NET Web Pages, but better, i.e. "best of MVC with less ceremony". If you're a borderline PHP developer, do we have some transitional technology for you! Anatomy of a web application. Not many files. Demo of the basics of app configuration and stuff. VS 2017 can now edit csproj files without having to unload the project first. The future has arrived. Taylor is into League of Legends and Pokemon Go. Just sayin'. Demo of the difference between a standard MVC app and a Razor Pages app. The latter is just add cshtml file, run. No controller, action, Views folder. You can (or rather will be able to in the next version) embed logic otherwise contained in controllers. Looks very neat until you get PHP flashbacks. Just casually used C# 6 string interpolation. Well, since Roslyn the objectively best programming language in the known universe gets better even faster. Razor Pages is not obsolating MVC, it's another way to structure your app. Might help newcomers start with ASP.NET. Wonder if this could be used in an Orchard module? Razor tooling is being redesigned to decouple it from VS, allow extensibility and be able to provide an overall better developer experience like during refactoring. E.g. adding new Razor directives it's just a few lines of code. Scaling Orchard by Rob King Rob is a technical lead at Bede Gaming. They provide an online gaming platform for gambling brands in the UK and now internationally. They started their platform using PHP by writing a custom CMS, then migrated to using .NET and Orchard. "I'll talk about Mecca". Lombiq guys got Mecca flashbacks. (Because of this.) Their platform had a huge network of dependencies: disabling a feature can disable dozens of others. So they refactored and moved all common central service interface to a common module. Still not perfect, so the next step was to factor those out to smaller projects containing interfaces. To visualize the dependency hierarchy Rob created RJK.FeatureDependencies. Mecca Bingo needs a multi-node setup (12 servers by default) and extensive cashing to handle large loads (a recent peak was 5,4k requests per minute). Like layer rule caching with a custom Redis-using implementation. Output caching is handled with Redis too on top of a local in-memory cache. Scheduled task caused deadlocks in production due to tasks being wrongly rescheduled from multiple nodes. The ultimate solution was to move task execution out to Hangfire (after implementing a workaround of only letting tasks be executed on a single node). What is Orchard Core SaaS Framework? by Nick Mayne Nick has worked on Orchard Core, the new ASP.NET Core-compatible version of Orchard extensively. Demo of starting an Orchard application from scratch by creating and configuring a host project for it, then adding a module with MVC to it. Demo of configuring extension loading: Custom extension locations, custom manifest definitions. Demo of configuring multi-tenancy. Demo of using Nancy instead of MVC.

Orchard Spring Harvest Challenge - Results

On the last (third) day of this year's Orchard Harvest we announced the results of the Orchard community's second module development competition, the Orchard Spring Harvest Challenge. The amount of submissions may be small ("only" 6), though in quality they certainly made up for it. The top 3 places are the following: MiniProfiler by Daniel Dabrowski Inline Editing by Matías Molleja Dynamic Forms by Cybage Software Pvt. Ltd. Congratulations to all participants! We also had the opportunity to bring in Daniel, the author of the winner module via Skype to the conference, where he did a live demonstration of the capabilities of the MiniProfiler module. For more information and the details about the event please visit its website and see the "Rules" page. If you'd like to know more about the last Orchard Harvest, you may want to read our reports written on-site about each day: Orchard Harvest - Day 1 Orchard Harvest - Day 2 Orchard Harvest - Day 3 Happy Orcharding until next time!

Live from Seattle - Orchard Harvest Day 3

This is the third day of Orchard Harvest! The downside is that it's the last day, though it's really great that this is the first Harvest with three days (instead of two). Sébastien is today's keynote speaker sharing his long-term vision regarding Orchard. Sébastien also enumerates the important aspects of Orchard and its community, most of them centered around openness. To make Orchard better, we need to learn from other systems and communities! Next on stage is Nicholas Taylor Mullen from Microsoft, talking about ASP.NET vNext as a continuation to yesterday's talk with Scott Hunter and Eilon Lipton. We've seen some of the newest features of Visual Studio too that were built to work together with ASP.NET vNext. Our third speaker today is Bing Huan Chio talking about how and why the backend system for the Halo Waypoint blog was migrated to Orchard. Since they were newcomers to Orchard at the beginning of their project at their setup required an API module, since the Orchard application served as a backend system. The REST API module that was created for this project is going be open-sourced soon and is a good candidate for adding it to the new modules of Orchard 1.9. After that a short presentation came to announce the results of the Orchard Spring Harvest Challenge. We made a live "interview" with the winner - Daniel Dabrowski - via Skype to present his great Orchard project, the MiniProfiler. And then finally, the last presentation is by us, Lombiq, on how the Orchard CMS SaaS, DotNest was created and how it is maintained. In the first half, Zoltán is talking about the requirements of such a software and what kind of tools we've built to fulfill them and then Benedek was on stage to describe the deployment process currently used by Lombiq (as well as some retrospective case-study about its development) that enables us to maintain all our websites (including DotNest, of course) and deploy them without any downtime. That's it for Orchard Harvest for this year, see you next time!