Test drive Orchard Core with one-click setup of a walkthroughs site, Reduce allocations for ShapeDescriptors - This week in Orchard (07/11/2025)

You can still cast your vote for the Jean-Thierry Kéchichian Community Award! This week's topics include improving FlatPositionComparer performance and reducing allocations for ShapeDescriptors! See you next week at Orchard Harvest!

Orchard Core updates

Improve FlatPositionComparer performance

This change introduces significant performance and correctness improvements to the FlatPositionComparer class, which is used to compare and sort position strings in Orchard Core. The main modifications optimize string handling by reducing allocations, improving normalization and comparison logic, and adding comprehensive benchmarks to measure their impact.

It means that there is a refactored Compare(string x, string y) that uses ReadOnlySpan<char> and a custom SpanSplitEnumerator, minimizing string allocations and improving performance for position-based string comparison. Georg von Kries also improved normalization logic for position strings (handling nulls, whitespace, and special cases like "before"/"after") with the new GetNormalizedSpan and TryNormalizeKnownPartitions methods, ensuring more robust and consistent comparisons. The null and reference equality checks in Compare(IPositioned a, IPositioned b) are improved to prevent unnecessary processing and ensure correct ordering when comparing positioned objects. Finally, he made FlatPositionComparer a sealed class and defined _splitChars as a static, readonly array, further clarifying intent and reducing potential misuse.

Improve FlatPositionComparer performance

Reduce allocations for ShapeDescriptors

This addition implements several minor performance optimizations for ShapeDescriptors. ShapeDescriptor uses collections that might be empty, and the most notable change is a reduction in allocations for empty collections. Note that the performance-focused refactoring for the Display Management subsystem may require code updates for the following API changes:

  • FeatureShapeDescriptor sealed: FeatureShapeDescriptor is now sealed. Do not inherit from it.
  • Removed BindingSources properties.
  • Removed ShapeMetadata.BindingSources.
  • Removed ShapeDescriptor.BindingSources and the corresponding override on descriptor index types. If you relied on these, inspect ShapeDescriptor.Bindings to infer binding sources.
  • ShapeBinding sealed: ShapeBinding is now sealed, and its BindingAsync property is no longer virtual. Do not inherit from ShapeBinding or override its members.
  • Non-virtual Binding members: ShapeDescriptor.BindingSource and ShapeDescriptor.Binding are no longer virtual. Use the ShapeAlterationBuilder events or display drivers to customize binding behavior.
  • Binding behavior: ShapeDescriptor.Binding now returns null if no binding exists instead of throwing. Add null checks when accessing a shape's binding.
  • Placement default initialization changed: ShapeDescriptor.Placement now lazily falls back to the default placement action if not set. This should be transparent, but code that assumed Placement was preset may need to handle a possibly null delegate before first access.
  • ShapeDescriptorIndex sealed: ShapeDescriptorIndex is now sealed. Do not inherit from it.

Reduce allocations for ShapeDescriptors

News from the community

Orchard Harvest 2025 - See you next week!

This is our last This week in Orchard post before the upcoming Orchard Harvest conference. We hope that we could provide you with all the details you are interested in regarding the conference, but for one last time, we would like to summarize everything that you may want to know before we meet in person next week!

The Orchard Harvest 2025 conference will be held in Prague, and we look forward to seeing you all this autumn in the Czech Republic, in the heart of Europe. Our confirmed dates for this year are November 11th and 12th. Secure your tickets to the conference, taking place November 11-12, 2025, at the Botanique Hotel Prague, a modern hotel inspired by nature with a green approach, located in the city center.

Don't miss your chance to shape the conversation at the conference! Whether you're attending in person or not, you can still submit questions and topics for our upcoming panel discussion. Influence what our experts will discuss by getting involved here: https://forms.office.com/e/8BQ5WipCAJ. In this section, we would like to discuss the most important and interesting topics that we don't have time for in busy business hours. Please submit your questions in advance or bring surprise questions and engage with our expert panel.

At the end of 2023, our good friend, Jean-Thierry Kéchichian, a truly extraordinary member of our community, unexpectedly passed away. To honor him, keep his memory alive, and foremost, inspire people to do good work for the community, we launched an award named after him for exceptional community members. Every year, the community votes on who has done the most for Orchard Core. This can entail activities such as code contributions (including documentation), helping with issues and discussions, evangelization outreach, community management, or anything else. However, it needs to be public and tangible. After the nominations, it's now time to vote!

Cast your vote here! Voting ends at 10:00 PM UTC on the 10th of November, and we'll announce the winner at Harvest!

There will be no This week in Orchard post next week; instead, see you in Prague!

Orchard Harvest 2025

Test drive Orchard Core with one-click setup of a walkthroughs site

The Orchard Harvest conference is just around the corner, and if you would like to try out Orchard Core quickly before the conference without the need to open up any IDE, we have some good news for you!

You may have heard of the Lombiq Walkthroughs Orchard Core module, which teaches you about the most important Orchard Core features through a hands-on tutorial with interactive tooltips, right there in the app. It has been available on DotNest for quite a while, too. And now it's possible to test-drive Orchard Core with a single click!

Check out the new Guided walkthrough button on the homepage. If you click it, you'll get a site set up with the Walkthroughs module, without touching Orchard's setup screen. As we mentioned, it could be helpful if you've just begun learning Orchard or want to help someone get acquainted with its basics. And feel free to play around with it however you like, since such sites are deleted after 24 hours. So, you don't have to do anything more than navigate to DotNest and click on the Guided walkthrough button!

DotNest Guided walkthrough

Orchard Dojo Newsletter

Lombiq's Orchard Dojo Newsletter has 439 subscribers! We have started this newsletter to keep the Orchard community informed about the latest news on the platform. By subscribing to this newsletter, you will receive an email whenever a new post is published to Orchard Dojo, including '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!