<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet href="/firehose/news?altTemplate=FirehoseXslt" type="text/xsl" media="screen" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:umb="http://www.umbraco.com" umb:media-type="news">
    <channel>
        <atom:link href="https://umb.fyi/firehose/news" rel="self" type="application/rss+xml" />
        <title>UMB.FYI Firehose - News</title>
        <link>https://umb.fyi/firehose/news</link>
        <description>Aggregated news from the Umbraco community</description>
        <pubDate>Tue, 24 Oct 2023 14:27:33 Z</pubDate>
        <lastBuildDate>Fri, 06 Nov 2026 03:19:43 Z</lastBuildDate>
        <language>en</language>
        <generator>Umbraco</generator>
                <item>
                    <guid>https://umbraco.com/blog/uprofile-november-2026-mitchell-nortje/</guid>
                    <title>uProfile November 2026 - Mitchell Nortje</title>
                    <link>https://umbraco.com/blog/uprofile-november-2026-mitchell-nortje/</link>
                    <description><![CDATA[Meet Mitchell: Speaker, package author and champion for mental health]]></description>
                    <pubDate>Fri, 06 Nov 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/dbestchatbot.umbraco</guid>
                    <title>DBestChatBot.Umbraco</title>
                    <link>https://marketplace.umbraco.com/package/dbestchatbot.umbraco</link>
                    <description><![CDATA[Add the DBestChatBot AI assistant to your Umbraco site in minutes. It answers visitors 24/7 from your own pages and data, captures leads in the conversation, books appointments, hands chats over to your team in a live inbox (web, Android and iOS apps) and speaks 20 languages.&#xA;&#xA;Install the package, add your site token to appsettings.json and deploy. Everything else (which chatbot appears on which pages, and what it learns from your site) is managed from the DBestChatBot dashboard, so your developer only touches the site once.&#xA;&#xA;Built to be safe on production sites: it never writes to your database, all network work runs in the background so a page never waits on us, columns such as email, phone and password are never sent, and if our service is unreachable your site simply carries on without the widget.&#xA;&#xA;The package is free. The DBestChatBot service has a free trial and paid plans.]]></description>
                    <pubDate>Fri, 06 Nov 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=58PxW5fZZ3I</guid>
                    <title>Q&amp;A Session with Emmanuel Tissera and Tony Meyn | Umbraco India Festival 2026</title>
                    <link>https://www.youtube.com/watch?v=58PxW5fZZ3I</link>
                    <description><![CDATA[A special Q&amp;A session at Umbraco India Festival 2026 featuring Emmanuel Tissera and Tony Meyn.&#xA;&#xA;Hear their thoughts, insights, and experiences as they answer questions from the Umbraco community and share their perspectives on Umbraco, development, and the ecosystem.&#xA;&#xA;Website: &#xA;https://www.umbracofestival.in&#xA;Join our Meetup group: &#xA;https://www.meetup.com/umbraco-india-user-group/&#xA;&#xA;#Umbraco #UIF26 #H5YR #UIUG]]></description>
                    <pubDate>Thu, 05 Nov 2026 13:30:16 Z</pubDate>
                        <category>community</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://uskinned.net/blog/uskinned-visual-editor-reimagined-in-site-builder-73/</guid>
                    <title>uSkinned Visual Editor, reimagined in Site Builder 7.3</title>
                    <link>https://uskinned.net/blog/uskinned-visual-editor-reimagined-in-site-builder-73/</link>
                    <description><![CDATA[uSkinned Visual Editor, reimagined in Site Builder 7.3 for Umbraco: click any block to edit it, add blocks on the page, undo and redo, plus SEO share previews. &lt;a href=&quot;https://uskinned.net/blog/uskinned-visual-editor-reimagined-in-site-builder-73/&quot;&gt;Continue reading&lt;/a&gt;]]></description>
                    <pubDate>Thu, 05 Nov 2026 12:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://forum.umbraco.com/t/umbraco-kent-meetup-online-monday-16th-november-2026-7pm/8722</guid>
                    <title>Umbraco Kent Meetup - Online - Monday 16th November 2026 @ 7pm</title>
                    <link>https://forum.umbraco.com/t/umbraco-kent-meetup-online-monday-16th-november-2026-7pm/8722</link>
                    <description><![CDATA[&lt;p&gt;Please join us online for an evening of all things Umbraco - the latest news, community chat, and a talk or two!&lt;/p&gt;&#xA;&lt;p&gt;For 2026, we will be running both in-person and virtual meetups, alternating every month. For those who can&#x2019;t join in person, virtual attendance is available too, so you can join us no matter where you are!&lt;/p&gt;&#xA;&lt;p&gt;This month, we have Justin Neville talking about Umbraco Search and how to migrate your code from Examine to Umbraco Search.&lt;/p&gt;&#xA;&lt;p&gt;Justin Neville - From Examine to Umbraco Search&lt;/p&gt;&#xA;&lt;p&gt;Umbraco 19 replaces classic Examine with built-in Umbraco Search, so most custom search will need work. The add-on runs on 17 and 18, letting you migrate early. This talk covers installing and querying it, porting typical Examine code, and a live demo of a faceted multi-site search built four ways.&lt;/p&gt;&#xA;&lt;p&gt;Whether you are an Umbraco novice or a seasoned developer, this is your chance to meet like-minded people to talk about our favourite friendly CMS! No matter what your role is there will be something to learn and your chance to meet other members of the Umbraco community from Kent and the surrounding areas.&lt;/p&gt;&#xA;&lt;p&gt;Sign-up here:&lt;/p&gt;&#xA;&lt;aside class=&quot;onebox allowlistedgeneric&quot; data-onebox-src=&quot;https://www.meetup.com/umbraco-kent-meetup/events/317077231/&quot;&gt;&#xA;  &lt;header class=&quot;source&quot;&gt;&#xA;      &lt;img src=&quot;https://forum.umbraco.com/uploads/default/original/2X/8/8f78fdc8fdc1b16a80fd90feb6961915466ab46e.png&quot; class=&quot;site-icon&quot; alt=&quot;&quot; data-dominant-color=&quot;FF7599&quot; width=&quot;16&quot; height=&quot;16&quot;&gt;&#xA;&#xA;      &lt;a href=&quot;https://www.meetup.com/umbraco-kent-meetup/events/317077231/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Meetup&lt;/a&gt;&#xA;  &lt;/header&gt;&#xA;&#xA;  &lt;article class=&quot;onebox-body&quot;&gt;&#xA;    &lt;div class=&quot;aspect-image&quot; style=&quot;--aspect-ratio:600/338;&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/original/2X/e/ec4b8e5fc1772f67bf95ce05885911872f38c5ab.jpeg&quot; class=&quot;thumbnail&quot; alt=&quot;&quot; data-dominant-color=&quot;736A66&quot; width=&quot;600&quot; height=&quot;338&quot;&gt;&lt;/div&gt;&#xA;&#xA;&lt;h3&gt;&lt;a href=&quot;https://www.meetup.com/umbraco-kent-meetup/events/317077231/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Umbraco Kent Meetup - Online - Monday 16th November 2026 @ 7pm, Mon, Nov 16,...&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;  &lt;p&gt;Please join us online for an evening of all things Umbraco - the latest news, community chat, and a talk or two!&#xA;&#xA;For 2026, we will be running both in-person and virtual me&lt;/p&gt;&#xA;&#xA;&#xA;  &lt;/article&gt;&#xA;&#xA;  &lt;div class=&quot;onebox-metadata&quot;&gt;&#xA;    &#xA;    &#xA;  &lt;/div&gt;&#xA;&#xA;  &lt;div style=&quot;clear: both&quot;&gt;&lt;/div&gt;&#xA;&lt;/aside&gt;&#xA;&#xA;&lt;p&gt;Hope to see you there!&lt;/p&gt;&#xA;            &lt;p&gt;&lt;small&gt;1 post - 1 participant&lt;/small&gt;&lt;/p&gt;&#xA;            &lt;p&gt;&lt;a href=&quot;https://forum.umbraco.com/t/umbraco-kent-meetup-online-monday-16th-november-2026-7pm/8722&quot;&gt;Read full topic&lt;/a&gt;&lt;/p&gt;]]></description>
                    <pubDate>Thu, 05 Nov 2026 09:38:55 Z</pubDate>
                        <category>community</category>
                        <category>forum</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.contentfreeze</guid>
                    <title>Umbraco.Community.ContentFreeze</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.contentfreeze</link>
                    <description><![CDATA[Freeze content and media editing in the Umbraco backoffice during deployments, migrations and uSync imports. Schedule a freeze from your CI/CD pipeline, warn editors with a countdown, and let it expire automatically.]]></description>
                    <pubDate>Thu, 05 Nov 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.contentfreeze.hangfire</guid>
                    <title>Umbraco.Community.ContentFreeze.Hangfire</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.contentfreeze.hangfire</link>
                    <description><![CDATA[Add-on for Umbraco.Community.ContentFreeze: holds back Hangfire jobs (for example from Cultiv.Hangfire) while a content freeze is active and runs them once it ends.]]></description>
                    <pubDate>Thu, 05 Nov 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.contentfreeze.forms</guid>
                    <title>Umbraco.Community.ContentFreeze.Forms</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.contentfreeze.forms</link>
                    <description><![CDATA[Add-on for Umbraco.Community.ContentFreeze: freezes Umbraco Forms forms, workflows, folders, data sources and prevalue sources in the backoffice while a content freeze is active. Website form submissions keep working.]]></description>
                    <pubDate>Thu, 05 Nov 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.archivedusers</guid>
                    <title>Umbraco.Community.ArchivedUsers</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.archivedusers</link>
                    <description><![CDATA[Adds an Archived area to the Umbraco Users section. Archive leavers so they leave the Users list and user pickers, keep their history, and record who archived whom, when and why. Archiving always disables the user and never deletes them.]]></description>
                    <pubDate>Thu, 05 Nov 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.contentfreeze.ai</guid>
                    <title>Umbraco.Community.ContentFreeze.AI</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.contentfreeze.ai</link>
                    <description><![CDATA[Add-on for Umbraco.Community.ContentFreeze: freezes the Umbraco AI configuration (connections, profiles, contexts, guardrails, settings, prompts and agents) in the backoffice while a content freeze is active. Using AI keeps working.]]></description>
                    <pubDate>Thu, 05 Nov 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.contentfreeze.commerce</guid>
                    <title>Umbraco.Community.ContentFreeze.Commerce</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.contentfreeze.commerce</link>
                    <description><![CDATA[Add-on for Umbraco.Community.ContentFreeze: freezes Umbraco Commerce settings in the backoffice while a content freeze is active, and stops product stock from changing when a frozen product save is blocked. Orders, carts, checkout and payments keep working.]]></description>
                    <pubDate>Thu, 05 Nov 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.Emply/releases/tag/v17.0.0-alpha002</guid>
                    <title>Limbo.Umbraco.Emply 17.0.0-alpha002</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.Emply/releases/tag/v17.0.0-alpha002</link>
                    <description><![CDATA[Umbraco integration for the Emply API.]]></description>
                    <pubDate>Wed, 04 Nov 2026 17:23:50 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.DreamBroker/releases/tag/v17.0.0-alpha003</guid>
                    <title>Limbo.Umbraco.DreamBroker 17.0.0-alpha003</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.DreamBroker/releases/tag/v17.0.0-alpha003</link>
                    <description><![CDATA[Video picker for inserting DreamBroker videos in Umbraco.]]></description>
                    <pubDate>Wed, 04 Nov 2026 17:12:34 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.Tables/releases/tag/v17.0.0-alpha003</guid>
                    <title>Limbo.Umbraco.Tables 17.0.0-alpha003</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.Tables/releases/tag/v17.0.0-alpha003</link>
                    <description><![CDATA[Limbo.Umbraco.Tables is a package for Umbraco featuring property editor for building table based content.]]></description>
                    <pubDate>Wed, 04 Nov 2026 10:48:12 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://forum.umbraco.com/t/umbracovisualeditor-for-v17-and-v18/8717</guid>
                    <title>UmbracoVisualEditor for v17 and v18</title>
                    <link>https://forum.umbraco.com/t/umbracovisualeditor-for-v17-and-v18/8717</link>
                    <description><![CDATA[&lt;p&gt;Ever wished you could edit content with all the visual fidelity of the front end without flipping back and forth with preview? I know I have&#x2026; Having tried a few things over the years it was time to go back to the drawing board and re-invent what I was working on for the new back office.&lt;/p&gt;&#xA;&lt;p&gt;Introducing&#x2026; &lt;em&gt;the Umbraco Visual Editor&lt;/em&gt;!&lt;/p&gt;&#xA;&lt;p&gt;It installs straight on top of any Umbraco installation, creates a new Workspace view and lets your editors update their content in realtime. Some sites require a small using wrapper, but if you&#x2019;re using the standard Umbraco Block List / Block Grid layouts there&#x2019;s no markup changes required.&lt;/p&gt;&#xA;&lt;p&gt;Here&#x2019;s what you can expect to see in the back office:&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/6/6782667ee472f150f1ce57de487263fa326b4f4d.jpeg&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/6782667ee472f150f1ce57de487263fa326b4f4d&quot; title=&quot;image&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/6/6782667ee472f150f1ce57de487263fa326b4f4d_2_502x375.jpeg&quot; alt=&quot;image&quot; data-base62-sha1=&quot;eLGyMmuuddeXQzLfwIXoGhQ9CKV&quot; width=&quot;502&quot; height=&quot;375&quot; srcset=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/6/6782667ee472f150f1ce57de487263fa326b4f4d_2_502x375.jpeg, https://forum.umbraco.com/uploads/default/optimized/2X/6/6782667ee472f150f1ce57de487263fa326b4f4d_2_753x562.jpeg 1.5x, https://forum.umbraco.com/uploads/default/optimized/2X/6/6782667ee472f150f1ce57de487263fa326b4f4d_2_1004x750.jpeg 2x&quot; data-dominant-color=&quot;C5C6C8&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;p&gt;See it in action in a short YouTube video:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=KjWfCVCZCqs&quot;&gt;Edit Umbraco content directly on the page - meet the Umbraco Visual Editor.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And go check it out on the marketplace!&lt;/p&gt;&#xA;&lt;aside class=&quot;onebox allowlistedgeneric&quot; data-onebox-src=&quot;https://marketplace.umbraco.com/package/arjo.umbracovisualeditor&quot;&gt;&#xA;  &lt;header class=&quot;source&quot;&gt;&#xA;      &lt;img src=&quot;https://forum.umbraco.com/uploads/default/original/1X/9595a9190a535ecc55fc3fa26df9036e44bd635d.png&quot; class=&quot;site-icon&quot; alt=&quot;&quot; data-dominant-color=&quot;505DBA&quot; width=&quot;32&quot; height=&quot;32&quot;&gt;&#xA;&#xA;      &lt;a href=&quot;https://marketplace.umbraco.com/package/arjo.umbracovisualeditor&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;marketplace.umbraco.com&lt;/a&gt;&#xA;  &lt;/header&gt;&#xA;&#xA;  &lt;article class=&quot;onebox-body&quot;&gt;&#xA;    &lt;img width=&quot;500&quot; height=&quot;500&quot; src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/2/226b0ae8d99ace3fdfc1fb8ad9bac730f773cbca_2_500x500.png&quot; class=&quot;thumbnail onebox-avatar&quot; alt=&quot;&quot; data-dominant-color=&quot;7C7F93&quot;&gt;&#xA;&#xA;&lt;h3&gt;&lt;a href=&quot;https://marketplace.umbraco.com/package/arjo.umbracovisualeditor&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Umbraco Visual Editor | Umbraco Marketplace&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;  &lt;p&gt;Umbraco Visual Editor is listed on the official Umbraco Marketplace | Information, links, and install instructions&lt;/p&gt;&#xA;&#xA;&#xA;  &lt;/article&gt;&#xA;&#xA;  &lt;div class=&quot;onebox-metadata&quot;&gt;&#xA;    &#xA;    &#xA;  &lt;/div&gt;&#xA;&#xA;  &lt;div style=&quot;clear: both&quot;&gt;&lt;/div&gt;&#xA;&lt;/aside&gt;&#xA;&#xA;&lt;p&gt;It&#x2019;s free and open-source and I&#x2019;d love to get your feedback &lt;a href=&quot;https://github.com/arjo-dev/Umbraco-Visual-Editor&quot; rel=&quot;noopener nofollow ugc&quot;&gt;over on GitHub&lt;/a&gt;.&lt;/p&gt;&#xA;            &lt;p&gt;&lt;small&gt;1 post - 1 participant&lt;/small&gt;&lt;/p&gt;&#xA;            &lt;p&gt;&lt;a href=&quot;https://forum.umbraco.com/t/umbracovisualeditor-for-v17-and-v18/8717&quot;&gt;Read full topic&lt;/a&gt;&lt;/p&gt;]]></description>
                    <pubDate>Wed, 04 Nov 2026 02:22:29 Z</pubDate>
                        <category>community</category>
                        <category>forum</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.ai.cloudflare</guid>
                    <title>Umbraco.AI.Cloudflare</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.ai.cloudflare</link>
                    <description><![CDATA[Cloudflare provider for Umbraco AI]]></description>
                    <pubDate>Wed, 04 Nov 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/lait.umbraco.llms.generator</guid>
                    <title>Lait.Umbraco.LLMS.Generator</title>
                    <link>https://marketplace.umbraco.com/package/lait.umbraco.llms.generator</link>
                    <description><![CDATA[Build your /llms.txt from the Umbraco 17 backoffice. Editors compose it from blocks: text, headings, links (to Umbraco pages or external URLs) and sections that list the pages under a node, optionally with all descendants, filtered by depth, document type, hidden pages and a page limit. One file per site/domain, follows the llmstxt.org format, live preview while editing, regenerated automatically when content is published. Dashboard in English and Danish.]]></description>
                    <pubDate>Wed, 04 Nov 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/hazelchat.umbraco</guid>
                    <title>Hazelchat.Umbraco</title>
                    <link>https://marketplace.umbraco.com/package/hazelchat.umbraco</link>
                    <description><![CDATA[Adds your Hazelchat AI chat agent to every page Umbraco renders, from one setting. It answers visitors from the pages you approved, shows its sources under every answer and passes enquiries on to you. Umbraco 13 to 18, no template or Program.cs changes, a Hazelchat health check, and an optional wait for your consent manager (Cookiebot and CookieTractor are recognised).]]></description>
                    <pubDate>Wed, 04 Nov 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/shorts/C-OiRZ3cFj8</guid>
                    <title>A Big Supertak to the Umbraco Community &#x1F64C;</title>
                    <link>https://www.youtube.com/shorts/C-OiRZ3cFj8</link>
                    <description><![CDATA[Supertak&#x201D; is Danish for &#x201C;thank you.&#x201D; But, like, a really big one.&#xA;&#xA;And the Umbraco Community deserves it. The people who answer forum questions at odd hours. Who build packages, review pull requests and fix the docs nobody else noticed were broken. Who show up at meetups and Codegarden, and somehow make a CMS conference feel like a family reunion.&#xA;&#xA;This is what a friendly CMS actually looks like. It&#x2019;s not the code. It&#x2019;s the people.&#xA;&#xA;So, supertak. &#x1F49C;&#xA;&#xA;Not part of it yet? Say hi on the forum: https://community.umbraco.com/&#xA;&#xA;#Umbraco #UmbracoCommunity #OpenSource]]></description>
                    <pubDate>Tue, 03 Nov 2026 10:16:21 Z</pubDate>
                        <category>hq</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/shorts/DNuylKEpF3g</guid>
                    <title>7 Reasons Umbraco Is the Friendliest CMS #Shorts</title>
                    <link>https://www.youtube.com/shorts/DNuylKEpF3g</link>
                    <description><![CDATA[&#x201C;Why Umbraco?&#x201D;&#xA;&#xA;Now you&#x2019;ve got a one-minute answer. Or seven bullet points for your next PowerPoint. Or is it called a ClaudePoint now? Anyway. Sidetrack. &#x1F6E4;&#xFE0F;&#xA;&#xA;Niels, our Senior Technical Product Manager for the CMS, explains why Umbraco is the friendliest CMS.&#xA;&#xA;What would you add as reason eight, nine or ten? We know Claude loves a slide with a lot of bullet points. &#x1F4CE;&#xA;&#xA;[Link to umbraco.com or docs]&#xA;&#xA;#Umbraco #FriendlyCMS #opensource &#xA;&#xA;Learn more about Umbraco on our website https://umbraco.com&#xA;Discover our Umbraco Community: https://community.umbraco.com/&#xA;Find the Umbraco source code on Github: https://github.com/umbraco/Umbraco-CMS&#xA;Visit the Umbraco Documentation: https://docs.umbraco.com]]></description>
                    <pubDate>Tue, 03 Nov 2026 10:15:48 Z</pubDate>
                        <category>hq</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://bsky.app/profile/umbhost.net/post/3mzfwfb3brw24</guid>
                    <title>UmbCheckout 17 is out for Umbraco 17</title>
                    <link>https://bsky.app/profile/umbhost.net/post/3mzfwfb3brw24</link>
                    <description><![CDATA[UmbCheckout 17 is out for Umbraco 17 and .NET 10, plus 1.6.0 for Umbraco 13.&#xA;&#xA;Rebuilt for the new backoffice, server-side pricing, every currency charged correctly (even JPY and KWD), and a Stripe webhook that handles each event once.]]></description>
                    <pubDate>Tue, 03 Nov 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>social</category>
                        <category>bluesky</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/dotsee.errorradar</guid>
                    <title>DotSee.ErrorRadar</title>
                    <link>https://marketplace.umbraco.com/package/dotsee.errorradar</link>
                    <description><![CDATA[Watches an Umbraco site&#x27;s own logging, groups repeating warnings and failures so they stand out, and links them to the pages they affect and the changes made just before they started.]]></description>
                    <pubDate>Tue, 03 Nov 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://umbraco.com/blog/one-year-in-melbourne/</guid>
                    <title>One year in Melbourne</title>
                    <link>https://umbraco.com/blog/one-year-in-melbourne/</link>
                    <description><![CDATA[Emmanuel Tissera, Head of APAC, looks back on Umbraco&#x27;s first year in Melbourne: 25 partners, local 24/5 support, events, workshops and what&#x27;s next.]]></description>
                    <pubDate>Tue, 03 Nov 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://packages.limbo.works/limbo.umbraco.spa/releases/v17.0.0-alpha003/</guid>
                    <title>Limbo.Umbraco.Spa 17.0.0-alpha003</title>
                    <link>https://packages.limbo.works/limbo.umbraco.spa/releases/v17.0.0-alpha003/</link>
                    <description><![CDATA[SPA (single page application) package for Umbraco.]]></description>
                    <pubDate>Tue, 03 Nov 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://skrift.io/issues/#133</guid>
                    <title>Skrift Issue #133</title>
                    <link>https://skrift.io/issues/#133</link>
                    <description><![CDATA[Featuring guest posts by Sotiris Filippidis on &quot;We Checked 22 Million Company Records for Umbraco, and Oh, Boy&quot; and Ben Szymanski on &quot;Photography of the Web&quot;]]></description>
                    <pubDate>Tue, 03 Nov 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                        <category>skrift</category>
                </item>
                <item>
                    <guid>https://github.com/skybrud/Skybrud.Umbraco.Redirects/releases/tag/v18.0.0</guid>
                    <title>Skybrud.Umbraco.Redirects 18.0.0</title>
                    <link>https://github.com/skybrud/Skybrud.Umbraco.Redirects/releases/tag/v18.0.0</link>
                    <description><![CDATA[Award winning redirects manager for Umbraco.]]></description>
                    <pubDate>Mon, 02 Nov 2026 18:28:33 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://forum.umbraco.com/t/new-package-crumpled-agentspecs/8713</guid>
                    <title>New Package - Crumpled.AgentSpecs</title>
                    <link>https://forum.umbraco.com/t/new-package-crumpled-agentspecs/8713</link>
                    <description><![CDATA[&lt;p&gt;Agent Specs!&lt;/p&gt;&#xA;&lt;p&gt;I don&#x2019;t know if you have ever enabled Cloudflare&#x2019;s &#x2018;Markdown For Agents&#x2019; and waved your hands around a bit and said, &#x201C;Look, now I&#x2019;ve pressed that the site is serving markdown for agents&#x201D;, and people have all looked a bit bemused?&lt;/p&gt;&#xA;&lt;p&gt;Or your client has said,&lt;/p&gt;&#xA;&lt;p&gt;&#x201C;Don&#x2019;t enable it yet; we want to check with our SEO people&#x201D;&lt;/p&gt;&#xA;&lt;p&gt;and&lt;/p&gt;&#xA;&lt;p&gt;&#x201C;Well, they are saying it&#x2019;s probably ok, but we need an llms.txt file&#x2026;&#x201D;&lt;/p&gt;&#xA;&lt;p&gt;Or once it&#x2019;s been enabled,  they&#x2019;ve asked,&lt;/p&gt;&#xA;&lt;p&gt;&#x201C;Is it working? How can we test it?&#x201D;&lt;/p&gt;&#xA;&lt;p&gt;and you are just in the middle of explaining the difference between Windows PowerShell and PowerShell 7, and yes, they do have it installed, and ok, maybe let&#x2019;s install Postman; it&#x2019;ll be easier&#x2026; no not Pok&#xE9;mon, it&#x2019;s a tool to make requests, and just trust us it&#x2019;s working, well it&#x2019;s just such a leap of faith&#x2026;&lt;/p&gt;&#xA;&lt;p&gt;So we&#x2019;ve built Agent Specs; it&#x2019;s a workspace view that sits in the context of the page in the Umbraco Backoffice, and allows the editor to &#x2018;fetch&#x2019; the published page and &#x2018;view it through the eyes of an AI Gent&#x2019; - Agent Specs&#x2026; get it?&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/0/0d86524002141549333d1f8383312b4a3c6d7d23.png&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/0d86524002141549333d1f8383312b4a3c6d7d23&quot; title=&quot;image&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/0/0d86524002141549333d1f8383312b4a3c6d7d23_2_690x140.png&quot; alt=&quot;image&quot; data-base62-sha1=&quot;1VDZkiiQvpwPOG2R2JUvdyV0bsv&quot; width=&quot;690&quot; height=&quot;140&quot; srcset=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/0/0d86524002141549333d1f8383312b4a3c6d7d23_2_690x140.png, https://forum.umbraco.com/uploads/default/optimized/2X/0/0d86524002141549333d1f8383312b4a3c6d7d23_2_1035x210.png 1.5x, https://forum.umbraco.com/uploads/default/original/2X/0/0d86524002141549333d1f8383312b4a3c6d7d23.png 2x&quot; data-dominant-color=&quot;F5F6F6&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;p&gt;Agent Specs will then show the result of the fetch:&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/d/dfefb2c16111ec5d7bb5fa286dc3c1e5b2a2e623.png&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/dfefb2c16111ec5d7bb5fa286dc3c1e5b2a2e623&quot; title=&quot;image&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/d/dfefb2c16111ec5d7bb5fa286dc3c1e5b2a2e623_2_690x150.png&quot; alt=&quot;image&quot; data-base62-sha1=&quot;vX21G3GT3ksFyGQntfjowKMyChZ&quot; width=&quot;690&quot; height=&quot;150&quot; srcset=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/d/dfefb2c16111ec5d7bb5fa286dc3c1e5b2a2e623_2_690x150.png, https://forum.umbraco.com/uploads/default/optimized/2X/d/dfefb2c16111ec5d7bb5fa286dc3c1e5b2a2e623_2_1035x225.png 1.5x, https://forum.umbraco.com/uploads/default/original/2X/d/dfefb2c16111ec5d7bb5fa286dc3c1e5b2a2e623.png 2x&quot; data-dominant-color=&quot;F4F4F6&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;p&gt;Along with a preview of what the Agent actually sees:&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/2/2e5f0790cb454234a49a5d331db3e5898c28bd4d.png&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/2e5f0790cb454234a49a5d331db3e5898c28bd4d&quot; title=&quot;image&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/2/2e5f0790cb454234a49a5d331db3e5898c28bd4d_2_641x500.png&quot; alt=&quot;image&quot; data-base62-sha1=&quot;6CdyWapKDOmYEDAcnMLL6ly5X09&quot; width=&quot;641&quot; height=&quot;500&quot; srcset=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/2/2e5f0790cb454234a49a5d331db3e5898c28bd4d_2_641x500.png, https://forum.umbraco.com/uploads/default/optimized/2X/2/2e5f0790cb454234a49a5d331db3e5898c28bd4d_2_961x750.png 1.5x, https://forum.umbraco.com/uploads/default/optimized/2X/2/2e5f0790cb454234a49a5d331db3e5898c28bd4d_2_1282x1000.png 2x&quot; data-dominant-color=&quot;F7F7F8&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;p&gt;and an option to see the raw markdown when it has been converted,&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/d/dd3471157a7c6f370a8e8d2b3ebeac2a884ee390.png&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/dd3471157a7c6f370a8e8d2b3ebeac2a884ee390&quot; title=&quot;image&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/d/dd3471157a7c6f370a8e8d2b3ebeac2a884ee390_2_690x371.png&quot; alt=&quot;image&quot; data-base62-sha1=&quot;vyRSmFKtNVrYe7c3qkDKcwXdgFq&quot; width=&quot;690&quot; height=&quot;371&quot; srcset=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/d/dd3471157a7c6f370a8e8d2b3ebeac2a884ee390_2_690x371.png, https://forum.umbraco.com/uploads/default/optimized/2X/d/dd3471157a7c6f370a8e8d2b3ebeac2a884ee390_2_1035x556.png 1.5x, https://forum.umbraco.com/uploads/default/optimized/2X/d/dd3471157a7c6f370a8e8d2b3ebeac2a884ee390_2_1380x742.png 2x&quot; data-dominant-color=&quot;F9F7F7&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;p&gt;highlighting any rich schema on the page (with a handy link to go off and validate it on &lt;a href=&quot;http://schema.org&quot; rel=&quot;noopener nofollow ugc&quot;&gt;schema.org&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/4/466594b3bc85cdf3c9773181a43d6708fd9a7b28.png&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/466594b3bc85cdf3c9773181a43d6708fd9a7b28&quot; title=&quot;image&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/4/466594b3bc85cdf3c9773181a43d6708fd9a7b28_2_690x300.png&quot; alt=&quot;image&quot; data-base62-sha1=&quot;a2L3EycR7sB0O3vIwXmaD79G5Je&quot; width=&quot;690&quot; height=&quot;300&quot; srcset=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/4/466594b3bc85cdf3c9773181a43d6708fd9a7b28_2_690x300.png, https://forum.umbraco.com/uploads/default/optimized/2X/4/466594b3bc85cdf3c9773181a43d6708fd9a7b28_2_1035x450.png 1.5x, https://forum.umbraco.com/uploads/default/optimized/2X/4/466594b3bc85cdf3c9773181a43d6708fd9a7b28_2_1380x600.png 2x&quot; data-dominant-color=&quot;FCFDFC&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;p&gt;The aim is to be editor-friendly, and so the package has a toggleable guide explaining Markdown for agents, content signals and rich schema, with handy links to the outside world to learn more.&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/c/c790775c15135122d3ae041f99fa20a55ccb84fe.png&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/c790775c15135122d3ae041f99fa20a55ccb84fe&quot; title=&quot;guide&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/c/c790775c15135122d3ae041f99fa20a55ccb84fe_2_554x500.png&quot; alt=&quot;guide&quot; data-base62-sha1=&quot;stqx7c7S1vOY4TB4MQiJbGT34LQ&quot; width=&quot;554&quot; height=&quot;500&quot; srcset=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/c/c790775c15135122d3ae041f99fa20a55ccb84fe_2_554x500.png, https://forum.umbraco.com/uploads/default/optimized/2X/c/c790775c15135122d3ae041f99fa20a55ccb84fe_2_831x750.png 1.5x, https://forum.umbraco.com/uploads/default/optimized/2X/c/c790775c15135122d3ae041f99fa20a55ccb84fe_2_1108x1000.png 2x&quot; data-dominant-color=&quot;F7F7F8&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;p&gt;If it&#x2019;s installed on a site that doesn&#x2019;t have Cloudflare&#x2019;s Markdown for Agents enabled, then it will suggest the possible actions to take to improve AI visibility, along with a handy link to copy the advice to send to someone else, if that&#x2019;s someone elses job!&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/5/5c4bf468c333d87b4fa2882d808df37ed1877500.png&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/5c4bf468c333d87b4fa2882d808df37ed1877500&quot; title=&quot;image&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/5/5c4bf468c333d87b4fa2882d808df37ed1877500_2_690x375.png&quot; alt=&quot;image&quot; data-base62-sha1=&quot;dauETdvPtvnbvgjVSbDbAMB3znG&quot; width=&quot;690&quot; height=&quot;375&quot; srcset=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/5/5c4bf468c333d87b4fa2882d808df37ed1877500_2_690x375.png, https://forum.umbraco.com/uploads/default/optimized/2X/5/5c4bf468c333d87b4fa2882d808df37ed1877500_2_1035x562.png 1.5x, https://forum.umbraco.com/uploads/default/optimized/2X/5/5c4bf468c333d87b4fa2882d808df37ed1877500_2_1380x750.png 2x&quot; data-dominant-color=&quot;F0F0F0&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;p&gt;Eg install Adam&#x2019;s AI Visibility for Umbraco, which works well on Umbraco Cloud (and elsewhere) if procuring a Cloudflare paid plan isn&#x2019;t an option.&lt;/p&gt;&#xA;&lt;p&gt;Similarly, you don&#x2019;t need Markdown for Agents to get on with designing great schemas for your website pages!&lt;/p&gt;&#xA;&lt;p&gt;We&#x2019;ve found that installing the package and demo&#x2019;ing this  in context of an editor&#x2019;s particular site has been a bit of an ice breaker, and really helped people understand what all this shift to making a site visible to AI is all about&#x2026;&lt;/p&gt;&#xA;&lt;p&gt;Anyway, available at the Umbraco Marketplace, and other reputable package outlets.&lt;/p&gt;&#xA;&lt;aside class=&quot;onebox allowlistedgeneric&quot; data-onebox-src=&quot;https://marketplace.umbraco.com/package/crumpled.agentspecs&quot;&gt;&#xA;  &lt;header class=&quot;source&quot;&gt;&#xA;      &lt;img src=&quot;https://forum.umbraco.com/uploads/default/original/1X/9595a9190a535ecc55fc3fa26df9036e44bd635d.png&quot; class=&quot;site-icon&quot; alt=&quot;&quot; data-dominant-color=&quot;505DBA&quot; width=&quot;32&quot; height=&quot;32&quot;&gt;&#xA;&#xA;      &lt;a href=&quot;https://marketplace.umbraco.com/package/crumpled.agentspecs&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;marketplace.umbraco.com&lt;/a&gt;&#xA;  &lt;/header&gt;&#xA;&#xA;  &lt;article class=&quot;onebox-body&quot;&gt;&#xA;    &lt;img width=&quot;500&quot; height=&quot;500&quot; src=&quot;https://forum.umbraco.com/uploads/default/original/2X/0/04b8cdb425d22b9510a7683059f80d6a4864a428.png&quot; class=&quot;thumbnail onebox-avatar&quot; alt=&quot;&quot; data-dominant-color=&quot;BC929A&quot;&gt;&#xA;&#xA;&lt;h3&gt;&lt;a href=&quot;https://marketplace.umbraco.com/package/crumpled.agentspecs&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Crumpled.AgentSpecs | Umbraco Marketplace&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;  &lt;p&gt;Crumpled.AgentSpecs is listed on the official Umbraco Marketplace | Information, links, and install instructions&lt;/p&gt;&#xA;&#xA;&#xA;  &lt;/article&gt;&#xA;&#xA;  &lt;div class=&quot;onebox-metadata&quot;&gt;&#xA;    &#xA;    &#xA;  &lt;/div&gt;&#xA;&#xA;  &lt;div style=&quot;clear: both&quot;&gt;&lt;/div&gt;&#xA;&lt;/aside&gt;&#xA;&#xA;&lt;p&gt;Logo, fairly route one&#x2026; pair of glasses, when you look at a website through em, you see markdown&#x2026;&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/6/6c027a2538ead2f73ed4d184764b037ef0896e12.png&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/6c027a2538ead2f73ed4d184764b037ef0896e12&quot; title=&quot;image&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/6/6c027a2538ead2f73ed4d184764b037ef0896e12_2_557x500.png&quot; alt=&quot;image&quot; data-base62-sha1=&quot;fpuSbNgk3LvkfriT63ZETRhLFfk&quot; width=&quot;557&quot; height=&quot;500&quot; srcset=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/6/6c027a2538ead2f73ed4d184764b037ef0896e12_2_557x500.png, https://forum.umbraco.com/uploads/default/original/2X/6/6c027a2538ead2f73ed4d184764b037ef0896e12.png 1.5x, https://forum.umbraco.com/uploads/default/original/2X/6/6c027a2538ead2f73ed4d184764b037ef0896e12.png 2x&quot; data-dominant-color=&quot;CEB0B6&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;            &lt;p&gt;&lt;small&gt;1 post - 1 participant&lt;/small&gt;&lt;/p&gt;&#xA;            &lt;p&gt;&lt;a href=&quot;https://forum.umbraco.com/t/new-package-crumpled-agentspecs/8713&quot;&gt;Read full topic&lt;/a&gt;&lt;/p&gt;]]></description>
                    <pubDate>Mon, 02 Nov 2026 17:54:41 Z</pubDate>
                        <category>community</category>
                        <category>forum</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/crumpled.agentspecs</guid>
                    <title>Crumpled.AgentSpecs</title>
                    <link>https://marketplace.umbraco.com/package/crumpled.agentspecs</link>
                    <description><![CDATA[See what AI agents see for every Umbraco page: an Agent Specs view on each content item that requests the front-end URL with Accept: text/markdown (Cloudflare Markdown for Agents) and shows the markdown preview, source and JSON-LD.]]></description>
                    <pubDate>Mon, 02 Nov 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/alttextgeneratorai.umbraco</guid>
                    <title>AltTextGeneratorAI.Umbraco</title>
                    <link>https://marketplace.umbraco.com/package/alttextgeneratorai.umbraco</link>
                    <description><![CDATA[Write SEO-friendly alt text for the images in your Umbraco media library with AI. Generate it for one image, a selection or every image that is missing it, in 131 languages, review it, and save.]]></description>
                    <pubDate>Sun, 01 Nov 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/baryodev.umbraco.aiassistant</guid>
                    <title>BaryoDev.Umbraco.AiAssistant</title>
                    <link>https://marketplace.umbraco.com/package/baryodev.umbraco.aiassistant</link>
                    <description><![CDATA[Claude writing help in the Umbraco backoffice. Polish text, translate pages, write SEO titles and descriptions, and add alt text to images, one item at a time or as a bulk job with a cost estimate. Brand voice rules keep the tone yours. You bring your own Anthropic API key and pay Anthropic directly. Every result is a suggestion: the editor accepts, edits or discards it, and a facts check flags changed numbers and names. A monthly spend cap is available. Free and MIT licensed.]]></description>
                    <pubDate>Sun, 01 Nov 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=rXnd2_IRrIY</guid>
                    <title>Built to Scale: The Evolution of Load Balancing in Umbraco | UIF26</title>
                    <link>https://www.youtube.com/watch?v=rXnd2_IRrIY</link>
                    <description><![CDATA[A session presented at Umbraco India Festival 2026 by Tony Meyn.&#xA;&#xA;Explore the evolution of load balancing in Umbraco, how it works, and the approaches to building scalable and reliable Umbraco applications.&#xA;&#xA;Website: &#xA;https://www.umbracofestival.in&#xA;&#xA;Join our Meetup group: &#xA;https://www.meetup.com/umbraco-india-user-group/&#xA;&#xA;#Umbraco #UIF26 #H5YR #UIUG]]></description>
                    <pubDate>Sat, 31 Oct 2026 18:30:32 Z</pubDate>
                        <category>community</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=wgJ9iZHrkN4</guid>
                    <title>Agentic Umbraco: When Automate Meets MCP | UIF26</title>
                    <link>https://www.youtube.com/watch?v=wgJ9iZHrkN4</link>
                    <description><![CDATA[A session presented at Umbraco India Festival 2026 by Nikhil Prajapati.&#xA;&#xA;Explore how Agentic AI and the Model Context Protocol (MCP) can work with Umbraco to automate tasks and create new possibilities for developers.&#xA;&#xA;Website: https://www.umbracofestival.in&#xA;Meetup group: https://www.meetup.com/umbraco-india-user-group/]]></description>
                    <pubDate>Sat, 31 Oct 2026 18:30:27 Z</pubDate>
                        <category>community</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=vj2w8fRK1PU</guid>
                    <title>The Future of Search: SEO, AEO &amp; GEO in Umbraco | UIF26</title>
                    <link>https://www.youtube.com/watch?v=vj2w8fRK1PU</link>
                    <description><![CDATA[A session presented at Umbraco India Festival 2026 by Mateen Shaikh.&#xA;&#xA;Explore how search is evolving beyond traditional SEO with Answer Engine Optimisation (AEO) and Generative Engine Optimisation (GEO), and understand what these changes mean for Umbraco websites.&#xA;&#xA;Website: https://www.umbracofestival.in&#xA;Join our Meetup group: https://www.meetup.com/umbraco-india-user-group/]]></description>
                    <pubDate>Sat, 31 Oct 2026 18:30:23 Z</pubDate>
                        <category>community</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=wyg5jD5UhZ8</guid>
                    <title>I, AI, and Umbraco: A Developer Perspective | UIF26</title>
                    <link>https://www.youtube.com/watch?v=wyg5jD5UhZ8</link>
                    <description><![CDATA[A session presented at Umbraco India Festival 2026 by Emmanuel Tissera.&#xA;&#xA;Explore the role of AI in Umbraco development from a developer&#x27;s perspective. Discover how AI tools and capabilities can support development workflows and open up new possibilities within the Umbraco ecosystem.&#xA;&#xA;Website: &#xA;https://www.umbracofestival.in&#xA;Join our Meetup group: &#xA;https://www.meetup.com/umbraco-india-user-group/&#xA;&#xA;#Umbraco #UIF26 #H5YR #UIUG]]></description>
                    <pubDate>Sat, 31 Oct 2026 18:30:23 Z</pubDate>
                        <category>community</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=J6PhbLuHlv4</guid>
                    <title>Enterprise Replatforming: Consolidating Three CMSs into a Unified Umbraco Cloud Platform | UIF26</title>
                    <link>https://www.youtube.com/watch?v=J6PhbLuHlv4</link>
                    <description><![CDATA[A session presented at Umbraco India Festival 2026 by Farshadudheen K &amp; Ansar M.&#xA;&#xA;Join our Meetup group: https://www.meetup.com/umbraco-india-user-group]]></description>
                    <pubDate>Sat, 31 Oct 2026 18:30:17 Z</pubDate>
                        <category>community</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=mR5gfg3uhJ8</guid>
                    <title>Umbraco India Fest 2026</title>
                    <link>https://www.youtube.com/watch?v=mR5gfg3uhJ8</link>
                    <description><![CDATA[A festival full of learning, connections, laughter, and unforgettable memories. &#x1F499;&#xA;Relive the moments and hear from the speakers, sponsors, and Umbraco team who made Umbraco India Festival 2026 truly special.&#xA;&#xA;Phases | Techxot | GIRIRAJ DIGITAL | WESURE INSURTECH SERVICES (INDIA) PRIVATE LIMITED&#xA;&#xA;https://www.umbracofestival.in&#xA;https://www.meetup.com/umbraco-india-user-group/&#xA;&#xA;#UIF26 #Umbraco #H5YR #UIUG #UmbracoIndiaFestival]]></description>
                    <pubDate>Sat, 31 Oct 2026 18:30:11 Z</pubDate>
                        <category>community</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=Jsv97kUDbW8</guid>
                    <title>From Audience to MVP: An Umbraco Story from Nepal | Bishal Tim | UIF26</title>
                    <link>https://www.youtube.com/watch?v=Jsv97kUDbW8</link>
                    <description><![CDATA[A session presented at Umbraco India Festival 2026 by Bishal Tim.&#xA;&#xA;From attending a small Umbraco meetup in Kathmandu to becoming Umbraco&#x27;s first MVP from Nepal, Bishal shares his journey and the growth of the Umbraco community in Nepal.&#xA;&#xA;https://www.umbracofestival.in&#xA;Join our Meetup group: https://www.meetup.com/umbraco-india-user-group/]]></description>
                    <pubDate>Sat, 31 Oct 2026 18:30:09 Z</pubDate>
                        <category>community</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=r_bNykILV30</guid>
                    <title>Mindfulness: The Present is Perfect | UIF26</title>
                    <link>https://www.youtube.com/watch?v=r_bNykILV30</link>
                    <description><![CDATA[A session presented at Umbraco India Festival 2026 by Seema Sunil.&#xA;&#xA;Explore the importance of mindfulness, staying present, and finding balance in our busy lives. A session that reminds us to pause, be aware, and appreciate the present moment.&#xA;&#xA;Website: &#xA;https://www.umbracofestival.in&#xA;Join our Meetup group: &#xA;https://www.meetup.com/umbraco-india-user-group/&#xA;&#xA;#Umbraco #UIF26 #H5YR #UIUG]]></description>
                    <pubDate>Sat, 31 Oct 2026 18:30:01 Z</pubDate>
                        <category>community</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://forum.umbraco.com/t/transfr-content-export-package/8708</guid>
                    <title>Transfr: content export package</title>
                    <link>https://forum.umbraco.com/t/transfr-content-export-package/8708</link>
                    <description><![CDATA[&lt;p&gt;Wow!&lt;br&gt;&#xA;Is this the best new package this year?&lt;br&gt;&#xA;For me, I think so. Great work from the package developer Preben Neirijnck!&lt;br&gt;&#xA;This is something that really should be build in on a professional level CMS i think. But great that it now is available as a package.&lt;/p&gt;&#xA;&lt;aside class=&quot;onebox allowlistedgeneric&quot; data-onebox-src=&quot;https://marketplace.umbraco.com/package/neirijnck.transfr&quot;&gt;&#xA;  &lt;header class=&quot;source&quot;&gt;&#xA;      &lt;img src=&quot;https://forum.umbraco.com/uploads/default/original/1X/9595a9190a535ecc55fc3fa26df9036e44bd635d.png&quot; class=&quot;site-icon&quot; alt=&quot;&quot; data-dominant-color=&quot;505DBA&quot; width=&quot;32&quot; height=&quot;32&quot;&gt;&#xA;&#xA;      &lt;a href=&quot;https://marketplace.umbraco.com/package/neirijnck.transfr&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;marketplace.umbraco.com&lt;/a&gt;&#xA;  &lt;/header&gt;&#xA;&#xA;  &lt;article class=&quot;onebox-body&quot;&gt;&#xA;    &lt;img width=&quot;500&quot; height=&quot;500&quot; src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/5/5cecbaf0264f8fa03a59f70941a89588c655b764_2_500x500.png&quot; class=&quot;thumbnail onebox-avatar&quot; alt=&quot;&quot; data-dominant-color=&quot;5C9DAD&quot;&gt;&#xA;&#xA;&lt;h3&gt;&lt;a href=&quot;https://marketplace.umbraco.com/package/neirijnck.transfr&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Transfr | Umbraco Marketplace&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;  &lt;p&gt;Transfr is listed on the official Umbraco Marketplace | Information, links, and install instructions&lt;/p&gt;&#xA;&#xA;&#xA;  &lt;/article&gt;&#xA;&#xA;  &lt;div class=&quot;onebox-metadata&quot;&gt;&#xA;    &#xA;    &#xA;  &lt;/div&gt;&#xA;&#xA;  &lt;div style=&quot;clear: both&quot;&gt;&lt;/div&gt;&#xA;&lt;/aside&gt;&#xA;&#xA;&lt;p&gt;I had plans on building something similar. Coming from building a lot of stuff with Episerver/Optimizely, I have been used to being able to export content from one instance to another.&lt;br&gt;&#xA;Then just yesterday I stumbled upon this fantastic package. Something I think have been missing in the Umbraco world for a long time. I have seen some other content exporters earlier, but none of them was something I liked or worked for me.&lt;/p&gt;&#xA;&lt;p&gt;Thare are many occasions that you want to do this. Either from prodserver to stage or even the other way around.&lt;/p&gt;&#xA;            &lt;p&gt;&lt;small&gt;1 post - 1 participant&lt;/small&gt;&lt;/p&gt;&#xA;            &lt;p&gt;&lt;a href=&quot;https://forum.umbraco.com/t/transfr-content-export-package/8708&quot;&gt;Read full topic&lt;/a&gt;&lt;/p&gt;]]></description>
                    <pubDate>Sat, 31 Oct 2026 09:28:56 Z</pubDate>
                        <category>community</category>
                        <category>forum</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/lait.monitor.umbracoclient</guid>
                    <title>Lait.Monitor.UmbracoClient</title>
                    <link>https://marketplace.umbraco.com/package/lait.monitor.umbracoclient</link>
                    <description><![CDATA[Sends an Umbraco site&#x27;s logs and request data (per-minute aggregates and selected requests) to Monitor. Install the package and set Monitor:Endpoint and Monitor:ApiKey.]]></description>
                    <pubDate>Sat, 31 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=hHpA_WhJwVk</guid>
                    <title>umbraCoffee  - Elephant In The Room</title>
                    <link>https://www.youtube.com/watch?v=hHpA_WhJwVk</link>
                    <description><![CDATA[Welcome to your monthly dose of #umbraCoffee&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;! Your hosts - Marcin and Callum - together with their guest(s) will drive through all of the community news and happenings in the Umbraco world. So... grab a cuppa, join us LIVE and enjoy!&#xA;&#xA;See ya?!&#xA;&#xA;---&#xA;&#x2615; Wanna buy us a coffee/pizza/donuts?&#xA;https://www.buymeacoffee.com/umbracoffee&#xA;---&#xA;&#xA;Notes:&#xA;&#xA;// TODO]]></description>
                    <pubDate>Fri, 30 Oct 2026 10:53:16 Z</pubDate>
                        <category>community</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://forum.umbraco.com/t/new-package-aivie-content/8700</guid>
                    <title>New package: Aivie Content</title>
                    <link>https://forum.umbraco.com/t/new-package-aivie-content/8700</link>
                    <description><![CDATA[&lt;p&gt;After months of hard work, we&#x2019;re excited to announce that &lt;strong&gt;Aivie Content is now available on the Umbraco Marketplace!&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;What started as an idea within ipsis has grown into a fully-fledged product that brings AI-powered content creation and optimisation directly into the Umbraco back office.&lt;/p&gt;&#xA;&lt;h3&gt;&lt;a name=&quot;p-20424-what-is-aivie-content-1&quot; class=&quot;anchor&quot; href=&quot;https://forum.umbraco.com#p-20424-what-is-aivie-content-1&quot; aria-label=&quot;Heading link&quot;&gt;&lt;/a&gt;What is Aivie Content?&lt;/h3&gt;&#xA;&lt;p&gt;Aivie Content helps you create new content and improve existing pages without leaving Umbraco. It takes your website&#x2019;s tone of voice into account and supports you with SEO, GEO (Generative Engine Optimization), keyword strategy, content planning and publishing.&lt;/p&gt;&#xA;&lt;p&gt;The goal is not just to generate more content, but to create better content that helps your website become more visible in traditional search engines like Google and in AI-generated answers.&lt;/p&gt;&#xA;&lt;p&gt;We&#x2019;re already using Aivie Content for our own clients, and we&#x2019;ve seen some encouraging results in just a few weeks. For one client, we measured a &lt;strong&gt;340% increase in clicks from Google and a 520% increase in impressions over an eight-week period&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;For us, this demonstrates the potential of integrating AI directly into the content workflow instead of treating it as yet another standalone tool. By bringing AI into the CMS, content teams can work more efficiently while keeping their own website, content strategy and tone of voice at the centre.&lt;/p&gt;&#xA;&lt;p&gt;A huge thank you to &lt;strong&gt;Niels Laan, Aida de Haan and Puck Holshuijsen&lt;/strong&gt;, who invested an incredible amount of time and energy into this project. From the initial idea and development to testing, refining and bringing the product to market, their work has made this launch possible.&lt;/p&gt;&#xA;&lt;h3&gt;&lt;a name=&quot;p-20424-give-it-a-try-2&quot; class=&quot;anchor&quot; href=&quot;https://forum.umbraco.com#p-20424-give-it-a-try-2&quot; aria-label=&quot;Heading link&quot;&gt;&lt;/a&gt;Give it a try&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Umbraco compatibility:&lt;/strong&gt; Umbraco 17 and higher&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Free trial:&lt;/strong&gt; 14 days&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href=&quot;https://aivie.nl&quot; rel=&quot;noopener nofollow ugc&quot;&gt;https://aivie.nl&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Marketplace:&lt;/strong&gt; Search for &lt;em&gt;Aivie Content&lt;/em&gt; in the Umbraco Marketplace.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;We&#x2019;re excited to bring Aivie Content to the Umbraco community and would love to hear what you think!&lt;/p&gt;&#xA;&lt;p&gt;If you give it a try, let us know how you use it and what you&#x2019;d like to see next.&lt;/p&gt;&#xA;            &lt;p&gt;&lt;small&gt;1 post - 1 participant&lt;/small&gt;&lt;/p&gt;&#xA;            &lt;p&gt;&lt;a href=&quot;https://forum.umbraco.com/t/new-package-aivie-content/8700&quot;&gt;Read full topic&lt;/a&gt;&lt;/p&gt;]]></description>
                    <pubDate>Fri, 30 Oct 2026 06:55:44 Z</pubDate>
                        <category>community</category>
                        <category>forum</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=uksb-aFHPvQ</guid>
                    <title>Content Isn&#x2019;t Context Why Your AI Needs a Brief</title>
                    <link>https://www.youtube.com/watch?v=uksb-aFHPvQ</link>
                    <description><![CDATA[Creating and updating your website should be the least of your worries. With Umbraco, you get a content management system known and loved for its flexibility and great editing experience.&#xA;&#xA;Umbraco is easy to get started with install, set up, and host it yourself or let us take care of it all for you on Umbraco Cloud. https://try.umbraco.com&#xA;&#xA;Learn more about Umbraco on our website https://umbraco.com&#xA;Discover our Umbraco Community: https://community.umbraco.com/&#xA;Find the Umbraco source code on Github: https://github.com/umbraco/Umbraco-CMS&#xA;Visit the Umbraco Documentation: https://docs.umbraco.com]]></description>
                    <pubDate>Fri, 30 Oct 2026 06:05:31 Z</pubDate>
                        <category>hq</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbricians.liveview</guid>
                    <title>Umbricians.LiveView</title>
                    <link>https://marketplace.umbraco.com/package/umbricians.liveview</link>
                    <description><![CDATA[A real-time Live View dashboard for the Umbraco Settings section, charting active web, MCP and API sessions plus any custom metric you plug in.]]></description>
                    <pubDate>Fri, 30 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.Migrations/releases/tag/v13.0.1</guid>
                    <title>Limbo.Umbraco.Migrations 13.0.1</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.Migrations/releases/tag/v13.0.1</link>
                    <description><![CDATA[Umbraco package for handling migrations.]]></description>
                    <pubDate>Thu, 29 Oct 2026 22:39:20 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.Migrations/releases/tag/v13.0.0</guid>
                    <title>Limbo.Umbraco.Migrations 13.0.0</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.Migrations/releases/tag/v13.0.0</link>
                    <description><![CDATA[Umbraco package for handling migrations.]]></description>
                    <pubDate>Thu, 29 Oct 2026 22:24:02 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.MediaPicker/releases/tag/v13.0.2</guid>
                    <title>Limbo.Umbraco.MediaPicker 13.0.2</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.MediaPicker/releases/tag/v13.0.2</link>
                    <description><![CDATA[Umbraco package that extends the functionality of Umbraco&#x27;s build-in media picker property editor.]]></description>
                    <pubDate>Thu, 29 Oct 2026 20:58:36 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.Fetch/releases/tag/v17.0.0</guid>
                    <title>Limbo.Umbraco.Fetch 17.0.0</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.Fetch/releases/tag/v17.0.0</link>
                    <description><![CDATA[Umbraco package for periodically downloading files to disk.]]></description>
                    <pubDate>Thu, 29 Oct 2026 20:31:45 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.Fetch/releases/tag/v13.0.1</guid>
                    <title>Limbo.Umbraco.Fetch 13.0.1</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.Fetch/releases/tag/v13.0.1</link>
                    <description><![CDATA[Umbraco package for periodically downloading files to disk.]]></description>
                    <pubDate>Thu, 29 Oct 2026 20:15:57 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://dev.to/owaincodes/umbraco-features-with-claude-worktrees-5b3e</guid>
                    <title>Umbraco Features with Claude Worktrees</title>
                    <link>https://dev.to/owaincodes/umbraco-features-with-claude-worktrees-5b3e</link>
                    <description><![CDATA[&lt;h1&gt;&#xA;  &#xA;  &#xA;  One database per git worktree: building Umbraco features in parallel with Claude Code&#xA;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR.&lt;/strong&gt; I run several Claude Code sessions against the same Umbraco 17 site at once, one feature per session. Claude Code gives each session its own git worktree, so the code is isolated. The database isn&#x27;t, and uSync happily imports whichever branch started last. So I wrote a PowerShell hook that copies the dev database for every new worktree, points the worktree at that copy, keeps media working, picks ports that don&#x27;t clash, and drops the lot when the worktree goes. It&#x27;s about twenty seconds of SQL Server work on session start and then you never think about it again. Install steps are at the bottom.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  Contents&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The problem&lt;/li&gt;&#xA;&lt;li&gt;Why not just spin up a fresh database?&lt;/li&gt;&#xA;&lt;li&gt;Hooking into Claude Code&lt;/li&gt;&#xA;&lt;li&gt;What happens on SessionStart&lt;/li&gt;&#xA;&lt;li&gt;What happens on WorktreeRemove&lt;/li&gt;&#xA;&lt;li&gt;Things that bit me&lt;/li&gt;&#xA;&lt;li&gt;What it doesn&#x27;t do&lt;/li&gt;&#xA;&lt;li&gt;Would it work on your project?&lt;/li&gt;&#xA;&lt;li&gt;How to install it&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;a id=&quot;the-problem&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  The problem&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I&#x27;ve got into the habit of running a few Claude Code sessions at the same time, each one working on a different feature of the same Umbraco site. It&#x27;s brilliant. One session is building a new block, another is fixing a bug in a controller, and I&#x27;m sat in the middle reviewing diffs with a coffee.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Claude Code makes this possible with git worktrees. A worktree is a second checkout of the same repo in a different folder, on its own branch. Two sessions can edit, build and commit without ever touching each other&#x27;s files. Perfect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Except an Umbraco site isn&#x27;t just files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Our &lt;code&gt;appsettings.Local.json&lt;/code&gt; points at one SQL Server database, and the project has uSync set up like this:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight json&quot;&gt;&lt;code&gt;&lt;span class=&quot;nl&quot;&gt;&quot;uSync&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;Settings&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;ImportAtStartup&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;All&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;That means every time you start the site from a worktree, uSync imports &lt;em&gt;that branch&#x27;s&lt;/em&gt; document types, data types and compositions into the shared database. Start the site from worktree A, then from worktree B, and B&#x27;s schema stomps all over A&#x27;s. Start A again and it stomps right back. The backoffice flips between two versions of the content model and neither session can trust what it&#x27;s looking at.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ports are a second, smaller headache. &lt;code&gt;launchSettings.json&lt;/code&gt; pins the site to &lt;code&gt;https://localhost:44373&lt;/code&gt;, so two worktrees can&#x27;t even run at the same time. Not ideal when the whole point is running things in parallel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a id=&quot;why-not-fresh&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  Why not just spin up a fresh database?&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;My first thought was an empty database per worktree and let Umbraco&#x27;s unattended install do the rest. That falls over almost immediately on this site. uSync here only exports schema (content types, data types, languages, media types), not content, and &lt;code&gt;wwwroot/media&lt;/code&gt; is gitignored. So a fresh install gives you a beautifully empty site with nothing to click on. Not much use for testing a feature.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you actually want is a &lt;em&gt;copy&lt;/em&gt; of the main dev database with the branch&#x27;s schema applied on top. uSync does the second half for free at startup. The first half is a &lt;code&gt;BACKUP ... WITH COPY_ONLY&lt;/code&gt; followed by a &lt;code&gt;RESTORE ... WITH MOVE&lt;/code&gt;, which on a dev sized database takes about twenty seconds. I can live with twenty seconds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a id=&quot;hooks&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  Hooking into Claude Code&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Claude Code has lifecycle hooks, configured in &lt;code&gt;.claude/settings.json&lt;/code&gt;. That file is committed, so once it&#x27;s in the repo the whole team gets the hooks for free. Two events do everything I need:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;strong&gt;&lt;code&gt;SessionStart&lt;/code&gt;&lt;/strong&gt; fires when a session starts, resumes or compacts. Its &lt;code&gt;cwd&lt;/code&gt; is the worktree root. This is where the database gets provisioned.&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;strong&gt;&lt;code&gt;WorktreeRemove&lt;/code&gt;&lt;/strong&gt; fires when Claude removes a worktree. This is where the database gets dropped.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There&#x27;s no hook for &quot;pull request created&quot;, and honestly I didn&#x27;t want one. After the PR goes up you still need the site running to deal with review comments. The lifetime of the worktree is the right lifetime for the database.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both events run the same PowerShell script. It reads the event JSON from stdin and branches on &lt;code&gt;hook_event_name&lt;/code&gt;:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight json&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;hooks&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;SessionStart&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;hooks&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;            &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;command&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;            &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;shell&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;powershell&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;            &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;command&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;powershell -NoProfile -ExecutionPolicy Bypass -File &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;$env:CLAUDE_PROJECT_DIR&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;.claude&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;hooks&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;worktree-db.ps1&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;            &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;timeout&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;300&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;WorktreeRemove&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;hooks&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;            &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;command&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;            &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;shell&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;powershell&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;            &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;command&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;powershell -NoProfile -ExecutionPolicy Bypass -File &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;$env:CLAUDE_PROJECT_DIR&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;.claude&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;hooks&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;worktree-db.ps1&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;            &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;timeout&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;120&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;          &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;&lt;a id=&quot;session-start&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  What happens on SessionStart&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;1. Work out if this is a worktree, and where the main checkout lives.&lt;/strong&gt; Git will tell you both. In a worktree, &lt;code&gt;--git-dir&lt;/code&gt; is &lt;code&gt;&amp;lt;main&amp;gt;/.git/worktrees/&amp;lt;name&amp;gt;&lt;/code&gt; while &lt;code&gt;--git-common-dir&lt;/code&gt; is &lt;code&gt;&amp;lt;main&amp;gt;/.git&lt;/code&gt;. If they&#x27;re the same, we&#x27;re in the main checkout and there&#x27;s nothing to do.&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight powershell&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$gitDir&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;git&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-C&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$Path&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;rev-parse&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;--path-format&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;absolute&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;--git-dir&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$common&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;git&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-C&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$Path&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;rev-parse&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;--path-format&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;absolute&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;--git-common-dir&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$isWorktree&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$gitDir&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-ne&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$common&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$mainRoot&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Split-Path&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-Parent&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$common&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;2. Read the connection string from the main checkout&#x27;s &lt;code&gt;appsettings.Local.json&lt;/code&gt;.&lt;/strong&gt; That file is gitignored and specific to each machine, which is exactly why the script reads it rather than hardcoding a server name. Server, database and credentials all come from there, so nothing in the committed script is tied to my laptop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;3. Sweep.&lt;/strong&gt; Before provisioning anything, list every database named &lt;code&gt;&amp;lt;db&amp;gt;_wt_*&lt;/code&gt; and compare it against &lt;code&gt;git worktree list&lt;/code&gt;. Anything without a matching worktree gets dropped. This runs on every session, including ones in the main checkout, so worktrees that were removed by hand or by the desktop app still get tidied up eventually.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;4. Copy the database.&lt;/strong&gt; The target name comes from the worktree folder, so a worktree at &lt;code&gt;.claude/worktrees/multi-feature-workflow-c09980&lt;/code&gt; gets a database called &lt;code&gt;tgp_wt_multi_feature_workflow_c09980&lt;/code&gt;. The copy uses SQL Server&#x27;s own default paths, which the server reports through &lt;code&gt;SERVERPROPERTY&lt;/code&gt;, so it works against a remote instance just as well as a local one:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;BACKUP&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;DATABASE&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;tgp&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;TO&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DISK&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&#x27;&amp;lt;InstanceDefaultBackupPath&amp;gt;&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\t&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;gp_worktree_seed.bak&#x27;&lt;/span&gt;&#xA;  &lt;span class=&quot;k&quot;&gt;WITH&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;COPY_ONLY&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;INIT&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;FORMAT&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&#xA;&#xA;&lt;span class=&quot;n&quot;&gt;RESTORE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;FILELISTONLY&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DISK&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&#x27;...&#x27;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;-- to get the logical file names&lt;/span&gt;&#xA;&#xA;&lt;span class=&quot;n&quot;&gt;RESTORE&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;DATABASE&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;tgp_wt_&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;...]&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DISK&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&#x27;...&#x27;&lt;/span&gt;&#xA;  &lt;span class=&quot;k&quot;&gt;WITH&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;MOVE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&#x27;tgp&#x27;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;TO&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&#x27;&amp;lt;InstanceDefaultDataPath&amp;gt;&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\t&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;gp_wt_....mdf&#x27;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&#xA;       &lt;span class=&quot;k&quot;&gt;MOVE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&#x27;tgp_log&#x27;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;TO&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&#x27;&amp;lt;InstanceDefaultLogPath&amp;gt;&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\t&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;gp_wt_..._log.ldf&#x27;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&#xA;       &lt;span class=&quot;k&quot;&gt;REPLACE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;RECOVERY&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;&lt;code&gt;COPY_ONLY&lt;/code&gt; matters here. It doesn&#x27;t disturb the backup chain if your dev database happens to be in full recovery mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;5. Write the worktree&#x27;s own &lt;code&gt;appsettings.Local.json&lt;/code&gt;.&lt;/strong&gt; It&#x27;s a copy of the main one with the database name swapped out, plus one extra Umbraco setting:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight json&quot;&gt;&lt;code&gt;&lt;span class=&quot;nl&quot;&gt;&quot;Umbraco&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;CMS&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;Global&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;UmbracoMediaPhysicalRootPath&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;C:&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;TGP&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;TGP&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;wwwroot&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;media&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;Media files aren&#x27;t in git, so without this the worktree would show broken images everywhere. &lt;code&gt;UmbracoMediaPhysicalRootPath&lt;/code&gt; points Umbraco at the main checkout&#x27;s media folder instead. I&#x27;d originally planned a directory junction for this and bottled it. &lt;code&gt;git worktree remove --force&lt;/code&gt; deletes the worktree directory, and I really didn&#x27;t fancy finding out whether it follows junctions into the real media folder. A config setting can&#x27;t delete anything. Much safer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;6. Pick some ports and tell Claude.&lt;/strong&gt; A hash of the worktree name gives a stable pair of ports in the 45000 range. The script checks they&#x27;re free and saves them into the generated config, so later sessions print the same pair even while the site is running. Then it writes one line to stdout:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;Worktree database &#x27;tgp_wt_multi_feature_workflow_c09980&#x27; on INI-WIN-066 is ready&#xA;(copy of &#x27;tgp&#x27;; media served from the main checkout). Run the site from TGP with:&#xA;dotnet run --urls &quot;https://localhost:45980;http://localhost:45981&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;Whatever a &lt;code&gt;SessionStart&lt;/code&gt; hook prints to stdout gets added to Claude&#x27;s context. So every session starts already knowing which database it owns and how to run the site. Nobody has to type anything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a id=&quot;worktree-remove&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  What happens on WorktreeRemove&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Drop the database, then remove the worktree:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;ALTER&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;DATABASE&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;tgp_wt_&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;...]&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;SET&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;SINGLE_USER&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;WITH&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;ROLLBACK&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;IMMEDIATE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&#xA;&lt;span class=&quot;k&quot;&gt;DROP&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;DATABASE&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;tgp_wt_&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;...];&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight powershell&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;git&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-C&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$mainRoot&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;worktree&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;remove&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;--force&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$worktreePath&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;That second step caught me out. Registering a &lt;code&gt;WorktreeRemove&lt;/code&gt; hook &lt;em&gt;replaces&lt;/em&gt; Claude Code&#x27;s default removal. So if your script only drops the database, the worktree folder just sits there. The hook has to do the &lt;code&gt;git worktree remove&lt;/code&gt; itself, and exit with an error code if the folder is still around afterwards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a id=&quot;things-that-bit-me&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  Things that bit me&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I&#x27;d love to say this all worked first time. It did not.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;strong&gt;&lt;code&gt;$result[0]&lt;/code&gt; on a single row from sqlcmd.&lt;/strong&gt; PowerShell unrolls an array with one element into a plain string, and &lt;code&gt;[0]&lt;/code&gt; on a string gives you its first character. My backup path became &lt;code&gt;C&lt;/code&gt;, which SQL Server helpfully resolved relative to its default backup folder as &lt;code&gt;...\Backup\C\tgp_worktree_seed.bak&lt;/code&gt;. Wrap it in &lt;code&gt;@(...)[0]&lt;/code&gt; and move on with your life.&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;strong&gt;&lt;code&gt;$ErrorActionPreference = &#x27;Stop&#x27;&lt;/code&gt; and native commands.&lt;/strong&gt; In Windows PowerShell 5.1, a native exe writing anything to stderr under &lt;code&gt;Stop&lt;/code&gt; becomes a terminating error. The script runs with &lt;code&gt;Continue&lt;/code&gt; and checks &lt;code&gt;$LASTEXITCODE&lt;/code&gt; explicitly instead.&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;strong&gt;&lt;code&gt;$env:CLAUDE_PROJECT_DIR&lt;/code&gt; is the main checkout, not the worktree.&lt;/strong&gt; Use it to find the script. Use the event&#x27;s &lt;code&gt;cwd&lt;/code&gt; for the worktree.&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;strong&gt;The port probe sees your own site.&lt;/strong&gt; On a resumed session the hook ran while the worktree&#x27;s site was already up, saw its own ports as busy, and cheerfully printed a different pair. Hence persisting the ports in the generated config.&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;strong&gt;Builds touch tracked files.&lt;/strong&gt; Umbraco regenerates &lt;code&gt;umbraco-package-schema.json&lt;/code&gt; on every build. Not a hook problem, but it shows up in &lt;code&gt;git status&lt;/code&gt; after you&#x27;ve tested, so keep an eye out.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;a id=&quot;what-it-doesnt-do&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  What it doesn&#x27;t do&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It&#x27;s Windows PowerShell plus &lt;code&gt;sqlcmd&lt;/code&gt;. No bash version yet. Sorry Mac folks.&lt;/li&gt;&#xA;&lt;li&gt;It needs a SQL Server you can &lt;code&gt;BACKUP&lt;/code&gt; and &lt;code&gt;RESTORE&lt;/code&gt; against: a local instance, Express, LocalDB or a dev server. Azure SQL has no &lt;code&gt;BACKUP DATABASE&lt;/code&gt;, so that&#x27;s out.&lt;/li&gt;&#xA;&lt;li&gt;It assumes one worktree runs one site. Two sites in the same worktree would still collide.&lt;/li&gt;&#xA;&lt;li&gt;The desktop app&#x27;s own worktree cleanup may not fire &lt;code&gt;WorktreeRemove&lt;/code&gt;. The sweep on the next session start covers it, so the worst case is a stale database hanging around for a few hours.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;a id=&quot;your-project&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  Would it work on your project?&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Yes, if you&#x27;re on Windows with a SQL Server you can back up. All the bits that are specific to my project are parameters with sensible defaults. Another Umbraco site needs at most the web project folder name. A .NET site that isn&#x27;t Umbraco adds the connection string name and switches the media setting off:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight json&quot;&gt;&lt;code&gt;&lt;span class=&quot;nl&quot;&gt;&quot;command&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;powershell -NoProfile -ExecutionPolicy Bypass -File &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;$env:CLAUDE_PROJECT_DIR&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;.claude&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;hooks&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;worktree-db.ps1&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; -WebProject MySite -ConnectionStringName DefaultConnection -NoMediaSetting&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;Everything else (server, credentials, source database) is read from your own local config at runtime. You can also run the script by hand with &lt;code&gt;-Cwd &amp;lt;worktree&amp;gt;&lt;/code&gt; or &lt;code&gt;-Remove &amp;lt;worktree&amp;gt;&lt;/code&gt; to try it outside Claude Code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It took about an hour to build, and the combination is what makes it worth it. A copy of the real database. The branch&#x27;s schema applied by uSync on first run. Media still visible. Ports that don&#x27;t clash. The whole thing torn down when the worktree goes. Parallel sessions stop being something you manage and become something that just happens.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a id=&quot;install&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  How to install it&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Here&#x27;s the step by step. This assumes Windows, Windows PowerShell 5.1, and Claude Code with worktrees turned on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;1. Check the prerequisites.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A SQL Server you can &lt;code&gt;BACKUP&lt;/code&gt; and &lt;code&gt;RESTORE&lt;/code&gt; against (local instance, Express, LocalDB or a dev server).&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;code&gt;sqlcmd&lt;/code&gt; on your PATH. Open a terminal and run &lt;code&gt;sqlcmd -?&lt;/code&gt; to make sure it&#x27;s there.&lt;/li&gt;&#xA;&lt;li&gt;An &lt;code&gt;appsettings.Local.json&lt;/code&gt; in your main checkout with a working connection string. The script reads this, so if the site already runs from your main checkout you&#x27;re good.&lt;/li&gt;&#xA;&lt;li&gt;If it&#x27;s an Umbraco site, uSync with &lt;code&gt;ImportAtStartup&lt;/code&gt; turned on, otherwise the branch&#x27;s schema won&#x27;t land in the copied database.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;2. Grab the script.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;TODO: link to the script (gist or repo).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Drop it into your repo at &lt;code&gt;.claude/hooks/worktree-db.ps1&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;3. Register the hooks.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Open &lt;code&gt;.claude/settings.json&lt;/code&gt; (create it if it doesn&#x27;t exist) and add the &lt;code&gt;SessionStart&lt;/code&gt; and &lt;code&gt;WorktreeRemove&lt;/code&gt; entries from the hooks section above. Both point at the same script.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;4. Adjust the parameters if you need to.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The defaults assume an Umbraco site with the standard Umbraco connection string name. If your web project folder has a different name, add &lt;code&gt;-WebProject YourFolder&lt;/code&gt; to the command. If it&#x27;s not an Umbraco site, add &lt;code&gt;-ConnectionStringName YourConnectionString -NoMediaSetting&lt;/code&gt; as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;5. Test it by hand first.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Create a worktree and run the script against it directly, so you&#x27;re not debugging through Claude:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight shell&quot;&gt;&lt;code&gt;git worktree add .claude/worktrees/test-db &lt;span class=&quot;nt&quot;&gt;-b&lt;/span&gt; test-db&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight shell&quot;&gt;&lt;code&gt;powershell &lt;span class=&quot;nt&quot;&gt;-NoProfile&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-ExecutionPolicy&lt;/span&gt; Bypass &lt;span class=&quot;nt&quot;&gt;-File&lt;/span&gt; .claude&lt;span class=&quot;se&quot;&gt;\h&lt;/span&gt;ooks&lt;span class=&quot;se&quot;&gt;\w&lt;/span&gt;orktree-db.ps1 &lt;span class=&quot;nt&quot;&gt;-Cwd&lt;/span&gt; .claude&lt;span class=&quot;se&quot;&gt;\w&lt;/span&gt;orktrees&lt;span class=&quot;se&quot;&gt;\t&lt;/span&gt;est-db&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;You should see the &quot;Worktree database ... is ready&quot; line and a new &lt;code&gt;&amp;lt;db&amp;gt;_wt_test_db&lt;/code&gt; database on your server. Then tear it down:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight shell&quot;&gt;&lt;code&gt;powershell &lt;span class=&quot;nt&quot;&gt;-NoProfile&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-ExecutionPolicy&lt;/span&gt; Bypass &lt;span class=&quot;nt&quot;&gt;-File&lt;/span&gt; .claude&lt;span class=&quot;se&quot;&gt;\h&lt;/span&gt;ooks&lt;span class=&quot;se&quot;&gt;\w&lt;/span&gt;orktree-db.ps1 &lt;span class=&quot;nt&quot;&gt;-Remove&lt;/span&gt; .claude&lt;span class=&quot;se&quot;&gt;\w&lt;/span&gt;orktrees&lt;span class=&quot;se&quot;&gt;\t&lt;/span&gt;est-db&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;The database and the worktree folder should both be gone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;6. Start a Claude Code session in a worktree.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Open the project in Claude Code with worktrees enabled and start a new session. The first thing in Claude&#x27;s context should be the &quot;Worktree database ... is ready&quot; line with your &lt;code&gt;dotnet run&lt;/code&gt; command. Run the site on the ports it gives you and check the backoffice loads with your content and media intact.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;7. Commit it.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Commit &lt;code&gt;.claude/settings.json&lt;/code&gt; and &lt;code&gt;.claude/hooks/worktree-db.ps1&lt;/code&gt; so the rest of the team gets the same setup. Leave &lt;code&gt;appsettings.Local.json&lt;/code&gt; gitignored as it always was.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That&#x27;s it. From now on every worktree gets its own database on the way in and loses it on the way out, and you can get back to running three features at once with a coffee in hand.&lt;/p&gt;]]></description>
                    <pubDate>Thu, 29 Oct 2026 17:26:42 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.Spa/releases/tag/v17.0.0-alpha002</guid>
                    <title>Limbo.Umbraco.Spa 17.0.0-alpha002</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.Spa/releases/tag/v17.0.0-alpha002</link>
                    <description><![CDATA[SPA (single page application) package for Umbraco.]]></description>
                    <pubDate>Thu, 29 Oct 2026 11:48:45 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://github.com/umbraco/Umbraco-CMS/releases/tag/release-18.3.0</guid>
                    <title>Umbraco CMS 18.3.0</title>
                    <link>https://github.com/umbraco/Umbraco-CMS/releases/tag/release-18.3.0</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Thu, 29 Oct 2026 08:02:20 Z</pubDate>
                        <category>hq</category>
                        <category>release</category>
                </item>
                <item>
                    <guid>https://github.com/umbraco/Umbraco-CMS/releases/tag/release-17.8.0</guid>
                    <title>Umbraco CMS 17.8.0</title>
                    <link>https://github.com/umbraco/Umbraco-CMS/releases/tag/release-17.8.0</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Thu, 29 Oct 2026 07:56:28 Z</pubDate>
                        <category>hq</category>
                        <category>release</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/chudders22.umbraco.sitebuilder</guid>
                    <title>Chudders22.Umbraco.SiteBuilder</title>
                    <link>https://marketplace.umbraco.com/package/chudders22.umbraco.sitebuilder</link>
                    <description><![CDATA[Applies Site Builder schema files, tracks blocks installed from the Site Builder library, keeps a schema snapshot for frontend codegen, and pushes content changes to the frontend.]]></description>
                    <pubDate>Thu, 29 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/sa.umbraco.mediapreview</guid>
                    <title>SA.Umbraco.MediaPreview</title>
                    <link>https://marketplace.umbraco.com/package/sa.umbraco.mediapreview</link>
                    <description><![CDATA[Adds a one-click Preview button to media cards in the Umbraco media library. It opens the media item&#x27;s standard editor as a fly-out, so editors can view images and play video or audio without leaving the media section.]]></description>
                    <pubDate>Thu, 29 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://owain.codes/blog/2026/october/umbraco-features-with-claude-worktrees/</guid>
                    <title>Umbraco Features with Claude Worktrees</title>
                    <link>https://owain.codes/blog/2026/october/umbraco-features-with-claude-worktrees/</link>
                    <description><![CDATA[Running several Claude Code sessions on one Umbraco site? Here&#x2019;s the PowerShell hook that gives every git worktree its own database, media and ports.]]></description>
                    <pubDate>Thu, 29 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.schemeweaver.seo</guid>
                    <title>Umbraco.Community.SchemeWeaver.Seo</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.schemeweaver.seo</link>
                    <description><![CDATA[SchemeWeaver SEO: a Yoast-style structured data section for the Umbraco backoffice. SEOs and editors choose from a curated set of Google-recognised content kinds, set the site identity and fix individual pages, without touching document types or code. Requires Umbraco.Community.SchemeWeaver.]]></description>
                    <pubDate>Thu, 29 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://forum.umbraco.com/t/umbraco-19-beta-is-out-today/8695</guid>
                    <title>&#x1F680; Umbraco 19 beta is out today!</title>
                    <link>https://forum.umbraco.com/t/umbraco-19-beta-is-out-today/8695</link>
                    <description><![CDATA[&lt;p&gt;And we&#x2019;d love as many of you as possible to take it for a spin (on a local/test site please!).&lt;/p&gt;&#xA;&lt;p&gt;A few highlights:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;.NET 11: Umbraco now runs on Microsoft&#x2019;s newest .NET and opts in to the new runtime async&lt;/li&gt;&#xA;&lt;li&gt;Reusable content in every block editor: use Library content in Block List, Block Grid, Single Block and the Rich Text Editor. Change it once, and every page using it updates&lt;/li&gt;&#xA;&lt;li&gt;Search in core: one search layer for the backoffice, Delivery API and templates (Examine by default, swappable)&lt;/li&gt;&#xA;&lt;li&gt;Document Blueprints move to the Library, with folders, permissions and rules for which document types can use them&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;It&#x2019;s a major, so there are breaking changes. Have a read of those here before you start:&lt;/p&gt;&#xA;&lt;aside class=&quot;onebox allowlistedgeneric&quot; data-onebox-src=&quot;https://docs.umbraco.com/umbraco-cms/get-started/upgrading-and-migrating/version-specific&quot;&gt;&#xA;  &lt;header class=&quot;source&quot;&gt;&#xA;      &lt;img src=&quot;https://forum.umbraco.com/uploads/default/original/2X/5/5d5bcd22de08e142c1d4919a5436596d57b64cb3.png&quot; class=&quot;site-icon&quot; alt=&quot;&quot; data-dominant-color=&quot;5864A8&quot; width=&quot;48&quot; height=&quot;48&quot;&gt;&#xA;&#xA;      &lt;a href=&quot;https://docs.umbraco.com/umbraco-cms/get-started/upgrading-and-migrating/version-specific&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;docs.umbraco.com&lt;/a&gt;&#xA;  &lt;/header&gt;&#xA;&#xA;  &lt;article class=&quot;onebox-body&quot;&gt;&#xA;    &lt;div class=&quot;aspect-image&quot; style=&quot;--aspect-ratio:690/362;&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/c/c2c09d093891753184816e1e2fecb7df806e2947_2_690x362.png&quot; class=&quot;thumbnail&quot; alt=&quot;&quot; data-dominant-color=&quot;D3D7E7&quot; width=&quot;690&quot; height=&quot;362&quot;&gt;&lt;/div&gt;&#xA;&#xA;&lt;h3&gt;&lt;a href=&quot;https://docs.umbraco.com/umbraco-cms/get-started/upgrading-and-migrating/version-specific&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Breaking Changes Overview | CMS | Umbraco Documentation&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;  &lt;p&gt;Breaking changes introduced in each major version of Umbraco CMS, with notes on what to update when upgrading.&lt;/p&gt;&#xA;&#xA;&#xA;  &lt;/article&gt;&#xA;&#xA;  &lt;div class=&quot;onebox-metadata&quot;&gt;&#xA;    &#xA;    &#xA;  &lt;/div&gt;&#xA;&#xA;  &lt;div style=&quot;clear: both&quot;&gt;&lt;/div&gt;&#xA;&lt;/aside&gt;&#xA;&#xA;&lt;p&gt;Never installed a pre-release before? This guide walks you through it:&lt;/p&gt;&#xA;&lt;aside class=&quot;onebox allowlistedgeneric&quot; data-onebox-src=&quot;https://docs.umbraco.com/umbraco-cms/19.latest/understand-umbraco-cms/product-and-releases/release-candidate-guide&quot;&gt;&#xA;  &lt;header class=&quot;source&quot;&gt;&#xA;      &lt;img src=&quot;https://forum.umbraco.com/uploads/default/original/2X/5/5d5bcd22de08e142c1d4919a5436596d57b64cb3.png&quot; class=&quot;site-icon&quot; alt=&quot;&quot; data-dominant-color=&quot;5864A8&quot; width=&quot;48&quot; height=&quot;48&quot;&gt;&#xA;&#xA;      &lt;a href=&quot;https://docs.umbraco.com/umbraco-cms/19.latest/understand-umbraco-cms/product-and-releases/release-candidate-guide&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;docs.umbraco.com&lt;/a&gt;&#xA;  &lt;/header&gt;&#xA;&#xA;  &lt;article class=&quot;onebox-body&quot;&gt;&#xA;    &lt;div class=&quot;aspect-image&quot; style=&quot;--aspect-ratio:690/362;&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/9/92f9f5d7186d32b1749fc92e3601481c814cbd0b_2_690x362.png&quot; class=&quot;thumbnail&quot; alt=&quot;&quot; data-dominant-color=&quot;D6D9E8&quot; width=&quot;690&quot; height=&quot;362&quot;&gt;&lt;/div&gt;&#xA;&#xA;&lt;h3&gt;&lt;a href=&quot;https://docs.umbraco.com/umbraco-cms/19.latest/understand-umbraco-cms/product-and-releases/release-candidate-guide&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Pre-Release Guide | CMS 19.latest (Beta) | Umbraco Documentation&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;  &lt;p&gt;Learn how to start testing a pre-release for the latest version of Umbraco CMS, and find information about new and updated documentation.&lt;/p&gt;&#xA;&#xA;&#xA;  &lt;/article&gt;&#xA;&#xA;  &lt;div class=&quot;onebox-metadata&quot;&gt;&#xA;    &#xA;    &#xA;  &lt;/div&gt;&#xA;&#xA;  &lt;div style=&quot;clear: both&quot;&gt;&lt;/div&gt;&#xA;&lt;/aside&gt;&#xA;&#xA;&lt;p&gt;And the full release notes are here:&lt;/p&gt;&#xA;&lt;aside class=&quot;onebox allowlistedgeneric&quot; data-onebox-src=&quot;https://github.com/umbraco/Umbraco-CMS/releases/tag/release-19.0.0-beta1&quot;&gt;&#xA;  &lt;header class=&quot;source&quot;&gt;&#xA;      &lt;img src=&quot;https://github.githubassets.com/favicons/favicon.svg&quot; class=&quot;site-icon&quot; alt=&quot;&quot; width=&quot;32&quot; height=&quot;32&quot;&gt;&#xA;&#xA;      &lt;a href=&quot;https://github.com/umbraco/Umbraco-CMS/releases/tag/release-19.0.0-beta1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;GitHub&lt;/a&gt;&#xA;  &lt;/header&gt;&#xA;&#xA;  &lt;article class=&quot;onebox-body&quot;&gt;&#xA;    &lt;div class=&quot;aspect-image&quot; style=&quot;--aspect-ratio:690/344;&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/2/21fa97d21cfbcd15eca428e189c28d3dbbd67b45_2_690x345.png&quot; class=&quot;thumbnail&quot; alt=&quot;&quot; data-dominant-color=&quot;EEEEF5&quot; width=&quot;690&quot; height=&quot;345&quot;&gt;&lt;/div&gt;&#xA;&#xA;&lt;h3&gt;&lt;a href=&quot;https://github.com/umbraco/Umbraco-CMS/releases/tag/release-19.0.0-beta1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Release 19.0.0-beta1 &#xB7; umbraco/Umbraco-CMS&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;  &lt;p&gt;Welcome to the first beta of Umbraco 19. The highlights of this release are:&#xA;&#xA;Built on .NET 11: Umbraco now runs on Microsoft&#x27;s newest version of .NET and opts in to .NET&#x27;s new runtime async. If yo...&lt;/p&gt;&#xA;&#xA;&#xA;  &lt;/article&gt;&#xA;&#xA;  &lt;div class=&quot;onebox-metadata&quot;&gt;&#xA;    &#xA;    &#xA;  &lt;/div&gt;&#xA;&#xA;  &lt;div style=&quot;clear: both&quot;&gt;&lt;/div&gt;&#xA;&lt;/aside&gt;&#xA;&#xA;&lt;p&gt;The RC is planned for Thursday 12th November, so the next couple of weeks are the sweet spot for feedback. If something breaks, surprises you or just feels a bit odd, a GitHub issue would be wonderful. H5YR to everyone who gives it a go! :&lt;img src=&quot;https://forum.umbraco.com/images/emoji/twitter/raising_hands.png?v=15&quot; title=&quot;:raising_hands:&quot; class=&quot;emoji&quot; alt=&quot;:raising_hands:&quot; loading=&quot;lazy&quot; width=&quot;20&quot; height=&quot;20&quot;&gt;:&lt;/p&gt;&#xA;            &lt;p&gt;&lt;small&gt;1 post - 1 participant&lt;/small&gt;&lt;/p&gt;&#xA;            &lt;p&gt;&lt;a href=&quot;https://forum.umbraco.com/t/umbraco-19-beta-is-out-today/8695&quot;&gt;Read full topic&lt;/a&gt;&lt;/p&gt;]]></description>
                    <pubDate>Wed, 28 Oct 2026 11:41:03 Z</pubDate>
                        <category>community</category>
                        <category>forum</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/aivie.content</guid>
                    <title>Aivie.Content</title>
                    <link>https://marketplace.umbraco.com/package/aivie.content</link>
                    <description><![CDATA[From keyword to published page, without leaving Umbraco. Aivie researches keywords, writes complete pages using your own block types, plans when they go live, and tracks how they rank in Search Console. Runs on Umbraco.AI &#x2014; by ipsis.]]></description>
                    <pubDate>Wed, 28 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/dynamicdave.umbraco.maptoredirect</guid>
                    <title>DynamicDave.Umbraco.MapToRedirect</title>
                    <link>https://marketplace.umbraco.com/package/dynamicdave.umbraco.maptoredirect</link>
                    <description><![CDATA[Turns a CSV of old and new URLs into Umbraco redirects. Can also generate the CSV from the old site&#x27;s sitemap, shows a test run before anything changes, and lets you undo an import.]]></description>
                    <pubDate>Wed, 28 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://www.nevitech.co.uk/blog/cascading-country-and-location-dropdowns-in-umbraco-forms-with-email-routing-per-location/</guid>
                    <title>Cascading Country and Location Dropdowns in Umbraco Forms, with Email Routing per Location</title>
                    <link>https://www.nevitech.co.uk/blog/cascading-country-and-location-dropdowns-in-umbraco-forms-with-email-routing-per-location/</link>
                    <description><![CDATA[How we built a dynamic country and location dropdown in Umbraco Forms that sends each enquiry to the right location&#x27;s contact using a single email workflow.]]></description>
                    <pubDate>Wed, 28 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://github.com/Moriyama-Umbraco/umbraco-pr-preview</guid>
                    <title>Umbraco PR Preview: see uSync and Deploy files in Azure DevOps PRs</title>
                    <link>https://github.com/Moriyama-Umbraco/umbraco-pr-preview</link>
                    <description><![CDATA[Ever wished you could see uSync or Umbraco Deploy files in a PR? Well in Azure DevOps you now can!]]></description>
                    <pubDate>Wed, 28 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.Video/releases/tag/v17.0.0</guid>
                    <title>Limbo.Umbraco.Video 17.0.0</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.Video/releases/tag/v17.0.0</link>
                    <description><![CDATA[Package serving as a base for Limbo&#x27;s video picker packages.]]></description>
                    <pubDate>Tue, 27 Oct 2026 21:15:05 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://forum.umbraco.com/t/new-package-foundwell-umbraco-aeo-audit-automatic-json-ld-and-llms-txt/8687</guid>
                    <title>New package: FoundWell.Umbraco (AEO audit, automatic JSON-LD and llms.txt)</title>
                    <link>https://forum.umbraco.com/t/new-package-foundwell-umbraco-aeo-audit-automatic-json-ld-and-llms-txt/8687</link>
                    <description><![CDATA[&lt;p&gt;When someone asks ChatGPT, Perplexity or Google&#x2019;s AI answers which supplier, agency or product to pick, the answer quotes a handful of sites. Part of whether yours is one of them is out of a developer&#x2019;s hands. But part of it is plain site hygiene: does the page have a passage an assistant can lift as an answer, does it carry &lt;a href=&quot;http://schema.org&quot; rel=&quot;noopener nofollow ugc&quot;&gt;schema.org&lt;/a&gt; markup, and is there a clean map of the site for assistants to read? On most sites that&#x2019;s template work, and it&#x2019;s easy to never get round to.&lt;/p&gt;&#xA;&lt;p&gt;I built FoundWell.Umbraco to handle that part from the backoffice. It&#x2019;s free, MIT licensed and needs no account.&lt;/p&gt;&#xA;&lt;p&gt;What it does:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;AEO audit of every page.&lt;/strong&gt; A GEO view on each document gives a score for how likely an AI engine is to quote the page, what holds it back and how to fix it. The score history is kept per page.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Quotable passages.&lt;/strong&gt; Shows which passages an assistant can lift as a citation, and what weakens the others.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Bulk audit.&lt;/strong&gt; Scores all published pages at once, lowest first, so you know where to start.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Automatic schema.&lt;/strong&gt; JSON-LD in every page&#x2019;s &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; without touching a template. You pick the &lt;a href=&quot;http://schema.org&quot; rel=&quot;noopener nofollow ugc&quot;&gt;schema.org&lt;/a&gt; type per document type and which properties fill it, then override it or switch it off per page. It&#x2019;s off by default, and a page that already renders its own &lt;code&gt;application/ld&#x2B;json&lt;/code&gt; is left alone.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Schema suggestions.&lt;/strong&gt; Markup suggested from a page&#x2019;s content, ready to apply.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;/llms.txt and /llms-full.txt.&lt;/strong&gt; Generated from published content and grouped by top-level section. You can exclude pages or list only certain document types.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;One &lt;code&gt;llms.txt&lt;/code&gt; per site.&lt;/strong&gt; On a multi-site install, each domain gets the &lt;code&gt;llms.txt&lt;/code&gt; of its own root, with its own title, summary and excluded pages.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;It has no database tables of its own. Settings live in JSON files under &lt;code&gt;umbraco/Data/FoundWell.Umbraco/&lt;/code&gt;, so it works on SQLite and SQL Server alike. On a load-balanced site, put that folder on shared storage.&lt;/p&gt;&#xA;&lt;p&gt;To be clear about two things:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Nothing leaves your server.&lt;/strong&gt; The audit only requests your own pages, to see them as visitors do.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Markup alone won&#x2019;t get a site quoted.&lt;/strong&gt; In Ahrefs&#x2019; study of 75,000 brands, mentions of a brand elsewhere on the web tracked AI visibility far more closely than anything on the site itself. The package handles the technical part so it isn&#x2019;t what holds a good page back.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;aside class=&quot;onebox allowlistedgeneric&quot; data-onebox-src=&quot;https://marketplace.umbraco.com/package/foundwell.umbraco&quot;&gt;&#xA;  &lt;header class=&quot;source&quot;&gt;&#xA;      &lt;img src=&quot;https://forum.umbraco.com/uploads/default/original/1X/9595a9190a535ecc55fc3fa26df9036e44bd635d.png&quot; class=&quot;site-icon&quot; alt=&quot;&quot; data-dominant-color=&quot;505DBA&quot; width=&quot;32&quot; height=&quot;32&quot;&gt;&#xA;&#xA;      &lt;a href=&quot;https://marketplace.umbraco.com/package/foundwell.umbraco&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;marketplace.umbraco.com&lt;/a&gt;&#xA;  &lt;/header&gt;&#xA;&#xA;  &lt;article class=&quot;onebox-body&quot;&gt;&#xA;    &lt;img width=&quot;256&quot; height=&quot;256&quot; src=&quot;https://forum.umbraco.com/uploads/default/original/2X/d/df4b8f6174c5075d5a77d584928b54c27bc5cf32.png&quot; class=&quot;thumbnail onebox-avatar&quot; alt=&quot;&quot; data-dominant-color=&quot;3C3F45&quot;&gt;&#xA;&#xA;&lt;h3&gt;&lt;a href=&quot;https://marketplace.umbraco.com/package/foundwell.umbraco&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;FoundWell for Umbraco | Umbraco Marketplace&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;  &lt;p&gt;FoundWell for Umbraco is listed on the official Umbraco Marketplace | Information, links, and install instructions&lt;/p&gt;&#xA;&#xA;&#xA;  &lt;/article&gt;&#xA;&#xA;  &lt;div class=&quot;onebox-metadata&quot;&gt;&#xA;    &#xA;    &#xA;  &lt;/div&gt;&#xA;&#xA;  &lt;div style=&quot;clear: both&quot;&gt;&lt;/div&gt;&#xA;&lt;/aside&gt;&#xA;&#xA;&lt;p&gt;Disclosure: FoundWell is also a paid service I run, which writes content and handles SEO and AEO for a site on autopilot. The package has an optional connection that lets FoundWell set redirects, schema and &lt;code&gt;llms.txt&lt;/code&gt; through it. That connection stays off until an administrator turns on &lt;strong&gt;Allow FoundWell&lt;/strong&gt;, and FoundWell can&#x2019;t turn it on itself. Without a subscription the package never contacts FoundWell, and everything above works with no time limit.&lt;/p&gt;&#xA;            &lt;p&gt;&lt;small&gt;2 posts - 2 participants&lt;/small&gt;&lt;/p&gt;&#xA;            &lt;p&gt;&lt;a href=&quot;https://forum.umbraco.com/t/new-package-foundwell-umbraco-aeo-audit-automatic-json-ld-and-llms-txt/8687&quot;&gt;Read full topic&lt;/a&gt;&lt;/p&gt;]]></description>
                    <pubDate>Tue, 27 Oct 2026 13:44:02 Z</pubDate>
                        <category>community</category>
                        <category>forum</category>
                </item>
                <item>
                    <guid>https://samsolutions.medium.com/headless-umbraco-multi-site-pros-and-cons-of-running-multiple-websites-in-a-single-instance-b0cd4b95d9d7?source=rss------umbraco-5</guid>
                    <title>Headless Umbraco Multi-Site: Pros and Cons of Running Multiple Websites in a Single Instance</title>
                    <link>https://samsolutions.medium.com/headless-umbraco-multi-site-pros-and-cons-of-running-multiple-websites-in-a-single-instance-b0cd4b95d9d7?source=rss------umbraco-5</link>
                    <description><![CDATA[&lt;div class=&quot;medium-feed-item&quot;&gt;&lt;p class=&quot;medium-feed-image&quot;&gt;&lt;a href=&quot;https://samsolutions.medium.com/headless-umbraco-multi-site-pros-and-cons-of-running-multiple-websites-in-a-single-instance-b0cd4b95d9d7?source=rss------umbraco-5&quot;&gt;&lt;img src=&quot;https://cdn-images-1.medium.com/max/1672/1*o4IIVwL-Ujw-xoL2tmc7ZQ.png&quot; width=&quot;1672&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;medium-feed-snippet&quot;&gt;Five websites. Three brands. Twelve markets. Does your company really need a separate CMS for each one?&lt;/p&gt;&lt;p class=&quot;medium-feed-link&quot;&gt;&lt;a href=&quot;https://samsolutions.medium.com/headless-umbraco-multi-site-pros-and-cons-of-running-multiple-websites-in-a-single-instance-b0cd4b95d9d7?source=rss------umbraco-5&quot;&gt;Continue reading on Medium &#xBB;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;]]></description>
                    <pubDate>Tue, 27 Oct 2026 08:56:04 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.nevitech.co.uk/blog/umbraco-13-end-of-life-why-you-should-migrate-from-umbraco-13-to-17-now/</guid>
                    <title>Umbraco 13 End of Life: Why You Should Migrate from Umbraco 13 to 17 Now</title>
                    <link>https://www.nevitech.co.uk/blog/umbraco-13-end-of-life-why-you-should-migrate-from-umbraco-13-to-17-now/</link>
                    <description><![CDATA[Umbraco 13 and .NET 8 lose security support by December 2026, leaving sites exposed and putting Cyber Essentials certification at risk. Here&#x2019;s why and how to migrate to Umbraco 17.]]></description>
                    <pubDate>Tue, 27 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://umbraco.com/blog/security-advisory-oct-27-2026-security-patches-for-umbraco-cms-umbraco-forms-and-umbraco-ai-now-available/</guid>
                    <title>Security Advisory, Oct 27, 2026: Security Patches for Umbraco CMS, Umbraco Forms, and Umbraco AI now available</title>
                    <link>https://umbraco.com/blog/security-advisory-oct-27-2026-security-patches-for-umbraco-cms-umbraco-forms-and-umbraco-ai-now-available/</link>
                    <description><![CDATA[Vulnerabilities have been found and fixed across Umbraco CMS, Forms and AI. 2 are categorised has high and we recommend upgrading ASAP. Find all details here]]></description>
                    <pubDate>Tue, 27 Oct 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/seowebchecker.umbraco</guid>
                    <title>SeoWebChecker.Umbraco</title>
                    <link>https://marketplace.umbraco.com/package/seowebchecker.umbraco</link>
                    <description><![CDATA[Comprehensive on-page search engine optimization (SEO) diagnostics, meta tag analyzer, and health checks for Umbraco websites by SEOWebChecker (https://seowebchecker.com/).]]></description>
                    <pubDate>Tue, 27 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/simplepage.umbraco.safemedia</guid>
                    <title>Simplepage.Umbraco.SafeMedia</title>
                    <link>https://marketplace.umbraco.com/package/simplepage.umbraco.safemedia</link>
                    <description><![CDATA[Refuses unsafe SVG uploads before they are stored. Turning on SVG uploads in Umbraco quietly opens stored cross-site scripting; SafeMedia closes it with a parser-based, allowlist validator that rejects rather than strips. Secure with zero configuration. Free and MIT licensed.]]></description>
                    <pubDate>Tue, 27 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://community.umbraco.com/blog/2026/10/narly-nerves-and-new-faces-a-last-look-back-at-umbraco-us-festival-2026/</guid>
                    <title>Narly, nerves and new faces: a last look back at Umbraco US Festival 2026</title>
                    <link>https://community.umbraco.com/blog/2026/10/narly-nerves-and-new-faces-a-last-look-back-at-umbraco-us-festival-2026/</link>
                    <description><![CDATA[You could spot the Umbraco US Festival from a mile away. Blues and yellows were everywhere, and so was Narly the narwhal, grinning from the signage, the slides, the stickers and the swag. Even the cupcakes matched. The moment you stepped into this event, you just knew what you were getting into.]]></description>
                    <pubDate>Tue, 27 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/foundwell.umbraco</guid>
                    <title>FoundWell.Umbraco</title>
                    <link>https://marketplace.umbraco.com/package/foundwell.umbraco</link>
                    <description><![CDATA[Connects an Umbraco site to FoundWell (redirects, llms.txt and JSON-LD written by FoundWell) and adds AEO/GEO auditing, schema.org and /llms.txt to the backoffice.]]></description>
                    <pubDate>Tue, 27 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/wayfinder.umbraco.starter</guid>
                    <title>Wayfinder.Umbraco.Starter</title>
                    <link>https://marketplace.umbraco.com/package/wayfinder.umbraco.starter</link>
                    <description><![CDATA[Try Wayfinder on a fresh Umbraco site with no code: a home page, a sample service with a public and a staff queue, demo staff sign-in, and the MCP authoring endpoint wired up so you can design a service in conversation with an AI assistant. For local development only, never install it on a real site.]]></description>
                    <pubDate>Tue, 27 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/warpsearch.umbraco.search</guid>
                    <title>WarpSearch.Umbraco.Search</title>
                    <link>https://marketplace.umbraco.com/package/warpsearch.umbraco.search</link>
                    <description><![CDATA[Use WarpSearch (https://warpsearch.io/) as the search provider for Umbraco Search. WarpSearch is a fast, affordable serverless search service: your content, media and member indexes live in WarpSearch instead of local Examine (Lucene) indexes, so there is no search cluster to run and no index to rebuild on every web server. Supports full-text relevance tiers, filters, multi-select facets, sorting, culture and segment variants, protected content and the backoffice search tools. Load-balanced sites share one index, and the package runs on WarpSearch&#x27;s free plan.]]></description>
                    <pubDate>Mon, 26 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://cornehoskam.com/posts/introducing-engage-healthcheck-what-state-is-my-engage-database-in/</guid>
                    <title>Introducing Engage Healthcheck: what state is my Engage database in?</title>
                    <link>https://cornehoskam.com/posts/introducing-engage-healthcheck-what-state-is-my-engage-database-in/</link>
                    <description><![CDATA[A free, read-only tool that tells you which Umbraco Engage version your database is on, and what differs from it. A personal open source project.]]></description>
                    <pubDate>Mon, 26 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/esatto.umbraco.backoffice.navigationorder</guid>
                    <title>Esatto.Umbraco.Backoffice.NavigationOrder</title>
                    <link>https://marketplace.umbraco.com/package/esatto.umbraco.backoffice.navigationorder</link>
                    <description><![CDATA[Drag the Umbraco backoffice sections and each section&#x27;s tabs into the order you want. Admins drag them right in the top bar and tab bars; the order is saved on drop and applies to every user.]]></description>
                    <pubDate>Sun, 25 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://dev.to/d_inventor/umbraco-testiesimerkit-nyt-umbraco-18lle-4lf4</guid>
                    <title>Umbraco testiesimerkit nyt Umbraco 18:lle</title>
                    <link>https://dev.to/d_inventor/umbraco-testiesimerkit-nyt-umbraco-18lle-4lf4</link>
                    <description><![CDATA[&lt;div class=&quot;table-wrapper-paragraph&quot;&gt;&lt;table&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr&gt;&#xA;&lt;th&gt;&#x2139;&#xFE0F; Opin suomea&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;T&#xE4;m&#xE4; on mulle harjoitus oppimaan suomea. &lt;a href=&quot;https://dev.to/d_inventor/umbraco-testing-examples-now-also-for-umbraco-18-15lj&quot;&gt;Voit my&#xF6;s lukea englanniksi&lt;/a&gt;.&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;Olen p&#xE4;ivitt&#xE4;nyt &lt;a href=&quot;https://github.com/D-Inventor/automated-testing-in-umbraco&quot; rel=&quot;noopener noreferrer&quot;&gt;testiesimerkkirepositorion&lt;/a&gt; Umbraco 18:ksi. T&#xE4;ss&#xE4; on muutokset:&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  T&#xE4;rke&#xE4;mmin muutos: end-to-end testiesimerkit ovat muuttuneet typescriptiin&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Ensin, testit olivat dotnetiksi, mutta olen muutanut niiden typscriptiin. Olen p&#xE4;&#xE4;t&#xE4;nyt sit&#xE4; koska C#:n generated clientin p&#xE4;ivitt&#xE4;misen Umbraco 18:lle oli tosi vaikea. Mun piti k&#xE4;ytt&#xE4;&#xE4; ruma work-aroundia tai muuttaa sen manuaaliseen toteutukseen. Molemmat tuntuivat pahalta. Lis&#xE4;ksi, dotnetissa Playwrightilla on kovat haitat, jotka Node:ssa Playwrightilla ei ole. Kerron lis&#xE4;&#xE4; uudesta end-to-end testista typescriptissa toisessa blogissa.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  Published content on muuttunut&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Umbraco on siirt&#xE4;nyt muutamaa ominaisuusta &lt;code&gt;IPublishedContent&lt;/code&gt;:sta &lt;code&gt;IPublishedElement&lt;/code&gt;:iin. Olen p&#xE4;ivitt&#xE4;nyt unit-testing esimerkien niin ett&#xE4; ne toimivat Umbraco 18:ssa. N&#xE4;m&#xE4; muutoksilla ei ole vaikutusta unit-testiin.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  Lis&#xE4;huomautus&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Umbraco oli muutanut Umbraco 17:ssa miten indexit ovat alustaneet. Muutokset yksinkertaistavat in-memory sovelluksen ja se tulee helpompi tarkistaa onko sovellus k&#xE4;ynist&#xE4;nyt integration testiss&#xE4;. Repositorio ei ole viel&#xE4; ajan tasalla noiden muutoksien suhteen. Kohta p&#xE4;ivit&#xE4;n integration testi&#xE4;.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  Siin&#xE4; on kaikki&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;p&#xE4;ivitys oli lyhyt. Vain end-to-end testit ovat paljon muutuneet. Jos et ole viel&#xE4; katsonut, &lt;a href=&quot;https://github.com/D-Inventor/automated-testing-in-umbraco&quot; rel=&quot;noopener noreferrer&quot;&gt;menee repositorioon nyt&lt;/a&gt;. Se on oppiopas aloittamaan testata Umbracossa.&lt;/p&gt;]]></description>
                    <pubDate>Sat, 24 Oct 2026 08:27:33 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://dev.to/d_inventor/umbraco-testing-examples-now-also-for-umbraco-18-15lj</guid>
                    <title>Umbraco testing examples now also for Umbraco 18</title>
                    <link>https://dev.to/d_inventor/umbraco-testing-examples-now-also-for-umbraco-18-15lj</link>
                    <description><![CDATA[&lt;p&gt;I updated &lt;a href=&quot;https://github.com/D-Inventor/automated-testing-in-umbraco&quot; rel=&quot;noopener noreferrer&quot;&gt;the testing reference repository&lt;/a&gt; to support Umbraco 18! Here are the changes:&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  Most important: End-to-end testing examples have been migrated to typescript.&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;It used to be in dotnet, but I changed it into typescript. I made this decision because updating the generated C# client for the Management API to Umbraco 18 was very difficult. I would have had to either use ugly work-arounds or replace the generated client with a manual client. Neither option seemed right to me. In addition to that, I had already noticed that Playwright in dotnet had significant downsides compared to Playwright in node. I will share more about how the new tests work in a separate blog.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  Published Content has changed&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Umbraco has moved several properties from &lt;code&gt;IPublishedContent&lt;/code&gt; down to &lt;code&gt;IPublishedElement&lt;/code&gt;. Those changes have been mirrored in the unit testing examples in the &lt;code&gt;FakePublishedElement&lt;/code&gt; and &lt;code&gt;FakePublishedContent&lt;/code&gt; types. These changes have no effect on existing unit tests.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  Additional note&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Umbraco has already made changes in Umbraco 17 to how indexes are initialized on boot. The changes reduce the complexity of the in-memory website and make it easier to detect when Umbraco has fully started in integration tests. The repository does not reflect those changes accurately quite yet. I have the code ready for it and I will update the examples soon.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  That&#x27;s all&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;It was a short update. Apart from the end-to-end testing examples, not much has changed, everything is still relevant. If you haven&#x27;t yet, please &lt;a href=&quot;https://github.com/D-Inventor/automated-testing-in-umbraco&quot; rel=&quot;noopener noreferrer&quot;&gt;check out the repository&lt;/a&gt;, it is made as a learning resource so you can also get started with testing in Umbraco.&lt;/p&gt;]]></description>
                    <pubDate>Sat, 24 Oct 2026 08:27:15 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/digitalwonderlab.imageresizer</guid>
                    <title>DigitalWonderlab.ImageResizer</title>
                    <link>https://marketplace.umbraco.com/package/digitalwonderlab.imageresizer</link>
                    <description><![CDATA[Reduce the size of all your images across your umbraco instance. Big images can cause a multitude of problems including slow load times, bulky storage and take up unnecessary bandwidth. With a few simple clicks reduce the size of your images and even compress them]]></description>
                    <pubDate>Sat, 24 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/blockcount</guid>
                    <title>BlockCount</title>
                    <link>https://marketplace.umbraco.com/package/blockcount</link>
                    <description><![CDATA[Configure minimum and maximum counts for individual block types in Umbraco Block List and Block Grid properties.]]></description>
                    <pubDate>Sat, 24 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://shazwazza.com/articles/articulate-7-and-8-for-umbraco-17-and-18/</guid>
                    <title>Articulate 7 and 8 are out for Umbraco 17 and 18</title>
                    <link>https://shazwazza.com/articles/articulate-7-and-8-for-umbraco-17-and-18/</link>
                    <description><![CDATA[Articulate 7.0.0 and 8.0.0 are now on NuGet. Articulate 7 is for Umbraco 17 and Articulate 8 is for Umbraco 18. They&#x27;re both built from the same source, the only reason there&#x27;s two of them is that Umbraco 17 and 18 aren&#x27;t binary compatible, so each package is compiled against its own Umbraco version.&#xA;dotnet add package Articulate --version 7.0.0   # Umbraco 17.7.1 - 17.x&#xA;dotnet add package Articulate --version 8.0.0   # Umbraco 18.2.1 - 18.x&#xA;&#xA;This blog is now running Umbraco 18.2.1 and Articulate 8.0.2. Before this it was on Umbraco 12.3.10 and Articulate 5.2.2, so it skipped quite a few versions in one go. In this case, the upgrade path was easy! Just exported the BlobMl from the old site with images embedded, then created a new v18 site, installed Articulate, imported the file and adjusted my root Blog Articulate node, and ta-da &#x1F389; It works &#x1F60A;&#xA;What&#x27;s new&#xA;&#xA;Giscus comments - You can now use Giscus instead of Disqus, which stores comments in GitHub Discussions. Configure it globally in appsettings.json under Articulate:Comments:Giscus or per blog with the new giscus* properties. Themes can ship a giscus.css so the comments match the theme, and all the built-in themes do.&#xA;Markdown editor - The responsive Markdown editor for posting from your phone or browser now signs in with Umbraco&#x27;s Back Office OAuth/PKCE flow and uses the Management API, so if you have 2FA configured it just works.&#xA;Rich text - Coming from TinyMCE, the upgrade switches posts over to TipTap with Articulate&#x27;s default settings, and any custom TipTap config you already have is kept.&#xA;New backoffice - The Articulate backoffice extensions are rebuilt for both Umbraco 17 and 18.&#xA;BlogML - Import size limits are configurable, and exports use the post&#x27;s published date.&#xA;Performance and security - Lots of allocation and hot path fixes in routing, and CI now fails the build if any NuGet dependency has a high or critical advisory.&#xA;&#xA;Things to know before you upgrade&#xA;&#xA;Back up first - your site, database and media.&#xA;MetaWeblog is off by default - Open Live Writer uses direct username/password auth, which skips Umbraco&#x27;s Back Office OAuth and 2FA. If you still use it, set Articulate:EnableMetaWeblog to true and restart.&#xA;Want to keep TinyMCE? Install TinyMCE.Umbraco before the first run, otherwise the editor gets converted to TipTap.&#xA;Coming from Articulate 5? Custom themes need updating, since the Html and Url helpers were replaced with model extension methods, e.g. @Html.MetaTags(Model) is now @Model.MetaTags(). The full table is in the 6.0.0 release notes.&#xA;&#xA;The Upgrading page on the wiki has the full checklist.&#xA;Two packages, one codebase&#xA;The bulk of this release was done by Gavin Faux, and it&#x27;s a huge amount of work. Rather than keeping a separate branch per Umbraco version, everything is built from one codebase with a small compatibility layer for the bits that differ between 17 and 18. One CI build compiles, tests and packages both versions, then installs them into brand new Umbraco sites and runs the same set of end-to-end tests against each one before a release gets published. So when a fix goes in, it ships for both versions at the same time. Thanks Gavin!&#xA;The full list of changes is in the GitHub release. Give it a go, and if you run into anything, raise an issue.]]></description>
                    <pubDate>Fri, 23 Oct 2026 21:27:50 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.ai.search.pinecone</guid>
                    <title>Umbraco.Community.AI.Search.Pinecone</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.ai.search.pinecone</link>
                    <description><![CDATA[A vector store for Umbraco AI Search that keeps its embeddings in a Pinecone serverless index instead of the CMS database. Works with any Umbraco AI embedding provider.]]></description>
                    <pubDate>Fri, 23 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/redmorello.surveystudio.usync</guid>
                    <title>RedMorello.SurveyStudio.uSync</title>
                    <link>https://marketplace.umbraco.com/package/redmorello.surveystudio.usync</link>
                    <description><![CDATA[Adds uSync handlers for Survey Studio, so forms, templates, data lists, custom questions, themes, workflows, and tenants can be promoted between Umbraco environments the same way you already promote content types and data types. Submissions and other respondent data are never synced. Requires Survey Studio and uSync.]]></description>
                    <pubDate>Fri, 23 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://umbraco.com/blog/umbraco-is-net-not-php/</guid>
                    <title>Umbraco is .NET, not PHP</title>
                    <link>https://umbraco.com/blog/umbraco-is-net-not-php/</link>
                    <description><![CDATA[This week&#x27;s critical PHP vulnerabilities don&#x27;t affect Umbraco&#x27;s runtime. Our CEO explains why - and why security is still everyone&#x27;s job.]]></description>
                    <pubDate>Thu, 22 Oct 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://umbraco.com/blog/us-partner-summit-2026-award-winners-recap/</guid>
                    <title>US Partner Summit 2026: Award Winners Recap</title>
                    <link>https://umbraco.com/blog/us-partner-summit-2026-award-winners-recap/</link>
                    <description><![CDATA[Dinner, drinks, trivia, and a celebration of great work. Meet the winners of the Umbraco US Partner Summit 2026 awards and the projects behind them.]]></description>
                    <pubDate>Thu, 22 Oct 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://gibe.digital/blog/umbraco-spark-2027-is-open-call-for-speakers-tickets-and-a-new-home-for-our-news/</guid>
                    <title>Umbraco Spark 2027 is open: call for speakers, tickets and a new home for our news</title>
                    <link>https://gibe.digital/blog/umbraco-spark-2027-is-open-call-for-speakers-tickets-and-a-new-home-for-our-news/</link>
                    <description><![CDATA[The call for speakers and Early Bird tickets is open for Umbraco Spark 2027, on Friday 19 March 2027, in Bristol.]]></description>
                    <pubDate>Thu, 22 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/dotsee.schemamapper</guid>
                    <title>DotSee.SchemaMapper</title>
                    <link>https://marketplace.umbraco.com/package/dotsee.schemamapper</link>
                    <description><![CDATA[Backoffice dashboard for configuring schema.org JSON-LD structured data output per Umbraco content type, without writing code.]]></description>
                    <pubDate>Thu, 22 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/hcs.umbcustomheader</guid>
                    <title>HCS.UmbCustomHeader</title>
                    <link>https://marketplace.umbraco.com/package/hcs.umbcustomheader</link>
                    <description><![CDATA[Group Umbraco backoffice sections into dropdowns in the top navigation, configured from appsettings.json. Presentation only: user group permissions are still respected.]]></description>
                    <pubDate>Thu, 22 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://umbraco.com/blog/security-heads-up-upcoming-security-patches-for-umbraco-cms-and-umbraco-forms-ready-on-october-27-2026-at-08-am-utc/</guid>
                    <title>Security Heads-Up: Upcoming Security Patches for Umbraco CMS, Umbraco Forms, and Umbraco AI ready on October 27, 2026 at 08 AM UTC</title>
                    <link>https://umbraco.com/blog/security-heads-up-upcoming-security-patches-for-umbraco-cms-and-umbraco-forms-ready-on-october-27-2026-at-08-am-utc/</link>
                    <description><![CDATA[Heads-up: High to moderate severity patches for Umbraco CMS, Forms, and AI arrive October 27, 2026 at 08 AM UTC. Prepare your systems for updates.]]></description>
                    <pubDate>Thu, 22 Oct 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.ai.pinecone</guid>
                    <title>Umbraco.Community.AI.Pinecone</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.ai.pinecone</link>
                    <description><![CDATA[An Umbraco AI embeddings provider that generates vectors with Pinecone&#x27;s hosted embedding models, so Umbraco AI Search and anything else that needs embeddings can use Pinecone.]]></description>
                    <pubDate>Thu, 22 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/redmorello.surveystudio</guid>
                    <title>RedMorello.SurveyStudio</title>
                    <link>https://marketplace.umbraco.com/package/redmorello.surveystudio</link>
                    <description><![CDATA[Survey Studio adds a full survey builder to the Umbraco backoffice, built on SurveyJS - no separate SurveyJS license required. Editors design multi-page surveys, quizzes, and data-capture forms with reusable custom question types, data lists, and themes, then drive branching logic through a visual conditional workflow engine and score responses automatically. Forms are organized into folders and reusable templates, submissions are reviewed right in the backoffice, and a multi-tenant-ready data layer makes it a fit for agencies running many Umbraco sites from one install.]]></description>
                    <pubDate>Thu, 22 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://github.com/umbraco/Announcements/issues/37</guid>
                    <title>[Breaking change]: Forms Security will be replaced by CMS user group permissions in Umbraco Forms 20</title>
                    <link>https://github.com/umbraco/Announcements/issues/37</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Wed, 21 Oct 2026 14:14:11 Z</pubDate>
                        <category>hq</category>
                        <category>announcement</category>
                </item>
                <item>
                    <guid>https://dev.to/owaincodes/umbraco-uk-conference-11l</guid>
                    <title>Umbraco UK Conference</title>
                    <link>https://dev.to/owaincodes/umbraco-uk-conference-11l</link>
                    <description><![CDATA[&lt;h2&gt;&#xA;  &#xA;  &#xA;  Umbraco UK Conference: A Few Days in London&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Coffee. Code. Repeat. And this week, a fair bit of whisky and doughnuts too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I&#x27;ve just got back from London after the Umbraco UK Partner Summit and the Umbraco UK Conference. It was a packed few days, and I learnt a lot, so let&#x27;s get into it. Fair warning, the journey home was a bit of an adventure.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;&#xA;  &#xA;  &#xA;  Wednesday: Trains and Whisky&#xA;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;I jumped on the train from Edinburgh down to London on Wednesday. I arrived in time for lunch and then met up with a couple of friends, Matt Wise and Ollie Picton. We headed to the Scotch Malt Whisky Society on Greville Street in Hatton Garden.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Very enjoyable afternoon. Great company, a good catch up and a chance to try the latest offerings from the SMWS. Perfect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then an early night back at the hotel. I knew what was coming.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;&#xA;  &#xA;  &#xA;  Thursday: Umbraco UK Partner Summit&#xA;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Up early, breakfast, and off to the Partner Summit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I&#x27;ll be honest. I&#x27;ve been to Partner Summits before and they were always a bit, meh. Lots of promises, not much action. I&#x27;m very pleased to say this year was different. I went along as the Initials Labs rep and came away with pages and pages of notes. I&#x27;m really looking forward to working with the Umbraco partner team (Aaron, Jacob and Gemma) to see what&#x27;s possible over the next year.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fowain.codes%2Fmedia%2Fc5wjh15k%2Fpartnersummitcoffee.jpeg&quot; class=&quot;article-body-image-wrapper&quot;&gt;&lt;img src=&quot;https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fowain.codes%2Fmedia%2Fc5wjh15k%2Fpartnersummitcoffee.jpeg&quot; alt=&quot;partnerSummitCoffee&quot; width=&quot;480&quot; height=&quot;542&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some highlights:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;strong&gt;Jenny Bradshaw from Moriyama and Kirstie Buchanan from Cantarus&lt;/strong&gt; gave really great talks about their own experiences with Umbraco and as partners.&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;strong&gt;Aaron Green (Partner Manager, UK) and Jacob Howell (Regional Manager, UK)&lt;/strong&gt; delivered great business talks. The passion these guys have for Umbraco is refreshing.&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;strong&gt;Rune Stand (Product Manager, Cloud)&lt;/strong&gt; talked about the future of Umbraco Cloud. It finally feels like a product you can use in the real world.&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;strong&gt;Mats Persson (CEO) and Filip Bruun Bech-Larsen (Umbraco CTO)&lt;/strong&gt; also gave great talks about Umbraco and its products, and brought all the partners up to date.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;All in all, a brilliant day. Not something I thought I&#x27;d ever say about a business summit!&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;&#xA;  &#xA;  &#xA;  Thursday Evening: Flight Club&#xA;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;That evening was all about socialising at Flight Club. I got to make new friends within the community and chat with fellow Umbracians I hadn&#x27;t seen since Codegarden.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was great to see my old pals from Gibe too. Always a pleasure, especially when you end the night drinking whisky with Tristan. Hmm, there might be a theme here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fowain.codes%2Fmedia%2F0ctn3psc%2Fumbraco-conference.js&quot; class=&quot;article-body-image-wrapper&quot;&gt;&lt;img src=&quot;https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fowain.codes%2Fmedia%2F0ctn3psc%2Fumbraco-conference.js&quot; alt=&quot;Umbraco Conference&quot; width=&quot;&quot; height=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;&#xA;  &#xA;  &#xA;  Friday: Umbraco UK Conference&#xA;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Friday started with breakfast, then I met up with my colleague Jack and we walked over to CodeNode, where the conference was being hosted. We collected our swag, grabbed a coffee (the first of many) and the day kicked off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fowain.codes%2Fmedia%2Fm2ajluwl%2Fnamebadge.jpeg&quot; class=&quot;article-body-image-wrapper&quot;&gt;&lt;img src=&quot;https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fowain.codes%2Fmedia%2Fm2ajluwl%2Fnamebadge.jpeg&quot; alt=&quot;NameBadge&quot; width=&quot;480&quot; height=&quot;853&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The new Umbraco Conference brand was announced, and having the rebrand explained was really interesting. After that, Bolette Kern (Head of Products at Umbraco) gave the keynote and product update, and she did it on her birthday! Happy birthday Bolette!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are the talks I attended:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Automate in Minutes, Not Sprints: Introducing Umbraco Automate, by Rick Butterfield&lt;/li&gt;&#xA;&lt;li&gt;Beyond the Happy Path: Non-Functional Requirements in the Age of AI-Assisted Engineering, by Carole Rennie Logan&lt;/li&gt;&#xA;&lt;li&gt;CSI: Umbraco, Forensic Tools for Catching Performance Killers, by Jason Elkin&lt;/li&gt;&#xA;&lt;li&gt;Ghosts of Umbraco Past: Coding Practices to Lay to Rest in 2027, by Joe Glombek&lt;/li&gt;&#xA;&lt;li&gt;The Great Umbraco Search Shake-Up: Examine, Algolia &amp;amp; Azure Compared, by Busra Sengul&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;They were all great talks and I don&#x27;t want to pick a favourite. I got something from every one of them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The time and effort that goes into preparing a talk is always appreciated, so #h5yr (that&#x27;s high five, for the uninitiated. More details at &lt;a href=&quot;https://h5yr.com&quot; rel=&quot;noopener noreferrer&quot;&gt;H5YR.com&lt;/a&gt;) to everyone who spoke at the event.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fowain.codes%2Fmedia%2Flo3pco5t%2Flego.jpeg&quot; class=&quot;article-body-image-wrapper&quot;&gt;&lt;img src=&quot;https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fowain.codes%2Fmedia%2Flo3pco5t%2Flego.jpeg&quot; alt=&quot;lego&quot; width=&quot;480&quot; height=&quot;853&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The QR code on our badges was for a fun game of The Traitors. You had to scan other people&#x27;s QR codes, and if you were a Traitor, you &quot;killed&quot; them and they were out of the game. If you were a Faithful, your aim was to stay alive and scan as many people as you could. The more scans you got, the better the prize. The first tier was a Lego minifigure, which, thankfully, I managed to get. The top prize was a ticket to Codegarden!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was a lot of fun and a great way to get people talking to each other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, the food. The food at the event was great and the snacks were immense. The doughnuts were so good I could have eaten the entire box. Biscoff doughnuts. Yum!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fowain.codes%2Fmedia%2F5vlpu1ez%2Fdonuts.jpeg&quot; class=&quot;article-body-image-wrapper&quot;&gt;&lt;img src=&quot;https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fowain.codes%2Fmedia%2F5vlpu1ez%2Fdonuts.jpeg&quot; alt=&quot;donuts&quot; width=&quot;480&quot; height=&quot;853&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The closing keynote came from Lotte Pitcher and Sebastiaan Janssen, and it was really good. Funny but informative. Oh, and did you know that backoffice menu separators are back? Yes, really.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I spent the evening socialising with new and old friends and called it a night around 10pm. Back to the hotel to pack my bag.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;&#xA;  &#xA;  &#xA;  Saturday: Board Games and a Very Long Way Home&#xA;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;On Saturday I met up with a few friends and headed to Arcanists Tavern, a table top game cafe. A great selection of games and a really nice way to spend a few hours before heading back to Edinburgh.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then came the journey home, which was eventful. I got within 15 minutes of Edinburgh station and the train stopped. Then it started going in the opposite direction. We couldn&#x27;t go any further because the signals on the track had gone out! I ended up having to ask my wife to come and pick me up, which was a 45 minute drive each way. Not great at 11pm!&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;&#xA;  &#xA;  &#xA;  Wrapping Up&#xA;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;A fantastic few days in London, signal failure aside. I learnt a lot, made some new connections and caught up with old friends.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Until next time!&lt;/p&gt;]]></description>
                    <pubDate>Wed, 21 Oct 2026 13:18:02 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://forum.umbraco.com/t/umbradesktop-v17-4-0-search-quality-of-life-and-the-arcade/8680</guid>
                    <title>UmbraDesktop v17.4.0 - Search, Quality of life and the arcade!</title>
                    <link>https://forum.umbraco.com/t/umbradesktop-v17-4-0-search-quality-of-life-and-the-arcade/8680</link>
                    <description><![CDATA[&lt;p&gt;The main highlights for this release are:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Much improved search in the launcher&lt;/li&gt;&#xA;&lt;li&gt;Show workspace views next to the content or pop them out&lt;/li&gt;&#xA;&lt;li&gt;A progress indicator for media uploads&lt;/li&gt;&#xA;&lt;li&gt;A welcome wizard for new users&lt;/li&gt;&#xA;&lt;li&gt;[Entertainment] A gaming service (The arcade) that games can integrate to work with leaderboards across users&lt;/li&gt;&#xA;&lt;li&gt;[Entertainment] An UmbraCoffee app where you can see previous episodes AND that can notify you when a new episode is about to start!&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;&lt;a name=&quot;p-20358-new-better-search-in-the-launcher-1&quot; class=&quot;anchor&quot; href=&quot;https://forum.umbraco.com#p-20358-new-better-search-in-the-launcher-1&quot; aria-label=&quot;Heading link&quot;&gt;&lt;/a&gt;NEW! Better search in the launcher.&lt;/h2&gt;&#xA;&lt;p&gt;The you tried the search bar that is on the launcher, it would open the default Umbraco search popup. Not bad perse, but I meant two things:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You could not search for apps (you needed to go to the &#x2018;all apps view&#x2019; first)&lt;/li&gt;&#xA;&lt;li&gt;You were taken out of the context of the launcher in favour of a new window.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This has been fixed in this release. The search will now open directly in the launcher like most OS&#x2019;. It will show the search result by category, apps first.&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/5/5a969eb692f75de51c6a34533ad20669ac30c9c2.png&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/5a969eb692f75de51c6a34533ad20669ac30c9c2&quot; title=&quot;afbeelding&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/5/5a969eb692f75de51c6a34533ad20669ac30c9c2_2_685x500.png&quot; alt=&quot;afbeelding&quot; data-base62-sha1=&quot;cVnFNpDOiXzWVovH9Ek4EFdV3fI&quot; width=&quot;685&quot; height=&quot;500&quot; srcset=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/5/5a969eb692f75de51c6a34533ad20669ac30c9c2_2_685x500.png, https://forum.umbraco.com/uploads/default/optimized/2X/5/5a969eb692f75de51c6a34533ad20669ac30c9c2_2_1027x750.png 1.5x, https://forum.umbraco.com/uploads/default/original/2X/5/5a969eb692f75de51c6a34533ad20669ac30c9c2.png 2x&quot; data-dominant-color=&quot;EAEAED&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;h2&gt;&lt;a name=&quot;p-20358-new-show-workspace-views-next-to-the-content-2&quot; class=&quot;anchor&quot; href=&quot;https://forum.umbraco.com#p-20358-new-show-workspace-views-next-to-the-content-2&quot; aria-label=&quot;Heading link&quot;&gt;&lt;/a&gt;NEW! Show workspace views next to the content!&lt;/h2&gt;&#xA;&lt;p&gt;Most workspace views can now be opened in a pane next to the content. In the example I used info, which isn&#x2019;t that interresting, but there are a lot of workspace views that could be interresting to be visible next to the content you are actively working on. This uses the concept of a &#x2018;linked&#x2019; pane or window that was introduced in 17.3.0, so that also means that you can detach the workspace view into a seperate, linked window.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/original/2X/b/b59e31bb518ee759cc30f973b540692173be6ddf.gif&quot; alt=&quot;UmbraDesktop-expand-workspace-view&quot; data-base62-sha1=&quot;pUFlOjKPWo9tUYPhrXa7yDO1Bxl&quot; width=&quot;690&quot; height=&quot;373&quot; class=&quot;animated&quot;&gt;&lt;/p&gt;&#xA;&lt;h2&gt;&lt;a name=&quot;p-20358-new-welcome-wizard-3&quot; class=&quot;anchor&quot; href=&quot;https://forum.umbraco.com#p-20358-new-welcome-wizard-3&quot; aria-label=&quot;Heading link&quot;&gt;&lt;/a&gt;NEW! Welcome wizard&lt;/h2&gt;&#xA;&lt;p&gt;New users now get a one-time wizard to set a few things:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The desktop language&lt;/li&gt;&#xA;&lt;li&gt;The theme and backoffice theme (light/dark/high contrast)&lt;/li&gt;&#xA;&lt;li&gt;Start in the desktop on boot&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/c/cd581be2b7d6f59d2d800ef557b0178b62d12363.jpeg&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/cd581be2b7d6f59d2d800ef557b0178b62d12363&quot; title=&quot;afbeelding&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/c/cd581be2b7d6f59d2d800ef557b0178b62d12363_2_690x453.jpeg&quot; alt=&quot;afbeelding&quot; data-base62-sha1=&quot;tiyExMCr05l5uphi1qbFRSf2O31&quot; width=&quot;690&quot; height=&quot;453&quot; srcset=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/c/cd581be2b7d6f59d2d800ef557b0178b62d12363_2_690x453.jpeg, https://forum.umbraco.com/uploads/default/optimized/2X/c/cd581be2b7d6f59d2d800ef557b0178b62d12363_2_1035x679.jpeg 1.5x, https://forum.umbraco.com/uploads/default/original/2X/c/cd581be2b7d6f59d2d800ef557b0178b62d12363.jpeg 2x&quot; data-dominant-color=&quot;22283E&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;p&gt;It has sensible defaults, so if you just click &#x2018;next, next, next&#x2019;, it will work without issues.&lt;/p&gt;&#xA;&lt;h2&gt;&lt;a name=&quot;p-20358-new-progress-indication-where-applicable-4&quot; class=&quot;anchor&quot; href=&quot;https://forum.umbraco.com#p-20358-new-progress-indication-where-applicable-4&quot; aria-label=&quot;Heading link&quot;&gt;&lt;/a&gt;NEW! Progress indication where applicable&lt;/h2&gt;&#xA;&lt;p&gt;When you have a long-running task, the progress will be shown on the taskbar and on the icon of the window. Currently, this only works with uploading media.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/original/2X/6/6b5d7e3e505661d16e61b5324120f323e2a12db2.gif&quot; alt=&quot;UmbraDesktop-upload-example&quot; data-base62-sha1=&quot;fjNoDQAyPi8N6VcXFeZvNN28fRw&quot; width=&quot;690&quot; height=&quot;404&quot; class=&quot;animated&quot;&gt;&lt;/p&gt;&#xA;&lt;h2&gt;&lt;a name=&quot;p-20358-new-entertainment-addon-a-gaming-service-for-persistent-scoring-and-leaderboards-5&quot; class=&quot;anchor&quot; href=&quot;https://forum.umbraco.com#p-20358-new-entertainment-addon-a-gaming-service-for-persistent-scoring-and-leaderboards-5&quot; aria-label=&quot;Heading link&quot;&gt;&lt;/a&gt;NEW! [Entertainment addon] A gaming service for persistent scoring and leaderboards.&lt;/h2&gt;&#xA;&lt;p&gt;A new Nuget package is created called &lt;strong&gt;Umbraco.Community.UmbraDesktop.Services.Arcade&lt;/strong&gt;. You won&#x2019;t install this manually, but any add-on package can use this package to implement support for the &#x2018;Arcade&#x2019;, a gaming hub where you can see stats and leaderboards of the games that support it.&lt;/p&gt;&#xA;&lt;p&gt;You can decide if you want to have your gaming scores visible to any other users in the Umbraco instance or not. These scores are persistent. You&#x2019;ll even get a notification when you have a highscore in a game that was beaten by someone else! Minesweeper, snake and solitaire implement this package.&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/6/63443c1b84c88222626d0525a911146bf6b6eb81.jpeg&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/63443c1b84c88222626d0525a911146bf6b6eb81&quot; title=&quot;afbeelding&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/6/63443c1b84c88222626d0525a911146bf6b6eb81_2_690x384.jpeg&quot; alt=&quot;afbeelding&quot; data-base62-sha1=&quot;ea9sDJdjyqqtdBVwgQB4OXxeMJr&quot; width=&quot;690&quot; height=&quot;384&quot; srcset=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/6/63443c1b84c88222626d0525a911146bf6b6eb81_2_690x384.jpeg, https://forum.umbraco.com/uploads/default/optimized/2X/6/63443c1b84c88222626d0525a911146bf6b6eb81_2_1035x576.jpeg 1.5x, https://forum.umbraco.com/uploads/default/original/2X/6/63443c1b84c88222626d0525a911146bf6b6eb81.jpeg 2x&quot; data-dominant-color=&quot;26305C&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/f/f13619b7e9ee4a7c5e173e5ec1e28228736f16e7.jpeg&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/f13619b7e9ee4a7c5e173e5ec1e28228736f16e7&quot; title=&quot;afbeelding&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/f/f13619b7e9ee4a7c5e173e5ec1e28228736f16e7_2_690x374.jpeg&quot; alt=&quot;afbeelding&quot; data-base62-sha1=&quot;ypQYLrCnsTqJ7sZssHz1OmJzBGL&quot; width=&quot;690&quot; height=&quot;374&quot; srcset=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/f/f13619b7e9ee4a7c5e173e5ec1e28228736f16e7_2_690x374.jpeg, https://forum.umbraco.com/uploads/default/optimized/2X/f/f13619b7e9ee4a7c5e173e5ec1e28228736f16e7_2_1035x561.jpeg 1.5x, https://forum.umbraco.com/uploads/default/original/2X/f/f13619b7e9ee4a7c5e173e5ec1e28228736f16e7.jpeg 2x&quot; data-dominant-color=&quot;232C59&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/3/311312a4bb264acdeead22f164cae72bc5e56469.jpeg&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/311312a4bb264acdeead22f164cae72bc5e56469&quot; title=&quot;afbeelding&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/original/2X/3/311312a4bb264acdeead22f164cae72bc5e56469.jpeg&quot; alt=&quot;afbeelding&quot; data-base62-sha1=&quot;708g56IQTzBtRJDEjZmxyiFftgZ&quot; width=&quot;637&quot; height=&quot;407&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;h2&gt;&lt;a name=&quot;p-20358-new-entertainment-addon-the-entertainment-addon-now-has-an-umbracoffee-app-6&quot; class=&quot;anchor&quot; href=&quot;https://forum.umbraco.com#p-20358-new-entertainment-addon-the-entertainment-addon-now-has-an-umbracoffee-app-6&quot; aria-label=&quot;Heading link&quot;&gt;&lt;/a&gt;NEW! [Entertainment addon] The entertainment addon now has an UmbraCoffee app.&lt;/h2&gt;&#xA;&lt;p&gt;This will allow you to watch all UmbraCoffee episodes from the app. But it will also notify you when the next episode is about to begin and when the episode actually begins. You can do the live chat via the app as well. The notifications can be disabled in the settings of the app and in the settings of UmbraDesktop.&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/6/63a68a97097d6316d39af615ded87ed1ceae3356.jpeg&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/63a68a97097d6316d39af615ded87ed1ceae3356&quot; title=&quot;afbeelding&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/6/63a68a97097d6316d39af615ded87ed1ceae3356_2_690x369.jpeg&quot; alt=&quot;afbeelding&quot; data-base62-sha1=&quot;edy58jsa1NXJEH7rezwiucLrloq&quot; width=&quot;690&quot; height=&quot;369&quot; srcset=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/6/63a68a97097d6316d39af615ded87ed1ceae3356_2_690x369.jpeg, https://forum.umbraco.com/uploads/default/optimized/2X/6/63a68a97097d6316d39af615ded87ed1ceae3356_2_1035x553.jpeg 1.5x, https://forum.umbraco.com/uploads/default/optimized/2X/6/63a68a97097d6316d39af615ded87ed1ceae3356_2_1380x738.jpeg 2x&quot; data-dominant-color=&quot;706683&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;&#xA;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/6/675d8cf34fd089a4c0abfda2363d30eb55300069.jpeg&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/675d8cf34fd089a4c0abfda2363d30eb55300069&quot; title=&quot;afbeelding&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/6/675d8cf34fd089a4c0abfda2363d30eb55300069_2_690x368.jpeg&quot; alt=&quot;afbeelding&quot; data-base62-sha1=&quot;eKpBRoMvlZatzSiszTlSeSmoZtf&quot; width=&quot;690&quot; height=&quot;368&quot; srcset=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/6/675d8cf34fd089a4c0abfda2363d30eb55300069_2_690x368.jpeg, https://forum.umbraco.com/uploads/default/optimized/2X/6/675d8cf34fd089a4c0abfda2363d30eb55300069_2_1035x552.jpeg 1.5x, https://forum.umbraco.com/uploads/default/optimized/2X/6/675d8cf34fd089a4c0abfda2363d30eb55300069_2_1380x736.jpeg 2x&quot; data-dominant-color=&quot;897C8F&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;h2&gt;&lt;a name=&quot;p-20358-small-changes-7&quot; class=&quot;anchor&quot; href=&quot;https://forum.umbraco.com#p-20358-small-changes-7&quot; aria-label=&quot;Heading link&quot;&gt;&lt;/a&gt;Small changes&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;External packages can now bring their own settings for in the &#x2018;settings&#x2019; of UmbraDesktop. The first example is the settings for the screensaver of the accessories package.&lt;/li&gt;&#xA;&lt;li&gt;The default &#x2018;Umbraco&#x2019; theme felt a bit rough, so it was cleaned up with small touchups to colors and fonts.&lt;/li&gt;&#xA;&lt;li&gt;The &#x2018;snap&#x2019; outline when you want to snap a window has been vastly improved visually. On certain brackground you would not see the outline before this change.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;            &lt;p&gt;&lt;small&gt;1 post - 1 participant&lt;/small&gt;&lt;/p&gt;&#xA;            &lt;p&gt;&lt;a href=&quot;https://forum.umbraco.com/t/umbradesktop-v17-4-0-search-quality-of-life-and-the-arcade/8680&quot;&gt;Read full topic&lt;/a&gt;&lt;/p&gt;]]></description>
                    <pubDate>Wed, 21 Oct 2026 10:06:48 Z</pubDate>
                        <category>community</category>
                        <category>forum</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.FilterList/releases/tag/v13.0.0</guid>
                    <title>Limbo.Umbraco.FilterList 13.0.0</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.FilterList/releases/tag/v13.0.0</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Wed, 21 Oct 2026 08:36:11 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.propertyaudittool</guid>
                    <title>Umbraco.Community.PropertyAuditTool</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.propertyaudittool</link>
                    <description><![CDATA[Read-only backoffice audit for finding incomplete or matching content across document types, element types, pages and blocks, with permission-aware filtering, saved audits and pinned dashboard tiles.]]></description>
                    <pubDate>Wed, 21 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://owain.codes/blog/2026/october/umbraco-uk-conference/</guid>
                    <title>Umbraco UK Conference</title>
                    <link>https://owain.codes/blog/2026/october/umbraco-uk-conference/</link>
                    <description><![CDATA[My recap of the Umbraco UK Partner Summit and Umbraco UK Conference in London: great talks, good friends, whisky and a lot of Biscoff doughnuts.]]></description>
                    <pubDate>Wed, 21 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.unlog</guid>
                    <title>Umbraco.Community.Unlog</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.unlog</link>
                    <description><![CDATA[Per-level retention for Umbraco&#x27;s Serilog file logs, including files left by previous Azure workers.]]></description>
                    <pubDate>Wed, 21 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/thebuilder.aiimagedisclosure</guid>
                    <title>TheBuilder.AIImageDisclosure</title>
                    <link>https://marketplace.umbraco.com/package/thebuilder.aiimagedisclosure</link>
                    <description><![CDATA[Read valid C2PA Content Credentials on new or replaced files, store generated or modified on Umbraco Image media, and support editor overrides without pixel guessing.]]></description>
                    <pubDate>Wed, 21 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://skttl.dev/blog/automatic-log-cleanup-for-umbraco/</guid>
                    <title>Automatic log cleanup for Umbraco</title>
                    <link>https://skttl.dev/blog/automatic-log-cleanup-for-umbraco/</link>
                    <description><![CDATA[Umbraco Cloud now cleans up old NuGet packages automatically. Unlog tackles the logs left behind, keeping recent messages and preserving errors for longer, on Cloud or wherever you host Umbraco.]]></description>
                    <pubDate>Wed, 21 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.Seo/releases/tag/v13.1.2</guid>
                    <title>Limbo.Umbraco.Seo 13.1.2</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.Seo/releases/tag/v13.1.2</link>
                    <description><![CDATA[SEO package for Umbraco.]]></description>
                    <pubDate>Tue, 20 Oct 2026 15:15:35 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://forum.umbraco.com/t/umbraco-localization-progress-dashboard/8675</guid>
                    <title>Umbraco localization progress dashboard</title>
                    <link>https://forum.umbraco.com/t/umbraco-localization-progress-dashboard/8675</link>
                    <description><![CDATA[&lt;p&gt;While doing some research for my very first Umbraco talk about localization. I noticed that lots of translations were missing for Japanese and Swedish.&lt;br&gt;&#xA;Which made me a bit curios.  &#x201C;How well translated is Umbraco across all langues?&#x201D;.&lt;br&gt;&#xA;With that in mind, I got together with Chef Claude. And created a dashboard so I could get a better understanding of it. And I think the results are quite interesting!&lt;br&gt;&#xA;There are a total of 26 langues. It and it treats the English translation file as 100% baseline.&lt;/p&gt;&#xA;&lt;h2&gt;&lt;a name=&quot;p-20349-features-1&quot; class=&quot;anchor&quot; href=&quot;https://forum.umbraco.com#p-20349-features-1&quot; aria-label=&quot;Heading link&quot;&gt;&lt;/a&gt;Features&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Coverage per version:&lt;/strong&gt; v17, v18 and the v19 dev branch, fetched live from the Umbraco-CMS repository on GitHub&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Missing keys per language:&lt;/strong&gt; click a language to see exactly which keys are missing, grouped by section&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Copy as JSON:&lt;/strong&gt; exports the missing keys in the same shape as a language file&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Extra keys:&lt;/strong&gt; keys a language still has that no longer exist in English&lt;/li&gt;&#xA;&lt;li&gt;Runs a scan once every 24h&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3&gt;&lt;a name=&quot;p-20349-keys-usage-2&quot; class=&quot;anchor&quot; href=&quot;https://forum.umbraco.com#p-20349-keys-usage-2&quot; aria-label=&quot;Heading link&quot;&gt;&lt;/a&gt;- Keys usage&lt;/h3&gt;&#xA;&lt;p&gt;It counts how many times each key is used, so you can prioritize the keys that will have the highest impact when translated.&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/2/2f5460c41966e7d84d1059443a2ba5a74d1d64ba.png&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/2f5460c41966e7d84d1059443a2ba5a74d1d64ba&quot; title=&quot;Keys usage&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/original/2X/2/2f5460c41966e7d84d1059443a2ba5a74d1d64ba.png&quot; alt=&quot;Keys usage&quot; data-base62-sha1=&quot;6KHdEa7JkMcywUdmf3s7P3IYIhI&quot; width=&quot;511&quot; height=&quot;499&quot; data-dominant-color=&quot;F3F4F2&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;h3&gt;&lt;a name=&quot;p-20349-keys-with-no-static-reference-3&quot; class=&quot;anchor&quot; href=&quot;https://forum.umbraco.com#p-20349-keys-with-no-static-reference-3&quot; aria-label=&quot;Heading link&quot;&gt;&lt;/a&gt;- Keys with no static reference&lt;/h3&gt;&#xA;&lt;p&gt;Keys that never show up directly in the source code. Some may be unused, but some might be built dynamically at runtime, so those are flagged rather than declared dead.&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/4/429c5c9f3255100356ccf30c9b8ff6f590874817.png&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/429c5c9f3255100356ccf30c9b8ff6f590874817&quot; title=&quot;Keys with no static reference&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/original/2X/4/429c5c9f3255100356ccf30c9b8ff6f590874817.png&quot; alt=&quot;Keys with no static reference&quot; data-base62-sha1=&quot;9vgw24VzpBtNQ9rROOA4zqmlwP5&quot; width=&quot;498&quot; height=&quot;500&quot; data-dominant-color=&quot;F2F2F1&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2&gt;&lt;a name=&quot;p-20349-how-it-works-4&quot; class=&quot;anchor&quot; href=&quot;https://forum.umbraco.com#p-20349-how-it-works-4&quot; aria-label=&quot;Heading link&quot;&gt;&lt;/a&gt;How it works&lt;/h2&gt;&#xA;&lt;p&gt;Translation coverage is fetched live from GitHub, so it&#x2019;s always up to date. A key counts as translated when it exists in the language file, even if the wording is the same as in English.&lt;/p&gt;&#xA;&lt;p&gt;For key usage, it downloads a snapshot of the Umbraco source code, lists all the translation keys, and searches the whole codebase for each one. If a key shows up somewhere, it&#x2019;s used. Auto-generated files that simply list every key are excluded, since listing a key isn&#x2019;t the same as using it.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;If you&#x2019;re not happy with where your native language ended up, maybe now is a great time to open that PR and make a change &lt;img src=&quot;https://forum.umbraco.com/images/emoji/twitter/wink.png?v=15&quot; title=&quot;:wink:&quot; class=&quot;emoji&quot; alt=&quot;:wink:&quot; loading=&quot;lazy&quot; width=&quot;20&quot; height=&quot;20&quot;&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;aside class=&quot;onebox allowlistedgeneric&quot; data-onebox-src=&quot;https://umb-localization.lantzify.dev/#v17&quot;&gt;&#xA;  &lt;header class=&quot;source&quot;&gt;&#xA;      &lt;img class=&quot;site-icon&quot; alt=&quot;&quot;&gt;&#xA;&#xA;      &lt;a href=&quot;https://umb-localization.lantzify.dev/#v17&quot; target=&quot;_blank&quot; rel=&quot;noopener nofollow ugc&quot;&gt;Unofficial Umbraco localization dashboard&lt;/a&gt;&#xA;  &lt;/header&gt;&#xA;&#xA;  &lt;article class=&quot;onebox-body&quot;&gt;&#xA;    &lt;div class=&quot;aspect-image&quot; style=&quot;--aspect-ratio:690/361;&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/1/1aa800e8fe8a526f81779a5c630ad12dbb35c35b_2_690x362.png&quot; class=&quot;thumbnail&quot; alt=&quot;&quot; data-dominant-color=&quot;EDF0F3&quot; width=&quot;690&quot; height=&quot;362&quot;&gt;&lt;/div&gt;&#xA;&#xA;&lt;h3&gt;&lt;a href=&quot;https://umb-localization.lantzify.dev/#v17&quot; target=&quot;_blank&quot; rel=&quot;noopener nofollow ugc&quot;&gt;Umbraco localization dashboard&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;  &lt;p&gt;Backoffice translation coverage per language and major version, live from umbraco/Umbraco-CMS.&lt;/p&gt;&#xA;&#xA;&#xA;  &lt;/article&gt;&#xA;&#xA;  &lt;div class=&quot;onebox-metadata&quot;&gt;&#xA;    &#xA;    &#xA;  &lt;/div&gt;&#xA;&#xA;  &lt;div style=&quot;clear: both&quot;&gt;&lt;/div&gt;&#xA;&lt;/aside&gt;&#xA;&#xA;            &lt;p&gt;&lt;small&gt;1 post - 1 participant&lt;/small&gt;&lt;/p&gt;&#xA;            &lt;p&gt;&lt;a href=&quot;https://forum.umbraco.com/t/umbraco-localization-progress-dashboard/8675&quot;&gt;Read full topic&lt;/a&gt;&lt;/p&gt;]]></description>
                    <pubDate>Tue, 20 Oct 2026 11:10:49 Z</pubDate>
                        <category>community</category>
                        <category>forum</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.ai.typesafe</guid>
                    <title>Umbraco.AI.TypeSafe</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.ai.typesafe</link>
                    <description><![CDATA[TypeSafe AI provider for Umbraco AI]]></description>
                    <pubDate>Tue, 20 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.whoishere</guid>
                    <title>Umbraco.Community.WhoIsHere</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.whoishere</link>
                    <description><![CDATA[See who else has a document open in the backoffice, and which field they are in. A soft lock: it warns, including when someone else saves, but never blocks editing or saving.]]></description>
                    <pubDate>Tue, 20 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://nikhilprajapati-india.medium.com/my-first-umbraco-uk-conference-2026-ai-great-conversations-and-the-umbraco-community-%EF%B8%8F-29b8aa3b0715?source=rss-25fb5f3eb753------2</guid>
                    <title>My First Umbraco UK Conference 2026: AI, Great Conversations, and the Umbraco Community &#x2764;&#xFE0F;</title>
                    <link>https://nikhilprajapati-india.medium.com/my-first-umbraco-uk-conference-2026-ai-great-conversations-and-the-umbraco-community-%EF%B8%8F-29b8aa3b0715?source=rss-25fb5f3eb753------2</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Mon, 19 Oct 2026 18:21:31 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://nikhilprajapati-india.medium.com/my-first-umbraco-uk-conference-2026-ai-great-conversations-and-the-umbraco-community-%EF%B8%8F-29b8aa3b0715?source=rss------umbraco-5</guid>
                    <title>My First Umbraco UK Conference 2026: AI, Great Conversations, and the Umbraco Community &#x2764;&#xFE0F;</title>
                    <link>https://nikhilprajapati-india.medium.com/my-first-umbraco-uk-conference-2026-ai-great-conversations-and-the-umbraco-community-%EF%B8%8F-29b8aa3b0715?source=rss------umbraco-5</link>
                    <description><![CDATA[&lt;div class=&quot;medium-feed-item&quot;&gt;&lt;p class=&quot;medium-feed-image&quot;&gt;&lt;a href=&quot;https://nikhilprajapati-india.medium.com/my-first-umbraco-uk-conference-2026-ai-great-conversations-and-the-umbraco-community-%EF%B8%8F-29b8aa3b0715?source=rss------umbraco-5&quot;&gt;&lt;img src=&quot;https://cdn-images-1.medium.com/max/1600/1*2C4fTm7Gc5zxQdG566ReTQ.jpeg&quot; width=&quot;1600&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;medium-feed-snippet&quot;&gt;From India to London, one event filled with learning, familiar faces, exciting product updates, and a reminder of why I love being part of&amp;#x2026;&lt;/p&gt;&lt;p class=&quot;medium-feed-link&quot;&gt;&lt;a href=&quot;https://nikhilprajapati-india.medium.com/my-first-umbraco-uk-conference-2026-ai-great-conversations-and-the-umbraco-community-%EF%B8%8F-29b8aa3b0715?source=rss------umbraco-5&quot;&gt;Continue reading on Medium &#xBB;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;]]></description>
                    <pubDate>Mon, 19 Oct 2026 18:21:31 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://forum.umbraco.com/t/new-package-umbraco-community-frontend-block-preview/8669</guid>
                    <title>New Package: Umbraco.&#x200B;&#x200B;Community.&#x200B;&#x200B;Frontend&#x200B;Block&#x200B;Preview</title>
                    <link>https://forum.umbraco.com/t/new-package-umbraco-community-frontend-block-preview/8669</link>
                    <description><![CDATA[&lt;p&gt;Preview Block List and Block Grid blocks in the backoffice rendered by your real frontend, with the editor&#x2019;s unsaved values. Works with headless frontends on the Content Delivery API or your own API (React, Next.js, Angular, Vue, Nuxt, SvelteKit, Astro, plain JavaScript) and with MVC Razor views. Multisite aware.&lt;/p&gt;&#xA;&lt;p&gt;Preview Block List and Block Grid blocks in the Umbraco backoffice, &lt;strong&gt;rendered by your real frontend&lt;/strong&gt;, with the editor&#x2019;s &lt;strong&gt;unsaved&lt;/strong&gt; changes.&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/f/fa986dc8ffa9049324832c2b8c9d44b258dfed81.png&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/fa986dc8ffa9049324832c2b8c9d44b258dfed81&quot; title=&quot;Every block previewed by the frontend&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/f/fa986dc8ffa9049324832c2b8c9d44b258dfed81_2_448x500.png&quot; alt=&quot;Every block previewed by the frontend&quot; data-base62-sha1=&quot;zKRWAfkXI6WBndH2yuZCxvUd585&quot; width=&quot;448&quot; height=&quot;500&quot; srcset=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/f/fa986dc8ffa9049324832c2b8c9d44b258dfed81_2_448x500.png, https://forum.umbraco.com/uploads/default/optimized/2X/f/fa986dc8ffa9049324832c2b8c9d44b258dfed81_2_672x750.png 1.5x, https://forum.umbraco.com/uploads/default/optimized/2X/f/fa986dc8ffa9049324832c2b8c9d44b258dfed81_2_896x1000.png 2x&quot; data-dominant-color=&quot;BEBACD&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/7/7e6ae29fff83128c36b349b91ce2f03c4512f8c9.png&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/7e6ae29fff83128c36b349b91ce2f03c4512f8c9&quot; title=&quot;Unsaved changes shown straight away in the frontend preview&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/7/7e6ae29fff83128c36b349b91ce2f03c4512f8c9_2_690x297.png&quot; alt=&quot;Unsaved changes shown straight away in the frontend preview&quot; data-base62-sha1=&quot;i2la2fN48IHbFf22Jgfw1cQfujL&quot; width=&quot;690&quot; height=&quot;297&quot; srcset=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/7/7e6ae29fff83128c36b349b91ce2f03c4512f8c9_2_690x297.png, https://forum.umbraco.com/uploads/default/optimized/2X/7/7e6ae29fff83128c36b349b91ce2f03c4512f8c9_2_1035x445.png 1.5x, https://forum.umbraco.com/uploads/default/optimized/2X/7/7e6ae29fff83128c36b349b91ce2f03c4512f8c9_2_1380x594.png 2x&quot; data-dominant-color=&quot;D1D2D8&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Headless on the Content Delivery API:&lt;/strong&gt; &lt;code&gt;&quot;Renderer&quot;: &quot;DeliveryApi&quot;&lt;/code&gt;, no CMS code.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Headless on your own API:&lt;/strong&gt; &lt;code&gt;&quot;Renderer&quot;: &quot;Custom&quot;&lt;/code&gt; plus one small class.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;MVC:&lt;/strong&gt; &lt;code&gt;&quot;Renderer&quot;: &quot;Razor&quot;&lt;/code&gt; renders each block&#x2019;s partial view.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Any frontend:&lt;/strong&gt; React, Next.js, Angular, Vue, Nuxt, SvelteKit, Astro or plain JavaScript. Add a catch-all route (you probably have one) and one script tag.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Multisite:&lt;/strong&gt; a frontend URL per site, or your own resolver.&lt;/li&gt;&#xA;&lt;li&gt;Desktop and mobile widths, live updates while typing.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pre&gt;&lt;code class=&quot;lang-auto&quot;&gt;&quot;FrontendBlockPreview&quot;: {&#xA;  &quot;Renderer&quot;: &quot;DeliveryApi&quot;,&#xA;  &quot;DefaultFrontendUrl&quot;: &quot;https://www.example.com&quot;&#xA;}&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;pre&gt;&lt;code class=&quot;lang-auto&quot;&gt;&amp;lt;script src=&quot;https://your-cms/App_Plugins/FrontendBlockPreview/frontend-block-preview.js&quot;&#xA;        data-hide=&quot;header, footer&quot; defer&amp;gt;&amp;lt;/script&amp;gt;&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;See the &lt;a href=&quot;https://github.com/busrasengul/Umbraco.Community.FrontendBlockPreview#readme&quot; rel=&quot;noopener nofollow ugc&quot;&gt;documentation&lt;/a&gt; for every framework, multisite and settings.&lt;/p&gt;&#xA;            &lt;p&gt;&lt;small&gt;1 post - 1 participant&lt;/small&gt;&lt;/p&gt;&#xA;            &lt;p&gt;&lt;a href=&quot;https://forum.umbraco.com/t/new-package-umbraco-community-frontend-block-preview/8669&quot;&gt;Read full topic&lt;/a&gt;&lt;/p&gt;]]></description>
                    <pubDate>Mon, 19 Oct 2026 14:46:20 Z</pubDate>
                        <category>community</category>
                        <category>forum</category>
                </item>
                <item>
                    <guid>https://forum.umbraco.com/t/new-package-umbraco-community-search-provider-azureai/8668</guid>
                    <title>New Package: Umbraco.Community.Search.Provider.AzureAI</title>
                    <link>https://forum.umbraco.com/t/new-package-umbraco-community-search-provider-azureai/8668</link>
                    <description><![CDATA[&lt;p&gt;After my talk from Umbraco UK Conference, I thought I share my &lt;a href=&quot;https://marketplace.umbraco.com/package/umbraco.community.search.provider.azureai&quot;&gt;package&lt;/a&gt; here too.&lt;/p&gt;&#xA;&lt;p&gt;An Azure AI Search provider for Umbraco Search. Indexes content in Azure AI Search and serves full text search, filters, facets and sorting, configured from appsettings with automatic field declarations from your content types.&lt;/p&gt;&#xA;&lt;p&gt;An &lt;a href=&quot;https://learn.microsoft.com/azure/search/&quot; rel=&quot;noopener nofollow ugc&quot;&gt;Azure AI Search&lt;/a&gt; provider for &lt;a href=&quot;https://github.com/umbraco/Umbraco.Cms.Search&quot; rel=&quot;noopener nofollow ugc&quot;&gt;Umbraco Search&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Umbraco keeps your Azure indexes up to date as content changes. You query them through Umbraco Search, with full text search, filters, facets, sorting, cultures and protected content.&lt;/p&gt;&#xA;&lt;h3&gt;&lt;a name=&quot;p-20335-getting-started-1&quot; class=&quot;anchor&quot; href=&quot;https://forum.umbraco.com#p-20335-getting-started-1&quot; aria-label=&quot;Heading link&quot;&gt;&lt;/a&gt;Getting started&lt;/h3&gt;&#xA;&lt;p&gt;Add the provider in a composer:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&quot;lang-auto&quot;&gt;public class SearchComposer : IComposer&#xA;{&#xA;    public void Compose(IUmbracoBuilder builder)&#xA;        =&amp;gt; builder&#xA;            .AddSearchCore()&#xA;            .AddAzureSearchProvider();&#xA;}&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Then configure it in &lt;code&gt;appsettings.json&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&quot;lang-auto&quot;&gt;{&#xA;  &quot;AzureSearchProvider&quot;: {&#xA;    &quot;Endpoint&quot;: &quot;https://my-service.search.windows.net&quot;,&#xA;    &quot;ApiKey&quot;: &quot;&amp;lt;admin api key&amp;gt;&quot;,&#xA;    &quot;Indexes&quot;: [&#xA;      { &quot;Alias&quot;: &quot;Products&quot;, &quot;ContentTypes&quot;: [ &quot;product&quot; ], &quot;AutoFields&quot;: true }&#xA;    ]&#xA;  }&#xA;}&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Keep the admin API key in user secrets or environment variables (&lt;code&gt;AzureSearchProvider__ApiKey&lt;/code&gt;), not in &lt;code&gt;appsettings.json&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;On startup the Azure indexes are created, and everything you publish is indexed from then on. &lt;code&gt;AutoFields&lt;/code&gt; declares filterable, facetable and sortable fields from the content types&#x2019; property editors. If the site already has content, rebuild each index once with &lt;code&gt;IDistributedContentIndexRebuilder&lt;/code&gt;. The full documentation shows how.&lt;/p&gt;&#xA;&lt;p&gt;Set &lt;code&gt;RegisterDefaultIndexes&lt;/code&gt; to &lt;code&gt;true&lt;/code&gt; to move the default Umbraco Search indexes to Azure as well, for backoffice and Delivery API search.&lt;/p&gt;&#xA;&lt;p&gt;A missing or invalid configuration is logged on startup and never stops the site.&lt;/p&gt;&#xA;&lt;p&gt;Full documentation: &lt;a href=&quot;https://github.com/busrasengul/Umbraco.Community.Search.Provider.AzureAI&quot; class=&quot;inline-onebox&quot; rel=&quot;noopener nofollow ugc&quot;&gt;GitHub - busrasengul/Umbraco.Community.Search.Provider.AzureAI &#xB7; GitHub&lt;/a&gt;&lt;/p&gt;&#xA;            &lt;p&gt;&lt;small&gt;1 post - 1 participant&lt;/small&gt;&lt;/p&gt;&#xA;            &lt;p&gt;&lt;a href=&quot;https://forum.umbraco.com/t/new-package-umbraco-community-search-provider-azureai/8668&quot;&gt;Read full topic&lt;/a&gt;&lt;/p&gt;]]></description>
                    <pubDate>Mon, 19 Oct 2026 14:46:10 Z</pubDate>
                        <category>community</category>
                        <category>forum</category>
                </item>
                <item>
                    <guid>https://umbracocommunity.social/@owaincodes/117467137689911741</guid>
                    <title>New features added and new Umbraco Tees day website</title>
                    <link>https://umbracocommunity.social/@owaincodes/117467137689911741</link>
                    <description><![CDATA[New features added and new Umbraco Tees day announced! #umbraco #umbracoTeeshttps://isitumbracoteesday.today/]]></description>
                    <pubDate>Mon, 19 Oct 2026 11:51:00 Z</pubDate>
                        <category>community</category>
                        <category>social</category>
                        <category>mastodon</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/esatto.umbraco.backoffice.scheduledtasks</guid>
                    <title>Esatto.Umbraco.Backoffice.ScheduledTasks</title>
                    <link>https://marketplace.umbraco.com/package/esatto.umbraco.backoffice.scheduledtasks</link>
                    <description><![CDATA[Backoffice GUI for Umbraco 18&#x27;s scheduled background jobs. A Settings-section dashboard lists every recurring (IRecurringBackgroundJob) and distributed (IDistributedBackgroundJob) task &#x2014; Umbraco&#x27;s own and yours &#x2014; with its schedule, status, last and next run. Editors can run a task now, pause and resume it, change its schedule (an interval, or calendar times such as every Monday at 07:00, the 1st of every month, a date every year, or cron, in their time zone), set the task&#x27;s own properties with Umbraco&#x27;s property editors (e.g. a content-tree picker for the page a clean-up job works below), stop a running task, set retries and a time limit, and inspect every server&#x27;s runs (saved in the database) with error details and the log lines each run wrote. A change log records who changed what, settings move between environments with export/import, and the UI is in English and Swedish. Works with existing jobs unchanged.]]></description>
                    <pubDate>Mon, 19 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://www.rachelbreeze.dev/blogs/umbraco-upgrade-decisions-upgrade-or-rewrite/</guid>
                    <title>Umbraco Upgrade Decisions: Upgrade or Rewrite</title>
                    <link>https://www.rachelbreeze.dev/blogs/umbraco-upgrade-decisions-upgrade-or-rewrite/</link>
                    <description><![CDATA[If a site genuinely needs to change, the next decision is whether to upgrade it or rewrite it. In this post, I look at what a major version upgrade actually involves, when upgrading or rewriting makes more sense, and what each option costs in practice. Continue reading]]></description>
                    <pubDate>Sat, 17 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/esatto.umbraco.backoffice.aicosts</guid>
                    <title>Esatto.Umbraco.Backoffice.AICosts</title>
                    <link>https://marketplace.umbraco.com/package/esatto.umbraco.backoffice.aicosts</link>
                    <description><![CDATA[Estimated AI costs for Umbraco.AI in the backoffice: a Costs tab next to Analytics &#x2192; Usage that prices the tokens Umbraco.AI records per model, in your currency &#x2014; with cost by model, profile, user and provider, a monthly budget and forecast, CSV export and period comparison.]]></description>
                    <pubDate>Sat, 17 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/digitalwonderlab.whereisitused</guid>
                    <title>DigitalWonderlab.WhereIsItUsed</title>
                    <link>https://marketplace.umbraco.com/package/digitalwonderlab.whereisitused</link>
                    <description><![CDATA[Where Is It Used? Find where document types, templates, data types and forms are used across your Umbraco site. Supports Umbraco 13 - 17.]]></description>
                    <pubDate>Fri, 16 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://community.umbraco.com/blog/2026/10/core-collaborators-applications-are-open-again/</guid>
                    <title>Core Collaborators: applications are open again</title>
                    <link>https://community.umbraco.com/blog/2026/10/core-collaborators-applications-are-open-again/</link>
                    <description><![CDATA[The Core Collaborators team is starting a new chapter: we have a new steward stepping in, and we&#x2019;re looking for new faces to join us. Applications close Friday 27 November. Keep reading to see what the team does, what we expect and how to apply.]]></description>
                    <pubDate>Fri, 16 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/esatto.umbraco.backoffice.blockpreview</guid>
                    <title>Esatto.Umbraco.Backoffice.BlockPreview</title>
                    <link>https://marketplace.umbraco.com/package/esatto.umbraco.backoffice.blockpreview</link>
                    <description><![CDATA[Live frontend previews for Umbraco 17/18 Block List blocks in the backoffice: each block shows its real Razor partial, rendered with the site&#x27;s own CSS and JavaScript in a sandboxed, auto-sized iframe that updates as the editor types. Also ships configurable video and code preview elements.]]></description>
                    <pubDate>Fri, 16 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://community.umbraco.com/blog/2026/10/package-team-applications-are-open-again/</guid>
                    <title>Package Team: applications are open again</title>
                    <link>https://community.umbraco.com/blog/2026/10/package-team-applications-are-open-again/</link>
                    <description><![CDATA[Want to help shape the Marketplace and the wider package ecosystem? The Community Package Team is looking for new faces to join us. Applications close Friday 27 November. Keep reading to see what the team does, what we expect and how to apply.]]></description>
                    <pubDate>Fri, 16 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.Vimeo/releases/tag/v13.0.2</guid>
                    <title>Limbo.Umbraco.Vimeo 13.0.2</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.Vimeo/releases/tag/v13.0.2</link>
                    <description><![CDATA[Video picker for inserting Vimeo videos in Umbraco.]]></description>
                    <pubDate>Thu, 15 Oct 2026 17:10:37 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://forum.umbraco.com/t/new-package-property-visibility-hide-properties-tabs-and-groups-per-site/8658</guid>
                    <title>New package: Property Visibility (hide properties, tabs and groups per site)</title>
                    <link>https://forum.umbraco.com/t/new-package-property-visibility-hide-properties-tabs-and-groups-per-site/8658</link>
                    <description><![CDATA[&lt;p&gt;If you run several sites from one Umbraco installation, you probably share document types between them, and some of their fields only matter on one site. Up to Umbraco 13 you could hide those with a &lt;code&gt;SendingContentNotification&lt;/code&gt; handler. That notification is gone since v14, and out of the box Umbraco hides properties per user group, but not tabs or groups, and not per site.&lt;/p&gt;&#xA;&lt;p&gt;I built Property Visibility for exactly that. You write rules per site (a root node) and the backoffice hides the matching properties, tabs and groups for editors on that site.&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/6/67a9fb449fa8bf24bc055c4d3871d62913733a13.png&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/67a9fb449fa8bf24bc055c4d3871d62913733a13&quot; title=&quot;One document type on two sites: the Seo tab, banner image and related links only show where they are needed&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/6/67a9fb449fa8bf24bc055c4d3871d62913733a13_2_690x273.png&quot; alt=&quot;One document type on two sites: the Seo tab, banner image and related links only show where they are needed&quot; data-base62-sha1=&quot;eN3mw2CS36WBWbZaCdI9UMeJuf1&quot; width=&quot;690&quot; height=&quot;273&quot; srcset=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/6/67a9fb449fa8bf24bc055c4d3871d62913733a13_2_690x273.png, https://forum.umbraco.com/uploads/default/optimized/2X/6/67a9fb449fa8bf24bc055c4d3871d62913733a13_2_1035x409.png 1.5x, https://forum.umbraco.com/uploads/default/optimized/2X/6/67a9fb449fa8bf24bc055c4d3871d62913733a13_2_1380x546.png 2x&quot; data-dominant-color=&quot;FAF9FA&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;p&gt;What it does:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Hides properties, tabs and groups by alias: on every site, on one site, or on the sites that share a rule set&lt;/li&gt;&#xA;&lt;li&gt;Works inside blocks too: Block List, Block Grid, Single Block and blocks in the rich text editor&lt;/li&gt;&#xA;&lt;li&gt;Rules live in appsettings or a JSON file and reload without a restart. JSON schemas give IntelliSense, and a health check reports every alias or root node that doesn&#x2019;t resolve&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;A minimal example:&lt;/p&gt;&#xA;&lt;pre data-code-wrap=&quot;json&quot;&gt;&lt;code class=&quot;lang-json&quot;&gt;&quot;PropertyVisibility&quot;: {&#xA;  &quot;Sites&quot;: {&#xA;    &quot;corporate&quot;: {&#xA;      &quot;RootNodeKey&quot;: &quot;5c2b4d7e-9f1a-4c3e-8b6d-2a1f0e9d8c7b&quot;,&#xA;      &quot;ContentTypes&quot;: {&#xA;        &quot;landingPage&quot;: { &quot;Containers&quot;: [&quot;seoTab&quot;], &quot;Properties&quot;: [&quot;relatedLinks&quot;] }&#xA;      }&#xA;    }&#xA;  }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;To be clear: it changes what editors see, not what they&#x2019;re allowed to do. Hidden values are still in the Management API, the Delivery API and on the website. For permissions, use Umbraco&#x2019;s property permissions on user groups.&lt;/p&gt;&#xA;&lt;p&gt;1.x is for Umbraco 17 (from 17.6.2), 2.x for Umbraco 18 (from 18.2.1), both on .NET 10. On Umbraco 17, use the latest 1.x.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&quot;lang-auto&quot;&gt;dotnet add package Umbraco.Community.PropertyVisibility&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://marketplace.umbraco.com/package/umbraco.community.propertyvisibility&quot;&gt;Marketplace&lt;/a&gt; &#xB7; &lt;a href=&quot;https://www.nuget.org/packages/Umbraco.Community.PropertyVisibility&quot; rel=&quot;noopener nofollow ugc&quot;&gt;NuGet&lt;/a&gt; &#xB7; &lt;a href=&quot;https://github.com/erwindamsma/Umbraco.Community.PropertyVisibility&quot; rel=&quot;noopener nofollow ugc&quot;&gt;GitHub&lt;/a&gt; (docs and issues)&lt;/p&gt;&#xA;&lt;p&gt;Replacing your own v13 handler? The README has &lt;a href=&quot;https://github.com/erwindamsma/Umbraco.Community.PropertyVisibility#moving-from-your-own-implementation&quot; rel=&quot;noopener nofollow ugc&quot;&gt;a short section on that&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Curious how others handle this today: do you hide fields per site in your own installs, and how?&lt;/p&gt;&#xA;            &lt;p&gt;&lt;small&gt;1 post - 1 participant&lt;/small&gt;&lt;/p&gt;&#xA;            &lt;p&gt;&lt;a href=&quot;https://forum.umbraco.com/t/new-package-property-visibility-hide-properties-tabs-and-groups-per-site/8658&quot;&gt;Read full topic&lt;/a&gt;&lt;/p&gt;]]></description>
                    <pubDate>Thu, 15 Oct 2026 11:42:56 Z</pubDate>
                        <category>community</category>
                        <category>forum</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/neirijnck.transfr</guid>
                    <title>Neirijnck.Transfr</title>
                    <link>https://marketplace.umbraco.com/package/neirijnck.transfr</link>
                    <description><![CDATA[Compare Umbraco content trees between environments side by side and copy nodes key-preserving, with a mandatory dry run.]]></description>
                    <pubDate>Thu, 15 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/digitalwonderlab.communitycomments</guid>
                    <title>DigitalWonderlab.CommunityComments</title>
                    <link>https://marketplace.umbraco.com/package/digitalwonderlab.communitycomments</link>
                    <description><![CDATA[Comments for any page on your Umbraco 17 site. Add the Comments block to a Block List or Block Grid, or add the Commentable composition to a document type.&#xA;&#xA;Every comment is checked by the same rules engine as Community Forum, for spam, profanity, links and disguised words, plus your own word lists. Members of a Moderators member group can approve and remove comments on the page itself, without a backoffice account. Administrators have a queue in the backoffice, shared with the forum if you install both.&#xA;&#xA;Also includes one level of replies, emoji, editing and deleting your own comments, member avatars, reporting, and a setting to hold every comment on a page for review.&#xA;&#xA;Commenting needs a signed-in member. In this version comments are not stored per language, so every language version of a page shares one set. Optional AI review is available through the DigitalWonderlab.CommunityAi package on NuGet. Free to use.]]></description>
                    <pubDate>Thu, 15 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/digitalwonderlab.communityforum</guid>
                    <title>DigitalWonderlab.CommunityForum</title>
                    <link>https://marketplace.umbraco.com/package/digitalwonderlab.communityforum</link>
                    <description><![CDATA[A discussion forum that runs inside your Umbraco 17 site, with moderation built in.&#xA;&#xA;Boards are Umbraco content, so they get real URLs, SEO fields, publishing and permissions, and move between environments with Deploy or uSync. Threads and posts are stored in the package&#x27;s own database tables, so a busy forum doesn&#x27;t fill your content tree.&#xA;&#xA;Every post is checked by a rules engine for spam, profanity, links and disguised words, and you can add your own word lists. Members of a Moderators member group get a moderation queue on the website, so your moderators don&#x27;t need backoffice accounts. Administrators have a queue in the backoffice that also covers page comments.&#xA;&#xA;Also includes tags, polls, accepted answers on Q&amp;A boards, reactions, @mentions, direct messages, notifications, full-text search, members-only boards, structured data for search engines, RSS and an XML sitemap. Set two brand colours to match your site.&#xA;&#xA;In this version the Forum node sits at the root of the content tree, and one forum per site is supported. Optional AI review is available through the DigitalWonderlab.CommunityAi package on NuGet. Free to use.]]></description>
                    <pubDate>Thu, 15 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.searchmanager</guid>
                    <title>Umbraco.Community.SearchManager</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.searchmanager</link>
                    <description><![CDATA[A search index manager for the Umbraco backoffice and a drop-in replacement for the Examine Management dashboard.]]></description>
                    <pubDate>Thu, 15 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/uxbee.umbraco.bynder</guid>
                    <title>Uxbee.Umbraco.Bynder</title>
                    <link>https://marketplace.umbraco.com/package/uxbee.umbraco.bynder</link>
                    <description><![CDATA[Connects Umbraco CMS to the Bynder Digital Asset Management (DAM) platform, letting editors browse, select and reuse Bynder assets from the Umbraco backoffice.]]></description>
                    <pubDate>Thu, 15 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.compose.dictionary</guid>
                    <title>Umbraco.Community.Compose.Dictionary</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.compose.dictionary</link>
                    <description><![CDATA[Ingests Umbraco CMS dictionary items into Umbraco Compose, one variant per language.]]></description>
                    <pubDate>Thu, 15 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/utpro.feature.aipagebuilder</guid>
                    <title>uTPro.Feature.AIPageBuilder</title>
                    <link>https://marketplace.umbraco.com/package/utpro.feature.aipagebuilder</link>
                    <description><![CDATA[AI-assisted page building inside the Umbraco backoffice (Umbraco 16, 17, 18). Adds an &quot;AI Builder&quot; workspace action to Documents that assembles Block Grid pages from your existing components from a plain prompt or topic (optionally reproducing an attached design screenshot), rewrites a single block on demand, and fills every configured language variant from the source culture with preview and draft-only apply. Also translates Dictionary items and Media captions/alt text. Bring your own OpenAI-compatible LLM endpoint (OpenAI, Azure OpenAI, Gemini, Groq, OpenRouter or a local Ollama). Ships with English and Vietnamese backoffice localizations.]]></description>
                    <pubDate>Thu, 15 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/thebuilder.apptranslations</guid>
                    <title>TheBuilder.AppTranslations</title>
                    <link>https://marketplace.umbraco.com/package/thebuilder.apptranslations</link>
                    <description><![CDATA[Let editors change the text in your next-intl or i18next application from the Umbraco backoffice, without a code change or a deploy.]]></description>
                    <pubDate>Thu, 15 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.searchmanager.umbracosearch</guid>
                    <title>Umbraco.Community.SearchManager.UmbracoSearch</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.searchmanager.umbracosearch</link>
                    <description><![CDATA[Adds Umbraco Search indexes to Umbraco Search Manager. Install it on sites that use Umbraco Search.]]></description>
                    <pubDate>Thu, 15 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/esatto.umbraco.backoffice.treedraganddrop</guid>
                    <title>Esatto.Umbraco.Backoffice.TreeDragAndDrop</title>
                    <link>https://marketplace.umbraco.com/package/esatto.umbraco.backoffice.treedraganddrop</link>
                    <description><![CDATA[Drag-and-drop and keyboard &quot;grab &amp; place&quot; moving for the Umbraco 17/18 backoffice Content, Media and Dictionary trees, with real ordering for content and media. Each tree can be switched off in appsettings.json (Esatto:TreeDragAndDrop). Replaces Esatto.Umbraco.Backoffice.ContentTreeDragAndDrop and MediaTreeDragAndDrop.]]></description>
                    <pubDate>Thu, 15 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://forum.umbraco.com/t/umbraco-kent-meetup-19th-october-7pm-in-person-and-online/8657</guid>
                    <title>Umbraco Kent Meetup - 19th October @ 7pm (In-Person and Online)</title>
                    <link>https://forum.umbraco.com/t/umbraco-kent-meetup-19th-october-7pm-in-person-and-online/8657</link>
                    <description><![CDATA[&lt;p&gt;You&#x2019;ve still got time to sign-up for our next meetup which is a hybrid meetup, both in-person in Rochester and online.&lt;/p&gt;&#xA;&lt;p&gt;This month, we&#x2019;ve got Mike Masey replaying his Umbraco UK Conference talk - Beyond Shift Left: Accessibility as a Whole-Business Habit.&lt;/p&gt;&#xA;&lt;p&gt;Accessibility is often talked about as something we need to &#x201C;shift left&#x201D;: involve designers earlier, catch issues before development, and avoid expensive fixes later. That matters. But what if we are still thinking too small?&lt;/p&gt;&#xA;&lt;p&gt;It would be great to see more people in-person, so if you live in Kent feel free to come along!&lt;/p&gt;&#xA;&lt;p&gt;Sign-up here:&lt;/p&gt;&#xA;&lt;aside class=&quot;onebox allowlistedgeneric&quot; data-onebox-src=&quot;https://www.meetup.com/umbraco-kent-meetup/events/316693771/&quot;&gt;&#xA;  &lt;header class=&quot;source&quot;&gt;&#xA;      &lt;img src=&quot;https://forum.umbraco.com/uploads/default/original/2X/c/c5142869665d425e429fe755af6b9347444bcf84.png&quot; class=&quot;site-icon&quot; alt=&quot;&quot; data-dominant-color=&quot;FF7599&quot; width=&quot;16&quot; height=&quot;16&quot;&gt;&#xA;&#xA;      &lt;a href=&quot;https://www.meetup.com/umbraco-kent-meetup/events/316693771/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Meetup&lt;/a&gt;&#xA;  &lt;/header&gt;&#xA;&#xA;  &lt;article class=&quot;onebox-body&quot;&gt;&#xA;    &lt;div class=&quot;aspect-image&quot; style=&quot;--aspect-ratio:600/338;&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/original/2X/c/c61f6304609cf6177d7cc011e2cec37be1e0d7f3.jpeg&quot; class=&quot;thumbnail&quot; alt=&quot;&quot; data-dominant-color=&quot;5E5E54&quot; width=&quot;600&quot; height=&quot;338&quot;&gt;&lt;/div&gt;&#xA;&#xA;&lt;h3&gt;&lt;a href=&quot;https://www.meetup.com/umbraco-kent-meetup/events/316693771/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Umbraco Kent Meetup - Hybrid - Monday 19th October 2026 @ 7pm, Mon, Oct 19,...&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;  &lt;p&gt;Please join us for an evening of all things Umbraco - the latest news, community chat, and a talk or two!&#xA;&#xA;For 2026, we will be running both in-person and hybrid virtual me&lt;/p&gt;&#xA;&#xA;&#xA;  &lt;/article&gt;&#xA;&#xA;  &lt;div class=&quot;onebox-metadata&quot;&gt;&#xA;    &#xA;    &#xA;  &lt;/div&gt;&#xA;&#xA;  &lt;div style=&quot;clear: both&quot;&gt;&lt;/div&gt;&#xA;&lt;/aside&gt;&#xA;&#xA;            &lt;p&gt;&lt;small&gt;1 post - 1 participant&lt;/small&gt;&lt;/p&gt;&#xA;            &lt;p&gt;&lt;a href=&quot;https://forum.umbraco.com/t/umbraco-kent-meetup-19th-october-7pm-in-person-and-online/8657&quot;&gt;Read full topic&lt;/a&gt;&lt;/p&gt;]]></description>
                    <pubDate>Wed, 14 Oct 2026 12:05:04 Z</pubDate>
                        <category>community</category>
                        <category>forum</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/thebuilder.apioidc</guid>
                    <title>TheBuilder.ApiOidc</title>
                    <link>https://marketplace.umbraco.com/package/thebuilder.apioidc</link>
                    <description><![CDATA[Let Vercel, GitHub Actions, Google Cloud, AWS and other workloads call a private Content Delivery API and your own API endpoints with their short-lived OIDC token, instead of a shared API key.]]></description>
                    <pubDate>Wed, 14 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://forum.umbraco.com/t/beta-blast-umbraco-edition/8652</guid>
                    <title>Beta Blast - Umbraco edition</title>
                    <link>https://forum.umbraco.com/t/beta-blast-umbraco-edition/8652</link>
                    <description><![CDATA[&lt;p&gt;I&#x2019;ve been having a bit of fun re-creating a childhood game - Puzzle Bobble, but for climbers and now I have an Umbraco version too.&lt;/p&gt;&#xA;&lt;aside class=&quot;onebox allowlistedgeneric&quot; data-onebox-src=&quot;https://thesecretstage.vip/Beta-Blast/&quot;&gt;&#xA;  &lt;header class=&quot;source&quot;&gt;&#xA;&#xA;      &lt;a href=&quot;https://thesecretstage.vip/Beta-Blast/&quot; target=&quot;_blank&quot; rel=&quot;noopener nofollow ugc&quot;&gt;thesecretstage.vip&lt;/a&gt;&#xA;  &lt;/header&gt;&#xA;&#xA;  &lt;article class=&quot;onebox-body&quot;&gt;&#xA;    &#xA;&#xA;&lt;h3&gt;&lt;a href=&quot;https://thesecretstage.vip/Beta-Blast/&quot; target=&quot;_blank&quot; rel=&quot;noopener nofollow ugc&quot;&gt;Beta Blast&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&#xA;&#xA;  &lt;/article&gt;&#xA;&#xA;  &lt;div class=&quot;onebox-metadata&quot;&gt;&#xA;    &#xA;    &#xA;  &lt;/div&gt;&#xA;&#xA;  &lt;div style=&quot;clear: both&quot;&gt;&lt;/div&gt;&#xA;&lt;/aside&gt;&#xA;&#xA;&lt;p&gt;I&#x2019;ve made a load of changes since the video below was made, however, you can see the Umbraco theme which works on all game modes &lt;img src=&quot;https://forum.umbraco.com/images/emoji/twitter/slight_smile.png?v=15&quot; title=&quot;:slight_smile:&quot; class=&quot;emoji&quot; alt=&quot;:slight_smile:&quot; loading=&quot;lazy&quot; width=&quot;20&quot; height=&quot;20&quot;&gt; Happy blasting!&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;video-placeholder-container&quot; data-video-src=&quot;/uploads/default/original/2X/b/b13da9fee865b37128a4f767de70f465544419ce.mp4&quot; data-thumbnail-src=&quot;https://forum.umbraco.com/uploads/default/original/2X/1/10eb1ee0a14322ac9650010a6762bd5de45dec2f.jpeg&quot; data-video-base62-sha1=&quot;phWCRIFwmimfBw2MJvgJNMh5zYi.mp4&quot;&gt;&#xA;  &lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;            &lt;p&gt;&lt;small&gt;1 post - 1 participant&lt;/small&gt;&lt;/p&gt;&#xA;            &lt;p&gt;&lt;a href=&quot;https://forum.umbraco.com/t/beta-blast-umbraco-edition/8652&quot;&gt;Read full topic&lt;/a&gt;&lt;/p&gt;]]></description>
                    <pubDate>Tue, 13 Oct 2026 14:48:43 Z</pubDate>
                        <category>community</category>
                        <category>forum</category>
                </item>
                <item>
                    <guid>https://github.com/abjerner/Limbo.Umbraco.Iddqd/releases/tag/v17.0.0-alpha005</guid>
                    <title>Limbo.Umbraco.Iddqd 17.0.0-alpha005</title>
                    <link>https://github.com/abjerner/Limbo.Umbraco.Iddqd/releases/tag/v17.0.0-alpha005</link>
                    <description><![CDATA[Limbo.Umbraco.Iddqd package with various developer oriented improvements for the Umbraco backoffice.]]></description>
                    <pubDate>Tue, 13 Oct 2026 14:00:22 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://github.com/abjerner/Limbo.Umbraco.Iddqd/releases/tag/v13.0.2</guid>
                    <title>Limbo.Umbraco.Iddqd 13.0.2</title>
                    <link>https://github.com/abjerner/Limbo.Umbraco.Iddqd/releases/tag/v13.0.2</link>
                    <description><![CDATA[Limbo.Umbraco.Iddqd package with various developer oriented improvements for the Umbraco backoffice.]]></description>
                    <pubDate>Tue, 13 Oct 2026 13:53:25 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://umbracocommunity.social/@owaincodes/117432956598064166</guid>
                    <title>Umbraco version of Beta Blast</title>
                    <link>https://umbracocommunity.social/@owaincodes/117432956598064166</link>
                    <description><![CDATA[Now there is an #umbraco version of Beta Blast :D https://thesecretstage.vip/Beta-Blast/]]></description>
                    <pubDate>Tue, 13 Oct 2026 13:51:00 Z</pubDate>
                        <category>community</category>
                        <category>social</category>
                        <category>mastodon</category>
                </item>
                <item>
                    <guid>https://forum.umbraco.com/t/new-package-umbraco-community-recentmediapicker/8651</guid>
                    <title>New Package - Umbraco.Community.RecentMediaPicker</title>
                    <link>https://forum.umbraco.com/t/new-package-umbraco-community-recentmediapicker/8651</link>
                    <description><![CDATA[&lt;p&gt;So we&#x2019;ve all audited Umbraco sites where there are hundreds of media items uploaded to the root of site&#x2026; even when there is a perfectly structured and complex folder strategy in place, AND EVERYONE agreed to use it.&lt;/p&gt;&#xA;&lt;p&gt;And in amongst these audits&#x2026; we&#x2019;ve often discovered a plethora of duplicate images&#x2026; sometimes in different folders, sometimes in the same.&lt;/p&gt;&#xA;&lt;p&gt;And this is across different sites, different industries, different eras of Umbraco. The common thread. is that somehow, in a Media picking scenario&#x2026; &#x2018;just uploading a new image to the root of the Media section&#x2019; is&#x2026; I don&#x2019;t know?? -  easier? intuitive? quicker?&lt;/p&gt;&#xA;&lt;p&gt;If only we could talk to the editors and uncover why&#x2026; if only that were possible! - oh, it turns out you can, you just have to ask.&lt;/p&gt;&#xA;&lt;p&gt;It is interesting, because everyone is different, and there isn&#x2019;t one reason behind this behaviour, and yeah yeah yeah, we&#x2019;ve been talking about redesigning the Media section for years in Umbraco&#x2026; Jeffreys&#x2019;s dreams, Steve&#x2019;s plan, Ravi&#x2019;s something&#x2026; and we are likely on the cusp of it happening.&lt;/p&gt;&#xA;&lt;p&gt;Anyway, the thing that interested me on a human level, of the people using Umbraco, and how it makes them feel,  and the learned behaviour that they discover to navigate their editorial tasks efficiently, the beliefs that bubble up, which wouldn&#x2019;t necessarily be something you&#x2019;d consider when designing a Media Picker, that just has to pick Media&#x2026;&lt;/p&gt;&#xA;&lt;p&gt;Some of the key threads, and I&#x2019;m paraphrasing:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;I won&#x2019;t be able to find it again.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;I don&#x2019;t know which folder it&#x2019;s meant to go in&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;I didn&#x2019;t know it had already been uploaded by someone else&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;I didn&#x2019;t know I had already uploaded it&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;It takes ages to click through to the Media folder&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;I can&#x2019;t remember what the file is called, so it doesn&#x2019;t appear in search&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;I just uploaded it to the Media section, but I can&#x2019;t find where when I come to pick it&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;What do you mean the media picker has a list view?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;etc etc&lt;/p&gt;&#xA;&lt;p&gt;A revamp of media as a bigger picture thing, probably takes all this into consideration - but what resonated with me, is that feeling of &#x2018;I&#x2019;ve lost my keys&#x2019; - I know they are there but I don&#x2019;t know where, and I just had them a moment ago. When you remember where they are&#x2026;there is a Greek word about remembering inate knowledge called Anamnesis and wouldn&#x2019;t that be a great name for an Umbraco package&#x2026; and I thought although the Media Picker allows you to search or reorder by last updated, wouldn&#x2019;t it be nicer, and more Umbracoish, if it said - have you looked on the kitchen table?&lt;/p&gt;&#xA;&lt;p&gt;So I thought a thin strip of recently uploaded media &#x2018;by me&#x2019; and &#x2018;by everyone&#x2019;&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/9/938ff98600510f74e9c782a4791857b8af299a52.jpeg&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/938ff98600510f74e9c782a4791857b8af299a52&quot; title=&quot;image&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/original/2X/9/938ff98600510f74e9c782a4791857b8af299a52.jpeg&quot; alt=&quot;image&quot; data-base62-sha1=&quot;l3oEskcZm5AGlSuYzQ1BIzsyHAu&quot; width=&quot;629&quot; height=&quot;452&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;p&gt;Might be the same &#x2018;on the kitchen table&#x2019; helpful reminder?&lt;/p&gt;&#xA;&lt;p&gt;It definitely improves the picking journey if you&#x2019;ve just uploaded an image, and you now want to pick it. And it allows you to browse whats been recently uploaded by someone else.&lt;/p&gt;&#xA;&lt;p&gt;And if you switch to the full recent view, it groups the images by time period &#x2018;Today, Yesterday, This Week&#x2019; etc&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/d/d96721394d1b83870b3a1ed47bd485e6729d56e3.jpeg&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/d96721394d1b83870b3a1ed47bd485e6729d56e3&quot; title=&quot;image&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/original/2X/d/d96721394d1b83870b3a1ed47bd485e6729d56e3.jpeg&quot; alt=&quot;image&quot; data-base62-sha1=&quot;v1ez4fSybcFrRJQRRVSOofOvAgH&quot; width=&quot;629&quot; height=&quot;396&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;p&gt;The main thing that I got from looking at this, and I&#x2019;m aware this sounds mad - is that &#x2018;Recent Media&#x2019; isn&#x2019;t a filter applied to a list of Media -  it&#x2019;s a &#x2018;place&#x2019; in its own right&#x2026; that you should be able to pick from. It&#x2019;s a valid way of organising media, a Timeline view, and you see it everywhere in Flickr (if you are old) on your phone, etc&lt;/p&gt;&#xA;&lt;p&gt;So this package also adds this place to the Media section too!&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/6/6929543ba645ce040dc8721f9aaad3409f3107b5.jpeg&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/6929543ba645ce040dc8721f9aaad3409f3107b5&quot; title=&quot;image&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/6/6929543ba645ce040dc8721f9aaad3409f3107b5_2_690x456.jpeg&quot; alt=&quot;image&quot; data-base62-sha1=&quot;f0iGftOCSi0Y0RyvQPCUaAy0fGJ&quot; width=&quot;690&quot; height=&quot;456&quot; srcset=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/6/6929543ba645ce040dc8721f9aaad3409f3107b5_2_690x456.jpeg, https://forum.umbraco.com/uploads/default/original/2X/6/6929543ba645ce040dc8721f9aaad3409f3107b5.jpeg 1.5x, https://forum.umbraco.com/uploads/default/original/2X/6/6929543ba645ce040dc8721f9aaad3409f3107b5.jpeg 2x&quot; data-dominant-color=&quot;C7C4C5&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;p&gt;Editors have politely said they liked it, so this is a bit of an experiment, does this work for other people? it&#x2019;s switchable configuration wise with the existing Media Picker, so you should be able to swap it over temporarily for a bit and see?&lt;/p&gt;&#xA;&lt;p&gt;Less politely people have said Anamnesis is a stupid name.. &#x201C;you can&#x2019;t even say the word yourself&#x201D; - that&#x2019;s not constructive feedback&#x2026; &#x201C;nobody will know what it means&#x201D;&#x2026;&lt;/p&gt;&#xA;&lt;p&gt;and that&#x2019;s why it&#x2019;s now the Recent Media Picker&#x2026;&lt;/p&gt;&#xA;&lt;p&gt;Icon wise&#x2026; a tricky one, how do you capture the moment of remembering where an image is&#x2026;&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/f/fe174da75f9759ea095fea96778bf56ac60a92d1.png&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/fe174da75f9759ea095fea96778bf56ac60a92d1&quot; title=&quot;image&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/original/2X/f/fe174da75f9759ea095fea96778bf56ac60a92d1.png&quot; alt=&quot;image&quot; data-base62-sha1=&quot;AfNcGI3UmTlJYhCkxa7J6l9frkl&quot; width=&quot;128&quot; height=&quot;128&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;p&gt;I&#x2019;ve settled with a polaroid picture, fading&#x2026; given that sense of nostalgia and the image isn&#x2019;t far from being grasped&#x2026;&lt;/p&gt;&#xA;&lt;p&gt;Anyway, it&#x2019;s available in the marketplace: &lt;a href=&quot;https://marketplace.umbraco.com/package/umbraco.community.recentmediapicker&quot; class=&quot;inline-onebox&quot;&gt;Recent Media Picker | Umbraco Marketplace&lt;/a&gt; or wherever else you get your Umbraco Packages, be interested in hearing if editors find it useful, if only there were a way we could talk to them.&lt;/p&gt;&#xA;            &lt;p&gt;&lt;small&gt;1 post - 1 participant&lt;/small&gt;&lt;/p&gt;&#xA;            &lt;p&gt;&lt;a href=&quot;https://forum.umbraco.com/t/new-package-umbraco-community-recentmediapicker/8651&quot;&gt;Read full topic&lt;/a&gt;&lt;/p&gt;]]></description>
                    <pubDate>Tue, 13 Oct 2026 13:45:53 Z</pubDate>
                        <category>community</category>
                        <category>forum</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=VlZaw0VkBQE</guid>
                    <title>Umbraco AI  - Blog based on document</title>
                    <link>https://www.youtube.com/watch?v=VlZaw0VkBQE</link>
                    <description><![CDATA[Discover how our AI agent inside Umbraco turns a document into a blog post. Upload your source file, and the agent reads it, pulls out the key points and fills the entire page, with human approval at the right moments.]]></description>
                    <pubDate>Tue, 13 Oct 2026 11:45:19 Z</pubDate>
                        <category>community</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://forum.umbraco.com/t/introducing-husignal-microsoft-clarity-analytics-ai-insights-for-umbraco-17/8648</guid>
                    <title>Introducing HuSignal &#x2013; Microsoft Clarity Analytics &amp; AI Insights for Umbraco 17</title>
                    <link>https://forum.umbraco.com/t/introducing-husignal-microsoft-clarity-analytics-ai-insights-for-umbraco-17/8648</link>
                    <description><![CDATA[&lt;p&gt;Hi everyone &lt;img src=&quot;https://forum.umbraco.com/images/emoji/twitter/waving_hand.png?v=15&quot; title=&quot;:waving_hand:&quot; class=&quot;emoji&quot; alt=&quot;:waving_hand:&quot; loading=&quot;lazy&quot; width=&quot;20&quot; height=&quot;20&quot;&gt;&lt;/p&gt;&#xA;&lt;p&gt;I recently released &lt;strong&gt;HuSignal&lt;/strong&gt;, a free, open-source package that integrates Microsoft Clarity analytics directly into the Umbraco 17 backoffice.&lt;/p&gt;&#xA;&lt;h3&gt;&lt;a name=&quot;p-20251-what-does-it-do-1&quot; class=&quot;anchor&quot; href=&quot;https://forum.umbraco.com#p-20251-what-does-it-do-1&quot; aria-label=&quot;Heading link&quot;&gt;&lt;/a&gt;What does it do?&lt;/h3&gt;&#xA;&lt;p&gt;HuSignal brings Microsoft Clarity behavioural data into Umbraco, allowing editors and developers to:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;View Clarity analytics&lt;/strong&gt; directly within the backoffice.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Identify behavioural signals&lt;/strong&gt; including rage clicks, dead clicks, quickbacks and scrolling patterns.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Generate AI-assisted reports&lt;/strong&gt; that analyse behavioural data and highlight potential UX and SEO improvements.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The aim is to make behavioural analytics more accessible within Umbraco and help teams identify potential usability issues without constantly switching between platforms.&lt;/p&gt;&#xA;&lt;p&gt;The package is built for &lt;strong&gt;Umbraco 17 / .NET 10&lt;/strong&gt; and is available for free.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Umbraco Marketplace:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;aside class=&quot;onebox allowlistedgeneric&quot; data-onebox-src=&quot;https://marketplace.umbraco.com/package/husignal&quot;&gt;&#xA;  &lt;header class=&quot;source&quot;&gt;&#xA;      &lt;img src=&quot;https://forum.umbraco.com/uploads/default/original/1X/9595a9190a535ecc55fc3fa26df9036e44bd635d.png&quot; class=&quot;site-icon&quot; alt=&quot;&quot; data-dominant-color=&quot;505DBA&quot; width=&quot;32&quot; height=&quot;32&quot;&gt;&#xA;&#xA;      &lt;a href=&quot;https://marketplace.umbraco.com/package/husignal&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;marketplace.umbraco.com&lt;/a&gt;&#xA;  &lt;/header&gt;&#xA;&#xA;  &lt;article class=&quot;onebox-body&quot;&gt;&#xA;    &lt;img width=&quot;96&quot; height=&quot;96&quot; src=&quot;https://forum.umbraco.com/uploads/default/original/2X/a/abe89191dd72acea7e47b749fb211c3026220ab0.png&quot; class=&quot;thumbnail onebox-avatar&quot; alt=&quot;&quot; data-dominant-color=&quot;000000&quot;&gt;&#xA;&#xA;&lt;h3&gt;&lt;a href=&quot;https://marketplace.umbraco.com/package/husignal&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;HuSignal | Umbraco Marketplace&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;  &lt;p&gt;HuSignal is listed on the official Umbraco Marketplace | Information, links, and install instructions&lt;/p&gt;&#xA;&#xA;&#xA;  &lt;/article&gt;&#xA;&#xA;  &lt;div class=&quot;onebox-metadata&quot;&gt;&#xA;    &#xA;    &#xA;  &lt;/div&gt;&#xA;&#xA;  &lt;div style=&quot;clear: both&quot;&gt;&lt;/div&gt;&#xA;&lt;/aside&gt;&#xA;&#xA;&lt;p&gt;I&#x2019;d be interested to hear any feedback, suggestions or ideas for future features from the Umbraco community!&lt;/p&gt;&#xA;            &lt;p&gt;&lt;small&gt;1 post - 1 participant&lt;/small&gt;&lt;/p&gt;&#xA;            &lt;p&gt;&lt;a href=&quot;https://forum.umbraco.com/t/introducing-husignal-microsoft-clarity-analytics-ai-insights-for-umbraco-17/8648&quot;&gt;Read full topic&lt;/a&gt;&lt;/p&gt;]]></description>
                    <pubDate>Tue, 13 Oct 2026 10:31:37 Z</pubDate>
                        <category>community</category>
                        <category>forum</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=PoU3a2-V-VM</guid>
                    <title>Umbraco AI Update: Copilot Workspace &amp; Knowledge Sets</title>
                    <link>https://www.youtube.com/watch?v=PoU3a2-V-VM</link>
                    <description><![CDATA[The old Copilot had a small identity crisis. It lived next to the content you were editing, but you could ask it to go change something else entirely.&#xA;&#xA;Matt never liked that. So he fixed it.&#xA;&#xA;In this AI update, Bolette and Matt Brailsford walk through what&#x27;s new in Umbraco AI:&#xA;&#xA;Copilot Workspace is a new home for bigger, cross-content conversations. Your chats are saved now, and projects let you attach instructions and context that follow every conversation inside them. Planning a campaign or a major upgrade? Make a project, and stop copy-pasting between your LLM and your CMS.&#xA;&#xA;The contextual Copilot got leaner. It sticks to the content you&#x27;re actually editing and now lives behind a small icon in the bottom right corner. The team is still tinkering with that placement, and they&#x27;ll tell you so.&#xA;&#xA;Knowledge Sets are for package developers. Ship knowledge inside your package, and Umbraco AI picks it up the moment someone installs it. No more relying on backoffice users to explain your package to the LLM.&#xA;&#xA;Read more &#x2192; [link to Umbraco AI docs]&#xA;&#xA;Chapters&#xA;00:00 Intro&#xA;00:23 Why we built Copilot Workspace&#xA;01:30 Saved conversations&#xA;01:55 Projects: instructions and context&#xA;03:21 What changed in the contextual Copilot&#xA;05:01 Copilot Workspace and Umbraco Engage&#xA;06:03 Knowledge Sets for package developers&#xA;07:25 Demo: Knowledge Sets in action&#xA;07:51 Adding a Knowledge Set to your package&#xA;08:43 Wrap-up&#xA;&#xA;#Umbraco #UmbracoAI #dotnet #CMS #AI]]></description>
                    <pubDate>Tue, 13 Oct 2026 09:17:37 Z</pubDate>
                        <category>hq</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=4Im8x_GY3j4</guid>
                    <title>Why become Umbraco Partner</title>
                    <link>https://www.youtube.com/watch?v=4Im8x_GY3j4</link>
                    <description><![CDATA[We were going to make you a bullet point list of reasons to become an Umbraco Partner.&#xA;&#xA;Then Christian from byte5 pointed out that the stuff written down on paper isn&#x27;t really the point.&#xA;&#xA;So we handed the mic to seven partners from across Europe and North America and let them explain it themselves.&#xA;&#xA;Real people at HQ who pick up when you need them. Training that keeps developers current. A stamp of quality that helps win clients. And one very British &quot;It&#x27;s very good value, to be fair.&quot; &#x1F399;&#xFE0F;&#xA;&#xA;Thinking about it? Have a chat with our Partner Managers &#x2192; [link to partner page]&#xA;&#xA;Chapters&#xA;00:00 Christian K&#xF6;hler, byte5 (Germany)&#xA;00:23 Rasmus Bollerup, Illumi (Denmark)&#xA;00:38 Dennis Adolfi, Knowit (Sweden)&#xA;00:56 Fabio K&#xF6;nig, Cyber-Solutions (Austria)&#xA;01:06 Jan Willem Bergsma, Xuntos (Netherlands)&#xA;01:16 Robert Kaighn, Cantarus (North America)&#xA;01:26 Rich McCloskey, true (United Kingdom)&#xA;&#xA;#Umbraco #UmbracoPartner #CMS #dotnet #WebAgency]]></description>
                    <pubDate>Tue, 13 Oct 2026 09:04:29 Z</pubDate>
                        <category>hq</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://rickbutterfield.dev/blog/giving-ai-agents-tools-for-the-umbraco-backoffice-with-webmcp/</guid>
                    <title>Giving AI agents tools for the Umbraco backoffice with WebMCP</title>
                    <link>https://rickbutterfield.dev/blog/giving-ai-agents-tools-for-the-umbraco-backoffice-with-webmcp/</link>
                    <description><![CDATA[Chrome&#x27;s new WebMCP API lets a page hand an AI agent a list of named tools, so I tried it on the Umbraco 18 backoffice to see whether an agent could get around it, Umbraco Forms included, without reading a single screenshot.]]></description>
                    <pubDate>Tue, 13 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/dynamicdave.umbraco.contenthealth</guid>
                    <title>DynamicDave.Umbraco.ContentHealth</title>
                    <link>https://marketplace.umbraco.com/package/dynamicdave.umbraco.contenthealth</link>
                    <description><![CDATA[Finds broken internal links in Umbraco content: links to deleted, trashed or unpublished pages and media. A dashboard lists them with filters and CSV export, and every document shows its broken links and the pages that link to it.]]></description>
                    <pubDate>Tue, 13 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.frontendblockpreview</guid>
                    <title>Umbraco.Community.FrontendBlockPreview</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.frontendblockpreview</link>
                    <description><![CDATA[Preview Block List and Block Grid blocks in the backoffice rendered by your real frontend, with the editor&#x27;s unsaved values. Works with headless frontends on the Content Delivery API or your own API (React, Next.js, Angular, Vue, Nuxt, SvelteKit, Astro, plain JavaScript) and with MVC Razor views. Multisite aware.]]></description>
                    <pubDate>Tue, 13 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.recentmediapicker</guid>
                    <title>Umbraco.Community.RecentMediaPicker</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.recentmediapicker</link>
                    <description><![CDATA[An alternative Umbraco Media Picker that surfaces recently uploaded media first - by you or by anyone - so editors don&#x27;t have to remember which folder they put it in.]]></description>
                    <pubDate>Tue, 13 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://samsolutions.medium.com/umbraco-headless-cms-complete-guide-for-modern-digital-experiences-66144ce51205?source=rss------umbraco-5</guid>
                    <title>Umbraco Headless CMS: Complete Guide for Modern Digital Experiences</title>
                    <link>https://samsolutions.medium.com/umbraco-headless-cms-complete-guide-for-modern-digital-experiences-66144ce51205?source=rss------umbraco-5</link>
                    <description><![CDATA[&lt;div class=&quot;medium-feed-item&quot;&gt;&lt;p class=&quot;medium-feed-image&quot;&gt;&lt;a href=&quot;https://samsolutions.medium.com/umbraco-headless-cms-complete-guide-for-modern-digital-experiences-66144ce51205?source=rss------umbraco-5&quot;&gt;&lt;img src=&quot;https://cdn-images-1.medium.com/max/1774/1*SeeTnouB0FCTSBUTQaP_7Q.png&quot; width=&quot;1774&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;medium-feed-snippet&quot;&gt;Modern businesses rarely publish content to just one website.&lt;/p&gt;&lt;p class=&quot;medium-feed-link&quot;&gt;&lt;a href=&quot;https://samsolutions.medium.com/umbraco-headless-cms-complete-guide-for-modern-digital-experiences-66144ce51205?source=rss------umbraco-5&quot;&gt;Continue reading on Medium &#xBB;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;]]></description>
                    <pubDate>Mon, 12 Oct 2026 14:06:37 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.kjeldsen.dev/blog/a-win-for-the-little-guys-or-the-little-haiku-that-did/</guid>
                    <title>The Umbraco MCP Benchmark, part 2: Haiku 5.5 and the budget models</title>
                    <link>https://www.kjeldsen.dev/blog/a-win-for-the-little-guys-or-the-little-haiku-that-did/</link>
                    <description><![CDATA[Haiku went from 47 to 93 on my Umbraco MCP benchmark when 4.5 became 5.5. Then I ran the budget and open models, with and without a verified recipe, and tracked grade, cost and whether they told the truth.]]></description>
                    <pubDate>Mon, 12 Oct 2026 13:39:15 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://lnkd.in/p/e7fA9ywP</guid>
                    <title>UmbraDesktop 17.3.0 is out!</title>
                    <link>https://lnkd.in/p/e7fA9ywP</link>
                    <description><![CDATA[Untitled: https://lnkd.in/p/e7fA9ywP&#xA;&#xA;Sent from my iPhone&#xA;]]></description>
                    <pubDate>Mon, 12 Oct 2026 11:55:00 Z</pubDate>
                        <category>social</category>
                        <category>community</category>
                        <category>linkedin</category>
                </item>
                <item>
                    <guid>https://mattbrailsford.dev/three-years-of-umbfyi-and-a-second-pulse-check</guid>
                    <title>Three Years of UMB.FYI, and a Second Pulse Check</title>
                    <link>https://mattbrailsford.dev/three-years-of-umbfyi-and-a-second-pulse-check</link>
                    <description><![CDATA[UMB.FYI turns three, and the second Pulse Check looks back at how the Umbraco ecosystem moved over the past year.]]></description>
                    <pubDate>Mon, 12 Oct 2026 08:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/flowcourier.umbraco.googleanalytics</guid>
                    <title>Flowcourier.Umbraco.GoogleAnalytics</title>
                    <link>https://marketplace.umbraco.com/package/flowcourier.umbraco.googleanalytics</link>
                    <description><![CDATA[Google Analytics 4 inside the Umbraco backoffice. Install one package and editors get an Analytics section &#x2014; Overview, Realtime, Visitors, Behaviour, Acquisition and Technology dashboards &#x2014; plus an Analytics tab on every document showing that page&#x27;s pageviews, visits, engaged time, bounce rate and entrances against the previous period, where its visitors came from, which pages they came from and went to next, and their locations and devices. Everything is read live from your own GA4 property through the Google Analytics Data API with a service account: no Google login for editors, no Google SDK on the server, nothing stored, no database tables. Sessions arriving from AI assistants (ChatGPT, Perplexity, Claude, Copilot, Gemini) are reported as their own channel. Optional PageSpeed Insights and Search Console views on the same tab, a findings strip that tells editors what to look at first, and the same figures in the Umbraco AI Copilot. The Google Analytics provider for Flowcourier Analytics &#x2014; install Flowcourier.Umbraco.Matomo instead to read Matomo behind the same dashboards. Successor to the legacy Flowcourier.Umbraco.Analytics package. Free for Umbraco 17.5&#x2B;, including commercial production use; AI Visibility (Analytics Pro) is the family&#x27;s one paid feature.]]></description>
                    <pubDate>Mon, 12 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/flowcourier.umbraco.analytics.core</guid>
                    <title>Flowcourier.Umbraco.Analytics.Core</title>
                    <link>https://marketplace.umbraco.com/package/flowcourier.umbraco.analytics.core</link>
                    <description><![CDATA[Shared base for Flowcourier&#x27;s analytics packages: the &quot;Analytics&quot; section&#xA;      in the Umbraco backoffice (Realtime, Visitors, Behaviour, Acquisition,&#xA;      Technology dashboards), the &quot;Analytics&quot; tab on every document, and the&#xA;      optional Google PageSpeed Insights and Google Search Console reports.&#xA;      Traffic data comes from a provider package &#x2014; install&#xA;      Flowcourier.Umbraco.Matomo for Matomo or Flowcourier.Umbraco.GoogleAnalytics&#xA;      for Google Analytics 4. Configured entirely from&#xA;      appsettings; the only database table is the index-status cache, created&#xA;      just for sites that turn Search Console index tracking on.]]></description>
                    <pubDate>Mon, 12 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/flowcourier.umbraco.matomo</guid>
                    <title>Flowcourier.Umbraco.Matomo</title>
                    <link>https://marketplace.umbraco.com/package/flowcourier.umbraco.matomo</link>
                    <description><![CDATA[Matomo inside the Umbraco backoffice. Install one package and editors get an Analytics section with Overview, Realtime, Visitors, Behaviour, Acquisition and Technology dashboards, plus an Analytics tab on every document with that page&#x27;s traffic, referrers and visitor journeys. Read live from your own Matomo, self-hosted or Matomo Cloud, through the Reporting API; nothing about your visitors is stored in Umbraco. Free, including commercial use. Analytics Pro adds AI Visibility and ad campaign reporting.]]></description>
                    <pubDate>Mon, 12 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/flowcourier.umbraco.analytics.ai</guid>
                    <title>Flowcourier.Umbraco.Analytics.AI</title>
                    <link>https://marketplace.umbraco.com/package/flowcourier.umbraco.analytics.ai</link>
                    <description><![CDATA[Makes the Flowcourier Analytics data answerable in the Umbraco AI Copilot:&#xA;      tools for a page&#x27;s traffic, its flow, search queries, index status, AI&#xA;      crawler activity and findings, plus an &quot;Explain and suggest&quot; action that&#xA;      turns a page&#x27;s findings into three prioritised edits. Every tool returns&#xA;      aggregates only &#x2014; never individual visitors, visitor ids or IP addresses.&#xA;      Needs Flowcourier.Umbraco.Analytics.Core, a provider package and the&#xA;      Umbraco AI Copilot. Also AI Visibility (Analytics Pro): your prompt set sampled through your own Umbraco AI chat profiles with web search, and what the answers cite, beside AEO&#x27;s real AI-crawler fetches.]]></description>
                    <pubDate>Mon, 12 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.umbradesktop.accessories</guid>
                    <title>Umbraco.Community.UmbraDesktop.Accessories</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.umbradesktop.accessories</link>
                    <description><![CDATA[The small tools for UmbraDesktop. An optional add-on that puts Notepad, Paint, Sticky Notes, Calculator and the rest of Windows&#x27; Accessories on the desktop, each in a window of its own and themed along with the rest of it.]]></description>
                    <pubDate>Mon, 12 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/thebuilder.schemacity</guid>
                    <title>TheBuilder.SchemaCity</title>
                    <link>https://marketplace.umbraco.com/package/thebuilder.schemacity</link>
                    <description><![CDATA[See your Umbraco content model as a 3D city in the backoffice, with the relationships between Document Types, schema checks, content usage, change impact and snapshot comparison.]]></description>
                    <pubDate>Mon, 12 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://forum.umbraco.com/t/time-for-more-umbradesktop-madness-v17-3-0-is-out/8643</guid>
                    <title>Time for more UmbraDesktop madness: v17.3.0 is out!</title>
                    <link>https://forum.umbraco.com/t/time-for-more-umbradesktop-madness-v17-3-0-is-out/8643</link>
                    <description><![CDATA[&lt;p&gt;UmbraDesktop 17.3.0 is out; the package that turns Umbraco into a full desktop experience! While writing the release notes, it was once again clear how much awesome and ridiculous things were added in this release. A huge shoutout to &lt;a class=&quot;mention&quot; href=&quot;https://forum.umbraco.com/u/suedeapple&quot;&gt;@suedeapple&lt;/a&gt; for the unending stream of PRs &lt;img src=&quot;https://forum.umbraco.com/images/emoji/twitter/wink.png?v=15&quot; title=&quot;:wink:&quot; class=&quot;emoji&quot; alt=&quot;:wink:&quot; loading=&quot;lazy&quot; width=&quot;20&quot; height=&quot;20&quot;&gt;&lt;/p&gt;&#xA;&lt;h3&gt;&lt;a name=&quot;p-20216-new-rearrange-the-launcher-1&quot; class=&quot;anchor&quot; href=&quot;https://forum.umbraco.com#p-20216-new-rearrange-the-launcher-1&quot; aria-label=&quot;Heading link&quot;&gt;&lt;/a&gt;NEW! Rearrange the launcher&lt;/h3&gt;&#xA;&lt;p&gt;By default, the launcher shows the full catalogue of all available apps in the categories that the catalogue defines. Because editors have different roles, not everything is equally important to everybody. You can now completely customize the launcher to your taste: create or rename categories and drag and drop icons around. The full list of apps remains available in the &#x2018;all apps&#x2019; overview.&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/c/ce0aac2b65e16ddd572d1f9a54c3be3486fae53f.png&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/ce0aac2b65e16ddd572d1f9a54c3be3486fae53f&quot; title=&quot;afbeelding&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/c/ce0aac2b65e16ddd572d1f9a54c3be3486fae53f_2_618x500.png&quot; alt=&quot;afbeelding&quot; data-base62-sha1=&quot;toJdVOAGCRaHDk4qhfM30jadN0z&quot; width=&quot;618&quot; height=&quot;500&quot; srcset=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/c/ce0aac2b65e16ddd572d1f9a54c3be3486fae53f_2_618x500.png, https://forum.umbraco.com/uploads/default/optimized/2X/c/ce0aac2b65e16ddd572d1f9a54c3be3486fae53f_2_927x750.png 1.5x, https://forum.umbraco.com/uploads/default/original/2X/c/ce0aac2b65e16ddd572d1f9a54c3be3486fae53f.png 2x&quot; data-dominant-color=&quot;F7F7F7&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/8/81d6784f82bb50cd3c2f82341efe65b65c206386.png&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/81d6784f82bb50cd3c2f82341efe65b65c206386&quot; title=&quot;afbeelding&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/8/81d6784f82bb50cd3c2f82341efe65b65c206386_2_680x500.png&quot; alt=&quot;afbeelding&quot; data-base62-sha1=&quot;iwB5NhjPoZd6yR3WZ8gzxWFIVca&quot; width=&quot;680&quot; height=&quot;500&quot; srcset=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/8/81d6784f82bb50cd3c2f82341efe65b65c206386_2_680x500.png, https://forum.umbraco.com/uploads/default/optimized/2X/8/81d6784f82bb50cd3c2f82341efe65b65c206386_2_1020x750.png 1.5x, https://forum.umbraco.com/uploads/default/original/2X/8/81d6784f82bb50cd3c2f82341efe65b65c206386.png 2x&quot; data-dominant-color=&quot;EAEAEC&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;h3&gt;&lt;a name=&quot;p-20216-new-show-the-preview-2&quot; class=&quot;anchor&quot; href=&quot;https://forum.umbraco.com#p-20216-new-show-the-preview-2&quot; aria-label=&quot;Heading link&quot;&gt;&lt;/a&gt;NEW! Show the preview!&lt;/h3&gt;&#xA;&lt;p&gt;When you are editing content, you get a button to open the preview next to the content you are editing!&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/2/20ae53d5f8fa0056ced3b5552da845f9de477d90.jpeg&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/20ae53d5f8fa0056ced3b5552da845f9de477d90&quot; title=&quot;afbeelding&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/2/20ae53d5f8fa0056ced3b5552da845f9de477d90_2_690x352.jpeg&quot; alt=&quot;afbeelding&quot; data-base62-sha1=&quot;4F6LZ7GZ7ZpsSeQNatEQFpaG5oY&quot; width=&quot;690&quot; height=&quot;352&quot; srcset=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/2/20ae53d5f8fa0056ced3b5552da845f9de477d90_2_690x352.jpeg, https://forum.umbraco.com/uploads/default/optimized/2X/2/20ae53d5f8fa0056ced3b5552da845f9de477d90_2_1035x528.jpeg 1.5x, https://forum.umbraco.com/uploads/default/optimized/2X/2/20ae53d5f8fa0056ced3b5552da845f9de477d90_2_1380x704.jpeg 2x&quot; data-dominant-color=&quot;ABA5A3&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;p&gt;It will check what the preview URL is and open that URL in a panel next to the content. So this also works when you have custom URL providers for headless instances. The content refreshes on save. If the target cannot be iFramed (for instance if the X-Frames-Options header does not allow it, you have the option to open it in a new tab anyway.&lt;/p&gt;&#xA;&lt;p&gt;This also introduces the concept of &#x2018;connected&#x2019; windows, where two windows belong to each other. If you don&#x2019;t have enough space, of if you want to have the preview in a seperate window, you can pop it out the panel:&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/3/39730c26cffa503c708c7e2e78096664ae0f936b.jpeg&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/39730c26cffa503c708c7e2e78096664ae0f936b&quot; title=&quot;afbeelding&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/3/39730c26cffa503c708c7e2e78096664ae0f936b_2_690x371.jpeg&quot; alt=&quot;afbeelding&quot; data-base62-sha1=&quot;8cdHDHGaNd5eRnhBkOM5jkOJnU7&quot; width=&quot;690&quot; height=&quot;371&quot; srcset=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/3/39730c26cffa503c708c7e2e78096664ae0f936b_2_690x371.jpeg, https://forum.umbraco.com/uploads/default/optimized/2X/3/39730c26cffa503c708c7e2e78096664ae0f936b_2_1035x556.jpeg 1.5x, https://forum.umbraco.com/uploads/default/optimized/2X/3/39730c26cffa503c708c7e2e78096664ae0f936b_2_1380x742.jpeg 2x&quot; data-dominant-color=&quot;AEAAAA&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;p&gt;The preview is now a seperate window that you can handle like any other window, but it is tied to the parent window. If the parent window closes, the preview closes as well. On the taskbar, you can see that these windows are linked by the box around it.&lt;/p&gt;&#xA;&lt;h3&gt;&lt;a name=&quot;p-20216-new-notification-system-3&quot; class=&quot;anchor&quot; href=&quot;https://forum.umbraco.com#p-20216-new-notification-system-3&quot; aria-label=&quot;Heading link&quot;&gt;&lt;/a&gt;NEW! Notification system!&lt;/h3&gt;&#xA;&lt;p&gt;Because all Windows on UmbraDesktop are iFrames and are essentially all running a seperate frontend instance of Umbraco, each window could have it&#x2019;s own nottification popups (those are the standard Umbraco notifications that you can in the lower right corner of Umbraco). Those notifications are now aggregated and ONLY show in the lower right corner of the desktop and no longer in each window. The makes it consistent. The latest 20 notifications are also stored and can be access in the notification overview when you click the clock.&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/6/6f5156648a38883ab35509280dda7f677927adaa.png&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/6f5156648a38883ab35509280dda7f677927adaa&quot; title=&quot;afbeelding&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/original/2X/6/6f5156648a38883ab35509280dda7f677927adaa.png&quot; alt=&quot;afbeelding&quot; data-base62-sha1=&quot;fSLgmCsmOu1sfxYBJ16MYy5zGNI&quot; width=&quot;487&quot; height=&quot;198&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;&#xA;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/3/3f7177a8d5d843fb6da68d93886eec39a0415022.png&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/3f7177a8d5d843fb6da68d93886eec39a0415022&quot; title=&quot;afbeelding&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/original/2X/3/3f7177a8d5d843fb6da68d93886eec39a0415022.png&quot; alt=&quot;afbeelding&quot; data-base62-sha1=&quot;93fbneHFGxEGszhzp3IbcJB2tY6&quot; width=&quot;373&quot; height=&quot;256&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;p&gt;This also allowed us to style the notifiications, so that they look like the theme you are currently at. Any warnings or errors will trigger a &#x2018;dot&#x2019; with an orange or red color next to the clock.&lt;/p&gt;&#xA;&lt;p&gt;NEW! Accessories Add-on!&lt;br&gt;&#xA;&lt;a class=&quot;mention&quot; href=&quot;https://forum.umbraco.com/u/suedeapple&quot;&gt;@suedeapple&lt;/a&gt; has gone completely mad and created a new optional add-on package: accessories. It contains a number of apps that were on &#x2018;accessories&#x2019; on WIndows 98, including a screensaver!&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/d/d79c839d590d9fc21fb835d7be2bad3eb37bb579.jpeg&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/d79c839d590d9fc21fb835d7be2bad3eb37bb579&quot; title=&quot;afbeelding&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/d/d79c839d590d9fc21fb835d7be2bad3eb37bb579_2_690x370.jpeg&quot; alt=&quot;afbeelding&quot; data-base62-sha1=&quot;uLnZ8zAohT4tNDaXXU34sLl8WKZ&quot; width=&quot;690&quot; height=&quot;370&quot; srcset=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/d/d79c839d590d9fc21fb835d7be2bad3eb37bb579_2_690x370.jpeg, https://forum.umbraco.com/uploads/default/optimized/2X/d/d79c839d590d9fc21fb835d7be2bad3eb37bb579_2_1035x555.jpeg 1.5x, https://forum.umbraco.com/uploads/default/optimized/2X/d/d79c839d590d9fc21fb835d7be2bad3eb37bb579_2_1380x740.jpeg 2x&quot; data-dominant-color=&quot;BCB6CF&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;p&gt;Yes, you can ACTUALLY edit media with Paint and save it back to media. And yes, you can ACTUALLY add shared sticky notes between editors! Did I already say that &lt;a class=&quot;mention&quot; href=&quot;https://forum.umbraco.com/u/suedeapple&quot;&gt;@suedeapple&lt;/a&gt; has gone completely mad?&lt;/p&gt;&#xA;&lt;h3&gt;&lt;a name=&quot;p-20216-new-show-the-instance-name-on-the-desktop-4&quot; class=&quot;anchor&quot; href=&quot;https://forum.umbraco.com#p-20216-new-show-the-instance-name-on-the-desktop-4&quot; aria-label=&quot;Heading link&quot;&gt;&lt;/a&gt;NEW! Show the instance name on the desktop!&lt;/h3&gt;&#xA;&lt;p&gt;When you multiple Umbraco instances where you are using UmbraDesktop, it&#x2019;s easy to mistake these instances. In the previous update, we expanded the settings so that when you pinned UmbraDesktop as an app, you could set the instance name and icon. This updates expands on this by allowing you to display the instance name and URL on the desktop.&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/3/30981e01b1cd052201623e6eb7171c211c11dc34.jpeg&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/30981e01b1cd052201623e6eb7171c211c11dc34&quot; title=&quot;afbeelding&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/3/30981e01b1cd052201623e6eb7171c211c11dc34_2_690x349.jpeg&quot; alt=&quot;afbeelding&quot; data-base62-sha1=&quot;6VSPlDb2GOOc414pc9loQJ5QVtW&quot; width=&quot;690&quot; height=&quot;349&quot; srcset=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/3/30981e01b1cd052201623e6eb7171c211c11dc34_2_690x349.jpeg, https://forum.umbraco.com/uploads/default/optimized/2X/3/30981e01b1cd052201623e6eb7171c211c11dc34_2_1035x523.jpeg 1.5x, https://forum.umbraco.com/uploads/default/optimized/2X/3/30981e01b1cd052201623e6eb7171c211c11dc34_2_1380x698.jpeg 2x&quot; data-dominant-color=&quot;5B5879&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;h3&gt;&lt;a name=&quot;p-20216-new-games-5&quot; class=&quot;anchor&quot; href=&quot;https://forum.umbraco.com#p-20216-new-games-5&quot; aria-label=&quot;Heading link&quot;&gt;&lt;/a&gt;NEW! Games!&lt;/h3&gt;&#xA;&lt;p&gt;The entertainment add-on package has two new games to play! The first one is snake, created by &lt;a class=&quot;mention&quot; href=&quot;https://forum.umbraco.com/u/suedeapple&quot;&gt;@suedeapple&lt;/a&gt;. The second is solitaire. And yes, it has some Umbraco themes card backs, including the Umbraco rabbit!&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/4/459ee68e9b41ff730f6b4f79d75bf01554220341.jpeg&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/459ee68e9b41ff730f6b4f79d75bf01554220341&quot; title=&quot;afbeelding&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/4/459ee68e9b41ff730f6b4f79d75bf01554220341_2_690x369.jpeg&quot; alt=&quot;afbeelding&quot; data-base62-sha1=&quot;9VTo5dM8fZDSoTaYRrSU3iOvjyh&quot; width=&quot;690&quot; height=&quot;369&quot; srcset=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/4/459ee68e9b41ff730f6b4f79d75bf01554220341_2_690x369.jpeg, https://forum.umbraco.com/uploads/default/optimized/2X/4/459ee68e9b41ff730f6b4f79d75bf01554220341_2_1035x553.jpeg 1.5x, https://forum.umbraco.com/uploads/default/original/2X/4/459ee68e9b41ff730f6b4f79d75bf01554220341.jpeg 2x&quot; data-dominant-color=&quot;686D91&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;h3&gt;&lt;a name=&quot;p-20216-experimental-view-remote-content-6&quot; class=&quot;anchor&quot; href=&quot;https://forum.umbraco.com#p-20216-experimental-view-remote-content-6&quot; aria-label=&quot;Heading link&quot;&gt;&lt;/a&gt;EXPERIMENTAL! View remote content!&lt;/h3&gt;&#xA;&lt;p&gt;In the previous version, we introduced the concept of &#x2018;remote connections&#x2019;. In this version we added a second experimental app: if you have at least one connection to another Umbraco instance, you get the app &#x2018;Remote content&#x2019;. This app allows you to read-only see the content tree of any remote Umbraco instance.&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/e/e1c81e80f6cc3d1748d238a7318d954d82a0947a.png&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/e1c81e80f6cc3d1748d238a7318d954d82a0947a&quot; title=&quot;afbeelding&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/e/e1c81e80f6cc3d1748d238a7318d954d82a0947a_2_690x434.png&quot; alt=&quot;afbeelding&quot; data-base62-sha1=&quot;wdmbpVqssAugUp4lCHOz4JSUx62&quot; width=&quot;690&quot; height=&quot;434&quot; srcset=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/e/e1c81e80f6cc3d1748d238a7318d954d82a0947a_2_690x434.png, https://forum.umbraco.com/uploads/default/optimized/2X/e/e1c81e80f6cc3d1748d238a7318d954d82a0947a_2_1035x651.png 1.5x, https://forum.umbraco.com/uploads/default/optimized/2X/e/e1c81e80f6cc3d1748d238a7318d954d82a0947a_2_1380x868.png 2x&quot; data-dominant-color=&quot;EDEDF0&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is experimental for a reason, because I have yet to see how well this works in real life. Only the data comes from the remote instance, the property editors and all Umbraco UI components are from the local UmbraDesktop instance. This means that you can have version mismatches and if a property editor that is used on the remote instance does not exist on the local instance, it will only show raw JSON. Nevertheless, if this works well enough, it&#x2019;s a tool where you can easily check some content from other instances.&lt;/p&gt;&#xA;&lt;h3&gt;&lt;a name=&quot;p-20216-small-improvements-and-utilities-7&quot; class=&quot;anchor&quot; href=&quot;https://forum.umbraco.com#p-20216-small-improvements-and-utilities-7&quot; aria-label=&quot;Heading link&quot;&gt;&lt;/a&gt;Small improvements and utilities&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Your profile gets migrated to the database on first boot. This means that your profile follows you between browsers and machines on that Umbraco instance. The only exception is &#x2018;boot to desktop&#x2019;. You need to access the desktop manually once per browser before this settings takes effect. You&#x2019;ll see a splash screen and message when your data is migrated.&lt;/li&gt;&#xA;&lt;li&gt;The taskbar now has a button for &#x2018;full screen&#x2019;. This makes the UmbraDesktop full screen, like pressing F11 on a browser on a Windows machine. This icon can be disabled in settings&lt;/li&gt;&#xA;&lt;li&gt;Windows can now be properly dragged on a touch screen without a mouse.&lt;/li&gt;&#xA;&lt;li&gt;Thanks to &lt;a class=&quot;mention&quot; href=&quot;https://forum.umbraco.com/u/suedeapple&quot;&gt;@suedeapple&lt;/a&gt;, by default, your window state is now stored per session. So an accidental F5 will reopen all your active windows. Where applicable, it will remember state, like solitaire. In the settings, you can change this to: none (in case you really hate yourself), or &#x2018;always&#x2019;, where you windows will be remembered between sessions in the same browser.&lt;/li&gt;&#xA;&lt;li&gt;The documentation has now been reworked and added as a &#x2018;help&#x2019; app in UmbraDesktop. It features documentation for editors (how to use it) and developers (who do I create my own addon packages).&lt;br&gt;&#xA;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/5/5fec2593234f447605a6a43d020c77fab36d1f90.png&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/5fec2593234f447605a6a43d020c77fab36d1f90&quot; title=&quot;afbeelding&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/5/5fec2593234f447605a6a43d020c77fab36d1f90_2_685x499.png&quot; alt=&quot;afbeelding&quot; data-base62-sha1=&quot;dGziIdZErhTUeYf7qbTvIjgxehy&quot; width=&quot;685&quot; height=&quot;499&quot; srcset=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/5/5fec2593234f447605a6a43d020c77fab36d1f90_2_685x499.png, https://forum.umbraco.com/uploads/default/optimized/2X/5/5fec2593234f447605a6a43d020c77fab36d1f90_2_1027x748.png 1.5x, https://forum.umbraco.com/uploads/default/original/2X/5/5fec2593234f447605a6a43d020c77fab36d1f90.png 2x&quot; data-dominant-color=&quot;DDE1E6&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3&gt;&lt;a name=&quot;p-20216-technical-stuff-8&quot; class=&quot;anchor&quot; href=&quot;https://forum.umbraco.com#p-20216-technical-stuff-8&quot; aria-label=&quot;Heading link&quot;&gt;&lt;/a&gt;Technical stuff&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Packages can now bring their own catalogue definition. The catalogue defines the apps and groups on the launcher. Before this change, the only way to add a catalogue was to create a pull request into this repository. So that&#x2019;s no longer needed.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;&lt;a name=&quot;p-20216-whats-changed-9&quot; class=&quot;anchor&quot; href=&quot;https://forum.umbraco.com#p-20216-whats-changed-9&quot; aria-label=&quot;Heading link&quot;&gt;&lt;/a&gt;What&#x2019;s Changed&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;[ENTERTAINMENT] Add Snake to the Entertainment games by &lt;a class=&quot;mention&quot; href=&quot;https://forum.umbraco.com/u/suedeapple&quot;&gt;@suedeapple&lt;/a&gt; in &lt;a href=&quot;https://github.com/Luuk1983/Umbraco.Community.UmbraDesktop/pull/82&quot; class=&quot;inline-onebox --gh-status-merged&quot;&gt;[ENTERTAINMENT] Add Snake to the Entertainment games - Pull Request #82 - Luuk1983/Umbraco.Community.UmbraDesktop - GitHub&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Add a full screen button to the taskbar by &lt;a class=&quot;mention&quot; href=&quot;https://forum.umbraco.com/u/suedeapple&quot;&gt;@suedeapple&lt;/a&gt; in &lt;a href=&quot;https://github.com/Luuk1983/Umbraco.Community.UmbraDesktop/pull/90&quot; class=&quot;inline-onebox --gh-status-merged&quot;&gt;Add a full screen button to the taskbar - Pull Request #90 - Luuk1983/Umbraco.Community.UmbraDesktop - GitHub&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Store desktop settings on the user account (&lt;span class=&quot;hashtag-raw&quot;&gt;#29&lt;/span&gt;) b@Luuk1983 &lt;span class=&quot;mention&quot;&gt;@Luuk1983&lt;/span&gt; in &lt;a href=&quot;https://github.com/Luuk1983/Umbraco.Community.UmbraDesktop/pull/92&quot; class=&quot;inline-onebox --gh-status-merged&quot;&gt;Store desktop settings on the user account (#29) - Pull Request #92 - Luuk1983/Umbraco.Community.UmbraDesktop - GitHub&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Let a package bring its own catalogue (&lt;span class=&quot;hashtag-raw&quot;&gt;#85&lt;/span&gt;)&lt;span class=&quot;mention&quot;&gt;@Luuk1983by&lt;/span&gt; &lt;span class=&quot;mention&quot;&gt;@Luuk1983&lt;/span&gt; in &lt;a href=&quot;https://github.com/Luuk1983/Umbraco.Community.UmbraDesktop/pull/95&quot; class=&quot;inline-onebox --gh-status-merged&quot;&gt;Let a package bring its own catalogue (#85) - Pull Request #95 - Luuk1983/Umbraco.Community.UmbraDesktop - GitHub&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Show the site&#x2019;s name on the desktop (&lt;span class=&quot;hashtag-raw&quot;&gt;#9&lt;/span&gt;@Luuk1983) by &lt;span class=&quot;mention&quot;&gt;@Luuk1983&lt;/span&gt; in &lt;a href=&quot;https://github.com/Luuk1983/Umbraco.Community.UmbraDesktop/pull/96&quot; class=&quot;inline-onebox --gh-status-merged&quot;&gt;Show the site&#x27;s name on the desktop (#93) - Pull Request #96 - Luuk1983/Umbraco.Community.UmbraDesktop - GitHub&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Add attached windows and the live preview (&lt;span class=&quot;hashtag-raw&quot;&gt;#94&lt;/span&gt;@Luuk1983 &lt;span class=&quot;hashtag-raw&quot;&gt;#21&lt;/span&gt;) by &lt;span class=&quot;mention&quot;&gt;@Luuk1983&lt;/span&gt; in &lt;a href=&quot;https://github.com/Luuk1983/Umbraco.Community.UmbraDesktop/pull/98&quot; class=&quot;inline-onebox --gh-status-merged&quot;&gt;Add attached windows and the live preview (#94, #21) - Pull Request #98 - Luuk1983/Umbraco.Community.UmbraDesktop - GitHub&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Fix touch input: windows can&#x2019;t be dragged by tou@Luuk1983h (&lt;span class=&quot;hashtag-raw&quot;&gt;#97&lt;/span&gt;) by &lt;span class=&quot;mention&quot;&gt;@Luuk1983&lt;/span&gt; in &lt;a href=&quot;https://github.com/Luuk1983/Umbraco.Community.UmbraDesktop/pull/99&quot; class=&quot;inline-onebox --gh-status-merged&quot;&gt;Fix touch input: windows can&#x27;t be dragged by touch (#97) - Pull Request #99 - Luuk1983/Umbraco.Community.UmbraDesktop - GitHub&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Show a notification once on the desktop, not once in every wi@Luuk1983dow (&lt;span class=&quot;hashtag-raw&quot;&gt;#72&lt;/span&gt;) by &lt;span class=&quot;mention&quot;&gt;@Luuk1983&lt;/span&gt; in &lt;a href=&quot;https://github.com/Luuk1983/Umbraco.Community.UmbraDesktop/pull/100&quot; class=&quot;inline-onebox --gh-status-merged&quot;&gt;Show a notification once on the desktop, not once in every window (#72) - Pull Request #100 - Luuk1983/Umbraco.Community.UmbraDesktop - GitHub&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Record what the media drag and paste s@Luuk1983ike found by &lt;span class=&quot;mention&quot;&gt;@Luuk1983&lt;/span&gt; in &lt;a href=&quot;https://github.com/Luuk1983/Umbraco.Community.UmbraDesktop/pull/107&quot; class=&quot;inline-onebox --gh-status-merged&quot;&gt;Record what the media drag and paste spike found - Pull Request #107 - Luuk1983/Umbraco.Community.UmbraDesktop - GitHub&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Let users arrange their la@Luuk1983ncher (&lt;span class=&quot;hashtag-raw&quot;&gt;#59&lt;/span&gt;) by &lt;span class=&quot;mention&quot;&gt;@Luuk1983&lt;/span&gt; in &lt;a href=&quot;https://github.com/Luuk1983/Umbraco.Community.UmbraDesktop/pull/106&quot; class=&quot;inline-onebox --gh-status-merged&quot;&gt;Let users arrange their launcher (#59) - Pull Request #106 - Luuk1983/Umbraco.Community.UmbraDesktop - GitHub&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Reopen the windows you had open when you come back by &lt;a class=&quot;mention&quot; href=&quot;https://forum.umbraco.com/u/suedeapple&quot;&gt;@suedeapple&lt;/a&gt; in &lt;a href=&quot;https://github.com/Luuk1983/Umbraco.Community.UmbraDesktop/pull/102&quot; class=&quot;inline-onebox --gh-status-merged&quot;&gt;Reopen the windows you had open when you come back - Pull Request #102 - Luuk1983/Umbraco.Community.UmbraDesktop - GitHub&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Add Remote content: another instance&#x2019;s content, r@Luuk1983ad-only (&lt;span class=&quot;hashtag-raw&quot;&gt;#105&lt;/span&gt;) by &lt;span class=&quot;mention&quot;&gt;@Luuk1983&lt;/span&gt; in &lt;a href=&quot;https://github.com/Luuk1983/Umbraco.Community.UmbraDesktop/pull/110&quot; class=&quot;inline-onebox --gh-status-merged&quot;&gt;Add Remote content: another instance&#x27;s content, read-only (#105) - Pull Request #110 - Luuk1983/Umbraco.Community.UmbraDesktop - GitHub&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Give an app window keyboard focus whenever it becomes active by &lt;a class=&quot;mention&quot; href=&quot;https://forum.umbraco.com/u/suedeapple&quot;&gt;@suedeapple&lt;/a&gt; in &lt;a href=&quot;https://github.com/Luuk1983/Umbraco.Community.UmbraDesktop/pull/91&quot; class=&quot;inline-onebox --gh-status-merged&quot;&gt;Give an app window keyboard focus whenever it becomes active - Pull Request #91 - Luuk1983/Umbraco.Community.UmbraDesktop - GitHub&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Turn the README into a landing page and move the docs &lt;span class=&quot;mention&quot;&gt;@Luuk1983nto&lt;/span&gt; guides (&lt;span class=&quot;hashtag-raw&quot;&gt;#78&lt;/span&gt;) by &lt;span class=&quot;mention&quot;&gt;@Luuk1983&lt;/span&gt; in &lt;a href=&quot;https://github.com/Luuk1983/Umbraco.Community.UmbraDesktop/pull/113&quot; class=&quot;inline-onebox --gh-status-merged&quot;&gt;Turn the README into a landing page and move the docs into guides (#78) - Pull Request #113 - Luuk1983/Umbraco.Community.UmbraDesktop - GitHub&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Add the Accessories add-on: Notepad, Paint, Calculator, Clock and more by &lt;a class=&quot;mention&quot; href=&quot;https://forum.umbraco.com/u/suedeapple&quot;&gt;@suedeapple&lt;/a&gt; in &lt;a href=&quot;https://github.com/Luuk1983/Umbraco.Community.UmbraDesktop/pull/88&quot; class=&quot;inline-onebox --gh-status-merged&quot;&gt;Add the Accessories add-on: Notepad, Paint, Calculator, Clock and more - Pull Request #88 - Luuk1983/Umbraco.Community.UmbraDesktop - GitHub&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Add Solitaire to the Ente@Luuk1983tainment package by &lt;span class=&quot;mention&quot;&gt;@Luuk1983&lt;/span&gt; in &lt;a href=&quot;https://github.com/Luuk1983/Umbraco.Community.UmbraDesktop/pull/116&quot; class=&quot;inline-onebox --gh-status-merged&quot;&gt;Add Solitaire to the Entertainment package - Pull Request #116 - Luuk1983/Umbraco.Community.UmbraDesktop - GitHub&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Add the Help app: installed packages&#x2019; docs o@Luuk1983 the desktop (&lt;span class=&quot;hashtag-raw&quot;&gt;#55&lt;/span&gt;) by &lt;span class=&quot;mention&quot;&gt;@Luuk1983&lt;/span&gt; in &lt;a href=&quot;https://github.com/Luuk1983/Umbraco.Community.UmbraDesktop/pull/117&quot; class=&quot;inline-onebox --gh-status-merged&quot;&gt;Add the Help app: installed packages&#x27; docs on the desktop (#55) - Pull Request #117 - Luuk1983/Umbraco.Community.UmbraDesktop - GitHub&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Prepare@Luuk1983the 17.3.0 release by &lt;span class=&quot;mention&quot;&gt;@Luuk1983&lt;/span&gt; in &lt;a href=&quot;https://github.com/Luuk1983/Umbraco.Community.UmbraDesktop/pull/118&quot; class=&quot;inline-onebox --gh-status-merged&quot;&gt;Prepare the 17.3.0 release - Pull Request #118 - Luuk1983/Umbraco.Community.UmbraDesktop - GitHub&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;17.3.0 screenshots: launcher retake and an all-games@Luuk1983Entertainment shot by &lt;span class=&quot;mention&quot;&gt;@Luuk1983&lt;/span&gt; in &lt;a href=&quot;https://github.com/Luuk1983/Umbraco.Community.UmbraDesktop/pull/120&quot; class=&quot;inline-onebox&quot;&gt;17.3.0 screenshots: launcher retake and an all-games Entertainment shot by Luuk1983 &#xB7; Pull Request #120 &#xB7; Luuk1983/Umbraco.Community.UmbraDesktop &#xB7; GitHub&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;&lt;a name=&quot;p-20216-new-contributors-10&quot; class=&quot;anchor&quot; href=&quot;https://forum.umbraco.com#p-20216-new-contributors-10&quot; aria-label=&quot;Heading link&quot;&gt;&lt;/a&gt;New Contributors&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a class=&quot;mention&quot; href=&quot;https://forum.umbraco.com/u/suedeapple&quot;&gt;@suedeapple&lt;/a&gt; made their first contribution in &lt;a href=&quot;https://github.com/Luuk1983/Umbraco.Community.UmbraDesktop/pull/82&quot; class=&quot;inline-onebox&quot;&gt;[ENTERTAINMENT] Add Snake to the Entertainment games by suedeapple &#xB7; Pull Request #82 &#xB7; Luuk1983/Umbraco.Community.UmbraDesktop &#xB7; GitHub&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Full Changelog&lt;/strong&gt;: &lt;a href=&quot;https://github.com/Luuk1983/Umbraco.Community.UmbraDesktop/compare/v17.2.0...v17.3.0&quot; class=&quot;inline-onebox&quot;&gt;Comparing v17.2.0...v17.3.0 &#xB7; Luuk1983/Umbraco.Community.UmbraDesktop &#xB7; GitHub&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2&gt;&lt;a name=&quot;p-20216-h-11&quot; class=&quot;anchor&quot; href=&quot;https://forum.umbraco.com#p-20216-h-11&quot; aria-label=&quot;Heading link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;            &lt;p&gt;&lt;small&gt;3 posts - 3 participants&lt;/small&gt;&lt;/p&gt;&#xA;            &lt;p&gt;&lt;a href=&quot;https://forum.umbraco.com/t/time-for-more-umbradesktop-madness-v17-3-0-is-out/8643&quot;&gt;Read full topic&lt;/a&gt;&lt;/p&gt;]]></description>
                    <pubDate>Sun, 11 Oct 2026 09:01:36 Z</pubDate>
                        <category>community</category>
                        <category>forum</category>
                </item>
                <item>
                    <guid>https://forum.umbraco.com/t/forms-guard-for-umbraco-forms-released/8640</guid>
                    <title>Forms Guard for Umbraco Forms released!</title>
                    <link>https://forum.umbraco.com/t/forms-guard-for-umbraco-forms-released/8640</link>
                    <description><![CDATA[&lt;p&gt;I launched V1 of a new Umbraco Forms package I initially created at the London Umbraco Meetup AI Hackathon a few months ago.&lt;/p&gt;&#xA;&lt;p&gt;So let me introduce to you Forms Guard.&lt;/p&gt;&#xA;&lt;aside class=&quot;onebox allowlistedgeneric&quot; data-onebox-src=&quot;https://marketplace.umbraco.com/package/cogworks.umbraco.formsguard&quot;&gt;&#xA;  &lt;header class=&quot;source&quot;&gt;&#xA;      &lt;img src=&quot;https://forum.umbraco.com/uploads/default/original/1X/9595a9190a535ecc55fc3fa26df9036e44bd635d.png&quot; class=&quot;site-icon&quot; alt=&quot;&quot; data-dominant-color=&quot;505DBA&quot; width=&quot;32&quot; height=&quot;32&quot;&gt;&#xA;&#xA;      &lt;a href=&quot;https://marketplace.umbraco.com/package/cogworks.umbraco.formsguard&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;marketplace.umbraco.com&lt;/a&gt;&#xA;  &lt;/header&gt;&#xA;&#xA;  &lt;article class=&quot;onebox-body&quot;&gt;&#xA;    &lt;img width=&quot;256&quot; height=&quot;256&quot; src=&quot;https://forum.umbraco.com/uploads/default/original/2X/d/d99414be982809fb3858b0252fda4d8a990286fe.png&quot; class=&quot;thumbnail onebox-avatar&quot; alt=&quot;&quot; data-dominant-color=&quot;727DC9&quot;&gt;&#xA;&#xA;&lt;h3&gt;&lt;a href=&quot;https://marketplace.umbraco.com/package/cogworks.umbraco.formsguard&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Forms Guard: spam filtering for Umbraco Forms | Umbraco Marketplace&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;  &lt;p&gt;Forms Guard: spam filtering for Umbraco Forms is listed on the official Umbraco Marketplace | Information, links, and install instructions&lt;/p&gt;&#xA;&#xA;&#xA;  &lt;/article&gt;&#xA;&#xA;  &lt;div class=&quot;onebox-metadata&quot;&gt;&#xA;    &#xA;    &#xA;  &lt;/div&gt;&#xA;&#xA;  &lt;div style=&quot;clear: both&quot;&gt;&lt;/div&gt;&#xA;&lt;/aside&gt;&#xA;&#xA;&lt;p&gt;The premise:&lt;/p&gt;&#xA;&lt;p&gt;Most bot spam is already handled by honeypots and reCAPTCHA. But, what still gets through is the polite, well-written sales pitch: SEO offers, web design, lead generation. Some are created by people, but more and more these days are written by AI. They&#x2019;re hard to filter with keyword rules without also catching genuine enquiries, and for many organisations a blocked genuine enquiry costs more than a spam email.&lt;/p&gt;&#xA;&lt;p&gt;So, Forms Guard doesn&#x2019;t block anything when the form is submitted. Every entry is saved as normal in Umbraco Forms and the visitor sees the usual thank-you message. In the background, some simple rules run first: honeypot, blocked domains, blocked phrases.&lt;/p&gt;&#xA;&lt;p&gt;If none of those decide the entry, an AI model is asked a few plain questions about it, such as whether it&#x2019;s an unsolicited sales pitch or a genuine enquiry.&lt;/p&gt;&#xA;&lt;p&gt;You can set thresholds in the package which then approve the entry, quarantine it, or leave it for a person to review. Notification emails only go out when an entry is approved, and quarantined entries can be restored.&lt;/p&gt;&#xA;&lt;p&gt;For compliance and data protection, only the fields you allow are sent to the model, email addresses are reduced to just their domain, and the package&#x2019;s own tables don&#x2019;t store any field values, so no personal data gets sent to any external models.&lt;/p&gt;&#xA;&lt;p&gt;The default model is the new trendy kid in town - Jev from TypeSafe AI - and you can also use Umbraco.AI if you aren&#x2019;t allowed to use Jev from a security perspective. It needs Umbraco 17 and .NET 10.&lt;/p&gt;&#xA;&lt;p&gt;I&#x2019;d love it if some people could try it out and let me know a) if it works and b) is it useful!!!&lt;/p&gt;&#xA;            &lt;p&gt;&lt;small&gt;1 post - 1 participant&lt;/small&gt;&lt;/p&gt;&#xA;            &lt;p&gt;&lt;a href=&quot;https://forum.umbraco.com/t/forms-guard-for-umbraco-forms-released/8640&quot;&gt;Read full topic&lt;/a&gt;&lt;/p&gt;]]></description>
                    <pubDate>Sat, 10 Oct 2026 18:15:37 Z</pubDate>
                        <category>community</category>
                        <category>forum</category>
                </item>
                <item>
                    <guid>https://forum.umbraco.com/t/new-package-crumpled-verifyownership/8639</guid>
                    <title>New Package - Crumpled.VerifyOwnership</title>
                    <link>https://forum.umbraco.com/t/new-package-crumpled-verifyownership/8639</link>
                    <description><![CDATA[&lt;p&gt;When somebody in an organisation, or your agency or another third-party agency wants to &#x27;claim ownership of a website &#x2019; in order to do Google/Bing Search Console voodoo/analsis (delete as applicable)&lt;/p&gt;&#xA;&lt;p&gt;Then of course, you just set up a TXT DNS entry on the domain that unequivocally proves the individual has ownership&#x2026; and you forget about it. And of course they remain verified forever whether they continue to work there or not&#x2026; (Add it now as a regular maintenance check!)&lt;/p&gt;&#xA;&lt;p&gt;Or, sometimes, you don&#x2019;t have access to the DNS, and the client doesn&#x2019;t want to go through their own IT department &#x2018;for some reasons&#x2019; and they ask you to just add a html file to root of the site to prove ownership&#x2026; and each deployment removes it, and when it rechecks they lose access (not often)&#x2026; and with fancy build processes these days (what do you mean I can&#x2019;t use FTP), it&#x2019;s just easier to add it to source control&#x2026; and then after a while there are a ton of these html files in the root of the site, just containing ids, and nobody knows which one links to which person and whether they still work here or not&#x2026; It&#x2019;s a chore!&lt;/p&gt;&#xA;&lt;p&gt;In that &#x2018;niche&#x2019; situation&#x2026; there is now Crumpled.VerifyOwnership!&lt;/p&gt;&#xA;&lt;p&gt;An Umbraco Backoffice dashboard/workspace that allows you to add your unique Google or Bing Search Console IDs, along with your name (so we know who to remove in the future). When added, it serves the 200 response the services look for during the HTML file verification process.&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/8/8da35e31907fd859310202571e6e2d1c222c7313.png&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/8da35e31907fd859310202571e6e2d1c222c7313&quot; title=&quot;SiteVerification&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/8/8da35e31907fd859310202571e6e2d1c222c7313_2_690x296.png&quot; alt=&quot;SiteVerification&quot; data-base62-sha1=&quot;kcZkVuUrw4IxrmgD0wGf2EijoK7&quot; width=&quot;690&quot; height=&quot;296&quot; srcset=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/8/8da35e31907fd859310202571e6e2d1c222c7313_2_690x296.png, https://forum.umbraco.com/uploads/default/optimized/2X/8/8da35e31907fd859310202571e6e2d1c222c7313_2_1035x444.png 1.5x, https://forum.umbraco.com/uploads/default/optimized/2X/8/8da35e31907fd859310202571e6e2d1c222c7313_2_1380x592.png 2x&quot; data-dominant-color=&quot;FAFAFA&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;p&gt;More importantly you can see who is verified and remove them when they leave, and it doesn&#x2019;t involve a deployment, or cleaning up HTML files, or asking IT departments to set up a DNS entry&#x2026;&lt;/p&gt;&#xA;&lt;p&gt;Think of it as the entrance stall to the music festival: it fits the wristband; you show the wristband to Google to verify you have bought a ticket&#x2026; and let you in &lt;span class=&quot;hashtag-raw&quot;&gt;#H5YR&lt;/span&gt; - or at least that&#x2019;s what I was thinking for the logo:&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/1/113b52f90565501a6e07da0959316300bc4164a1.png&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/113b52f90565501a6e07da0959316300bc4164a1&quot; title=&quot;Wristband&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/1/113b52f90565501a6e07da0959316300bc4164a1_2_500x500.png&quot; alt=&quot;Wristband&quot; data-base62-sha1=&quot;2srdxeeJ6QN63XJOE4NEydLOysh&quot; width=&quot;500&quot; height=&quot;500&quot; srcset=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/1/113b52f90565501a6e07da0959316300bc4164a1_2_500x500.png, https://forum.umbraco.com/uploads/default/original/2X/1/113b52f90565501a6e07da0959316300bc4164a1.png 1.5x, https://forum.umbraco.com/uploads/default/original/2X/1/113b52f90565501a6e07da0959316300bc4164a1.png 2x&quot; data-dominant-color=&quot;C75A6F&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;p&gt;(appreciate I&#x2019;ve overthought that, and yes, as ever, more effort went into the logo than the package)&lt;/p&gt;&#xA;&lt;p&gt;Available from the Marketplace and all good Umbraco Package retailers. Happy verifying!&lt;/p&gt;&#xA;&lt;aside class=&quot;onebox allowlistedgeneric&quot; data-onebox-src=&quot;https://marketplace.umbraco.com/package/crumpled.verifyownership&quot;&gt;&#xA;  &lt;header class=&quot;source&quot;&gt;&#xA;      &lt;img src=&quot;https://forum.umbraco.com/uploads/default/original/1X/9595a9190a535ecc55fc3fa26df9036e44bd635d.png&quot; class=&quot;site-icon&quot; alt=&quot;&quot; data-dominant-color=&quot;505DBA&quot; width=&quot;32&quot; height=&quot;32&quot;&gt;&#xA;&#xA;      &lt;a href=&quot;https://marketplace.umbraco.com/package/crumpled.verifyownership&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;marketplace.umbraco.com&lt;/a&gt;&#xA;  &lt;/header&gt;&#xA;&#xA;  &lt;article class=&quot;onebox-body&quot;&gt;&#xA;    &lt;img width=&quot;500&quot; height=&quot;500&quot; src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/1/113b52f90565501a6e07da0959316300bc4164a1_2_500x500.png&quot; class=&quot;thumbnail onebox-avatar&quot; alt=&quot;&quot; data-dominant-color=&quot;C75A6F&quot;&gt;&#xA;&#xA;&lt;h3&gt;&lt;a href=&quot;https://marketplace.umbraco.com/package/crumpled.verifyownership&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Crumpled Verify Ownership | Umbraco Marketplace&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;  &lt;p&gt;Crumpled Verify Ownership is listed on the official Umbraco Marketplace | Information, links, and install instructions&lt;/p&gt;&#xA;&#xA;&#xA;  &lt;/article&gt;&#xA;&#xA;  &lt;div class=&quot;onebox-metadata&quot;&gt;&#xA;    &#xA;    &#xA;  &lt;/div&gt;&#xA;&#xA;  &lt;div style=&quot;clear: both&quot;&gt;&lt;/div&gt;&#xA;&lt;/aside&gt;&#xA;&#xA;            &lt;p&gt;&lt;small&gt;1 post - 1 participant&lt;/small&gt;&lt;/p&gt;&#xA;            &lt;p&gt;&lt;a href=&quot;https://forum.umbraco.com/t/new-package-crumpled-verifyownership/8639&quot;&gt;Read full topic&lt;/a&gt;&lt;/p&gt;]]></description>
                    <pubDate>Sat, 10 Oct 2026 18:15:25 Z</pubDate>
                        <category>community</category>
                        <category>forum</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/crumpled.verifyownership</guid>
                    <title>Crumpled.VerifyOwnership</title>
                    <link>https://marketplace.umbraco.com/package/crumpled.verifyownership</link>
                    <description><![CDATA[Google Search Console site-ownership verification for Umbraco - automatically serves the Google verification HTML file and provides a backoffice UI to manage verification codes without a redeploy.]]></description>
                    <pubDate>Sat, 10 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=nvC9SwGlEio</guid>
                    <title>Umbraco AI - Create bilingual blog</title>
                    <link>https://www.youtube.com/watch?v=nvC9SwGlEio</link>
                    <description><![CDATA[Your English website shouldn&#x2019;t be a translation. In this demo, Umbraco Copilot writes a complete blog post from one prompt. It writes the Dutch version first, then fills in the English version of the same page, with its own search terms, tone and examples.&#xA;&#xA;First, Copilot pulls up the content model and the True People writing guidelines. Then it fills in every field and builds the content blocks in Umbraco, for both languages. It&#x2019;s fully automated, from briefing to finished page.]]></description>
                    <pubDate>Fri, 09 Oct 2026 12:13:31 Z</pubDate>
                        <category>community</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://samsolutions.medium.com/umbraco-vs-sitecore-which-cms-is-better-for-your-business-f51183ca533d?source=rss------umbraco-5</guid>
                    <title>Umbraco vs Sitecore: Which CMS Is Better for Your Business?</title>
                    <link>https://samsolutions.medium.com/umbraco-vs-sitecore-which-cms-is-better-for-your-business-f51183ca533d?source=rss------umbraco-5</link>
                    <description><![CDATA[&lt;div class=&quot;medium-feed-item&quot;&gt;&lt;p class=&quot;medium-feed-image&quot;&gt;&lt;a href=&quot;https://samsolutions.medium.com/umbraco-vs-sitecore-which-cms-is-better-for-your-business-f51183ca533d?source=rss------umbraco-5&quot;&gt;&lt;img src=&quot;https://cdn-images-1.medium.com/max/1672/1*nsqiUl7fLn_WzFwWOcbsBQ.png&quot; width=&quot;1672&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;medium-feed-snippet&quot;&gt;The Umbraco vs Sitecore decision depends on your business needs: Umbraco is usually the better fit when you want flexible content&amp;#x2026;&lt;/p&gt;&lt;p class=&quot;medium-feed-link&quot;&gt;&lt;a href=&quot;https://samsolutions.medium.com/umbraco-vs-sitecore-which-cms-is-better-for-your-business-f51183ca533d?source=rss------umbraco-5&quot;&gt;Continue reading on Medium &#xBB;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;]]></description>
                    <pubDate>Fri, 09 Oct 2026 10:26:35 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/cogworks.umbraco.formsguard.umbracoai</guid>
                    <title>Cogworks.Umbraco.FormsGuard.UmbracoAI</title>
                    <link>https://marketplace.umbraco.com/package/cogworks.umbraco.formsguard.umbracoai</link>
                    <description><![CDATA[Optional decision provider for Forms Guard that uses any AI model configured through an Umbraco.AI profile, instead of the default TypeSafe provider.]]></description>
                    <pubDate>Fri, 09 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/cogworks.umbraco.formsguard</guid>
                    <title>Cogworks.Umbraco.FormsGuard</title>
                    <link>https://marketplace.umbraco.com/package/cogworks.umbraco.formsguard</link>
                    <description><![CDATA[Stops AI-written spam in Umbraco Forms. Entries are saved as normal, then checked in the background by hard rules and an AI decision provider, and approved, quarantined or held for review. Nothing is blocked at submit time and no entry is lost.]]></description>
                    <pubDate>Fri, 09 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/usync.ai.complete</guid>
                    <title>uSync.AI.Complete</title>
                    <link>https://marketplace.umbraco.com/package/usync.ai.complete</link>
                    <description><![CDATA[Push and pull Umbraco.AI connections, profiles, prompts and agents between servers with uSync.Complete, and Umbraco.AI agent tools that publish content, pull content and take restore points, each checked against the acting user&#x27;s permissions. Needs uSync.Complete.]]></description>
                    <pubDate>Fri, 09 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/usync.ai.prompt</guid>
                    <title>uSync.AI.Prompt</title>
                    <link>https://marketplace.umbraco.com/package/usync.ai.prompt</link>
                    <description><![CDATA[uSync handler and serializer for Umbraco.AI.Prompt prompts, so they travel between servers with the rest of your uSync files.]]></description>
                    <pubDate>Fri, 09 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/usync.ai.agent</guid>
                    <title>uSync.AI.Agent</title>
                    <link>https://marketplace.umbraco.com/package/usync.ai.agent</link>
                    <description><![CDATA[uSync handler and serializer for Umbraco.AI.Agent agents, including their tools, contexts and per-user-group tool permissions.]]></description>
                    <pubDate>Fri, 09 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.search.provider.azureai</guid>
                    <title>Umbraco.Community.Search.Provider.AzureAI</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.search.provider.azureai</link>
                    <description><![CDATA[An Azure AI Search provider for Umbraco Search. Indexes content in Azure AI Search and serves full text search, filters, facets and sorting, configured from appsettings with automatic field declarations from your content types.]]></description>
                    <pubDate>Fri, 09 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/usync.ai.sync</guid>
                    <title>uSync.AI.Sync</title>
                    <link>https://marketplace.umbraco.com/package/usync.ai.sync</link>
                    <description><![CDATA[uSync handlers and serializers for Umbraco.AI connections, guardrails, contexts, profiles and settings. API keys are never written to disk.]]></description>
                    <pubDate>Fri, 09 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/usync.ai.tools</guid>
                    <title>uSync.AI.Tools</title>
                    <link>https://marketplace.umbraco.com/package/usync.ai.tools</link>
                    <description><![CDATA[Umbraco.AI agent tools that run uSync reports, exports and imports, each checked against the acting user&#x27;s uSync access.]]></description>
                    <pubDate>Fri, 09 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.logexplorer</guid>
                    <title>Umbraco.Community.LogExplorer</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.logexplorer</link>
                    <description><![CDATA[A rich log explorer for the Umbraco backoffice and a drop-in replacement for the built-in Log Viewer. Install the package and it takes the Log Viewer&#x27;s place under Settings, reading the same log files with no configuration. Click values, fields, histogram bars and patterns to build filters without knowing a query language, follow a request in one click, and see the query it runs whenever you want it.]]></description>
                    <pubDate>Fri, 09 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/lait.umbraco.awesome.seo</guid>
                    <title>Lait.Umbraco.Awesome.SEO</title>
                    <link>https://marketplace.umbraco.com/package/lait.umbraco.awesome.seo</link>
                    <description><![CDATA[SEO report and action plan inside the Umbraco backoffice. Crawls your site and up to 5 competitors on a schedule, runs 38 SEO checks, gives a health score, shows what changed since last time, compares you side by side with your competitors and builds a prioritised action plan with links straight to the pages in Umbraco. Free and works without any external service. Optional AI (Claude and/or Jev by TypeSafe) explains the changes and makes the plan concrete, with a monthly USD cap. Dashboard UI in Danish.]]></description>
                    <pubDate>Fri, 09 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://medium.com/@ravimotha/chicago-what-a-wonderful-town-9d9e7b2ce36e?source=rss------umbraco-5</guid>
                    <title>Chicago: What a Wonderful Town</title>
                    <link>https://medium.com/@ravimotha/chicago-what-a-wonderful-town-9d9e7b2ce36e?source=rss------umbraco-5</link>
                    <description><![CDATA[&lt;div class=&quot;medium-feed-item&quot;&gt;&lt;p class=&quot;medium-feed-image&quot;&gt;&lt;a href=&quot;https://medium.com/@ravimotha/chicago-what-a-wonderful-town-9d9e7b2ce36e?source=rss------umbraco-5&quot;&gt;&lt;img src=&quot;https://cdn-images-1.medium.com/max/2160/1*oy8zixsHMDq4cYkkHSVBxA@2x.jpeg&quot; width=&quot;2160&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;medium-feed-snippet&quot;&gt;Photo by Aveedibya Dey on Unsplash&lt;/p&gt;&lt;p class=&quot;medium-feed-link&quot;&gt;&lt;a href=&quot;https://medium.com/@ravimotha/chicago-what-a-wonderful-town-9d9e7b2ce36e?source=rss------umbraco-5&quot;&gt;Continue reading on Medium &#xBB;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;]]></description>
                    <pubDate>Thu, 08 Oct 2026 22:56:41 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://medium.com/@ravimotha/chicago-what-a-wonderful-town-9d9e7b2ce36e?source=rss-8e76be83b03f------2</guid>
                    <title>Chicago: What a Wonderful Town</title>
                    <link>https://medium.com/@ravimotha/chicago-what-a-wonderful-town-9d9e7b2ce36e?source=rss-8e76be83b03f------2</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Thu, 08 Oct 2026 22:56:41 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://github.com/abjerner/Limbo.Umbraco.TextBox/releases/tag/v17.0.0-alpha003</guid>
                    <title>Limbo.Umbraco.TextBox 17.0.0-alpha003</title>
                    <link>https://github.com/abjerner/Limbo.Umbraco.TextBox/releases/tag/v17.0.0-alpha003</link>
                    <description><![CDATA[Limbo Textbox&#xA0;(or&#xA0;Limbo.Umbraco.TextBox) is a package that adds new textbox and textarea property editors for Umbraco 10&#x2B;. While having similar functionality to the build in property editors, this package adds a few extra features.]]></description>
                    <pubDate>Thu, 08 Oct 2026 15:44:24 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://forum.umbraco.com/t/advanced-permissions-release-keeping-up-to-date-ai-for-umbraco-18/8620</guid>
                    <title>Advanced Permissions release - keeping up to date &#x2B; AI for Umbraco 18!</title>
                    <link>https://forum.umbraco.com/t/advanced-permissions-release-keeping-up-to-date-ai-for-umbraco-18/8620</link>
                    <description><![CDATA[&lt;p&gt;It&#x2019;s time for a double (or triple depending how you look at it) updates for Advanced Permissions! The main packages for v17 and v18 are updated and the optional AI add-on is finally ported to Umbraco 18!&lt;/p&gt;&#xA;&lt;h2&gt;&lt;a name=&quot;p-20162-the-main-package-updates-1&quot; class=&quot;anchor&quot; href=&quot;https://forum.umbraco.com#p-20162-the-main-package-updates-1&quot; aria-label=&quot;Heading link&quot;&gt;&lt;/a&gt;The main package updates&lt;/h2&gt;&#xA;&lt;p&gt;Advanced Permissions v17.4.0 and v18.2.0 introduce a very important and cool feature: cross-browser and tab notifications to keep content up to date (for the nerds: a SignalR connection). This meant that the permissions can react to changes made by other on the fly.&lt;/p&gt;&#xA;&lt;p&gt;For instance, when you edit a permission, the access viewer will immediately update the moment the changed permissions are saved. This makes sure that the access viewer is always up to date.&lt;/p&gt;&#xA;&lt;p&gt;The permission editors themselves will also update when the permissions are changed from somewhere else (an other tab, an other browser window, an other editor, AI, you name it). This gives us the oppertunity to also spot possible conflicts. If someone has changed and stored a permission that you have as an unsaved change it wil now alert you:&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/1/14a50d0eb0511d7d6e6e798d65c519f7d2d55871.png&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/14a50d0eb0511d7d6e6e798d65c519f7d2d55871&quot; title=&quot;image&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/1/14a50d0eb0511d7d6e6e798d65c519f7d2d55871_2_690x231.png&quot; alt=&quot;image&quot; data-base62-sha1=&quot;2WDavMdbt4NE9KyOVVAtWofJ1wB&quot; width=&quot;690&quot; height=&quot;231&quot; srcset=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/1/14a50d0eb0511d7d6e6e798d65c519f7d2d55871_2_690x231.png, https://forum.umbraco.com/uploads/default/optimized/2X/1/14a50d0eb0511d7d6e6e798d65c519f7d2d55871_2_1035x346.png 1.5x, https://forum.umbraco.com/uploads/default/optimized/2X/1/14a50d0eb0511d7d6e6e798d65c519f7d2d55871_2_1380x462.png 2x&quot; data-dominant-color=&quot;F6F5EF&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;p&gt;So this is useful for everybody, but expecially when you are working with multiple windows in my &lt;a href=&quot;https://github.com/Luuk1983/Umbraco.Community.UmbraDesktop&quot;&gt;UmbraDesktop&lt;/a&gt; package.&lt;/p&gt;&#xA;&lt;p&gt;Advanced permissions can be found in the marketplace: &lt;a href=&quot;https://marketplace.umbraco.com/package/umbraco.community.advancedpermissions&quot; class=&quot;inline-onebox&quot;&gt;Advanced Permissions for Umbraco | Umbraco Marketplace&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2&gt;&lt;a name=&quot;p-20162-advanced-permissions-ai-addon-2&quot; class=&quot;anchor&quot; href=&quot;https://forum.umbraco.com#p-20162-advanced-permissions-ai-addon-2&quot; aria-label=&quot;Heading link&quot;&gt;&lt;/a&gt;Advanced Permissions AI addon&lt;/h2&gt;&#xA;&lt;p&gt;The advanced permission optional AI addon is finally ported to Umbraco 18. It gives Umbraco CoPilot and the Umbraco CoPilot Workspace view tools to understand how advanced permissions work and how to audit permission questions.&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/5/5f0021fc74f6994ceb828ff7e316f1d252bac3f1.png&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/5f0021fc74f6994ceb828ff7e316f1d252bac3f1&quot; title=&quot;image&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/5/5f0021fc74f6994ceb828ff7e316f1d252bac3f1_2_690x307.png&quot; alt=&quot;image&quot; data-base62-sha1=&quot;dypDW1kBKfk8I9c9rKBP2WHJ9w5&quot; width=&quot;690&quot; height=&quot;307&quot; srcset=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/5/5f0021fc74f6994ceb828ff7e316f1d252bac3f1_2_690x307.png, https://forum.umbraco.com/uploads/default/optimized/2X/5/5f0021fc74f6994ceb828ff7e316f1d252bac3f1_2_1035x460.png 1.5x, https://forum.umbraco.com/uploads/default/optimized/2X/5/5f0021fc74f6994ceb828ff7e316f1d252bac3f1_2_1380x614.png 2x&quot; data-dominant-color=&quot;EDEDEF&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/2/224436aa98451e0eea324be0f1b126739f737ec9.png&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/224436aa98451e0eea324be0f1b126739f737ec9&quot; title=&quot;image&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/2/224436aa98451e0eea324be0f1b126739f737ec9_2_633x500.png&quot; alt=&quot;image&quot; data-base62-sha1=&quot;4T8nBUUmX0ZZiRwW4rb6INVjlj3&quot; width=&quot;633&quot; height=&quot;500&quot; srcset=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/2/224436aa98451e0eea324be0f1b126739f737ec9_2_633x500.png, https://forum.umbraco.com/uploads/default/optimized/2X/2/224436aa98451e0eea324be0f1b126739f737ec9_2_949x750.png 1.5x, https://forum.umbraco.com/uploads/default/original/2X/2/224436aa98451e0eea324be0f1b126739f737ec9.png 2x&quot; data-dominant-color=&quot;E7E7EB&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;p&gt;Advanced permissions - AI Copilot Tools can be found in the marketplace as well: &lt;a href=&quot;https://marketplace.umbraco.com/package/umbraco.community.advancedpermissions.ai&quot; class=&quot;inline-onebox&quot;&gt;Advanced Permissions for Umbraco &#x2014; AI Copilot Tools | Umbraco Marketplace&lt;/a&gt;&lt;/p&gt;&#xA;            &lt;p&gt;&lt;small&gt;1 post - 1 participant&lt;/small&gt;&lt;/p&gt;&#xA;            &lt;p&gt;&lt;a href=&quot;https://forum.umbraco.com/t/advanced-permissions-release-keeping-up-to-date-ai-for-umbraco-18/8620&quot;&gt;Read full topic&lt;/a&gt;&lt;/p&gt;]]></description>
                    <pubDate>Thu, 08 Oct 2026 11:16:02 Z</pubDate>
                        <category>community</category>
                        <category>forum</category>
                </item>
                <item>
                    <guid>https://bsky.app/profile/umbhost.net/post/3mxdzebdrxo2t</guid>
                    <title>UmbHost GreenStack MCP and Skills</title>
                    <link>https://bsky.app/profile/umbhost.net/post/3mxdzebdrxo2t</link>
                    <description><![CDATA[Your AI assistant now speaks GreenStack.&#xA;&#xA;One skill and two MCP servers: set up Umbraco 13 or 17 for GreenStack, deploy, scale and manage DNS in UmbPanel, all by chat. Free and open source.&#xA;&#xA;https://umbhost.net/blog/2026/10/meet-the-greenstack-ai-toolkit-one-skill-two-mcp-servers &#xA;&#xA;#Umbraco #GreenStack #MCP]]></description>
                    <pubDate>Thu, 08 Oct 2026 10:20:00 Z</pubDate>
                        <category>bluesky</category>
                        <category>community</category>
                        <category>social</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.Emply/releases/tag/v13.0.1</guid>
                    <title>Limbo.Umbraco.Emply 13.0.1</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.Emply/releases/tag/v13.0.1</link>
                    <description><![CDATA[Umbraco integration for the Emply API.]]></description>
                    <pubDate>Thu, 08 Oct 2026 06:42:13 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/husignal</guid>
                    <title>HuSignal</title>
                    <link>https://marketplace.umbraco.com/package/husignal</link>
                    <description><![CDATA[Microsoft Clarity analytics, behavioural insights and AI-assisted SEO reporting for the Umbraco backoffice.]]></description>
                    <pubDate>Thu, 08 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.documentblueprintsincontent</guid>
                    <title>Umbraco.Community.DocumentBlueprintsInContent</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.documentblueprintsincontent</link>
                    <description><![CDATA[Adds Document Blueprints to the Umbraco Content section, behind a dedicated user group permission, so editors can manage them without access to Settings. The Settings tree is left untouched.]]></description>
                    <pubDate>Thu, 08 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/usync.ai</guid>
                    <title>uSync.AI</title>
                    <link>https://marketplace.umbraco.com/package/usync.ai</link>
                    <description><![CDATA[uSync for Umbraco.AI. Sync AI connections, guardrails, contexts, profiles, settings, prompts and agents between environments as files, and give AI agents tools to run uSync reports, exports and imports.]]></description>
                    <pubDate>Thu, 08 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/usync.complete.ai</guid>
                    <title>uSync.Complete.AI</title>
                    <link>https://marketplace.umbraco.com/package/usync.complete.ai</link>
                    <description><![CDATA[uSync.Complete for Umbraco.AI. Everything in uSync.AI, plus push and pull of AI items between servers and AI agent tools that publish content, pull content and take restore points. Needs uSync.Complete.]]></description>
                    <pubDate>Thu, 08 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://shazwazza.com/post/examine-3101-and-401-released/</guid>
                    <title>Examine 3.10.1 and 4.0.1 released</title>
                    <link>https://shazwazza.com/post/examine-3101-and-401-released/</link>
                    <description><![CDATA[Examine 3.10.1 and 4.0.1 are out on NuGet now. Both are patch releases and the main reason for them is a fix for an analyzer issue that could cause queries to be parsed with the wrong analyzer.&#xA;The analyzer fix&#xA;This was reported in #613 and it&#x27;s been lurking for a long time, but it&#x27;s an edge case that only shows up if something uses the index&#x27;s analyzer before the index&#x27;s field value types have been resolved on startup. With a normal startup that doesn&#x27;t happen, which is why it hasn&#x27;t come up before. LuceneIndex.FieldAnalyzer is lazily created and cached, but the per-field analyzer mappings were populated lazily too, so if the analyzer was used first, the PerFieldAnalyzerWrapper would cache the default analyzer for those fields. That stuck around for the life of the index, so any searcher created from it kept using the default analyzer for fields that were configured to use something else.&#xA;So if you had a field configured with a KeywordAnalyzer, a native query like this:&#xA;someField:&quot;contentPage&quot;&#xA;&#xA;could end up parsed as:&#xA;someField:contentpage&#xA;&#xA;which is the StandardAnalyzer lower casing it, and then you get no results and a bit of head scratching.&#xA;The fix in #621 is quite small: the field value types are now resolved before the analyzer wrapper is constructed, so it can&#x27;t cache a fallback analyzer for a configured field. There&#x27;s a regression test for it too.&#xA;Other changes&#xA;&#xA;A few small allocation improvements in OrderedDictionary.Values, LuceneIndex.GetFieldNames and LuceneSearchQueryBase. These came from the agentic perf workflows I have running on the repo, which open PRs for this sort of thing that I then review.&#xA;The docs site is updated for v4 and the v1/v2 docs are now marked as unsupported.&#xA;&#xA;A new release process&#xA;These are also the first releases shipped with the new release process. Previously I&#x27;d tag a release, wait for the build, download the zip of packages, unzip them and push them to NuGet from my terminal. Now pushing a tag builds the packages and then waits for me to approve the deployment in GitHub. Once approved, it publishes to NuGet with trusted publishing (so no API keys sitting around) and creates the GitHub release with the packages attached. I also switched versioning from GitVersion to MinVer, which just uses the tag, which is all I wanted anyway.&#xA;That&#x27;s mostly only interesting to me, but it does mean releases should happen a bit more often now that there&#x27;s less toil involved :)&#xA;Release notes for each are on GitHub: v3.10.1 and v4.0.1.&#xA;Happy Searching!]]></description>
                    <pubDate>Wed, 07 Oct 2026 16:21:57 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://shazwazza.com/articles/examine-3101-and-401-released/</guid>
                    <title>Examine 3.10.1 and 4.0.1 released</title>
                    <link>https://shazwazza.com/articles/examine-3101-and-401-released/</link>
                    <description><![CDATA[Examine 3.10.1 and 4.0.1 are out on NuGet now. Both are patch releases and the main reason for them is a fix for an analyzer issue that could cause queries to be parsed with the wrong analyzer.&#xA;The analyzer fix&#xA;This was reported in #613 and it&#x27;s been lurking for a long time, but it&#x27;s an edge case that only shows up if something uses the index&#x27;s analyzer before the index&#x27;s field value types have been resolved on startup. With a normal startup that doesn&#x27;t happen, which is why it hasn&#x27;t come up before. LuceneIndex.FieldAnalyzer is lazily created and cached, but the per-field analyzer mappings were populated lazily too, so if the analyzer was used first, the PerFieldAnalyzerWrapper would cache the default analyzer for those fields. That stuck around for the life of the index, so any searcher created from it kept using the default analyzer for fields that were configured to use something else.&#xA;So if you had a field configured with a KeywordAnalyzer, a native query like this:&#xA;someField:&quot;contentPage&quot;&#xA;&#xA;could end up parsed as:&#xA;someField:contentpage&#xA;&#xA;which is the StandardAnalyzer lower casing it, and then you get no results and a bit of head scratching.&#xA;The fix in #621 is quite small: the field value types are now resolved before the analyzer wrapper is constructed, so it can&#x27;t cache a fallback analyzer for a configured field. There&#x27;s a regression test for it too.&#xA;Other changes&#xA;&#xA;A few small allocation improvements in OrderedDictionary.Values, LuceneIndex.GetFieldNames and LuceneSearchQueryBase. These came from the agentic perf workflows I have running on the repo, which open PRs for this sort of thing that I then review.&#xA;The docs site is updated for v4 and the v1/v2 docs are now marked as unsupported.&#xA;&#xA;A new release process&#xA;These are also the first releases shipped with the new release process. Previously I&#x27;d tag a release, wait for the build, download the zip of packages, unzip them and push them to NuGet from my terminal. Now pushing a tag builds the packages and then waits for me to approve the deployment in GitHub. Once approved, it publishes to NuGet with trusted publishing (so no API keys sitting around) and creates the GitHub release with the packages attached. I also switched versioning from GitVersion to MinVer, which just uses the tag, which is all I wanted anyway.&#xA;That&#x27;s mostly only interesting to me, but it does mean releases should happen a bit more often now that there&#x27;s less toil involved :)&#xA;Release notes for each are on GitHub: v3.10.1 and v4.0.1.&#xA;Happy Searching!]]></description>
                    <pubDate>Wed, 07 Oct 2026 16:21:57 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://mattbrailsford.dev/estimating-the-co2-of-your-umbraco-ai-usage</guid>
                    <title>Estimating the CO2 of your Umbraco AI usage</title>
                    <link>https://mattbrailsford.dev/estimating-the-co2-of-your-umbraco-ai-usage</link>
                    <description><![CDATA[A new community package adds a CO2 tab to Umbraco AI Analytics, estimating the energy and CO2e of your AI chat usage with the EcoLogits method.]]></description>
                    <pubDate>Wed, 07 Oct 2026 13:08:53 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://umbraco.com/blog/uprofile-october-2026-asha-chaudhary/</guid>
                    <title>uProfile October 2026 - Asha Chaudhary</title>
                    <link>https://umbraco.com/blog/uprofile-october-2026-asha-chaudhary/</link>
                    <description><![CDATA[Meet Asha: Certified Master, MVP, and teacher to a new generation of Umbraco developers]]></description>
                    <pubDate>Wed, 07 Oct 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/jumoo.translationmanager.publicis</guid>
                    <title>Jumoo.TranslationManager.Publicis</title>
                    <link>https://marketplace.umbraco.com/package/jumoo.translationmanager.publicis</link>
                    <description><![CDATA[Publicis Translation Api Connector for Translation Manager for Umbraco]]></description>
                    <pubDate>Wed, 07 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://examinex.online/2026/10/07/rebuild-and-query-fixes-for-all-versions</guid>
                    <title>Rebuild and query fixes for all supported versions</title>
                    <link>https://examinex.online/2026/10/07/rebuild-and-query-fixes-for-all-versions</link>
                    <description><![CDATA[New ExamineX patch releases are out for every supported Umbraco version, fixing a few ways an index rebuild could silently drop documents, plus some query and backoffice fixes.]]></description>
                    <pubDate>Wed, 07 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.Skyfish/releases/tag/v17.0.0-alpha003</guid>
                    <title>Limbo.Umbraco.Skyfish 17.0.0-alpha003</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.Skyfish/releases/tag/v17.0.0-alpha003</link>
                    <description><![CDATA[Video picker for inserting Skyfish videos in Umbraco.]]></description>
                    <pubDate>Tue, 06 Oct 2026 13:24:55 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://github.com/abjerner/Limbo.Umbraco.MultiNodeTreePicker/releases/tag/v17.0.0-alpha003</guid>
                    <title>Limbo.Umbraco.MultiNodeTreePicker 17.0.0-alpha003</title>
                    <link>https://github.com/abjerner/Limbo.Umbraco.MultiNodeTreePicker/releases/tag/v17.0.0-alpha003</link>
                    <description><![CDATA[Umbraco package that extends the functionality of Umbraco&#x27;s build-in Multinode Treepicker property editor.]]></description>
                    <pubDate>Tue, 06 Oct 2026 13:12:10 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://github.com/abjerner/Limbo.Umbraco.Time/releases/tag/v17.0.0-alpha002</guid>
                    <title>Limbo.Umbraco.Time 17.0.0-alpha002</title>
                    <link>https://github.com/abjerner/Limbo.Umbraco.Time/releases/tag/v17.0.0-alpha002</link>
                    <description><![CDATA[Umbraco package featuring a number of property editors related to picking date and time.]]></description>
                    <pubDate>Tue, 06 Oct 2026 13:00:34 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.Seo/releases/tag/v17.0.0-alpha004</guid>
                    <title>Limbo.Umbraco.Seo 17.0.0-alpha004</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.Seo/releases/tag/v17.0.0-alpha004</link>
                    <description><![CDATA[SEO package for Umbraco.]]></description>
                    <pubDate>Tue, 06 Oct 2026 11:56:54 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.Boolean/releases/tag/v17.0.0-alpha002</guid>
                    <title>Limbo.Umbraco.Boolean 17.0.0-alpha002</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.Boolean/releases/tag/v17.0.0-alpha002</link>
                    <description><![CDATA[Limbo.Umbraco.Boolean is a small package for Umbraco that adds a new boolean property editor which some extra functionality compared to Umbraco&#x27;s build-in boolean property editor.]]></description>
                    <pubDate>Tue, 06 Oct 2026 09:53:44 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/arjo.umbracovisualeditor</guid>
                    <title>Arjo.UmbracoVisualEditor</title>
                    <link>https://marketplace.umbraco.com/package/arjo.umbracovisualeditor</link>
                    <description><![CDATA[Edit Umbraco content on the page itself: the Visual editor renders your real front end, with unsaved changes, and lets editors change text in place, move, add and edit blocks, and use Umbraco&#x27;s own property editors beside the page.]]></description>
                    <pubDate>Tue, 06 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbloggenerator</guid>
                    <title>umBlogGenerator</title>
                    <link>https://marketplace.umbraco.com/package/umbloggenerator</link>
                    <description><![CDATA[Generate SEO comparison blogs in Umbraco with AI &#x2014; peer research, logos, and Block Grid publishing.]]></description>
                    <pubDate>Tue, 06 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://umbraco.com/blog/security-advisory-october-6-2026-security-patches-for-umbraco-cms-now-available/</guid>
                    <title>Security Advisory, October 6, 2026: Security Patches for Umbraco CMS now available</title>
                    <link>https://umbraco.com/blog/security-advisory-october-6-2026-security-patches-for-umbraco-cms-now-available/</link>
                    <description><![CDATA[Security patches for Umbraco CMS version 17 and 18 are out. We recommend you to upgrade to the fixed versions.]]></description>
                    <pubDate>Tue, 06 Oct 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbuntu.automate.manualtriggerinput</guid>
                    <title>Umbuntu.Automate.ManualTriggerInput</title>
                    <link>https://marketplace.umbraco.com/package/umbuntu.automate.manualtriggerinput</link>
                    <description><![CDATA[Run Umbraco Automate automations by hand and give them input. Adds a Manual Trigger (with Input) and a &quot;Run with input&#x2026;&quot; backoffice action: editors type or paste text, such as a URL or a JSON object, and every step in the automation can use it as ${trigger.triggerInput}.]]></description>
                    <pubDate>Tue, 06 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://skrift.io/issues/#132</guid>
                    <title>Skrift Issue #132</title>
                    <link>https://skrift.io/issues/#132</link>
                    <description><![CDATA[Featuring guest posts by Sebastian Dammark on &quot;I built an entire desktop app so my friend would stop swearing&quot; and Dean Leigh on &quot;Giving an Umbraco package its own MCP server&quot;]]></description>
                    <pubDate>Tue, 06 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                        <category>skrift</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/dynamicdave.umbraco.contentschedule</guid>
                    <title>DynamicDave.Umbraco.ContentSchedule</title>
                    <link>https://marketplace.umbraco.com/package/dynamicdave.umbraco.contentschedule</link>
                    <description><![CDATA[See what is scheduled to publish or unpublish in the Umbraco backoffice: a dashboard with today, next 7 days, next 30 days and overdue items.]]></description>
                    <pubDate>Tue, 06 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/dynamicdave.umbraco.urlinspector</guid>
                    <title>DynamicDave.Umbraco.UrlInspector</title>
                    <link>https://marketplace.umbraco.com/package/dynamicdave.umbraco.urlinspector</link>
                    <description><![CDATA[Inspect a document&#x27;s URLs, incoming and outgoing redirects and canonical URL from the Umbraco backoffice, and test a URL&#x27;s status code without following redirects.]]></description>
                    <pubDate>Tue, 06 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/dynamicdave.umbraco.environmentindicator</guid>
                    <title>DynamicDave.Umbraco.EnvironmentIndicator</title>
                    <link>https://marketplace.umbraco.com/package/dynamicdave.umbraco.environmentindicator</link>
                    <description><![CDATA[Shows a colored environment banner (LOCAL, ACCEPTANCE/STAGING, PRODUCTION) in the Umbraco backoffice so editors always know which environment they are in.]]></description>
                    <pubDate>Tue, 06 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/dynamicdave.umbraco.quickcontenttools</guid>
                    <title>DynamicDave.Umbraco.QuickContentTools</title>
                    <link>https://marketplace.umbraco.com/package/dynamicdave.umbraco.quickcontenttools</link>
                    <description><![CDATA[Quick content tools for the Umbraco backoffice: copy a content item&#x27;s node ID, key and more with one click.]]></description>
                    <pubDate>Tue, 06 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.richdictionary</guid>
                    <title>Umbraco.Community.RichDictionary</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.richdictionary</link>
                    <description><![CDATA[Edit Umbraco dictionary values with a rich text (Tiptap) or Markdown editor instead of a plain textarea.]]></description>
                    <pubDate>Tue, 06 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://packages.limbo.works/limbo.umbraco.urlpicker/releases/v17.0.0-alpha003/</guid>
                    <title>Limbo.Umbraco.UrlPicker 17.0.0-alpha003</title>
                    <link>https://packages.limbo.works/limbo.umbraco.urlpicker/releases/v17.0.0-alpha003/</link>
                    <description><![CDATA[Umbraco package that extends the functionality of Umbraco&#x27;s build-in Multi URL Picker property editor.]]></description>
                    <pubDate>Tue, 06 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://forum.umbraco.com/t/examine-lucene-index-viewer/8613</guid>
                    <title>Examine/Lucene index viewer</title>
                    <link>https://forum.umbraco.com/t/examine-lucene-index-viewer/8613</link>
                    <description><![CDATA[&lt;p&gt;I let Claude port the Java version of Luke to .net so you don&#x2019;t need to have the Java Virtual Machine installed: &lt;a href=&quot;https://github.com/SteveVaneeckhout/luke.net&quot; class=&quot;inline-onebox&quot; rel=&quot;noopener nofollow ugc&quot;&gt;GitHub - SteveVaneeckhout/luke.net: Lucene Index Viewer &#xB7; GitHub&lt;/a&gt;&lt;br&gt;&#xA;I have only tested the Windows version but it&#x2019;s also available for Mac and Linux users.&lt;/p&gt;&#xA;            &lt;p&gt;&lt;small&gt;1 post - 1 participant&lt;/small&gt;&lt;/p&gt;&#xA;            &lt;p&gt;&lt;a href=&quot;https://forum.umbraco.com/t/examine-lucene-index-viewer/8613&quot;&gt;Read full topic&lt;/a&gt;&lt;/p&gt;]]></description>
                    <pubDate>Mon, 05 Oct 2026 14:04:56 Z</pubDate>
                        <category>community</category>
                        <category>forum</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=4EQLJBCO0O8</guid>
                    <title>How Die Zeit&#x27;s marketing team builds 600&#x2B; landing pages with Umbraco</title>
                    <link>https://www.youtube.com/watch?v=4EQLJBCO0O8</link>
                    <description><![CDATA[Die Zeit is one of Germany&#x27;s most renowned media brands, with 600,000 copies sold. For almost ten years, its acquisition marketing team has used Umbraco to build and run the landing pages behind its campaigns.&#xA;&#xA;In this case study, Tim, Marketing Manager at Die Zeit, explains how the team has grown from three people to more than 20 working in Umbraco, and how every marketer can now build their own campaign pages. Today the team runs more than 600 targeted landing pages, and over half of all campaign responses come in through them.&#xA;&#xA;The video also covers why reliability matters when campaigns are always live, and why Die Zeit sees Umbraco as the right fit for a flexible, fast-moving marketing team.&#xA;&#xA;Chapters&#xA;00:00 Over half of all responses&#xA;00:15 Meet Tim from Die Zeit&#xA;00:38 From 3 to 20&#x2B; people in Umbraco&#xA;01:08 600&#x2B; landing pages for targeted campaigns&#xA;01:29 Why Umbraco is the right fit&#xA;&#xA;Learn more about Umbraco: www.umbraco.com&#xA;Read the full case study: https://umbraco.com/case-studies-testimonials/die-zeit/]]></description>
                    <pubDate>Mon, 05 Oct 2026 13:23:36 Z</pubDate>
                        <category>hq</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/arjo.umbraco.weglottranslator</guid>
                    <title>Arjo.Umbraco.WeglotTranslator</title>
                    <link>https://marketplace.umbraco.com/package/arjo.umbraco.weglottranslator</link>
                    <description><![CDATA[Weglot-powered machine translation for Umbraco 17&#x2B;: translated pages served from language-prefixed URLs, backoffice-managed languages and a drop-in language switcher. A licence is required for production use.]]></description>
                    <pubDate>Mon, 05 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://skttl.dev/blog/ai-is-changing-how-i-approach-umbraco-development/</guid>
                    <title>AI is changing how I approach Umbraco development</title>
                    <link>https://skttl.dev/blog/ai-is-changing-how-i-approach-umbraco-development/</link>
                    <description><![CDATA[Building a PDF metadata dashboard with AI made me reconsider when I reach for Umbraco&#x27;s standard tools and when a custom extension is worth the maintenance.]]></description>
                    <pubDate>Mon, 05 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.nathanielnunes.com/blog/umbraco-india-festival-2026-experience</guid>
                    <title>My Umbraco India Festival 2026 Experience</title>
                    <link>https://www.nathanielnunes.com/blog/umbraco-india-festival-2026-experience</link>
                    <description><![CDATA[Looking back at Umbraco India Festival 2026 in Kochi: a hackathon on the Water Metro, recording the sessions, great people, and the next edition in Goa.]]></description>
                    <pubDate>Sat, 03 Oct 2026 11:30:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.zpqrtbnk.net/posts/umbraco-management-api-wonders/</guid>
                    <title>Umbraco Management API Wonders</title>
                    <link>https://www.zpqrtbnk.net/posts/umbraco-management-api-wonders/</link>
                    <description><![CDATA[You may have heard me talk about Rick Dangerous, a 1989 game I reversed-engineered long ago, which  can now be played directly on the web, thanks to WebAssembly.&#xA;All it takes is one .wasm file, and a couple of .js files. Now, because rick-dangerous.org is running Umbraco, and because it is simpler to have everything in the same place, those files are managed as Umbraco media.&#xA;So each time I rebuild the game, I need to update those media files. But browsing in the media section is a manual and tedious process. Can we do better?&#xA;Umbraco Management API&#xA;The Umbraco Management API is the API that was introduced in order to support the revamped back-office in a clean and independent way. And straight from the beginning, it was meant to be.&#xA;First create a dedicated API user. Second, authenticate:&#xA;CLIENT_ID=umbraco-back-office-rick-dangerous-api&#xA;CLIENT_SECRET=*****&#xA;&#xA;API_URL=https://www.zpqrtbnk.net/umbraco/management/api/v1&#xA;&#xA;TOKEN=$( \&#xA;  curl -s $API_URL/security/back-office/token \&#xA;    -d &quot;client_id=$CLIENT_ID&quot; \&#xA;    -d &quot;client_secret=$CLIENT_SECRET&quot; \&#xA;    -d &#x27;grant_type=client_credentials&#x27; \&#xA;  | jq -r .access_token&#xA;)&#xA;If all goes well, the $TOKEN shell variable now contains your authentication token. We are going to define a simple helper method for invoking the API:&#xA;curl_api() {&#xA;  METHOD=$1&#xA;  shift&#xA;  API=$1&#xA;  shift&#xA;  curl -s \&#xA;    -H &quot;Authorization: Bearer $TOKEN&quot; \&#xA;    -X $METHOD \&#xA;    $API_URL/$API &quot;$@&quot;&#xA;  fi&#xA;}&#xA;Let us test it by retrieving the authenticated user name:&#xA;curl_api GET user/current | jq -r .name&#xA;Now let&#x27;s assume that the media item containing the WASM file has a given UUID that we have retrieved from the UI, and we want to update its file with the recently built file xrick/build/web/xrick.wasm. This is what it takes:&#xA;MEDIA_WASM=&quot;11467372-23fb-4d45-818b-fc78edf889a6&quot;&#xA;FILE_WASM=xrick/build/web/xrick.wasm&#xA;&#xA;# get the media name (required for updates?)&#xA;MEDIA_NAME=$( \&#xA;  curl_api GET media/$MEDIA_WASM | jq -r .variants[0].name&#xA;)&#xA;&#xA;# create a UUID for the temporary file&#xA;UUID=$(uuidgen)&#xA;&#xA;# upload the file as a temporary file&#xA;curl_api POST temporary-file -F &quot;Id=$UUID&quot; -F &quot;File=@./$FILE_WASM&quot;&#xA;&#xA;# edit the media to remove the current file&#xA;curl_api PUT media/$MEDIA_WASM \&#xA;  -H &quot;Content-Type: application/json&quot; \&#xA;  -d &quot;{\&quot;id\&quot;:\&quot;$MEDIA_WASM\&quot;,\&quot;values\&quot;:[{\&quot;alias\&quot;:\&quot;umbracoFile\&quot;,\&quot;culture\&quot;:null,\&quot;segment\&quot;:null,\&quot;value\&quot;:{}}],\&quot;variants\&quot;:[{\&quot;culture\&quot;:null,\&quot;segment\&quot;:null,\&quot;name\&quot;:\&quot;$MEDIA_NAME\&quot;}]}&quot;&#xA;&#xA;# edit the media again, with the temporary file&#xA;curl_api PUT media/$MEDIA_WASM \&#xA;  -H &quot;Content-Type: application/json&quot; \&#xA;  -d &quot;{\&quot;id\&quot;:\&quot;$MEDIA_WASM\&quot;,\&quot;values\&quot;:[{\&quot;alias\&quot;:\&quot;umbracoFile\&quot;,\&quot;culture\&quot;:null,\&quot;segment\&quot;:null,\&quot;value\&quot;:{\&quot;src\&quot;:\&quot;\&quot;,\&quot;temporaryFileId\&quot;:\&quot;$UUID\&quot;}}],\&quot;variants\&quot;:[{\&quot;culture\&quot;:null,\&quot;segment\&quot;:null,\&quot;name\&quot;:\&quot;$MEDIA_NAME\&quot;}]}&quot;&#xA;And... that is all. You will want to add some error checking here and there, but basically, this is all it takes to fully script the update of a media file.&#xA;The list of things that can be done this easily is huge&#x2014;pretty much anything in fact. Which is absolutely impressive. Loving it, would recommend.]]></description>
                    <pubDate>Sat, 03 Oct 2026 10:59:50 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.kjeldsen.dev/blog/the-umbraco-mcp-benchmark-or-the-little-haiku-that-could/</guid>
                    <title>The Umbraco MCP Benchmark: eleven AI models build the same blog</title>
                    <link>https://www.kjeldsen.dev/blog/the-umbraco-mcp-benchmark-or-the-little-haiku-that-could/</link>
                    <description><![CDATA[I had eleven Anthropic and OpenAI models build the same Umbraco blog through the Umbraco MCP server. Grades, cost, time, honesty and temperament.]]></description>
                    <pubDate>Sat, 03 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://dev.to/owaincodes/the-coffee-log-rebuilt-in-net-25md</guid>
                    <title>The coffee log, rebuilt in .NET</title>
                    <link>https://dev.to/owaincodes/the-coffee-log-rebuilt-in-net-25md</link>
                    <description><![CDATA[&lt;h1&gt;&#xA;  &#xA;  &#xA;  The coffee log, rebuilt in .NET&#xA;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Back in June I wrote about &lt;a href=&quot;https://owain.codes/blog/2026/june/its-coffee-time&quot; rel=&quot;noopener noreferrer&quot;&gt;my coffee machine writing my blog&lt;/a&gt;. Smart plug watches the coffee machine, Raspberry Pi watches the plug, bit of Python tells Umbraco I&#x27;ve made a coffee. If you&#x27;ve not read that one, go and read it first, it covers the plug, the KLAP handshake, the controller on the site, all of it. None of that has changed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So why am I writing about it again? Because I&#x27;ve ripped out the middle bit and rewritten it in .NET. And I know, I know, &quot;it worked, why touch it?&quot; Fair question. Let me explain.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  It worked. I just couldn&#x27;t remember how.&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Here&#x27;s the thing. I write C# all day. I don&#x27;t write Python all day. So when I came back to the coffee log after a few months, I opened the script and had to learn it all over again. Which virtual env was it? Why is that library pinned to that version? Why is that one line commented out?!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Python version was written for a Pi Zero, which meant pure Python only and being very careful about what got installed. All sensible at the time. But six months on it just felt like someone else&#x27;s project.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Pi has since been upgraded to a 64 bit model, and that opened a door I couldn&#x27;t resist. .NET can publish self contained. One binary, no runtime to install, no pip, no package manager, nothing. Copy it over, run it. That alone was enough for me to fire up a new solution.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  What a month of data taught me&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;In June the state machine had two ideas. Power goes up and stays up for a few seconds, that&#x27;s a brew starting. Power drops and stays down for a while, that&#x27;s a brew finished. Simple, and it mostly worked, because my machine switches itself off after brewing so every on, brew, off is one clean session.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mostly. Every so often it would log a coffee I hadn&#x27;t made, and I couldn&#x27;t tell you why, because all I had was the post on the site and a vague memory of what I&#x27;d been doing that morning.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This time round the service writes every brew it detects to a JSON file on the Pi as well as posting it, and honestly that file turned out to be the best thing in the whole project. A month of it and I could see exactly what was going on. Have you ever looked at a month of your own coffee habits as JSON? No? Just me then.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the detector now has a few more rules. It needs a run of readings above the threshold before it&#x27;ll commit to a brew, a run below before it&#x27;ll call one finished, a minimum duration so the short blips get binned, and a cooldown afterwards. That last one is the guard rail I care about most. If I make two or three cups in quick succession, say when we&#x27;ve got people round, it counts as one. I&#x27;m not after 100% accuracy here, it&#x27;s a blog post about coffee, not a billing system. I&#x27;d much rather miss the odd cup than post about ones I never made.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  Replay mode, or how to tune a coffee machine without drinking 40 coffees&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The service logs every raw reading to a CSV, one file per day. And it has a replay mode. Point it at a CSV instead of the plug and it runs the whole day through the detector in about a second, using the timestamps from the file rather than the clock on the wall.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The trick is that the detector doesn&#x27;t know or care where its readings come from. There&#x27;s one interface for &quot;give me a power reading&quot;, and either the real plug or a CSV file sits behind it. Everything downstream is identical.&lt;/p&gt;&#xA;&#xA;&#xA;&lt;div class=&quot;crayons-card c-embed text-styles text-styles--secondary&quot;&gt;&#xA;    &lt;div class=&quot;c-embed__content&quot;&gt;&#xA;      &lt;div class=&quot;c-embed__body flex items-center justify-between&quot;&gt;&#xA;        &lt;a href=&quot;https://mermaid.live/edit#pako:eNpljstugzAQRX_Fmk03gCCAHLzoJtm06ktNVanBWVh4QmjBRrZpkiL-vYAaVWp3586cefRQaInAYF_rY3EQxpG7Z264auuuzF9Eq8lEO-L716RBh2ZqFvYzf0M7JinOV5asNq9_jBn6_uZJH9HcT2EYZkOOXDht8vUP7Cb9Up2Vd6tVfrt5fCD7qsb_fVs5zPVRVCqYnrc78KA0lQTmTIceNGgaMUXouSKEgztggxzYiAZld_KlMB9-oWttOHA1jPOtUFutm8sKo7vyAGwvajumrpXC4boSpRG_Co5fmZXulAOWLuYVwHo4AaM0iGiYJMswS2gahUsPzsCiNAyiRZLROF7QOMyyePDgaz4aBkuaDt9W14RT&quot; rel=&quot;noopener noreferrer&quot; class=&quot;c-link fw-bold flex items-center&quot;&gt;&#xA;          &lt;span class=&quot;mr-2&quot;&gt;mermaid.live&lt;/span&gt;&#xA;          &#xA;&#xA;        &lt;/a&gt;&#xA;      &lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&lt;p&gt;Swap the box on the left and nothing else changes. That&#x27;s the whole reason it&#x27;s tunable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nothing gets written in replay mode. No CSV, no state, no posts to the site, it doesn&#x27;t even need credentials. So I can copy a month of captures off the Pi, replay them on the desktop with different settings, and check the results against the times I know I made a coffee. Change a number, run it, a second later I know if it helped. No standing at the machine pulling shots I don&#x27;t want. No risk of publishing a post about a coffee from August either, which, trust me, I thought about.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  Why I stopped retrying&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Where a brew goes is now pluggable. There&#x27;s a JSON file sink, an Umbraco sink, and a mode that does both, and I run both.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In June the Pi had a little pending queue that kept retrying a post until the site answered. Sensible, right? Until you remember the controller creates a node every single time it&#x27;s called, and there&#x27;s nothing in the request that lets the site spot a repeat. So if the site processed the request but the response got lost on the way back, the retry publishes the same coffee twice. Two blog posts, one coffee. Nobody needs that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the .NET sink deliberately never retries. If a post fails it gets logged and the brew&#x27;s still sitting in the JSON file on the Pi. A missing post I can fix by hand in a minute. A duplicate one I have to notice first, and I won&#x27;t.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  The afternoon I lost to two keys&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Right, confession time. Wiring the Pi back up to the site after a few months away, I went into the backoffice and created an API user. Because that&#x27;s how you talk to Umbraco from outside, right? Management API, client id, secret, OAuth, all of that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not here it isn&#x27;t. The controller from the June post isn&#x27;t the Management API at all, it&#x27;s a plain controller sat inside the site, and the only thing guarding it is one shared secret in an &lt;code&gt;X-Api-Key&lt;/code&gt; header. No OAuth, no client id, nothing to create in the backoffice. The same string just has to live in two places, an environment variable on the Live environment in Umbraco Cloud, and the env file on the Pi. That&#x27;s it. I&#x27;d built the thing and forgotten how it worked. Again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then, because one mistake is never enough, I put the secret in the wrong setting. The site also needs to know which node to create posts under, and that&#x27;s a GUID in a setting called BlogParentKey, which sits right next to the API key in the Cloud portal. So for a good while I had a password sat in a field that wanted a GUID and was staring at 401s wondering what on earth was going on.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  Deploying is one command now&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The service runs under systemd as its own service account, credentials in a separate env file, and the unit file locks it right down. It can only write its own data folder, it can&#x27;t see home directories, and it never gives up restarting after a power cut, which on a Pi is a matter of when, not if.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Deploying is a single script. Build for arm64, copy the binary over SSH, stop the service, install, start, print the status. It only ever replaces the binary and the default settings. It never touches the env file, the captured data or the detector&#x27;s saved state, so I can run it at three in the afternoon and nothing gets lost.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  So what&#x27;s actually different?&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Same plug. Same site. Same controller. Same daft idea. What&#x27;s changed is that I can open this project after six months away, run the tests, replay a day of data to see what the detector thinks, and deploy with one command. It went from a thing I built to a thing I can actually maintain. Which, if you read my last post, is sort of the point I&#x27;ve been circling round for a while now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Right then. Coffee. You&#x27;ll know when I have.&lt;/p&gt;]]></description>
                    <pubDate>Fri, 02 Oct 2026 11:24:10 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://medium.com/@contacts_81271/headless-umbraco-multi-site-vor-und-nachteile-mehrerer-websites-in-einer-einzigen-instanz-0d5bb7170b62?source=rss------umbraco-5</guid>
                    <title>Headless Umbraco Multi-Site: Vor- und Nachteile mehrerer Websites in einer einzigen Instanz</title>
                    <link>https://medium.com/@contacts_81271/headless-umbraco-multi-site-vor-und-nachteile-mehrerer-websites-in-einer-einzigen-instanz-0d5bb7170b62?source=rss------umbraco-5</link>
                    <description><![CDATA[&lt;div class=&quot;medium-feed-item&quot;&gt;&lt;p class=&quot;medium-feed-image&quot;&gt;&lt;a href=&quot;https://medium.com/@contacts_81271/headless-umbraco-multi-site-vor-und-nachteile-mehrerer-websites-in-einer-einzigen-instanz-0d5bb7170b62?source=rss------umbraco-5&quot;&gt;&lt;img src=&quot;https://cdn-images-1.medium.com/max/1672/1*SW8pVPsYV_g1__-t_mi6zA.png&quot; width=&quot;1672&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;medium-feed-snippet&quot;&gt;Unternehmen betreiben heute selten nur eine Website. Konzernportale, L&amp;#xE4;nderseiten, Produktmarken, Karriereportale und Kampagnenseiten&amp;#x2026;&lt;/p&gt;&lt;p class=&quot;medium-feed-link&quot;&gt;&lt;a href=&quot;https://medium.com/@contacts_81271/headless-umbraco-multi-site-vor-und-nachteile-mehrerer-websites-in-einer-einzigen-instanz-0d5bb7170b62?source=rss------umbraco-5&quot;&gt;Continue reading on Medium &#xBB;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;]]></description>
                    <pubDate>Fri, 02 Oct 2026 10:28:33 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://medium.com/@murmusoftwareinfotech/umbraco-vs-strapi-vs-sanity-choosing-the-right-cms-for-asian-businesses-993a364062da?source=rss------umbraco-5</guid>
                    <title>Umbraco vs Strapi vs Sanity: Choosing the right CMS for Asian Businesses</title>
                    <link>https://medium.com/@murmusoftwareinfotech/umbraco-vs-strapi-vs-sanity-choosing-the-right-cms-for-asian-businesses-993a364062da?source=rss------umbraco-5</link>
                    <description><![CDATA[&lt;div class=&quot;medium-feed-item&quot;&gt;&lt;p class=&quot;medium-feed-image&quot;&gt;&lt;a href=&quot;https://medium.com/@murmusoftwareinfotech/umbraco-vs-strapi-vs-sanity-choosing-the-right-cms-for-asian-businesses-993a364062da?source=rss------umbraco-5&quot;&gt;&lt;img src=&quot;https://cdn-images-1.medium.com/max/1672/1*ZRRgqy9-gw2sv519snHTpA.png&quot; width=&quot;1672&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;medium-feed-snippet&quot;&gt;When choosing a CMS it is now common practice to consider not just its impact on website building.&lt;/p&gt;&lt;p class=&quot;medium-feed-link&quot;&gt;&lt;a href=&quot;https://medium.com/@murmusoftwareinfotech/umbraco-vs-strapi-vs-sanity-choosing-the-right-cms-for-asian-businesses-993a364062da?source=rss------umbraco-5&quot;&gt;Continue reading on Medium &#xBB;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;]]></description>
                    <pubDate>Fri, 02 Oct 2026 08:36:59 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.ai.agent.copilot.workspace</guid>
                    <title>Umbraco.AI.Agent.Copilot.Workspace</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.ai.agent.copilot.workspace</link>
                    <description><![CDATA[Copilot Workspace for Umbraco AI &#x2014; full-section persisted chat with projects and reusable context attachments]]></description>
                    <pubDate>Fri, 02 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://www.arroact.com/blogs/test-driven-development-tdd-and-clean-architecture-in-umbraco-decoupling-domain-logic-from-cms-dependencies/</guid>
                    <title>Test-Driven Development (TDD) &amp; Clean Architecture in Umbraco: Decoupling Domain Logic from CMS Dependencies</title>
                    <link>https://www.arroact.com/blogs/test-driven-development-tdd-and-clean-architecture-in-umbraco-decoupling-domain-logic-from-cms-dependencies/</link>
                    <description><![CDATA[Test-Driven Development (TDD) &amp; Clean Architecture in Umbraco: Decoupling Domain Logic from CMS Dependencies]]></description>
                    <pubDate>Thu, 01 Oct 2026 13:22:00 Z</pubDate>
                        <category>blog</category>
                        <category>community</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/humble.umbraco.mediaextensions</guid>
                    <title>Humble.Umbraco.MediaExtensions</title>
                    <link>https://marketplace.umbraco.com/package/humble.umbraco.mediaextensions</link>
                    <description><![CDATA[Smaller images out, sensible images in, with ordinary Umbraco media workflows left intact. Visitors receive AVIF or WebP according to what their browser accepts, so pages get lighter without touching your templates, and oversized uploads are capped on save so a phone photo doesn&#x27;t become the stored original. AVIF is optional: install Magick.NET alongside it and AVIF lights up, leave it out and delivery sticks to WebP, which ImageSharp handles on its own. With Magick.NET it can also read HEIC and HEIF, so an iPhone photo already in your media library still crops and resizes like any other image.]]></description>
                    <pubDate>Thu, 01 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/humble.umbraco.forms</guid>
                    <title>Humble.Umbraco.Forms</title>
                    <link>https://marketplace.umbraco.com/package/humble.umbraco.forms</link>
                    <description><![CDATA[Native Umbraco forms editors actually enjoy &#x2014; build, publish, and operate without leaving the backoffice. A block-based designer with versioned form definitions, traditional multi-page rendering with server-side validation, eighteen question types including file uploads, version-pinned submissions, CSV export and retention controls, plus a Form Submitted trigger for Umbraco Automate via the optional Humble.Umbraco.Forms.Automations companion package (Humble Forms Automations).]]></description>
                    <pubDate>Thu, 01 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/humble.umbraco</guid>
                    <title>Humble.Umbraco</title>
                    <link>https://marketplace.umbraco.com/package/humble.umbraco</link>
                    <description><![CDATA[One install for the whole Humble suite. Humble.Umbraco contains no code of its own &#x2014; it is a shortcut that pulls in every released Humble package, so you get the lot without adding a package reference for each. Every package also installs on its own and is listed separately here.]]></description>
                    <pubDate>Thu, 01 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://skttl.dev/blog/introducing-razorsearch-for-umbraco/</guid>
                    <title>Introducing RazorSearch for Umbraco</title>
                    <link>https://skttl.dev/blog/introducing-razorsearch-for-umbraco/</link>
                    <description><![CDATA[RazorSearch is my successor to Full Text Search for Umbraco, with weighted titles and headings, background rendering and tools for inspecting extracted text.]]></description>
                    <pubDate>Thu, 01 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/foxcart.reviews</guid>
                    <title>FoxCart.Reviews</title>
                    <link>https://marketplace.umbraco.com/package/foxcart.reviews</link>
                    <description><![CDATA[A lightweight, modular e-commerce solution for Umbraco CMS. Features include shopping cart management, order processing, multi-store support, and pluggable payment/shipping providers.]]></description>
                    <pubDate>Thu, 01 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/humble.umbraco.clientsideadmin</guid>
                    <title>Humble.Umbraco.ClientSideAdmin</title>
                    <link>https://marketplace.umbraco.com/package/humble.umbraco.clientsideadmin</link>
                    <description><![CDATA[An editor toolbar on the front end of your site, for the people who already have a backoffice session and nobody else. It deep-links the page being viewed straight into its workspace, lists the content and media actually rendered on that page so any of it can be opened or highlighted in place, and reports each image&#x27;s format and weight while you are looking at it. Anonymous visitors receive byte-identical HTML &#x2014; the toolbar decides whether to appear by asking one small no-store endpoint, so output caching and CDNs keep working untouched. Installation is deliberate rather than automatic: a tag helper in your layout renders the toolbar, and attribute tag helpers on your own Razor views announce which element corresponds to which node.]]></description>
                    <pubDate>Thu, 01 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/humble.umbraco.loginscreen</guid>
                    <title>Humble.Umbraco.LoginScreen</title>
                    <link>https://marketplace.umbraco.com/package/humble.umbraco.loginscreen</link>
                    <description><![CDATA[Brand the Umbraco backoffice sign-in page from inside the backoffice, instead of editing appsettings.json and redeploying. The background image and both logos are chosen with the standard media picker, so nothing is uploaded or duplicated &#x2014; the package stores a reference to media you already own. Umbraco&#x27;s decorative curves can be recoloured to a brand colour or switched off entirely. Saved settings apply on the next load of the sign-in page with no restart, and nothing is written to disk, so it works unchanged on read-only filesystems, in containers, and with remote blob storage. A granular user-group permission controls who may change the design, so branding does not require handing out administrator access.]]></description>
                    <pubDate>Thu, 01 Oct 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/contentcalendar.v18</guid>
                    <title>ContentCalendar.V18</title>
                    <link>https://marketplace.umbraco.com/package/contentcalendar.v18</link>
                    <description><![CDATA[A content calendar for the Umbraco backoffice. See, per day, which content was created, is scheduled to publish or unpublish, and was deleted. Available as a Content section dashboard and as a Calendar view for Child items, with Month, Week, Day and List views and infinite editing in a side drawer.]]></description>
                    <pubDate>Wed, 30 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/steadygo.umbraco.ai.toolkit</guid>
                    <title>SteadyGo.Umbraco.AI.Toolkit</title>
                    <link>https://marketplace.umbraco.com/package/steadygo.umbraco.ai.toolkit</link>
                    <description><![CDATA[AI-powered search, chat, enquiry capture and external content indexing for Umbraco 17. Includes configurable indexing, grounded answers, enquiry routing and webhook-friendly external data ingestion.]]></description>
                    <pubDate>Wed, 30 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://umbraco.com/blog/annual-price-change-2027/</guid>
                    <title>Annual Price Update 2027</title>
                    <link>https://umbraco.com/blog/annual-price-change-2027/</link>
                    <description><![CDATA[Mainly based on price indexing, a range of Umbraco product and services will see price changes starting 2027. Get the overview here.]]></description>
                    <pubDate>Wed, 30 Sep 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.propertyvisibility</guid>
                    <title>Umbraco.Community.PropertyVisibility</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.propertyvisibility</link>
                    <description><![CDATA[Hide properties, groups and tabs per site in the Umbraco backoffice. Rules are keyed by document type or element type, live in appsettings or a JSON file that reloads without a restart, apply to documents and to blocks, and are checked by a health check. Hiding changes what editors see, not what they may do: hidden values are still saved and still available through the Management API and the Delivery API.]]></description>
                    <pubDate>Wed, 30 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbracolanguagepicker</guid>
                    <title>UmbracoLanguagePicker</title>
                    <link>https://marketplace.umbraco.com/package/umbracolanguagepicker</link>
                    <description><![CDATA[A property editor for picking one of the site&#x27;s configured languages, with an optional unique-per-sibling filter.]]></description>
                    <pubDate>Wed, 30 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://umbracocommunity.social/@owaincodes/117354294653015517</guid>
                    <title>The Umbraco Community Store gets a facelift</title>
                    <link>https://umbracocommunity.social/@owaincodes/117354294653015517</link>
                    <description><![CDATA[Just in time for Christmas! The Umbraco Community Store has had a bit of a facelift. https://umbracocommunity.store/and there are new Chistmas Jumper designs now online! https://umbracocommunity.store/collection/christmas-collection/#umbraco]]></description>
                    <pubDate>Tue, 29 Sep 2026 13:20:00 Z</pubDate>
                        <category>community</category>
                        <category>mastodon</category>
                        <category>social</category>
                </item>
                <item>
                    <guid>https://forum.umbraco.com/t/building-a-six-language-website-in-umbraco-what-we-learned/8594</guid>
                    <title>Building a Six-Language Website in Umbraco: What We Learned</title>
                    <link>https://forum.umbraco.com/t/building-a-six-language-website-in-umbraco-what-we-learned/8594</link>
                    <description><![CDATA[&lt;p&gt;We&#x2019;ve recently finished building an Umbraco site that needed to support &lt;strong&gt;six languages&lt;/strong&gt;: Arabic, Chinese, English, French, Russian and Spanish, and there were a few interesting challenges along the way &lt;img src=&quot;https://forum.umbraco.com/images/emoji/twitter/sweat_smile.png?v=15&quot; title=&quot;:sweat_smile:&quot; class=&quot;emoji&quot; alt=&quot;:sweat_smile:&quot; loading=&quot;lazy&quot; width=&quot;20&quot; height=&quot;20&quot;&gt;&lt;/p&gt;&#xA;&lt;p&gt;We&#x2019;ve written up some of the things we learned around &lt;strong&gt;culture variants, shared vs culture-specific properties, Umbraco translations, RTL languages&lt;/strong&gt;, and handling content that&#x2019;s automatically synced from an external source and needs to be machine translated.&lt;/p&gt;&#xA;&lt;p&gt;One of the biggest takeaways was that multilingual content isn&#x2019;t really one problem, different types of content often need completely different approaches.&lt;/p&gt;&#xA;&lt;p&gt;Hopefully it&#x2019;s useful if you&#x2019;re building (or about to build!) a multilingual Umbraco site.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://forum.umbraco.com/images/emoji/twitter/backhand_index_pointing_right.png?v=15&quot; title=&quot;:backhand_index_pointing_right:&quot; class=&quot;emoji&quot; alt=&quot;:backhand_index_pointing_right:&quot; loading=&quot;lazy&quot; width=&quot;20&quot; height=&quot;20&quot;&gt; &lt;a href=&quot;https://www.thehumantech.agency/learn/building-a-six-language-website-in-umbraco/&quot; rel=&quot;noopener nofollow ugc&quot;&gt;Building a Six-Language Website in Umbraco: What We Learned&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Would be interested to hear how other people are approaching multilingual builds in Umbraco too, particularly where automated/external content is involved.&lt;/p&gt;&#xA;            &lt;p&gt;&lt;small&gt;1 post - 1 participant&lt;/small&gt;&lt;/p&gt;&#xA;            &lt;p&gt;&lt;a href=&quot;https://forum.umbraco.com/t/building-a-six-language-website-in-umbraco-what-we-learned/8594&quot;&gt;Read full topic&lt;/a&gt;&lt;/p&gt;]]></description>
                    <pubDate>Tue, 29 Sep 2026 12:33:59 Z</pubDate>
                        <category>community</category>
                        <category>forum</category>
                </item>
                <item>
                    <guid>https://samsolutions.medium.com/umbraco-security-a-practical-guide-to-protecting-your-cms-40387f5cb4af?source=rss------umbraco-5</guid>
                    <title>Umbraco Security: A Practical Guide to Protecting Your CMS</title>
                    <link>https://samsolutions.medium.com/umbraco-security-a-practical-guide-to-protecting-your-cms-40387f5cb4af?source=rss------umbraco-5</link>
                    <description><![CDATA[&lt;div class=&quot;medium-feed-item&quot;&gt;&lt;p class=&quot;medium-feed-image&quot;&gt;&lt;a href=&quot;https://samsolutions.medium.com/umbraco-security-a-practical-guide-to-protecting-your-cms-40387f5cb4af?source=rss------umbraco-5&quot;&gt;&lt;img src=&quot;https://cdn-images-1.medium.com/max/1672/1*OrnrQv6KVzzdf-Ee7kBmSg.png&quot; width=&quot;1672&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;medium-feed-snippet&quot;&gt;A website can look perfectly healthy while an old contractor account still works, a private PDF opens without a login, and a security&amp;#x2026;&lt;/p&gt;&lt;p class=&quot;medium-feed-link&quot;&gt;&lt;a href=&quot;https://samsolutions.medium.com/umbraco-security-a-practical-guide-to-protecting-your-cms-40387f5cb4af?source=rss------umbraco-5&quot;&gt;Continue reading on Medium &#xBB;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;]]></description>
                    <pubDate>Tue, 29 Sep 2026 11:22:56 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=7BbBINXy7sE</guid>
                    <title>Umbraco Kent Meetup - 21st September 2026 - Contentment</title>
                    <link>https://www.youtube.com/watch?v=7BbBINXy7sE</link>
                    <description><![CDATA[A casual demo and overview of Contentment from Lee Kelleher]]></description>
                    <pubDate>Mon, 28 Sep 2026 14:50:19 Z</pubDate>
                        <category>community</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=gDrK_w1-nVs</guid>
                    <title>Umbraco Kent Meetup - 21st September 2026 - Contentment</title>
                    <link>https://www.youtube.com/watch?v=gDrK_w1-nVs</link>
                    <description><![CDATA[A casual demo and introduction of Contentment from Lee Kelleher]]></description>
                    <pubDate>Mon, 28 Sep 2026 13:25:58 Z</pubDate>
                        <category>community</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/contentcalendar.v17</guid>
                    <title>ContentCalendar.V17</title>
                    <link>https://marketplace.umbraco.com/package/contentcalendar.v17</link>
                    <description><![CDATA[A content calendar for the Umbraco backoffice. See, per day, which content was created, is scheduled to publish or unpublish, and was deleted. Available as a Content section dashboard and as a Calendar view for Child items, with Month, Week, Day and List views and infinite editing in a side drawer.]]></description>
                    <pubDate>Mon, 28 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://www.rachelbreeze.dev/blogs/umbraco-upgrade-decisions-start-with-knowing-where-you-stand/</guid>
                    <title>Umbraco Upgrade Decisions: Start With Knowing Where You Stand</title>
                    <link>https://www.rachelbreeze.dev/blogs/umbraco-upgrade-decisions-start-with-knowing-where-you-stand/</link>
                    <description><![CDATA[This post explains that deciding whether to stay on, upgrade or rewrite an Umbraco site should start with an honest assessment of the current version, runtime, vulnerabilities, package dependencies, theme coupling and technical debt. It also highlights wider operational factors such as performance, accessibility, usability and changing traffic patterns, so the decision is based on evidence rather than assumptions. Continue reading]]></description>
                    <pubDate>Sun, 27 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://owain.codes/blog/2026/september/the-coffee-log-rebuilt-in-net/</guid>
                    <title>The coffee log, rebuilt in .NET</title>
                    <link>https://owain.codes/blog/2026/september/the-coffee-log-rebuilt-in-net/</link>
                    <description><![CDATA[My coffee machine still writes my blog, but the Pi now runs .NET. Why I rewrote it, what a month of data taught me, and the afternoon I lost to two keys.]]></description>
                    <pubDate>Sun, 27 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/dragonfly.umbracoflavoredmarkdownextensions</guid>
                    <title>Dragonfly.UmbracoFlavoredMarkdownExtensions</title>
                    <link>https://marketplace.umbraco.com/package/dragonfly.umbracoflavoredmarkdownextensions</link>
                    <description><![CDATA[Additional UFM Components and tools for Umbraco 17&#x2B; sites.]]></description>
                    <pubDate>Sat, 26 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://www.dynamicdave.nl/blog/multi-site-umbraco-without-the-shared-tree-mess/</guid>
                    <title>Multi-Site Umbraco without the shared-tree mess</title>
                    <link>https://www.dynamicdave.nl/blog/multi-site-umbraco-without-the-shared-tree-mess/</link>
                    <description><![CDATA[At some point in a multi-site Umbraco project, someone creates a &quot;Global&quot; or &quot;Shared&quot; content node to hold whatever multiple sites need in common, and it never stops growing. Six months later it&#x27;s holding navigation overrides, campaign banners some sites don&#x27;t use, and properties nobody remembers the purpose of. This isn&#x27;t really a technical failure, it&#x27;s what happens when a single-site content model gets stretched across multiple sites without anyone deciding what &quot;shared&quot; actually means. Getting the structure right from the start, across content, media, permissions and search, keeps the tree something editors can still read a year later.]]></description>
                    <pubDate>Fri, 25 Sep 2026 22:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.nathanielnunes.com/blog/introducing-umbraco-community-propertynavigator</guid>
                    <title>Introducing Umbraco.Community.PropertyNavigator</title>
                    <link>https://www.nathanielnunes.com/blog/introducing-umbraco-community-propertynavigator</link>
                    <description><![CDATA[Umbraco.Community.PropertyNavigator brings back the v13 Content field dropdown for Umbraco 17 &#x2014; click the Content view to search and jump straight to any property on a node.]]></description>
                    <pubDate>Fri, 25 Sep 2026 11:30:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=aRkc0fRxQjw</guid>
                    <title>umbraCoffee - The September Shift</title>
                    <link>https://www.youtube.com/watch?v=aRkc0fRxQjw</link>
                    <description><![CDATA[Welcome to your monthly dose of #umbraCoffee&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;! Your hosts - Marcin and Callum - together with their guest(s) will drive through all of the community news and happenings in the Umbraco world. So... grab a cuppa, join us LIVE and enjoy!&#xA;&#xA;See ya?!&#xA;&#xA;---&#xA;&#x2615; Wanna buy us a coffee/pizza/donuts?&#xA;https://www.buymeacoffee.com/umbracoffee&#xA;---&#xA;&#xA;Notes:&#xA;&#xA;// TODO]]></description>
                    <pubDate>Fri, 25 Sep 2026 09:45:06 Z</pubDate>
                        <category>community</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/our.umbraco.blockfieldvisibility</guid>
                    <title>Our.Umbraco.BlockFieldVisibility</title>
                    <link>https://marketplace.umbraco.com/package/our.umbraco.blockfieldvisibility</link>
                    <description><![CDATA[Hide page and block editor fields in the backoffice&#x2014;content stays in the database.]]></description>
                    <pubDate>Fri, 25 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.propertynavigator</guid>
                    <title>Umbraco.Community.PropertyNavigator</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.propertynavigator</link>
                    <description><![CDATA[Find and jump to any field on a content node. Click the active Content view for a dropdown of every field (like v13); type to filter, click to jump. Search box, descriptions and aliases are configurable via appsettings.]]></description>
                    <pubDate>Fri, 25 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://mattbrailsford.dev/most-automation-is-a-decision-not-a-conversation</guid>
                    <title>Most Automation Is a Decision, Not a Conversation</title>
                    <link>https://mattbrailsford.dev/most-automation-is-a-decision-not-a-conversation</link>
                    <description><![CDATA[Most of the AI steps I see people build into automations aren&#x2019;t really about generating anything. They&#x2019;re about deciding something.&#xA;Is this comment...]]></description>
                    <pubDate>Fri, 25 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://forum.umbraco.com/t/umbraco-kent-meetup-hybrid-monday-19th-october-2026-7pm/8583</guid>
                    <title>Umbraco Kent Meetup - Hybrid - Monday 19th October 2026 @ 7pm</title>
                    <link>https://forum.umbraco.com/t/umbraco-kent-meetup-hybrid-monday-19th-october-2026-7pm/8583</link>
                    <description><![CDATA[&lt;p&gt;Join us on Monday 19th October at 7pm for the next Umbraco Kent Meetup. It&#x2019;s a hybrid event, so you can come along in person in Rochester or join online.&lt;/p&gt;&#xA;&lt;p&gt;Not based in Kent? No problem, you&#x2019;re very welcome to join remotely from home.&lt;/p&gt;&#xA;&lt;p&gt;This month we&#x2019;ll have a talk from Richard Howell, followed by a chat about our takeaways from the Umbraco UK Conference the week before.&lt;/p&gt;&#xA;&lt;p&gt;Sign up here:&lt;/p&gt;&#xA;&lt;aside class=&quot;onebox allowlistedgeneric&quot; data-onebox-src=&quot;https://www.meetup.com/umbraco-kent-meetup/events/316693771/&quot;&gt;&#xA;  &lt;header class=&quot;source&quot;&gt;&#xA;      &lt;img src=&quot;https://forum.umbraco.com/uploads/default/original/2X/c/c4a6f11d6f6ef00bd5447e521f8e06fd3f8b5e9e.png&quot; class=&quot;site-icon&quot; alt=&quot;&quot; data-dominant-color=&quot;FF7599&quot; width=&quot;16&quot; height=&quot;16&quot;&gt;&#xA;&#xA;      &lt;a href=&quot;https://www.meetup.com/umbraco-kent-meetup/events/316693771/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Meetup&lt;/a&gt;&#xA;  &lt;/header&gt;&#xA;&#xA;  &lt;article class=&quot;onebox-body&quot;&gt;&#xA;    &lt;div class=&quot;aspect-image&quot; style=&quot;--aspect-ratio:600/338;&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/original/2X/c/c61f6304609cf6177d7cc011e2cec37be1e0d7f3.jpeg&quot; class=&quot;thumbnail&quot; alt=&quot;&quot; data-dominant-color=&quot;5E5E54&quot; width=&quot;600&quot; height=&quot;338&quot;&gt;&lt;/div&gt;&#xA;&#xA;&lt;h3&gt;&lt;a href=&quot;https://www.meetup.com/umbraco-kent-meetup/events/316693771/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Umbraco Kent Meetup - Hybrid - Monday 19th October 2026 @ 7pm, Mon, Oct 19,...&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;  &lt;p&gt;Please join us for an evening of all things Umbraco - the latest news, community chat, and a talk or two!&#xA;&#xA;For 2026, we will be running both in-person and hybrid virtual me&lt;/p&gt;&#xA;&#xA;&#xA;  &lt;/article&gt;&#xA;&#xA;  &lt;div class=&quot;onebox-metadata&quot;&gt;&#xA;    &#xA;    &#xA;  &lt;/div&gt;&#xA;&#xA;  &lt;div style=&quot;clear: both&quot;&gt;&lt;/div&gt;&#xA;&lt;/aside&gt;&#xA;&#xA;            &lt;p&gt;&lt;small&gt;1 post - 1 participant&lt;/small&gt;&lt;/p&gt;&#xA;            &lt;p&gt;&lt;a href=&quot;https://forum.umbraco.com/t/umbraco-kent-meetup-hybrid-monday-19th-october-2026-7pm/8583&quot;&gt;Read full topic&lt;/a&gt;&lt;/p&gt;]]></description>
                    <pubDate>Thu, 24 Sep 2026 14:51:53 Z</pubDate>
                        <category>community</category>
                        <category>forum</category>
                </item>
                <item>
                    <guid>https://forum.umbraco.com/t/umbradesktop-17-2-0-is-here-lots-of-improvements-and-quality-of-life-updates/8582</guid>
                    <title>UmbraDesktop 17.2.0 is here! Lot&#x27;s of improvements and quality of life updates!</title>
                    <link>https://forum.umbraco.com/t/umbradesktop-17-2-0-is-here-lots-of-improvements-and-quality-of-life-updates/8582</link>
                    <description><![CDATA[&lt;p&gt;This release has a lot of small improvements and quality of life changes that make working with the UmbraDesktop much more enjoyable.&lt;/p&gt;&#xA;&lt;h2&gt;&lt;a name=&quot;p-20002-new-window-snapping-1&quot; class=&quot;anchor&quot; href=&quot;https://forum.umbraco.com#p-20002-new-window-snapping-1&quot; aria-label=&quot;Heading link&quot;&gt;&lt;/a&gt;NEW! Window snapping&lt;/h2&gt;&#xA;&lt;p&gt;Window snapping is now a thing! You can drag any window to the top, left or right edges of the screen and it will snap it there. It remembers it&#x2019;s previous state, so if you unsnap, it will return to it&#x2019;s previous size&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/0/03623e0a2c057e266ce3488c4dc633b9ea63ccd4.jpeg&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/03623e0a2c057e266ce3488c4dc633b9ea63ccd4&quot; title=&quot;afbeelding&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/0/03623e0a2c057e266ce3488c4dc633b9ea63ccd4_2_690x432.jpeg&quot; alt=&quot;afbeelding&quot; data-base62-sha1=&quot;tVULNnSLcGoCEOjAW2ABZpk352&quot; width=&quot;690&quot; height=&quot;432&quot; srcset=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/0/03623e0a2c057e266ce3488c4dc633b9ea63ccd4_2_690x432.jpeg, https://forum.umbraco.com/uploads/default/optimized/2X/0/03623e0a2c057e266ce3488c4dc633b9ea63ccd4_2_1035x648.jpeg 1.5x, https://forum.umbraco.com/uploads/default/optimized/2X/0/03623e0a2c057e266ce3488c4dc633b9ea63ccd4_2_1380x864.jpeg 2x&quot; data-dominant-color=&quot;655E95&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;h2&gt;&lt;a name=&quot;p-20002-new-boot-directly-into-the-desktop-mode-loading-screens-2&quot; class=&quot;anchor&quot; href=&quot;https://forum.umbraco.com#p-20002-new-boot-directly-into-the-desktop-mode-loading-screens-2&quot; aria-label=&quot;Heading link&quot;&gt;&lt;/a&gt;NEW! Boot directly into the desktop mode &#x2B; loading screens&lt;/h2&gt;&#xA;&lt;p&gt;A setting was added where you can specifiy that you want to directly boot into desktop mode after login. It will now display the most awesome splashscreen with a loader. I liked the loading animation that much, that I also used it for when the content of a window is loading &lt;img src=&quot;https://forum.umbraco.com/images/emoji/twitter/wink.png?v=15&quot; title=&quot;:wink:&quot; class=&quot;emoji&quot; alt=&quot;:wink:&quot; loading=&quot;lazy&quot; width=&quot;20&quot; height=&quot;20&quot;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/original/2X/0/02c8e38b240051d1818869705d13cf32e1359c11.gif&quot; alt=&quot;UmbraDesktop-direct-boot&quot; data-base62-sha1=&quot;oDm9sv0U44QaPu16j1Q5vVq97r&quot; width=&quot;690&quot; height=&quot;373&quot; class=&quot;animated&quot;&gt;&lt;/p&gt;&#xA;&lt;h2&gt;&lt;a name=&quot;p-20002-new-install-umbraco-as-an-app-3&quot; class=&quot;anchor&quot; href=&quot;https://forum.umbraco.com#p-20002-new-install-umbraco-as-an-app-3&quot; aria-label=&quot;Heading link&quot;&gt;&lt;/a&gt;NEW! Install Umbraco as an app!&lt;/h2&gt;&#xA;&lt;p&gt;A manifest definition was added that identifies the desktop as a web app. Most browsers will give you an option to install it as an app. You can specify the Name of the app and a custom icon if desired. This makes sure that if you have multiple Umbraco instances with UmbraDesktop, you can easily identify them by name and/or icon.&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/2/289caf85e9a73c43422cebe7b57a81f4a2bf42de.jpeg&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/289caf85e9a73c43422cebe7b57a81f4a2bf42de&quot; title=&quot;afbeelding&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/2/289caf85e9a73c43422cebe7b57a81f4a2bf42de_2_690x494.jpeg&quot; alt=&quot;afbeelding&quot; data-base62-sha1=&quot;5NgNmM0svidyoWjRQnPavqu0cyi&quot; width=&quot;690&quot; height=&quot;494&quot; srcset=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/2/289caf85e9a73c43422cebe7b57a81f4a2bf42de_2_690x494.jpeg, https://forum.umbraco.com/uploads/default/optimized/2X/2/289caf85e9a73c43422cebe7b57a81f4a2bf42de_2_1035x741.jpeg 1.5x, https://forum.umbraco.com/uploads/default/original/2X/2/289caf85e9a73c43422cebe7b57a81f4a2bf42de.jpeg 2x&quot; data-dominant-color=&quot;6F6D82&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;h2&gt;&lt;a name=&quot;p-20002-new-language-and-region-4&quot; class=&quot;anchor&quot; href=&quot;https://forum.umbraco.com#p-20002-new-language-and-region-4&quot; aria-label=&quot;Heading link&quot;&gt;&lt;/a&gt;NEW! Language and region&lt;/h2&gt;&#xA;&lt;p&gt;You can now set the regional format on how dates and times are written. The default is the culture of the backoffice, but because the default backoffice is en-US with a 12h clock you can now change that. Currently, this only effects the clock, but in the future this could mean more things. You can also directly change the backoffice language for you from this please instead of having to go to the user section (which you don&#x2019;t always have access to).&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/8/804ccc65708142e3b84c6b030f4cd351f132d77c.jpeg&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/804ccc65708142e3b84c6b030f4cd351f132d77c&quot; title=&quot;afbeelding&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/8/804ccc65708142e3b84c6b030f4cd351f132d77c_2_690x441.jpeg&quot; alt=&quot;afbeelding&quot; data-base62-sha1=&quot;iiZEFY8bF5f1oHY8Y3RXA0sXJyA&quot; width=&quot;690&quot; height=&quot;441&quot; srcset=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/8/804ccc65708142e3b84c6b030f4cd351f132d77c_2_690x441.jpeg, https://forum.umbraco.com/uploads/default/optimized/2X/8/804ccc65708142e3b84c6b030f4cd351f132d77c_2_1035x661.jpeg 1.5x, https://forum.umbraco.com/uploads/default/original/2X/8/804ccc65708142e3b84c6b030f4cd351f132d77c.jpeg 2x&quot; data-dominant-color=&quot;757289&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;h2&gt;&lt;a name=&quot;p-20002-new-a-breadcrumb-bar-5&quot; class=&quot;anchor&quot; href=&quot;https://forum.umbraco.com#p-20002-new-a-breadcrumb-bar-5&quot; aria-label=&quot;Heading link&quot;&gt;&lt;/a&gt;NEW! A &#x2018;breadcrumb&#x2019; bar&lt;/h2&gt;&#xA;&lt;p&gt;Each window that has a path (any window with a sidebar, like the content editor or media editor) now has a breadcrumb bar at the top. Previously it was almost impossible to get back to the root of a section and view the dashboards. This takes care of that.&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/2/2a47eb3936e90a804bbb5d0c919b73b71616c796.png&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/2a47eb3936e90a804bbb5d0c919b73b71616c796&quot; title=&quot;afbeelding&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/2/2a47eb3936e90a804bbb5d0c919b73b71616c796_2_690x194.png&quot; alt=&quot;afbeelding&quot; data-base62-sha1=&quot;6228CXkjguBxn7Z6CjCljTJl1xc&quot; width=&quot;690&quot; height=&quot;194&quot; srcset=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/2/2a47eb3936e90a804bbb5d0c919b73b71616c796_2_690x194.png, https://forum.umbraco.com/uploads/default/optimized/2X/2/2a47eb3936e90a804bbb5d0c919b73b71616c796_2_1035x291.png 1.5x, https://forum.umbraco.com/uploads/default/original/2X/2/2a47eb3936e90a804bbb5d0c919b73b71616c796.png 2x&quot; data-dominant-color=&quot;F9F8F5&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;h2&gt;&lt;a name=&quot;p-20002-new-taskbar-settings-6&quot; class=&quot;anchor&quot; href=&quot;https://forum.umbraco.com#p-20002-new-taskbar-settings-6&quot; aria-label=&quot;Heading link&quot;&gt;&lt;/a&gt;NEW! Taskbar settings&lt;/h2&gt;&#xA;&lt;p&gt;The taskbar/dock now has two settings the influence the presence of two sets of icons:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If you have the Umbraco AI CoPilot workspace installed, it will now show a chat icon from where you can open the CoPilot window. This is explicitly limited to a single window.&lt;/li&gt;&#xA;&lt;li&gt;Your pinned &#x2018;apps&#x2019; now also appear on the taskbar/dock as well as in the launcher.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Both these are enabled by default.&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/3/39fe4ed7b736c7509b08821585346fd14c7b5320.jpeg&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/39fe4ed7b736c7509b08821585346fd14c7b5320&quot; title=&quot;afbeelding&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/3/39fe4ed7b736c7509b08821585346fd14c7b5320_2_690x373.jpeg&quot; alt=&quot;afbeelding&quot; data-base62-sha1=&quot;8h24dXygN87tzOgOSm3aeHHdSbS&quot; width=&quot;690&quot; height=&quot;373&quot; srcset=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/3/39fe4ed7b736c7509b08821585346fd14c7b5320_2_690x373.jpeg, https://forum.umbraco.com/uploads/default/original/2X/3/39fe4ed7b736c7509b08821585346fd14c7b5320.jpeg 1.5x, https://forum.umbraco.com/uploads/default/original/2X/3/39fe4ed7b736c7509b08821585346fd14c7b5320.jpeg 2x&quot; data-dominant-color=&quot;8B8A9C&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;h2&gt;&lt;a name=&quot;p-20002-update-styling-and-appearance-7&quot; class=&quot;anchor&quot; href=&quot;https://forum.umbraco.com#p-20002-update-styling-and-appearance-7&quot; aria-label=&quot;Heading link&quot;&gt;&lt;/a&gt;UPDATE! Styling and appearance&lt;/h2&gt;&#xA;&lt;p&gt;The styling and theming options have been reworked to be much more faithful in reflecting what you&#x2019;d get. Each theme now has an attached background image and you can choose to match the background to the theme if you want to. Picking a custom background automatically disabled this setting to prevent accidental overrides.&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/5/5b8b8dbbc500da132716a83e5b42f33abf13d06c.png&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/5b8b8dbbc500da132716a83e5b42f33abf13d06c&quot; title=&quot;afbeelding&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/5/5b8b8dbbc500da132716a83e5b42f33abf13d06c_2_260x500.png&quot; alt=&quot;afbeelding&quot; data-base62-sha1=&quot;d3QrpvprxwL6k8MrUvbM9QW75hi&quot; width=&quot;260&quot; height=&quot;500&quot; srcset=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/5/5b8b8dbbc500da132716a83e5b42f33abf13d06c_2_260x500.png, https://forum.umbraco.com/uploads/default/optimized/2X/5/5b8b8dbbc500da132716a83e5b42f33abf13d06c_2_390x750.png 1.5x, https://forum.umbraco.com/uploads/default/original/2X/5/5b8b8dbbc500da132716a83e5b42f33abf13d06c.png 2x&quot; data-dominant-color=&quot;DCDCE2&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;p&gt;You can now also set the Umbraco theme (light/dark/high contrast) directly from the desktop settings instead of the default user menu, making it more convenient.&lt;/p&gt;&#xA;&lt;h2&gt;&lt;a name=&quot;p-20002-update-settings-reworked-8&quot; class=&quot;anchor&quot; href=&quot;https://forum.umbraco.com#p-20002-update-settings-reworked-8&quot; aria-label=&quot;Heading link&quot;&gt;&lt;/a&gt;UPDATE! Settings reworked&lt;/h2&gt;&#xA;&lt;p&gt;The settings menu had an overhaul and now consist of multiple categories. This was needed because of the increase of settings. I&#x2019;m considering making the settings a proper window, but for now it&#x2019;s still a modal.&lt;/p&gt;&#xA;&lt;h2&gt;&lt;a name=&quot;p-20002-experimental-connect-to-other-environments-9&quot; class=&quot;anchor&quot; href=&quot;https://forum.umbraco.com#p-20002-experimental-connect-to-other-environments-9&quot; aria-label=&quot;Heading link&quot;&gt;&lt;/a&gt;EXPERIMENTAL! Connect to other environments&lt;/h2&gt;&#xA;&lt;p&gt;I&#x2019;ve added an experimental feature where you can connect to other environments. This is a very first test on how we can work with different Umbraco instances in one desktop.&lt;/p&gt;&#xA;&lt;p&gt;In the settings, you can add multiple instances. You need to create an API user per target environment and provide that when adding the instance in UmbraDesktop. The API key is written away as securely as possible the same way Umbraco does it and you cannot retreive it anymore after it&#x2019;s saved.&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/a/a60f5583b569b4c1f354db6a8208923de8f32341.jpeg&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/a60f5583b569b4c1f354db6a8208923de8f32341&quot; title=&quot;afbeelding&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/a/a60f5583b569b4c1f354db6a8208923de8f32341_2_690x442.jpeg&quot; alt=&quot;afbeelding&quot; data-base62-sha1=&quot;nH270R2IE1P5stGlTaktg7DJuO5&quot; width=&quot;690&quot; height=&quot;442&quot; srcset=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/a/a60f5583b569b4c1f354db6a8208923de8f32341_2_690x442.jpeg, https://forum.umbraco.com/uploads/default/optimized/2X/a/a60f5583b569b4c1f354db6a8208923de8f32341_2_1035x663.jpeg 1.5x, https://forum.umbraco.com/uploads/default/original/2X/a/a60f5583b569b4c1f354db6a8208923de8f32341.jpeg 2x&quot; data-dominant-color=&quot;726F82&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;p&gt;Once you have at least one additional environment setup, an experimental section is added to the launcher with an &#x2018;Connection status&#x2019; app. This for now will show the run state the Umbraco version and the runtime mode.&lt;/p&gt;&#xA;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;lightbox-wrapper&quot;&gt;&lt;a class=&quot;lightbox&quot; href=&quot;https://forum.umbraco.com/uploads/default/original/2X/7/7afb09951fb9dbcc826e55bc8f36d5830851326e.png&quot; data-download-href=&quot;https://forum.umbraco.com/uploads/default/7afb09951fb9dbcc826e55bc8f36d5830851326e&quot; title=&quot;afbeelding&quot;&gt;&lt;img src=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/7/7afb09951fb9dbcc826e55bc8f36d5830851326e_2_690x189.png&quot; alt=&quot;afbeelding&quot; data-base62-sha1=&quot;hxW5ZngKOFzD1OQPAKLIhOmDRqC&quot; width=&quot;690&quot; height=&quot;189&quot; srcset=&quot;https://forum.umbraco.com/uploads/default/optimized/2X/7/7afb09951fb9dbcc826e55bc8f36d5830851326e_2_690x189.png, https://forum.umbraco.com/uploads/default/optimized/2X/7/7afb09951fb9dbcc826e55bc8f36d5830851326e_2_1035x283.png 1.5x, https://forum.umbraco.com/uploads/default/optimized/2X/7/7afb09951fb9dbcc826e55bc8f36d5830851326e_2_1380x378.png 2x&quot; data-dominant-color=&quot;DEDEE2&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;p&gt;Like I said, this is a first step and kind of a proof of concept on what we can do. Don&#x2019;t expect full editing of multiple environments though, that is practically impossible. But for instance a health check dashboard, or dragging and dropping media between environments could be in the cards.&lt;/p&gt;&#xA;            &lt;p&gt;&lt;small&gt;3 posts - 2 participants&lt;/small&gt;&lt;/p&gt;&#xA;            &lt;p&gt;&lt;a href=&quot;https://forum.umbraco.com/t/umbradesktop-17-2-0-is-here-lots-of-improvements-and-quality-of-life-updates/8582&quot;&gt;Read full topic&lt;/a&gt;&lt;/p&gt;]]></description>
                    <pubDate>Thu, 24 Sep 2026 12:47:47 Z</pubDate>
                        <category>community</category>
                        <category>forum</category>
                </item>
                <item>
                    <guid>https://forum.umbraco.com/t/new-package-umbraco-community-tiptoptiptap/8581</guid>
                    <title>New Package - Umbraco.Community.TipTopTipTap</title>
                    <link>https://forum.umbraco.com/t/new-package-umbraco-community-tiptoptiptap/8581</link>
                    <description><![CDATA[&lt;p&gt;There are some really cool TipTap extensions that exist in the TipTapASphere, we thought it might be good to have an open source package that brought them all together as options into Umbraco? to make Tip Tap more Tip Top.&lt;/p&gt;&#xA;&lt;p&gt;The one thing that most of our clients who&#x2019;ve upgraded to v17 have flagged, is when they cut and paste from word into the TipTap editor it&#x2019;s not quite the same experience as v13 and TinyMce, in terms of the stripping of inline styles and the cleaning up of markup generally&#x2026;&lt;/p&gt;&#xA;&lt;p&gt;&#x2026; we then found this existing TipTap office extension: &lt;a href=&quot;https://www.npmjs.com/package/@intevation/tiptap-extension-office-paste&quot; rel=&quot;noopener nofollow ugc&quot;&gt;&lt;code&gt;@intevation/tiptap-extension-office-paste&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;So as a POC we have added this to the package along with some further tweaks to get a much closer experience to TinyMCE in terms of the expected behaviour when you cut and paste MSO junk!&lt;/p&gt;&#xA;&lt;p&gt;So as a community we could use this package as a way to centralise adding cool extensions into TipTap to keep improving the editor experience or we could just create eight different versions of this functionality in eight different packages with different names!&lt;/p&gt;&#xA;&lt;p&gt;Anyway it is here: &lt;a href=&quot;https://marketplace.umbraco.com/package/umbraco.community.tiptoptiptap&quot; class=&quot;inline-onebox&quot;&gt;TipTopTipTap | Umbraco Marketplace&lt;/a&gt;&lt;/p&gt;&#xA;            &lt;p&gt;&lt;small&gt;3 posts - 2 participants&lt;/small&gt;&lt;/p&gt;&#xA;            &lt;p&gt;&lt;a href=&quot;https://forum.umbraco.com/t/new-package-umbraco-community-tiptoptiptap/8581&quot;&gt;Read full topic&lt;/a&gt;&lt;/p&gt;]]></description>
                    <pubDate>Thu, 24 Sep 2026 11:57:38 Z</pubDate>
                        <category>community</category>
                        <category>forum</category>
                </item>
                <item>
                    <guid>https://umbracocommunity.social/@owaincodes/117325554719089522</guid>
                    <title>OC.PowerSort has been updated</title>
                    <link>https://umbracocommunity.social/@owaincodes/117325554719089522</link>
                    <description><![CDATA[Happy to announce that OC.PowerSort has been updated: https://www.nuget.org/packages/OC.PowerSort. Mostly code cleanup, some security updates (updating vulnerable dependencies), and a couple of other small tweaks to make it Umbraco 18-compatible going forward. #umbraco]]></description>
                    <pubDate>Thu, 24 Sep 2026 11:31:00 Z</pubDate>
                        <category>community</category>
                        <category>social</category>
                        <category>mastodon</category>
                </item>
                <item>
                    <guid>https://umbraco.com/blog/umbraco-product-update-q3-2026/</guid>
                    <title>Umbraco Product Update - Q3 2026</title>
                    <link>https://umbraco.com/blog/umbraco-product-update-q3-2026/</link>
                    <description><![CDATA[Explore the Q3 2026 Umbraco product update. Learn about agent-ready AI features, Copilot Workspace, Editor MCP, and new enterprise-grade Umbraco Cloud enhancements.]]></description>
                    <pubDate>Thu, 24 Sep 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://community.umbraco.com/blog/2026/09/the-dutch-umbraco-community-is-back/</guid>
                    <title>The Dutch Umbraco community is back</title>
                    <link>https://community.umbraco.com/blog/2026/09/the-dutch-umbraco-community-is-back/</link>
                    <description><![CDATA[The Dutch Umbraco community is back! About 100 of us came together at STOOM in Apeldoorn for the very first Dutch Umbraco Alliance Festival. AI, Aspire, headless, a keynote I wasn&#x27;t supposed to give, and a venue that practically had to kick us out at closing time. Here&#x27;s my look back at the day.]]></description>
                    <pubDate>Thu, 24 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.tiptoptiptap</guid>
                    <title>Umbraco.Community.TipTopTipTap</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.tiptoptiptap</link>
                    <description><![CDATA[A Rich Text Editor (TipTap) extension for Umbraco that cleans up the debris Word/Office paste leaves behind - empty class=&quot;&quot; and style=&quot;&quot; attributes, and meaningless empty span marks - layered on top of @intevation/tiptap-extension-office-paste&#x27;s own mso-style and list cleanup.]]></description>
                    <pubDate>Thu, 24 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=eVmumdCstl4</guid>
                    <title>Installing uSkinned Site Builder Starter Kits and Theme add-ons with uSkinned Site Builder 7.2</title>
                    <link>https://www.youtube.com/watch?v=eVmumdCstl4</link>
                    <description><![CDATA[Installing uSkinned Site Builder Starter Kits and Theme add-ons just got much easier.&#xA;&#xA;In this quick overview, we show you how to browse and install templates directly from the new uSkinned Site Builder 7.2 Dashboard.&#xA;]]></description>
                    <pubDate>Wed, 23 Sep 2026 10:49:00 Z</pubDate>
                        <category>community</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://uskinned.net/blog/a-smarter-way-to-build-with-uskinned-site-builder-72/</guid>
                    <title>A smarter way to build with uSkinned Site Builder 7.2</title>
                    <link>https://uskinned.net/blog/a-smarter-way-to-build-with-uskinned-site-builder-72/</link>
                    <description><![CDATA[A smarter way to build with uSkinned Site Builder 7.2&#xA;&#xA;A new Dashboard, one-click Starter Kit installs, improved custom codebases, and much more.]]></description>
                    <pubDate>Wed, 23 Sep 2026 10:48:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.linkedin.com/posts/jeroen-breuer-3b135031_umbraco-community-ai-ugcPost-7508441002672553985-tOdJ/</guid>
                    <title>Dutch Umbraco Alliance Roundup</title>
                    <link>https://www.linkedin.com/posts/jeroen-breuer-3b135031_umbraco-community-ai-ugcPost-7508441002672553985-tOdJ/</link>
                    <description><![CDATA[Attended the Dutch #Umbraco Alliance Festival yesterday. You can read my post about it here: https://www.linkedin.com/posts/jeroen-breuer-3b135031_umbraco-community-ai-ugcPost-7508441002672553985-tOdJ/]]></description>
                    <pubDate>Wed, 23 Sep 2026 09:38:00 Z</pubDate>
                        <category>social</category>
                        <category>linkedin</category>
                        <category>community</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=yumJ--37Mu4</guid>
                    <title>New AI in Umbraco features</title>
                    <link>https://www.youtube.com/watch?v=yumJ--37Mu4</link>
                    <description><![CDATA[Creating and updating your website should be the least of your worries. With Umbraco, you get a content management system known and loved for its flexibility and great editing experience.&#xA;&#xA;Umbraco is easy to get started with install, set up, and host it yourself or let us take care of it all for you on Umbraco Cloud. https://try.umbraco.com&#xA;&#xA;Learn more about Umbraco on our website https://umbraco.com&#xA;Discover our Umbraco Community: https://community.umbraco.com/&#xA;Find the Umbraco source code on Github: https://github.com/umbraco/Umbraco-CMS&#xA;Visit the Umbraco Documentation: https://docs.umbraco.com]]></description>
                    <pubDate>Wed, 23 Sep 2026 08:44:09 Z</pubDate>
                        <category>hq</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/dyfort.umbraco.htageditor</guid>
                    <title>Dyfort.Umbraco.HTagEditor</title>
                    <link>https://marketplace.umbraco.com/package/dyfort.umbraco.htageditor</link>
                    <description><![CDATA[H-tag editor is a simple property editor that lets the editor pick a desired heading size (H1 down to H6) and the text-alignment (left, center or right). This package is a fork of [mastrup/ourHtagEditor](https://github.com/mastrup/ourHtagEditor)]]></description>
                    <pubDate>Wed, 23 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://shazwazza.com/post/smidge-5-is-out/</guid>
                    <title>Smidge 5 is out</title>
                    <link>https://shazwazza.com/post/smidge-5-is-out/</link>
                    <description><![CDATA[Smidge 5 is out&#xA;Smidge 5.0.0 is out on NuGet!&#xA;It&#x27;s been about a year since the last release, so sorry &#x27;bout that &#x1F605;. This one turned into a proper major version rather than another collection of small fixes: Smidge is now on .NET 10, NUglify is the only minifier, the MVC dependency is gone, the package structure is simpler, and a few long-running production bugs have finally been tracked down properly.&#xA;The full release notes have every detail. This is the story behind the parts that matter most.&#xA;One minifier instead of three&#xA;Smidge has historically shipped with its own hand-rolled JavaScript and CSS minifiers, JsMinifier and CssMinifier, while also offering NUglify through the separate Smidge.Nuglify package.&#xA;That made sense when those minifiers were first added, but over time it meant maintaining two different approaches to the same job. The built-in implementations had their own edge cases and bugs, while NUglify was already the better maintained and more capable option.&#xA;In v5 the old JSMin and CSSMin implementations are gone. NUglify is now included directly in the main Smidge package and is used automatically by the normal AddSmidge() and UseSmidge() setup. The separate Smidge.Nuglify package, along with AddSmidgeNuglify() and UseSmidgeNuglify(), is no longer needed.&#xA;This is a breaking change, but it&#x27;s also a much simpler default. There is one minification pipeline, one set of behaviour to test, and source maps work without having to opt into another package.&#xA;.NET 10 and no more MVC dependency&#xA;Smidge now targets .NET 10.&#xA;The old MVC controllers used to serve bundle, composite-file and source-map requests. Those have been replaced with lightweight minimal API endpoints, with the old action-filter behaviour moved into endpoint filters.&#xA;That removes the MVC dependency entirely. If you&#x27;re using Smidge in a small ASP.NET Core app you no longer need to pull MVC into the application just to serve a CSS or JavaScript bundle.&#xA;As part of that work, the old Smidge.Core project has also been folded into Smidge. There isn&#x27;t much value in making consumers understand the internal package split, and having the public surface spread across assemblies made the dependency graph harder to follow than it needed to be.&#xA;The practical result is fewer packages, fewer setup methods and less framework machinery underneath it all.&#xA;The random bundle crash was actually a race condition&#xA;There have been a couple of reports over the years of Smidge suddenly throwing a NullReferenceException from BundleFileSetGenerator.ValidateFile. The frustrating part was that it only seemed to happen in production, often after an application had been running for a while, and recycling the app pool would make it disappear.&#xA;The immediate symptom was a null file entry inside a bundle, but there was no obvious path that intentionally added one. I added defensive checks so a bad entry could be logged and skipped instead of taking down the entire bundle response, but that still didn&#x27;t explain how it got there.&#xA;The missing clue came from somebody who found that wrapping their view-based bundle registration in an application-level lock made the problem go away.&#xA;That pointed at the real problem. BundleManager is a singleton and its bundle dictionary was thread-safe, but each bundle stored its files in a normal List&lt;IWebFile&gt;. View-based declarations can run from multiple concurrent requests, which meant multiple threads could call List&lt;T&gt;.Add on the same list at the same time. List&lt;T&gt; doesn&#x27;t support concurrent writers, and if two additions collided during an internal resize the list could lose entries or end up with null slots.&#xA;It wasn&#x27;t the cache buster, app pool idle state or a missing source file. It was memory corruption inside a concurrently mutated list.&#xA;Bundle.Files is now backed by an immutable list and updated with ImmutableInterlocked.Update. Reads get a complete, unchanging snapshot with no locking cost, and concurrent writers use a compare-and-swap loop rather than corrupting the same backing array. There are also defensive null checks at bundle creation and file-set generation, because a bad input still shouldn&#x27;t turn into a broken page.&#xA;A concurrency test that registers files from 50 tasks at once reliably lost entries against the old implementation. With the new implementation every file is present and there are no nulls.&#xA;This is probably the most important fix in the release even if it&#x27;s not the flashiest one.&#xA;Missing cache files now return 404&#xA;The other production hardening work is around stale or invalid bundle URLs.&#xA;Composite bundle URLs contain references to already-processed cache files. If the cache was cleared, an in-memory cache disappeared after an application restart, or somebody deliberately requested a made-up file hash, Smidge used to call a throwing file lookup. That surfaced as a 500 and could be triggered repeatedly, which made it a fairly easy denial-of-service path.&#xA;The HTTP-facing composite and source-map handlers now use non-throwing lookups. If a requested cache file isn&#x27;t there, Smidge returns a normal 404 instead of throwing. Internal invariants still throw where they should - a source file configured in a real bundle disappearing is different from an arbitrary client asking for a stale cache path.&#xA;The same work fixed an older source-map issue where an unexpected sourceMappingURL request could fail with Could not parse ... as a valid smidge path. Invalid or missing source-map requests now just return 404, which is what the browser expects anyway.&#xA;Globs and directory bundles&#xA;There are a couple of smaller file-matching fixes that are worth calling out.&#xA;Pointing a bundle at a bare directory used to expand it to *.*. That could pull generated files such as .js.gz or .map into a JavaScript bundle and then hand binary gzip data to NUglify, which ended about as well as you&#x27;d expect. Bare directory bundles are now constrained to the bundle type, so JavaScript bundles get .js files and CSS bundles get .css files.&#xA;Recursive glob patterns are supported as well:&#xA;bundles.CreateCss(&quot;site&quot;, &quot;~/assets/css/**/*.css&quot;);&#xA;&#xA;They already worked for the common physical-file-provider case through .NET&#x27;s built-in globbing support, but the fallback used for embedded and composite file providers didn&#x27;t understand the **.css form correctly. Both **.css and **/*.css now behave consistently across providers.&#xA;Breaking changes&#xA;This is a major version, so there are a few things to account for when upgrading:&#xA;&#xA;Smidge now targets .NET 10.&#xA;Smidge.Core has been merged into Smidge and the separate assembly no longer exists.&#xA;Smidge.Nuglify, AddSmidgeNuglify() and UseSmidgeNuglify() are no longer needed. NUglify is built into the normal Smidge setup.&#xA;The old built-in JsMinifier and CssMinifier are gone.&#xA;A few old MVC handler and filter types are now internal implementation details.&#xA;Bundle.Files is now IReadOnlyList&lt;IWebFile&gt; rather than a mutable List&lt;IWebFile&gt;. Use Bundle.AddFile(IWebFile) if you need to add files programmatically.&#xA;&#xA;For most applications the upgrade should mainly be removing the old NUglify-specific setup and package reference, then rebuilding against .NET 10. If you only used the standard AddSmidge() / UseSmidge() APIs and predefined bundles, there shouldn&#x27;t be much else to change.&#xA;Build and release cleanup&#xA;The dependency set has been brought up to date, including the Microsoft.Extensions packages, SourceLink, xUnit, the test SDK and Moq.&#xA;I&#x27;ve also replaced GitVersion with MinVer. The version now comes directly from the Git tag: normal builds produce a 5.0.0-ci.&lt;height&gt; prerelease version and the v5.0.0 tag produces exactly 5.0.0. It&#x27;s considerably less machinery for what Smidge needs.&#xA;Give it a go&#xA;Smidge 5.0.0 is available on NuGet, and the source and full release notes are on GitHub.&#xA;This release took longer than it should have, but it also ended up being more substantial than I&#x27;d originally planned. The package setup is simpler, the runtime surface is smaller, and the two worst classes of production failure - corrupted bundle registrations and attacker-reachable cache misses turning into 500s - are now properly fixed rather than worked around.&#xA;If you run into anything while upgrading, please open an issue. And thanks to everyone who kept reporting the weird, hard-to-reproduce failures over the years. Those are never the fun ones to investigate, but in this case they led to a much better fix than another null check &#x1F642;]]></description>
                    <pubDate>Tue, 22 Sep 2026 19:28:07 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://qdraw.medium.com/dutch-umbraco-alliance-festival-2026-fbc9a7b75e59?source=rss------umbraco-5</guid>
                    <title>Dutch Umbraco Alliance Festival (2026)</title>
                    <link>https://qdraw.medium.com/dutch-umbraco-alliance-festival-2026-fbc9a7b75e59?source=rss------umbraco-5</link>
                    <description><![CDATA[&lt;div class=&quot;medium-feed-item&quot;&gt;&lt;p class=&quot;medium-feed-image&quot;&gt;&lt;a href=&quot;https://qdraw.medium.com/dutch-umbraco-alliance-festival-2026-fbc9a7b75e59?source=rss------umbraco-5&quot;&gt;&lt;img src=&quot;https://cdn-images-1.medium.com/max/600/0*gBatUZ-0nVVX50va.jpg&quot; width=&quot;600&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;medium-feed-snippet&quot;&gt;During the first edition of the Dutch Umbraco Alliance Festival, Lottie and Sebastian from Umbraco HQ took the audience through a year&amp;#x2026;&lt;/p&gt;&lt;p class=&quot;medium-feed-link&quot;&gt;&lt;a href=&quot;https://qdraw.medium.com/dutch-umbraco-alliance-festival-2026-fbc9a7b75e59?source=rss------umbraco-5&quot;&gt;Continue reading on Medium &#xBB;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;]]></description>
                    <pubDate>Tue, 22 Sep 2026 17:30:31 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://forum.umbraco.com/t/3-cool-new-packages-released-truecopy-errordashboard-and-contentdashboard/8572</guid>
                    <title>3 cool new packages released: TrueCopy, ErrorDashboard and ContentDashboard</title>
                    <link>https://forum.umbraco.com/t/3-cool-new-packages-released-truecopy-errordashboard-and-contentdashboard/8572</link>
                    <description><![CDATA[&lt;p&gt;Last weekend I tried to use Claude for making an Umbraco plugin with the new backoffice and to my surprise it works pretty well! I was able to make 3 plugins that I&#x2019;ve always wanted to make based on my experience with Umbraco and working with customers over the last 10 years. I&#x2019;m sure any of you can find at least 1 plugin that will enhance your Umbraco experience.&lt;/p&gt;&#xA;&lt;p&gt;TrueCopy - &lt;a href=&quot;https://marketplace.umbraco.com/package/our.umbraco.truecopy&quot; class=&quot;inline-onebox&quot;&gt;TrueCopy for Umbraco | Umbraco Marketplace&lt;/a&gt;&lt;br&gt;&#xA;Ever needed to copy a whole site within Umbraco? What&#x2019;s the first thing you do after the pages are copied? You go into the new pages and fix all the links because they still point to the original pages. This plugin will go through all the copied pages and point the links to the new pages.&lt;/p&gt;&#xA;&lt;p&gt;ErrorDashboard - &lt;a href=&quot;https://marketplace.umbraco.com/package/our.umbraco.errordashboard&quot; class=&quot;inline-onebox&quot;&gt;Error Dashboard for Umbraco | Umbraco Marketplace&lt;/a&gt;&lt;br&gt;&#xA;Browsers can send a report to your website in case they encounter a 404, 500, SSL or connection issue. This plugin collects those reports and sends an email in case there is a sudden spike of errors. (This only works with Chrome-based browsers for now. Firefox might support it in the future, it&#x2019;s behind a flag)&lt;/p&gt;&#xA;&lt;p&gt;ContentDashboard - &lt;a href=&quot;https://marketplace.umbraco.com/package/our.umbraco.contentdashboard&quot; class=&quot;inline-onebox&quot;&gt;Content Dashboard for Umbraco | Umbraco Marketplace&lt;/a&gt;&lt;br&gt;&#xA;This is for when you have a whole team of content editors working on the site. You can assign/transfer ownership of pages to users and see which pages are scheduled to be (un)published.&lt;/p&gt;&#xA;&lt;p&gt;I made the plugins for Umbraco 18 instead of 17 LTS since they are all new and not battle tested yet. If you want to try out a plugin without installing it on your own site you can easily clone the repository and run the included sample website.&lt;/p&gt;&#xA;            &lt;p&gt;&lt;small&gt;2 posts - 1 participant&lt;/small&gt;&lt;/p&gt;&#xA;            &lt;p&gt;&lt;a href=&quot;https://forum.umbraco.com/t/3-cool-new-packages-released-truecopy-errordashboard-and-contentdashboard/8572&quot;&gt;Read full topic&lt;/a&gt;&lt;/p&gt;]]></description>
                    <pubDate>Tue, 22 Sep 2026 01:34:35 Z</pubDate>
                        <category>community</category>
                        <category>forum</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.schemeweaver.typesafe</guid>
                    <title>Umbraco.Community.SchemeWeaver.TypeSafe</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.schemeweaver.typesafe</link>
                    <description><![CDATA[Calibrated, typed AI judgments for SchemeWeaver&#x27;s Schema.org auto-mapper, powered by TypeSafe System One (Jev). No LLM provider, no prompt parsing: the model selects from closed option sets and code owns the rules.]]></description>
                    <pubDate>Tue, 22 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://forum.umbraco.com/t/byteeditor-17-release-rebuilt-for-umbraco-17-with-a-new-design-token-system/8570</guid>
                    <title>ByteEditor 17 Release: Rebuilt for Umbraco 17, with a New Design Token System</title>
                    <link>https://forum.umbraco.com/t/byteeditor-17-release-rebuilt-for-umbraco-17-with-a-new-design-token-system/8570</link>
                    <description><![CDATA[&lt;p&gt;Hello Umbraco Community,&lt;/p&gt;&#xA;&lt;p&gt;I&#x2019;m happy to share that &lt;strong&gt;ByteEditor&lt;/strong&gt; Website Builder 17 package is here! A full migration to &lt;strong&gt;Umbraco&lt;/strong&gt; 17 and .NET 10 &#x2014; rebuilt from the ground up for the new Umbraco backoffice. This release focuses on what matters most for a major platform jump: stability and a solid foundation for what&#x2019;s next.&lt;/p&gt;&#xA;&lt;p&gt;Here&#x2019;s what&#x2019;s new in ByteEditor 17 Release:&lt;br&gt;&#xA;&lt;img src=&quot;https://forum.umbraco.com/images/emoji/twitter/pushpin.png?v=15&quot; title=&quot;:pushpin:&quot; class=&quot;emoji&quot; alt=&quot;:pushpin:&quot; loading=&quot;lazy&quot; width=&quot;20&quot; height=&quot;20&quot;&gt; Full Umbraco 17 &amp;amp; .NET 10 support. Rebuilt every editor extension and block preview for the new Lit-based backoffice.&lt;br&gt;&#xA;&lt;img src=&quot;https://forum.umbraco.com/images/emoji/twitter/pushpin.png?v=15&quot; title=&quot;:pushpin:&quot; class=&quot;emoji&quot; alt=&quot;:pushpin:&quot; loading=&quot;lazy&quot; width=&quot;20&quot; height=&quot;20&quot;&gt; Design Builder is now token-based. One structured system for colors, typography &amp;amp; buttons &#x2014; change a token, and every block across your site updates instantly.&lt;br&gt;&#xA;&lt;img src=&quot;https://forum.umbraco.com/images/emoji/twitter/pushpin.png?v=15&quot; title=&quot;:pushpin:&quot; class=&quot;emoji&quot; alt=&quot;:pushpin:&quot; loading=&quot;lazy&quot; width=&quot;20&quot; height=&quot;20&quot;&gt; Live SEO Page Structure &amp;amp; Content Stats Tabs. Separate tabs to see your full heading outline and keyword density update in real time, right inside the Page Builder &#x2014; no save required.&lt;br&gt;&#xA;&lt;img src=&quot;https://forum.umbraco.com/images/emoji/twitter/pushpin.png?v=15&quot; title=&quot;:pushpin:&quot; class=&quot;emoji&quot; alt=&quot;:pushpin:&quot; loading=&quot;lazy&quot; width=&quot;20&quot; height=&quot;20&quot;&gt; Per-block Theme Variants in an individual card, banner, or layout block.&lt;br&gt;&#xA;&lt;img src=&quot;https://forum.umbraco.com/images/emoji/twitter/pushpin.png?v=15&quot; title=&quot;:pushpin:&quot; class=&quot;emoji&quot; alt=&quot;:pushpin:&quot; loading=&quot;lazy&quot; width=&quot;20&quot; height=&quot;20&quot;&gt; Automatic upgrade script included. Migrating from an older version? The package migrates your existing content and design data to v17 for you.&lt;/p&gt;&#xA;&lt;p&gt;The live visual theme canvas and block animations aren&#x2019;t in this release yet &#x2014; we prioritized shipping a stable, fully-migrated v17 first. Both are on our roadmap, alongside AI-assisted site building we&#x2019;re already prototyping.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://forum.umbraco.com/images/emoji/twitter/backhand_index_pointing_right.png?v=15&quot; title=&quot;:backhand_index_pointing_right:&quot; class=&quot;emoji&quot; alt=&quot;:backhand_index_pointing_right:&quot; loading=&quot;lazy&quot; width=&quot;20&quot; height=&quot;20&quot;&gt; Read &lt;a href=&quot;https://byteeditor.net/blog/byteeditor-17-release-rebuilt-for-umbraco-17-with-a-new-design-token-system/&quot; rel=&quot;noopener nofollow ugc&quot;&gt;the full release article&lt;/a&gt;&lt;br&gt;&#xA;&lt;img src=&quot;https://forum.umbraco.com/images/emoji/twitter/backhand_index_pointing_right.png?v=15&quot; title=&quot;:backhand_index_pointing_right:&quot; class=&quot;emoji&quot; alt=&quot;:backhand_index_pointing_right:&quot; loading=&quot;lazy&quot; width=&quot;20&quot; height=&quot;20&quot;&gt; Watch &lt;a href=&quot;https://www.youtube.com/watch?v=8OySalbmEXk&quot; rel=&quot;noopener nofollow ugc&quot;&gt;the full walkthrough on Youtube&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;We&#x2019;d love your thoughts &#x2014; share your feedback! &lt;img src=&quot;https://forum.umbraco.com/images/emoji/twitter/speech_balloon.png?v=15&quot; title=&quot;:speech_balloon:&quot; class=&quot;emoji&quot; alt=&quot;:speech_balloon:&quot; loading=&quot;lazy&quot; width=&quot;20&quot; height=&quot;20&quot;&gt;&lt;/p&gt;&#xA;            &lt;p&gt;&lt;small&gt;1 post - 1 participant&lt;/small&gt;&lt;/p&gt;&#xA;            &lt;p&gt;&lt;a href=&quot;https://forum.umbraco.com/t/byteeditor-17-release-rebuilt-for-umbraco-17-with-a-new-design-token-system/8570&quot;&gt;Read full topic&lt;/a&gt;&lt;/p&gt;]]></description>
                    <pubDate>Mon, 21 Sep 2026 17:20:14 Z</pubDate>
                        <category>community</category>
                        <category>forum</category>
                </item>
                <item>
                    <guid>https://byteeditor.net/blog/byteeditor-17-release-rebuilt-for-umbraco-17-with-a-new-design-token-system/</guid>
                    <title>ByteEditor Website Builder 17 Release: Rebuilt for Umbraco 17, See What&#x27;s New and View a Demo.</title>
                    <link>https://byteeditor.net/blog/byteeditor-17-release-rebuilt-for-umbraco-17-with-a-new-design-token-system/</link>
                    <description><![CDATA[ByteEditor Website Builder 17 Release: Rebuilt for Umbraco 17, See What&#x27;s New and View a Demo.]]></description>
                    <pubDate>Mon, 21 Sep 2026 14:02:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/koben.umbraco.pendingchanges</guid>
                    <title>Koben.Umbraco.PendingChanges</title>
                    <link>https://marketplace.umbraco.com/package/koben.umbraco.pendingchanges</link>
                    <description><![CDATA[Shows Umbraco editors which of a page&#x27;s fields are saved but not published yet, who last changed each one and when, without leaving the content editor.]]></description>
                    <pubDate>Sun, 20 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.worktreedevport</guid>
                    <title>Umbraco.Community.WorktreeDevPort</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.worktreedevport</link>
                    <description><![CDATA[Gives every git worktree its own stable local dev port for an Umbraco site, discoverable by any tool via `git config` &#x2014; no pipe, socket, or running discovery endpoint needed.]]></description>
                    <pubDate>Sat, 19 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/our.umbraco.errordashboard</guid>
                    <title>Our.Umbraco.ErrorDashboard</title>
                    <link>https://marketplace.umbraco.com/package/our.umbraco.errordashboard</link>
                    <description><![CDATA[Tracks the errors real visitors actually hit - 404s, 500s, TLS and DNS failures - by asking their browsers to report them through Network Error Logging, then shows them on three Settings dashboards and emails subscribed users when a site&#x27;s error volume goes abnormal. Server logs record what the server thinks it served; NEL moves the observation point into the browser, so it also catches certificate problems, connection resets and failures on assets served from a CDN. Note that NEL is Chromium-only, so every figure is a lower bound rather than a count.]]></description>
                    <pubDate>Sat, 19 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/our.umbraco.contentdashboard</guid>
                    <title>Our.Umbraco.ContentDashboard</title>
                    <link>https://marketplace.umbraco.com/package/our.umbraco.contentdashboard</link>
                    <description><![CDATA[Three Content-section dashboards for Umbraco 18 that show a team of editors who owns which pages. My Content lists everything you own with its publish status and how long since it was touched, Scheduled lists your pending publish and unpublish dates, and an administrators-only Ownership tab hands over everything a departing editor owned in one click. Ownership is Umbraco&#x27;s built-in creator field, so transfers show up in the standard UI - and they deliberately avoid stamping UpdateDate, so a transfer never makes a page look freshly edited.]]></description>
                    <pubDate>Sat, 19 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/our.umbraco.truecopy</guid>
                    <title>Our.Umbraco.TrueCopy</title>
                    <link>https://marketplace.umbraco.com/package/our.umbraco.truecopy</link>
                    <description><![CDATA[Umbraco&#x27;s built-in Copy duplicates a subtree but copies property values verbatim, so every Content Picker, Multinode Treepicker, Multi URL Picker and rich-text internal link in the copies still points at the original pages. TrueCopy adds a True Copy action that performs the copy and then repoints every internal link whose target was itself part of the copy. Links pointing outside the copy are left alone but are counted and listed afterwards, because that is the one thing an editor cannot see for themselves. Custom property editors can be supported by implementing ILinkRewriter.]]></description>
                    <pubDate>Sat, 19 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://github.com/skybrud/Skybrud.Umbraco.Redirects/releases/tag/v17.1.0-beta003</guid>
                    <title>Skybrud.Umbraco.Redirects 17.1.0-beta003</title>
                    <link>https://github.com/skybrud/Skybrud.Umbraco.Redirects/releases/tag/v17.1.0-beta003</link>
                    <description><![CDATA[Award winning redirects manager for Umbraco.]]></description>
                    <pubDate>Fri, 18 Sep 2026 16:06:51 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.YouTube/releases/tag/v17.0.0-alpha003</guid>
                    <title>Limbo.Umbraco.YouTube 17.0.0-alpha003</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.YouTube/releases/tag/v17.0.0-alpha003</link>
                    <description><![CDATA[Video picker for inserting YouTube videos in Umbraco.]]></description>
                    <pubDate>Fri, 18 Sep 2026 15:52:39 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://github.com/abjerner/Limbo.Umbraco.UrlPicker/releases/tag/v17.0.0-alpha002</guid>
                    <title>Limbo.Umbraco.UrlPicker 17.0.0-alpha002</title>
                    <link>https://github.com/abjerner/Limbo.Umbraco.UrlPicker/releases/tag/v17.0.0-alpha002</link>
                    <description><![CDATA[Umbraco package that extends the functionality of Umbraco&#x27;s build-in Multi URL Picker property editor.]]></description>
                    <pubDate>Fri, 18 Sep 2026 15:42:11 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://github.com/abjerner/Limbo.Umbraco.TextBox/releases/tag/v17.0.0-alpha002</guid>
                    <title>Limbo.Umbraco.TextBox 17.0.0-alpha002</title>
                    <link>https://github.com/abjerner/Limbo.Umbraco.TextBox/releases/tag/v17.0.0-alpha002</link>
                    <description><![CDATA[Limbo Textbox&#xA0;(or&#xA0;Limbo.Umbraco.TextBox) is a package that adds new textbox and textarea property editors for Umbraco 10&#x2B;. While having similar functionality to the build in property editors, this package adds a few extra features.]]></description>
                    <pubDate>Fri, 18 Sep 2026 15:37:21 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.Tables/releases/tag/v17.0.0-alpha002</guid>
                    <title>Limbo.Umbraco.Tables 17.0.0-alpha002</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.Tables/releases/tag/v17.0.0-alpha002</link>
                    <description><![CDATA[Limbo.Umbraco.Tables is a package for Umbraco featuring property editor for building table based content.]]></description>
                    <pubDate>Fri, 18 Sep 2026 15:32:48 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.Skyfish/releases/tag/v17.0.0-alpha002</guid>
                    <title>Limbo.Umbraco.Skyfish 17.0.0-alpha002</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.Skyfish/releases/tag/v17.0.0-alpha002</link>
                    <description><![CDATA[Video picker for inserting Skyfish videos in Umbraco.]]></description>
                    <pubDate>Fri, 18 Sep 2026 15:26:11 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.Seo/releases/tag/v17.0.0-alpha003</guid>
                    <title>Limbo.Umbraco.Seo 17.0.0-alpha003</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.Seo/releases/tag/v17.0.0-alpha003</link>
                    <description><![CDATA[SEO package for Umbraco.]]></description>
                    <pubDate>Fri, 18 Sep 2026 14:49:24 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.MediaPicker/releases/tag/v17.0.0-alpha002</guid>
                    <title>Limbo.Umbraco.MediaPicker 17.0.0-alpha002</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.MediaPicker/releases/tag/v17.0.0-alpha002</link>
                    <description><![CDATA[Umbraco package that extends the functionality of Umbraco&#x27;s build-in media picker property editor.]]></description>
                    <pubDate>Fri, 18 Sep 2026 14:37:32 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.FilterList/releases/tag/v17.0.0-alpha002</guid>
                    <title>Limbo.Umbraco.FilterList 17.0.0-alpha002</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.FilterList/releases/tag/v17.0.0-alpha002</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Fri, 18 Sep 2026 14:32:44 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.DreamBroker/releases/tag/v17.0.0-alpha002</guid>
                    <title>Limbo.Umbraco.DreamBroker 17.0.0-alpha002</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.DreamBroker/releases/tag/v17.0.0-alpha002</link>
                    <description><![CDATA[Video picker for inserting DreamBroker videos in Umbraco.]]></description>
                    <pubDate>Fri, 18 Sep 2026 14:26:04 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://github.com/abjerner/Limbo.Umbraco.BlockList/releases/tag/v17.0.0-alpha002</guid>
                    <title>Limbo.Umbraco.BlockList 17.0.0-alpha002</title>
                    <link>https://github.com/abjerner/Limbo.Umbraco.BlockList/releases/tag/v17.0.0-alpha002</link>
                    <description><![CDATA[Umbraco package that extends the functionality of Umbraco&#x27;s build-in block list.]]></description>
                    <pubDate>Fri, 18 Sep 2026 14:15:59 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://mattbrailsford.dev/worktree-dev-port</guid>
                    <title>Retiring Named Pipes: A Simpler Fix for Dev Port Conflicts</title>
                    <link>https://mattbrailsford.dev/worktree-dev-port</link>
                    <description><![CDATA[Back in February I wrote about solving dev-server port conflicts with HTTP over named pipes. The short version: I run a lot of parallel Claude Code...]]></description>
                    <pubDate>Fri, 18 Sep 2026 13:31:22 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.johanreitsma.com/blogs/building-a-qr-code-walking-route-app-with-umbraco-nextjs-and-ai/</guid>
                    <title>Building a QR-Code Walking Route App with Umbraco, Next.js and AI</title>
                    <link>https://www.johanreitsma.com/blogs/building-a-qr-code-walking-route-app-with-umbraco-nextjs-and-ai/</link>
                    <description><![CDATA[.I built a QR-code walking route app using Umbraco 18, Next.js and an AI coding agent. In this post I explain the content model, the headless setup, how MCP was used to configure Umbraco, and which rules helped keep the AI-generated implementation co...]]></description>
                    <pubDate>Fri, 18 Sep 2026 12:15:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://umbraco.com/blog/uprofile-september-2026-aaron-sadler/</guid>
                    <title>uProfile September 2026 - Aaron Sadler</title>
                    <link>https://umbraco.com/blog/uprofile-september-2026-aaron-sadler/</link>
                    <description><![CDATA[Meet Aaron: Package Maintainer, Core Contributor, and Community Mentor]]></description>
                    <pubDate>Fri, 18 Sep 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.rachelbreeze.dev/blogs/umbraco-upgrade-decisions-is-this-still-the-right-site/</guid>
                    <title>Umbraco Upgrade Decisions: Is This Still the Right Site</title>
                    <link>https://www.rachelbreeze.dev/blogs/umbraco-upgrade-decisions-is-this-still-the-right-site/</link>
                    <description><![CDATA[Knowing where a site stands technically is only half the picture. In part two I look at whether the site is still fit for purpose, what Umbraco&#x27;s support lifecycle actually means in practice, and what staying on a version honestly commits you to, before deciding whether change is even the right call. Continue reading]]></description>
                    <pubDate>Fri, 18 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.engage.ai</guid>
                    <title>Umbraco.Engage.AI</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.engage.ai</link>
                    <description><![CDATA[AI integration for Umbraco Engage &#x2014; registers the Engage section as Copilot-compatible and provides Engage-specific AI tools.]]></description>
                    <pubDate>Fri, 18 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=US0HzOSWYcg</guid>
                    <title>Umbraco AI - Search and add media</title>
                    <link>https://www.youtube.com/watch?v=US0HzOSWYcg</link>
                    <description><![CDATA[Discover how our AI agent inside Umbraco finds the right hero image. It reads the blog post, searches the media library for an image that fits the subject and sets it as the hero banner, alt text included.]]></description>
                    <pubDate>Thu, 17 Sep 2026 14:12:57 Z</pubDate>
                        <category>community</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=Q-FKBoljAKQ</guid>
                    <title>Umbraco AI - Add best matching CTA</title>
                    <link>https://www.youtube.com/watch?v=Q-FKBoljAKQ</link>
                    <description><![CDATA[Discover how our AI agent inside Umbraco finds the right call to action on its own. It reads the page, searches the shared folder for the best matching CTA and adds the block to the page, with human approval at the right moments.]]></description>
                    <pubDate>Thu, 17 Sep 2026 14:11:18 Z</pubDate>
                        <category>community</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=AUAPp_TDLjU</guid>
                    <title>Umbraco AI - FAQ Blocks</title>
                    <link>https://www.youtube.com/watch?v=AUAPp_TDLjU</link>
                    <description><![CDATA[Discover how our AI agent inside Umbraco handles a FAQ block from start to finish. Ask how to add one, have it write AEO-optimised questions and answers, and let it place the block exactly where you want it on the page.&#xA;&#xA;Curious what Umbraco AI could do in your environment? Get in touch at www.truepeople.nl]]></description>
                    <pubDate>Thu, 17 Sep 2026 14:08:55 Z</pubDate>
                        <category>community</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=x_cZjWmUeKI</guid>
                    <title>Umbraco AI - Blog Creation</title>
                    <link>https://www.youtube.com/watch?v=x_cZjWmUeKI</link>
                    <description><![CDATA[Discover how our AI agent inside Umbraco writes a blog on its own and fills the entire page. From briefing to completed content blocks, with human approval at the right moments.&#xA;&#xA;Curious what Umbraco AI could do in your environment? Get in touch at www.truepeople.nl]]></description>
                    <pubDate>Thu, 17 Sep 2026 14:06:28 Z</pubDate>
                        <category>community</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://github.com/umbraco/Umbraco-CMS/releases/tag/release-18.2.0</guid>
                    <title>Umbraco CMS 18.2.0</title>
                    <link>https://github.com/umbraco/Umbraco-CMS/releases/tag/release-18.2.0</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Thu, 17 Sep 2026 07:47:19 Z</pubDate>
                        <category>hq</category>
                        <category>release</category>
                </item>
                <item>
                    <guid>https://github.com/umbraco/Umbraco-CMS/releases/tag/release-17.7.0</guid>
                    <title>Umbraco CMS 17.7.0</title>
                    <link>https://github.com/umbraco/Umbraco-CMS/releases/tag/release-17.7.0</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Thu, 17 Sep 2026 07:47:16 Z</pubDate>
                        <category>hq</category>
                        <category>release</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/festiveumbraco</guid>
                    <title>FestiveUmbraco</title>
                    <link>https://marketplace.umbraco.com/package/festiveumbraco</link>
                    <description><![CDATA[Temporarily transforms the Umbraco backoffice into a festive experience during date ranges you choose. Eight themes (Christmas, Halloween, New Year, Diwali, Valentine&#x27;s Day, Easter, St Patrick&#x27;s Day, Thanksgiving), each with its own subtle background effect, an occasional themed cameo, and a celebratory toast on publish. Run a single theme for one occasion, or plan the whole year ahead with a schedule that switches itself over. Backoffice only, off by default, and it never touches your content or your front end.]]></description>
                    <pubDate>Thu, 17 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.ai.moonshot</guid>
                    <title>Umbraco.AI.Moonshot</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.ai.moonshot</link>
                    <description><![CDATA[Moonshot AI (Kimi) provider for Umbraco AI]]></description>
                    <pubDate>Thu, 17 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/ubookit.web</guid>
                    <title>UBookIt.Web</title>
                    <link>https://marketplace.umbraco.com/package/ubookit.web</link>
                    <description><![CDATA[What a visitor actually sees: the uBookIt booking flow&#x27;s Razor views and view components, the booking page document type, the delivery API, and a stylesheet a site can restyle or replace. The markup itself is replaced by supplying a theme. Part of uBookIt, a booking system for Umbraco; install the UBookIt package rather than this one.]]></description>
                    <pubDate>Thu, 17 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.ai.alibaba</guid>
                    <title>Umbraco.AI.Alibaba</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.ai.alibaba</link>
                    <description><![CDATA[Alibaba Cloud (Qwen) provider for Umbraco AI]]></description>
                    <pubDate>Thu, 17 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/ubookit.persistence</guid>
                    <title>UBookIt.Persistence</title>
                    <link>https://marketplace.umbraco.com/package/ubookit.persistence</link>
                    <description><![CDATA[Entity Framework Core storage for uBookIt: entities, the DbContext, the Umbraco migration plan and the repositories behind the domain&#x27;s store abstractions. Requires SQL Server &#x2014; SQLite is not supported. Part of uBookIt, a booking system for Umbraco; install the UBookIt package rather than this one.]]></description>
                    <pubDate>Thu, 17 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.ai.openrouter</guid>
                    <title>Umbraco.AI.OpenRouter</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.ai.openrouter</link>
                    <description><![CDATA[OpenRouter provider for Umbraco AI]]></description>
                    <pubDate>Thu, 17 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/ubookit.backoffice</guid>
                    <title>UBookIt.Backoffice</title>
                    <link>https://marketplace.umbraco.com/package/ubookit.backoffice</link>
                    <description><![CDATA[The uBookIt backoffice: a Bookings section for managing bookable resources, availability, services and reservations, built with Lit and the Umbraco UI Library, plus the Management API behind it. Part of uBookIt, a booking system for Umbraco; install the UBookIt package rather than this one.]]></description>
                    <pubDate>Thu, 17 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/ubookit</guid>
                    <title>UBookIt</title>
                    <link>https://marketplace.umbraco.com/package/ubookit</link>
                    <description><![CDATA[A booking system for Umbraco 17: bookable resources, availability rules, services, and a booking flow a visitor can complete without JavaScript. Install this package &#x2014; it brings the domain, the storage, the backoffice section and the front-end rendering. Requires Umbraco 17 (LTS) and SQL Server.]]></description>
                    <pubDate>Thu, 17 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.ai.zai</guid>
                    <title>Umbraco.AI.ZAI</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.ai.zai</link>
                    <description><![CDATA[Z.AI provider for Umbraco AI]]></description>
                    <pubDate>Thu, 17 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.search.examine.reindex</guid>
                    <title>Umbraco.Community.Search.Examine.Reindex</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.search.examine.reindex</link>
                    <description><![CDATA[Add on for the Umbraco Search Examine provider that adds a re-index function to the backoffice UI]]></description>
                    <pubDate>Wed, 16 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/darkstrata.credentialcheck.umbraco</guid>
                    <title>DarkStrata.CredentialCheck.Umbraco</title>
                    <link>https://marketplace.umbraco.com/package/darkstrata.credentialcheck.umbraco</link>
                    <description><![CDATA[Blocks compromised passwords and logins for Umbraco members and backoffice users by checking them against the DarkStrata breach corpus using k-anonymity. Passwords never leave your server.]]></description>
                    <pubDate>Wed, 16 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.security.windowsauthentication</guid>
                    <title>Umbraco.Community.Security.WindowsAuthentication</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.security.windowsauthentication</link>
                    <description><![CDATA[Lets the Umbraco backoffice run behind IIS Windows Authentication with anonymous authentication disabled, without affecting front-end, member or custom authentication.]]></description>
                    <pubDate>Wed, 16 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://www.nevitech.co.uk/blog/running-the-umbraco-backoffice-behind-windows-authentication/</guid>
                    <title>Running the Umbraco backoffice behind Windows Authentication</title>
                    <link>https://www.nevitech.co.uk/blog/running-the-umbraco-backoffice-behind-windows-authentication/</link>
                    <description><![CDATA[From Umbraco 14 onwards, the backoffice stops working on sites where IIS has Windows Authentication on and anonymous authentication off. Here&#x27;s why that happens, and a small package that fixes it for Umbraco 17 and 18.]]></description>
                    <pubDate>Wed, 16 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/element.preview</guid>
                    <title>Element.Preview</title>
                    <link>https://marketplace.umbraco.com/package/element.preview</link>
                    <description><![CDATA[Preview every page an Umbraco Element is used on, before you publish it.]]></description>
                    <pubDate>Wed, 16 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://github.com/skybrud/Skybrud.Umbraco.Redirects/releases/tag/v17.1.0-beta002</guid>
                    <title>Skybrud.Umbraco.Redirects 17.1.0-beta002</title>
                    <link>https://github.com/skybrud/Skybrud.Umbraco.Redirects/releases/tag/v17.1.0-beta002</link>
                    <description><![CDATA[Award winning redirects manager for Umbraco.]]></description>
                    <pubDate>Tue, 15 Sep 2026 20:49:51 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://www.nathanielnunes.com/blog/umbraco-13-to-17-cloud-netsdk1045</guid>
                    <title>Upgrading Umbraco 13 to 17 on Umbraco Cloud? Set the .NET runtime first</title>
                    <link>https://www.nathanielnunes.com/blog/umbraco-13-to-17-cloud-netsdk1045</link>
                    <description><![CDATA[Umbraco Cloud deploy failing with NETSDK1045 after a 13 to 17 upgrade? The .NET runtime setting in the Cloud portal needs changing.]]></description>
                    <pubDate>Tue, 15 Sep 2026 11:30:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.Spa/releases/tag/v17.0.0-alpha001</guid>
                    <title>Limbo.Umbraco.Spa 17.0.0-alpha001</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.Spa/releases/tag/v17.0.0-alpha001</link>
                    <description><![CDATA[SPA (single page application) package for Umbraco.]]></description>
                    <pubDate>Mon, 14 Sep 2026 11:03:32 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.Spa/releases/tag/v13.0.0</guid>
                    <title>Limbo.Umbraco.Spa 13.0.0</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.Spa/releases/tag/v13.0.0</link>
                    <description><![CDATA[SPA (single page application) package for Umbraco.]]></description>
                    <pubDate>Mon, 14 Sep 2026 09:53:18 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.Seo/releases/tag/v17.0.0-alpha002</guid>
                    <title>Limbo.Umbraco.Seo 17.0.0-alpha002</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.Seo/releases/tag/v17.0.0-alpha002</link>
                    <description><![CDATA[SEO package for Umbraco.]]></description>
                    <pubDate>Mon, 14 Sep 2026 09:41:38 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://skttl.dev/blog/manage-video-in-umbraco-stream-elsewhere/</guid>
                    <title>Manage video in Umbraco, stream elsewhere</title>
                    <link>https://skttl.dev/blog/manage-video-in-umbraco-stream-elsewhere/</link>
                    <description><![CDATA[uMux now supports Umbraco 18, joined by uBun and uGum for syncing local videos to Mux, Bunny Stream or Gumlet without changing the editor workflow.]]></description>
                    <pubDate>Mon, 14 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://umbraco.com/blog/if-we-want-umbraco-to-grow-we-need-to-start-with-the-next-generation/</guid>
                    <title>If we want Umbraco to grow, we need to start with the next generation</title>
                    <link>https://umbraco.com/blog/if-we-want-umbraco-to-grow-we-need-to-start-with-the-next-generation/</link>
                    <description><![CDATA[How can education help Umbraco grow in new markets? Jonas Poulsen shares why introducing more developers to Umbraco can help build stronger local ecosystems.]]></description>
                    <pubDate>Mon, 14 Sep 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.nevitech.co.uk/blog/how-i-built-the-umbraco-kent-meetup-website-using-umbraco-and-astro/</guid>
                    <title>How I built the Umbraco Kent Meetup website using Umbraco and Astro</title>
                    <link>https://www.nevitech.co.uk/blog/how-i-built-the-umbraco-kent-meetup-website-using-umbraco-and-astro/</link>
                    <description><![CDATA[How I built the Umbraco Kent Meetup site headless on Umbraco 17 and Astro, hosted on Azure for less than a Cloud starter, without writing any of the code myself.]]></description>
                    <pubDate>Sun, 13 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://github.com/abjerner/Limbo.Umbraco.MultiNodeTreePicker/releases/tag/v17.0.0-alpha002</guid>
                    <title>Limbo.Umbraco.MultiNodeTreePicker 17.0.0-alpha002</title>
                    <link>https://github.com/abjerner/Limbo.Umbraco.MultiNodeTreePicker/releases/tag/v17.0.0-alpha002</link>
                    <description><![CDATA[Umbraco package that extends the functionality of Umbraco&#x27;s build-in Multinode Treepicker property editor.]]></description>
                    <pubDate>Fri, 11 Sep 2026 15:02:46 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=IBAFi6g4f3E</guid>
                    <title>Umbraco Cloud: From Running Projects to Growing Portfolios</title>
                    <link>https://www.youtube.com/watch?v=IBAFi6g4f3E</link>
                    <description><![CDATA[Most Umbraco agencies are running multiple client projects. Many are responsible for portfolios of ten, twenty, or hundreds of websites.&#xA;&#xA;Every new project brings more infrastructure to maintain, more environments to manage, more upgrades to plan, and more time spent on operational work that doesn&#x2019;t directly create value for clients.&#xA;&#xA;The question isn&#x27;t whether Umbraco Cloud has matured &#x2014; it has. The question is whether your delivery model has kept pace with what&#x27;s now possible on it.&#xA;&#xA;Join Umbraco HQ and agency leaders for an honest discussion about how Umbraco Cloud has evolved, what the latest Codegarden announcements mean in practice, and how leading partners are using Cloud to simplify operations, improve delivery, and support long-term portfolio growth.&#xA;&#xA;Whether you&#x2019;re reviewing your hosting strategy ahead of 13 end of life, looking to reduce infrastructure overhead, or simply exploring what&#x2019;s changed in Umbraco Cloud, this session will help you make an informed decision.&#xA;&#xA;Why watch: &#xA;&#xA;&#x2714;&#xFE0F; Understand whether Cloud makes commercial sense for your agency today&#xA;&#xA;&#x2714;&#xFE0F; Understand the new dedicated resource and load balancing options &#xA;&#xA;&#x2714;&#xFE0F; Get practical insight from agencies already running production portfolios on Cloud&#xA;&#xA;&#x2714;&#xFE0F; Understand what the 13 end-of-life means for your hosting strategy&#xA;&#xA;Learn more about Umbraco Cloud: https://umbraco.com/products/umbraco-cloud/ &#xA;Discover our support agreements: https://umbraco.com/products/support/]]></description>
                    <pubDate>Fri, 11 Sep 2026 11:35:27 Z</pubDate>
                        <category>hq</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.Seo/releases/tag/v17.0.0-alpha001</guid>
                    <title>Limbo.Umbraco.Seo 17.0.0-alpha001</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.Seo/releases/tag/v17.0.0-alpha001</link>
                    <description><![CDATA[SEO package for Umbraco.]]></description>
                    <pubDate>Fri, 11 Sep 2026 11:26:06 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/partnerdashboard</guid>
                    <title>PartnerDashboard</title>
                    <link>https://marketplace.umbraco.com/package/partnerdashboard</link>
                    <description><![CDATA[A branded partner dashboard for the Umbraco backoffice: a customizable welcome message, rotating marketing tips, latest blog posts pulled from an RSS feed, and customer care contact details.]]></description>
                    <pubDate>Fri, 11 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.umbradesktop.entertainment</guid>
                    <title>Umbraco.Community.UmbraDesktop.Entertainment</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.umbradesktop.entertainment</link>
                    <description><![CDATA[Games for UmbraDesktop. An optional add-on that puts Minesweeper on the desktop, in a window of its own and themed along with the rest of it.]]></description>
                    <pubDate>Fri, 11 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://github.com/abjerner/Limbo.Umbraco.MultiNodeTreePicker/releases/tag/v17.0.0-alpha001</guid>
                    <title>Limbo.Umbraco.MultiNodeTreePicker 17.0.0-alpha001</title>
                    <link>https://github.com/abjerner/Limbo.Umbraco.MultiNodeTreePicker/releases/tag/v17.0.0-alpha001</link>
                    <description><![CDATA[Umbraco package that extends the functionality of Umbraco&#x27;s build-in Multinode Treepicker property editor.]]></description>
                    <pubDate>Thu, 10 Sep 2026 09:40:29 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.ugum</guid>
                    <title>Umbraco.Community.uGum</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.ugum</link>
                    <description><![CDATA[Automatically sync local video assets from Umbraco to Gumlet]]></description>
                    <pubDate>Thu, 10 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.ubun</guid>
                    <title>Umbraco.Community.uBun</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.ubun</link>
                    <description><![CDATA[Automatically sync local video assets from Umbraco to Bunny Stream]]></description>
                    <pubDate>Thu, 10 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbhost.fallbackimagepickerproperty</guid>
                    <title>UmbHost.FallbackImagePickerProperty</title>
                    <link>https://marketplace.umbraco.com/package/umbhost.fallbackimagepickerproperty</link>
                    <description><![CDATA[An Umbraco image picker property editor with a fallback/default image that editors can optionally override. Maintained by UmbHost (continuation of the original Wholething package).]]></description>
                    <pubDate>Thu, 10 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.razorsearch</guid>
                    <title>Umbraco.Community.RazorSearch</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.razorsearch</link>
                    <description><![CDATA[Search rendered page content with Umbraco Search. Configurable CSS and published-property extraction, language variants, background rebuilds and an optional Examine companion.]]></description>
                    <pubDate>Thu, 10 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://www.thehumantech.agency/learn/writing-my-first-umbraco-extension-from-an-ai-button-to-generating-entire-pages/</guid>
                    <title>Writing My First Umbraco Extension: Building ThtaAI</title>
                    <link>https://www.thehumantech.agency/learn/writing-my-first-umbraco-extension-from-an-ai-button-to-generating-entire-pages/</link>
                    <description><![CDATA[Building my first Umbraco extension: lessons learned creating ThtaAI, from AI-powered property editors to full page generation and publishing.]]></description>
                    <pubDate>Thu, 10 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbhost.fallbacktextproperty</guid>
                    <title>UmbHost.FallbackTextProperty</title>
                    <link>https://marketplace.umbraco.com/package/umbhost.fallbacktextproperty</link>
                    <description><![CDATA[An Umbraco property editor with a fallback/default value (Mustache template over node properties) that editors can optionally override. Maintained by UmbHost (continuation of the original Wholething package).]]></description>
                    <pubDate>Thu, 10 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.Boolean/releases/tag/v17.0.0-alpha001</guid>
                    <title>Limbo.Umbraco.Boolean 17.0.0-alpha001</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.Boolean/releases/tag/v17.0.0-alpha001</link>
                    <description><![CDATA[Limbo.Umbraco.Boolean is a small package for Umbraco that adds a new boolean property editor which some extra functionality compared to Umbraco&#x27;s build-in boolean property editor.]]></description>
                    <pubDate>Wed, 09 Sep 2026 09:16:07 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.RecycleBin/releases/tag/v17.0.0-alpha001</guid>
                    <title>Limbo.Umbraco.RecycleBin 17.0.0-alpha001</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.RecycleBin/releases/tag/v17.0.0-alpha001</link>
                    <description><![CDATA[Limbo.Umbraco.RecycleBin is small package for Umbraco that takes out the trash.]]></description>
                    <pubDate>Wed, 09 Sep 2026 08:22:35 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbfy.umbraco.contentguard</guid>
                    <title>UMBFY.Umbraco.ContentGuard</title>
                    <link>https://marketplace.umbraco.com/package/umbfy.umbraco.contentguard</link>
                    <description><![CDATA[UMBFY Content Guard protects Umbraco content integrity with Where Used, Safe Delete, Publish Guard, Content Health, multilingual dependency validation, and dependency impact analysis. Detects supported references across Content, Media, Rich Text Editor internal links, Multi URL Picker, and nested Block Grid content for Umbraco CMS 17 and 18.]]></description>
                    <pubDate>Wed, 09 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.catalyst</guid>
                    <title>Umbraco.Community.Catalyst</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.catalyst</link>
                    <description><![CDATA[Umbraco Catalyst is a backend-extending package for Umbraco CMS with useful, out-of-the-box property editors and backoffice extensions. It currently includes Star Rating, CDN Image, and TipTap Emoji, with more features planned over time.]]></description>
                    <pubDate>Wed, 09 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umcontactmanager</guid>
                    <title>umContactManager</title>
                    <link>https://marketplace.umbraco.com/package/umcontactmanager</link>
                    <description><![CDATA[Umbraco backoffice package for managing contact form submissions, email history, and related CRM workflows. Centralizes incoming leads, spam filtering, outbound email, notifications, and optional AI assistance &#x2014; with shared validation for built-in forms, same-site custom UIs, and external API sources.]]></description>
                    <pubDate>Wed, 09 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://github.com/abjerner/Limbo.Umbraco.Time/releases/tag/v17.0.0-alpha001</guid>
                    <title>Limbo.Umbraco.Time 17.0.0-alpha001</title>
                    <link>https://github.com/abjerner/Limbo.Umbraco.Time/releases/tag/v17.0.0-alpha001</link>
                    <description><![CDATA[Umbraco package featuring a number of property editors related to picking date and time.]]></description>
                    <pubDate>Tue, 08 Sep 2026 10:34:19 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://medium.com/@kiranshaji95/production-grade-umbraco-hosting-on-azure-designing-for-high-traffic-marketing-websites-319517d7b306?source=rss------umbraco-5</guid>
                    <title>Production-Grade Umbraco Hosting on Azure: Designing for High-Traffic Marketing Websites</title>
                    <link>https://medium.com/@kiranshaji95/production-grade-umbraco-hosting-on-azure-designing-for-high-traffic-marketing-websites-319517d7b306?source=rss------umbraco-5</link>
                    <description><![CDATA[&lt;div class=&quot;medium-feed-item&quot;&gt;&lt;p class=&quot;medium-feed-image&quot;&gt;&lt;a href=&quot;https://medium.com/@kiranshaji95/production-grade-umbraco-hosting-on-azure-designing-for-high-traffic-marketing-websites-319517d7b306?source=rss------umbraco-5&quot;&gt;&lt;img src=&quot;https://cdn-images-1.medium.com/max/1254/1*v_HT0lA-l0osSqhCM69UAQ.png&quot; width=&quot;1254&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;medium-feed-snippet&quot;&gt;How we designed a scalable, secure, privately connected Umbraco platform using Azure App Service, Front Door, Private Endpoints, NAT&amp;#x2026;&lt;/p&gt;&lt;p class=&quot;medium-feed-link&quot;&gt;&lt;a href=&quot;https://medium.com/@kiranshaji95/production-grade-umbraco-hosting-on-azure-designing-for-high-traffic-marketing-websites-319517d7b306?source=rss------umbraco-5&quot;&gt;Continue reading on Medium &#xBB;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;]]></description>
                    <pubDate>Tue, 08 Sep 2026 08:44:14 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.nevitech.co.uk/blog/diagnosing-a-redis-session-timeout-that-only-happened-in-production/</guid>
                    <title>Diagnosing a Redis session timeout that only happened in production</title>
                    <link>https://www.nevitech.co.uk/blog/diagnosing-a-redis-session-timeout-that-only-happened-in-production/</link>
                    <description><![CDATA[A StackExchange.Redis 3 upgrade caused session timeouts that only appeared in production, and the real cause turned out to be .NET ThreadPool starvation rather than the client itself.]]></description>
                    <pubDate>Tue, 08 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://medium.com/@kiranshaji95/production-grade-umbraco-hosting-on-azure-designing-for-high-traffic-marketing-websites-319517d7b306</guid>
                    <title>Production-Grade Umbraco Hosting on Azure: Designing for High-Traffic Marketing Websites</title>
                    <link>https://medium.com/@kiranshaji95/production-grade-umbraco-hosting-on-azure-designing-for-high-traffic-marketing-websites-319517d7b306</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Tue, 08 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=4EHDXJT17hA</guid>
                    <title>Demo: Extending Umbraco Automate</title>
                    <link>https://www.youtube.com/watch?v=4EHDXJT17hA</link>
                    <description><![CDATA[Learn how to extend Umbraco Automate beyond default out-of-the-box features by creating custom triggers, actions, and connection types directly inside your .NET code.&#xA;&#xA;This technical walkthrough covers how to connect custom MVC forms and standard Umbraco event notifications (INotification) into visual workflows. It demonstrates how to build custom actions, manage third-party API credentials, and safely handle dynamic data binding without writing custom front-end code.&#xA;&#xA;Who This Video Is For&#xA;This session is designed for Umbraco developers, backend engineers, and solution architects who need to integrate custom business logic, internal data sources, or third-party APIs into Umbraco Automate.&#xA;&#xA;CHAPTERS&#xA;00:00 - Extending Umbraco Automate Overview&#xA;00:56 - Custom Trip Inquiry Workflow Demo&#xA;02:08 - Setting Up Umbraco INotification Events&#xA;03:29 - Creating a Custom Notification Trigger&#xA;05:01 - Defining Trigger Settings and Data Shapes&#xA;06:09 - Event Mapping and Idempotency Keys&#xA;08:17 - Building Custom Actions with ActionBase&#xA;09:04 - Static vs. Dynamic Settings&#xA;10:17 - Managing Credentials with Connection Types&#xA;15:07 - Data Binding Syntax and Advanced Extension Points&#xA;&#xA;RESOURCES &amp; LINKS&#xA;&#xA;Go download Umbraco Automate add-on: https://marketplace.umbraco.com/package/umbraco.automate &#xA;Get started with the Umbraco Automate documentation: https://docs.umbraco.com/umbraco-automate&#xA;Umbraco Automate product page: https://umbraco.com/products/add-ons/automate/]]></description>
                    <pubDate>Mon, 07 Sep 2026 12:50:25 Z</pubDate>
                        <category>hq</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.forms.excelexport</guid>
                    <title>Umbraco.Community.Forms.ExcelExport</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.forms.excelexport</link>
                    <description><![CDATA[Excel XLSX exporters for Umbraco Forms.]]></description>
                    <pubDate>Mon, 07 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://skttl.dev/blog/bringing-excel-export-back-to-umbraco-forms/</guid>
                    <title>Bringing Excel export back to Umbraco Forms</title>
                    <link>https://skttl.dev/blog/bringing-excel-export-back-to-umbraco-forms/</link>
                    <description><![CDATA[A client preferred Excel exports, so I built a small Umbraco Forms package to bring them back using SpreadCheetah.]]></description>
                    <pubDate>Mon, 07 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://umbracocommunity.social/@owaincodes/117219390176125270</guid>
                    <title>umbPublisher - Umbraco Obsidian plugin updated</title>
                    <link>https://umbracocommunity.social/@owaincodes/117219390176125270</link>
                    <description><![CDATA[umbPublisher - a plugin for Obsidian that lets you push your notes to Umbraco has been updated. Version 1.5.3 is now available. Fixes a bug where images within notes weren&#x27;t pushed to the media section of Umbraco. https://community.obsidian.md/plugins/umbpublisher#umbraco #obsidian]]></description>
                    <pubDate>Sat, 05 Sep 2026 17:32:00 Z</pubDate>
                        <category>community</category>
                        <category>social</category>
                        <category>mastodon</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/utpro.feature.geolocation</guid>
                    <title>uTPro.Feature.GeoLocation</title>
                    <link>https://marketplace.umbraco.com/package/utpro.feature.geolocation</link>
                    <description><![CDATA[IP-based geolocation for Umbraco sites. Detects visitor country via CDN headers (Cloudflare CF-IPCountry, AWS CloudFront-Viewer-Country, Azure Front Door X-Azure-ClientIP) with an offline MMDB fallback (iplocate.io). Resolves country codes to .NET CultureInfo for seamless multi-language switching. Pluggable provider chain, Umbraco middleware integration, and configurable culture mapping.]]></description>
                    <pubDate>Sat, 05 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://community.umbraco.com/blog/2026/09/when-the-community-comes-together-celebrating-the-first-ever-umbraco-india-festival/</guid>
                    <title>When the Community Comes Together: Celebrating the first-ever Umbraco India Festival</title>
                    <link>https://community.umbraco.com/blog/2026/09/when-the-community-comes-together-celebrating-the-first-ever-umbraco-india-festival/</link>
                    <description><![CDATA[Last week, something very exciting happened in India. In this post, you will hear the story of what happens when the community comes together.]]></description>
                    <pubDate>Fri, 04 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.automate.salesforce</guid>
                    <title>Umbraco.Community.Automate.Salesforce</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.automate.salesforce</link>
                    <description><![CDATA[Salesforce connection and actions for Umbraco Automate]]></description>
                    <pubDate>Fri, 04 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://github.com/abjerner/Limbo.Umbraco.UrlPicker/releases/tag/v17.0.0-alpha001</guid>
                    <title>Limbo.Umbraco.UrlPicker 17.0.0-alpha001</title>
                    <link>https://github.com/abjerner/Limbo.Umbraco.UrlPicker/releases/tag/v17.0.0-alpha001</link>
                    <description><![CDATA[Umbraco package that extends the functionality of Umbraco&#x27;s build-in Multi URL Picker property editor.]]></description>
                    <pubDate>Thu, 03 Sep 2026 14:38:51 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.umbradesktop</guid>
                    <title>Umbraco.Community.UmbraDesktop</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.umbradesktop</link>
                    <description><![CDATA[An OS-style windowed desktop for the Umbraco backoffice. Open content, media, settings and other sections as real draggable, resizable windows and work in several of them side by side. Includes a grouped app launcher with pinnable apps, a taskbar, and per-app window chrome, all styled to match the backoffice.]]></description>
                    <pubDate>Thu, 03 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://owain.codes/blog/2026/september/initialsautolink/</guid>
                    <title>Initials.Autolink</title>
                    <link>https://owain.codes/blog/2026/september/initialsautolink/</link>
                    <description><![CDATA[Add a keyword, and every old article that mentions it links itself. Initials.AutoLink for Umbraco 17&#x2B;, and the first open source package from Initials Labs.]]></description>
                    <pubDate>Thu, 03 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://skttl.dev/blog/the-ultimate-umbraco-site-structure-revisited/</guid>
                    <title>The ultimate Umbraco site structure, revisited</title>
                    <link>https://skttl.dev/blog/the-ultimate-umbraco-site-structure-revisited/</link>
                    <description><![CDATA[How I use the Ultimate Site Structure, with a custom URL provider and content finder that keep the frontpage separate from the site root.]]></description>
                    <pubDate>Thu, 03 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/initials.autolink</guid>
                    <title>Initials.AutoLink</title>
                    <link>https://marketplace.umbraco.com/package/initials.autolink</link>
                    <description><![CDATA[Turns keyword mentions in Umbraco rich text and markdown into links to the corresponding page or external link, at render time, with no editor action required. Stored markup is never modified, so an article picks up a link the day somebody adds the keyword. Keywords live in a backoffice section of their own rather than on your document types, and point at a page or an external URL through Umbraco&#x27;s Multi URL Picker. Shows which pages carry links and lets individual ones be switched off. Multilingual.]]></description>
                    <pubDate>Thu, 03 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://www.girirajdigital.com/umbraco-india-festival</guid>
                    <title>The First Umbraco India Festival</title>
                    <link>https://www.girirajdigital.com/umbraco-india-festival</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Wed, 02 Sep 2026 14:44:00 Z</pubDate>
                        <category>blog</category>
                        <category>community</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.Vimeo/releases/tag/v17.0.0-alpha001</guid>
                    <title>Limbo.Umbraco.Vimeo 17.0.0-alpha001</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.Vimeo/releases/tag/v17.0.0-alpha001</link>
                    <description><![CDATA[Video picker for inserting Vimeo videos in Umbraco.]]></description>
                    <pubDate>Wed, 02 Sep 2026 13:32:45 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://medium.com/@anujt2596/resetting-an-umbraco-backoffice-password-at-the-database-level-9a6cb9c2ed0a?source=rss-ef07e047ada5------2</guid>
                    <title>Resetting an Umbraco Backoffice Password at the Database Level</title>
                    <link>https://medium.com/@anujt2596/resetting-an-umbraco-backoffice-password-at-the-database-level-9a6cb9c2ed0a?source=rss-ef07e047ada5------2</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Wed, 02 Sep 2026 06:44:23 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://medium.com/@anujt2596/resetting-an-umbraco-backoffice-password-at-the-database-level-9a6cb9c2ed0a?source=rss------umbraco-5</guid>
                    <title>Resetting an Umbraco Backoffice Password at the Database Level</title>
                    <link>https://medium.com/@anujt2596/resetting-an-umbraco-backoffice-password-at-the-database-level-9a6cb9c2ed0a?source=rss------umbraco-5</link>
                    <description><![CDATA[&lt;div class=&quot;medium-feed-item&quot;&gt;&lt;p class=&quot;medium-feed-image&quot;&gt;&lt;a href=&quot;https://medium.com/@anujt2596/resetting-an-umbraco-backoffice-password-at-the-database-level-9a6cb9c2ed0a?source=rss------umbraco-5&quot;&gt;&lt;img src=&quot;https://cdn-images-1.medium.com/max/1917/1*jfiEI1FWPvdGHoAVJ57MQA.png&quot; width=&quot;1917&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;medium-feed-snippet&quot;&gt;Are you locked out of your Umbraco account?&lt;/p&gt;&lt;p class=&quot;medium-feed-link&quot;&gt;&lt;a href=&quot;https://medium.com/@anujt2596/resetting-an-umbraco-backoffice-password-at-the-database-level-9a6cb9c2ed0a?source=rss------umbraco-5&quot;&gt;Continue reading on Medium &#xBB;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;]]></description>
                    <pubDate>Wed, 02 Sep 2026 06:44:23 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://cornehoskam.com/posts/meet-engageai-an-ai-copilot-built-for-marketers/</guid>
                    <title>Meet Engage.AI: an AI copilot built for marketers</title>
                    <link>https://cornehoskam.com/posts/meet-engageai-an-ai-copilot-built-for-marketers/</link>
                    <description><![CDATA[Umbraco Engage.AI is in public beta: an AI copilot answering marketer questions about campaigns, segments and A/B tests, straight from your Engage data.]]></description>
                    <pubDate>Wed, 02 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://github.com/abjerner/Limbo.Umbraco.BlockList/releases/tag/v17.0.0-alpha001</guid>
                    <title>Limbo.Umbraco.BlockList 17.0.0-alpha001</title>
                    <link>https://github.com/abjerner/Limbo.Umbraco.BlockList/releases/tag/v17.0.0-alpha001</link>
                    <description><![CDATA[Umbraco package that extends the functionality of Umbraco&#x27;s build-in block list.]]></description>
                    <pubDate>Tue, 01 Sep 2026 15:13:44 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/megaform.umbraco</guid>
                    <title>MegaForm.Umbraco</title>
                    <link>https://marketplace.umbraco.com/package/megaform.umbraco</link>
                    <description><![CDATA[MegaForm module for Umbraco CMS &#x2014; form builder, multi-view, submissions, and workflow extensibility.]]></description>
                    <pubDate>Tue, 01 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://skrift.io/issues/#131</guid>
                    <title>Skrift Issue #131</title>
                    <link>https://skrift.io/issues/#131</link>
                    <description><![CDATA[Featuring guest post by Paul Seal on &quot;I thought bots were attacking my site (it was me)&quot;]]></description>
                    <pubDate>Tue, 01 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                        <category>skrift</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/esatto.umbraco.backoffice.cookiescan</guid>
                    <title>Esatto.Umbraco.Backoffice.CookieScan</title>
                    <link>https://marketplace.umbraco.com/package/esatto.umbraco.backoffice.cookiescan</link>
                    <description><![CDATA[The site-side half of the Esatto cookie scanner. Adds one management-API endpoint that appends a scan&#x27;s findings to the cookie policy page as a draft - append-only, never publishing, never rewriting an editor&#x27;s legal wording - plus the API user and client credentials that authenticate the post. Companion to Esatto.Umbraco.Backoffice.CookieBanner, whose cookieDefinition element type and cookiePolicy page it writes into. Run the scan itself with the Esatto.CookieScan.Cli tool. Wiring is one AddCookieScan() call and one SeedCookieScanApiUserAsync() on start.]]></description>
                    <pubDate>Tue, 01 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://www.nevitech.co.uk/blog/rebuilding-our-umbraco-website-part-1/</guid>
                    <title>Rebuilding our Umbraco Website - Part 1</title>
                    <link>https://www.nevitech.co.uk/blog/rebuilding-our-umbraco-website-part-1/</link>
                    <description><![CDATA[Our own website spent years at the bottom of the list. Last year we rebuilt it on Umbraco 13, moved it to 17, rewrote every page and did the SEO work properly. Here is what we did and what we would do differently.]]></description>
                    <pubDate>Tue, 01 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.nevitech.co.uk/blog/rebuilding-our-umbraco-website/</guid>
                    <title>Rebuilding our Umbraco Website</title>
                    <link>https://www.nevitech.co.uk/blog/rebuilding-our-umbraco-website/</link>
                    <description><![CDATA[Our own website spent years at the bottom of the list. Last year we rebuilt it on Umbraco 13, moved it to 17, rewrote every page and did the SEO work properly. Here is what we did and what we would do differently.]]></description>
                    <pubDate>Tue, 01 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.nevitech.co.uk/blog/umbraco-17-output-caching-part-2/</guid>
                    <title>Umbraco 17 Output Caching - Part 2</title>
                    <link>https://www.nevitech.co.uk/blog/umbraco-17-output-caching-part-2/</link>
                    <description><![CDATA[Umbraco 17 on .NET 10 is quick, so we did not need page caching at all. We built it anyway to see what was possible before trying it on a client site. The implementation, the rules for when not to cache, and what it cost.]]></description>
                    <pubDate>Tue, 01 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.nevitech.co.uk/blog/umbraco-csp-nonces-with-output-caching-part-3/</guid>
                    <title>Umbraco CSP Nonces with Output Caching - Part 3</title>
                    <link>https://www.nevitech.co.uk/blog/umbraco-csp-nonces-with-output-caching-part-3/</link>
                    <description><![CDATA[Cache a page containing a CSP nonce and every later visitor gets a stale nonce that no longer matches their header, so the browser blocks the lot. Most advice says pick one. Here is how to have both.]]></description>
                    <pubDate>Tue, 01 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.nevitech.co.uk/blog/umbraco-csp-nonces-with-output-caching/</guid>
                    <title>Umbraco CSP Nonces with Output Caching</title>
                    <link>https://www.nevitech.co.uk/blog/umbraco-csp-nonces-with-output-caching/</link>
                    <description><![CDATA[Cache a page containing a CSP nonce and every later visitor gets a stale nonce that no longer matches their header, so the browser blocks the lot. Most advice says pick one. Here is how to have both.]]></description>
                    <pubDate>Tue, 01 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.nevitech.co.uk/blog/umbraco-17-output-caching/</guid>
                    <title>Umbraco 17 Output Caching</title>
                    <link>https://www.nevitech.co.uk/blog/umbraco-17-output-caching/</link>
                    <description><![CDATA[Umbraco 17 on .NET 10 is quick, so we did not need page caching at all. We built it anyway to see what was possible before trying it on a client site. The implementation, the rules for when not to cache, and what it cost.]]></description>
                    <pubDate>Tue, 01 Sep 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://medium.com/@contacts_81271/umbraco-sicherheit-praxisleitfaden-zum-schutz-ihres-cms-29e1c26b0414?source=rss------umbraco-5</guid>
                    <title>Umbraco-Sicherheit: Praxisleitfaden zum Schutz Ihres CMS</title>
                    <link>https://medium.com/@contacts_81271/umbraco-sicherheit-praxisleitfaden-zum-schutz-ihres-cms-29e1c26b0414?source=rss------umbraco-5</link>
                    <description><![CDATA[&lt;div class=&quot;medium-feed-item&quot;&gt;&lt;p class=&quot;medium-feed-image&quot;&gt;&lt;a href=&quot;https://medium.com/@contacts_81271/umbraco-sicherheit-praxisleitfaden-zum-schutz-ihres-cms-29e1c26b0414?source=rss------umbraco-5&quot;&gt;&lt;img src=&quot;https://cdn-images-1.medium.com/max/1672/1*iCiI64uT0Ux6cHb9-fxglw.png&quot; width=&quot;1672&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;medium-feed-snippet&quot;&gt;Umbraco geh&amp;#xF6;rt zu den weltweit f&amp;#xFC;hrenden Open-Source-Enterprise-CMS auf .NET-Basis und bietet standardm&amp;#xE4;&amp;#xDF;ig eine extrem stabile&amp;#x2026;&lt;/p&gt;&lt;p class=&quot;medium-feed-link&quot;&gt;&lt;a href=&quot;https://medium.com/@contacts_81271/umbraco-sicherheit-praxisleitfaden-zum-schutz-ihres-cms-29e1c26b0414?source=rss------umbraco-5&quot;&gt;Continue reading on Medium &#xBB;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;]]></description>
                    <pubDate>Mon, 31 Aug 2026 16:05:57 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.BorgerDk/releases/tag/v17.0.0-alpha001</guid>
                    <title>Limbo.Umbraco.BorgerDk 17.0.0-alpha001</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.BorgerDk/releases/tag/v17.0.0-alpha001</link>
                    <description><![CDATA[Umbraco package for integrating with the Borger.dk web service.]]></description>
                    <pubDate>Mon, 31 Aug 2026 13:42:48 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://dev.to/bernadet/umbraco-2-way-relations-umbraco-features-you-didnt-know-you-needed-3a2d</guid>
                    <title>Umbraco 2-way relations - Umbraco Features You Didn&#x27;t Know You Needed</title>
                    <link>https://dev.to/bernadet/umbraco-2-way-relations-umbraco-features-you-didnt-know-you-needed-3a2d</link>
                    <description><![CDATA[&lt;h2&gt;&#xA;  &#xA;  &#xA;  Relations in Umbraco: asking the question your picker can&#x27;t answer&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;You&#x27;ve probably used a Content Picker (or a Multinode Treepicker) to wire content together. A page picks a banner, a landing page picks a set of related articles, a policy picks the older policy it replaces. That gives you one direction for free: open the page, and you can see exactly what it points at.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But pickers only answer one question. &lt;strong&gt;&quot;What does this page use?&quot;&lt;/strong&gt; is easy. &lt;strong&gt;&quot;What uses this?&quot;&lt;/strong&gt; is not. The picker property lives on the node that did the picking, not on the node that got picked. If you want to go the other way, your only option is make the pages hierarchical or to loop over every piece of content in the tree and check whether its picker field happens to mention the node you care about.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That&#x27;s exactly the gap Umbraco&#x27;s &lt;a href=&quot;https://docs.umbraco.com/umbraco-cms/model-your-content/content-types-and-structure/relations&quot; rel=&quot;noopener noreferrer&quot;&gt;Relations&lt;/a&gt; are for. A Relation is a first-class, queryable link between two entities that you can walk in either direction via &lt;a href=&quot;https://docs.umbraco.com/umbraco-cms/extend-your-project/server-side-extensions/management/using-services/relationservice&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;IRelationService&lt;/code&gt;&lt;/a&gt;:  &lt;code&gt;GetByParentId&lt;/code&gt; for &quot;what does this point at&quot;, &lt;code&gt;GetByChildId&lt;/code&gt; for &quot;what points at this&quot;. This post walks through a small example project that uses a Relation to answer a question a picker alone can&#x27;t.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  The scenario: policies that supersede each other&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Imagine a &quot;Policy Page&quot; doctype. Editors write a new policy, and pick (via a normal Multinode Treepicker) which older policy or policies it supersedes. That&#x27;s a completely standard one-way relationship: new policy &#x2192; picks &#x2192; old policy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The picker answers &quot;which policies does this one supersede&quot; perfectly well. What it can&#x27;t answer is the question an editor actually asks when they land on an old policy page: &lt;strong&gt;&quot;Has this been superseded, and by what?&quot;&lt;/strong&gt; Nothing on that old policy&#x27;s own data points back to the newer one &#x2014; the pick lives entirely on the other node. Short of scanning every Policy Page in the site for one whose &lt;code&gt;supersedes&lt;/code&gt; field happens to mention this node&#x27;s ID, there&#x27;s no way to answer it.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  Why not just use Umbraco&#x27;s built-in &quot;Related Document&quot; relation?&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Umbraco ships a built-in relation type for exactly this kind of document-to-document link, aliased &lt;code&gt;umbDocument&lt;/code&gt;. It would technically work &#x2014; except it&#x27;s a single shared, undifferentiated bucket. Anything in Umbraco (media picker usages, link pickers, whatever else) can write a generic document-to-document reference into it, so a reverse lookup on &lt;code&gt;umbDocument&lt;/code&gt; can&#x27;t reliably tell you &quot;which policy superseded this one&quot; versus any other unrelated reference someone else recorded into the same bucket.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The fix is a &lt;strong&gt;relation type of your own&lt;/strong&gt; &lt;code&gt;policySupersedes&lt;/code&gt; so a reverse lookup on that alias only ever returns the thing you actually care about.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  The implementation&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The example lives in four files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;1. The doctype and the picker.&lt;/strong&gt; Add a &quot;Policy Page&quot; content type with a &lt;code&gt;bodyText&lt;/code&gt; richtext property and a &lt;code&gt;supersedes&lt;/code&gt; Multinode Treepicker, filtered so it can only pick other Policy Pages.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the plain, one-way picker. Nothing special yet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;2. Syncing the picker into a Relation.&lt;/strong&gt; &lt;code&gt;PolicySupersedesRelationSyncHandler&lt;/code&gt; listens for &lt;code&gt;ContentSavedNotification&lt;/code&gt;. Every time a Policy Page is saved, it wipes out whatever relations already exist for that node under the &lt;code&gt;policySupersedes&lt;/code&gt; alias and rebuilds them from whatever&#x27;s currently picked:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight csharp&quot;&gt;&lt;code&gt;    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;Handle&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ContentSavedNotification&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;notification&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;        &lt;span class=&quot;k&quot;&gt;foreach&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;IContent&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;content&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;notification&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SavedEntities&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&#xA;        &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;            &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ContentType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Alias&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;PolicyPageContentTypeAlias&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&#xA;            &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;                &lt;span class=&quot;nf&quot;&gt;SyncSupersedesRelations&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&#xA;            &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&#xA;    &lt;span class=&quot;k&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;SyncSupersedesRelations&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;IContent&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;newPolicy&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;        &lt;span class=&quot;n&quot;&gt;IRelationType&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;relationType&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_relationService&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;GetRelationTypeByAlias&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ExampleConstants&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;RelationTypeAlias&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&#xA;            &lt;span class=&quot;p&quot;&gt;??&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;CreateRelationType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;&#xA;&#xA;        &lt;span class=&quot;k&quot;&gt;foreach&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;IRelation&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;existingRelation&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_relationService&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;GetByParentId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;newPolicy&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ExampleConstants&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;RelationTypeAlias&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;&#xA;        &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;            &lt;span class=&quot;n&quot;&gt;_relationService&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Delete&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;existingRelation&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&#xA;        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&#xA;        &lt;span class=&quot;k&quot;&gt;foreach&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;supersededPolicyId&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;GetPickedContentIds&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;newPolicy&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;&#xA;        &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;            &lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;relation&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;Relation&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;newPolicy&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;supersededPolicyId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;relationType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&#xA;            &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;                &lt;span class=&quot;n&quot;&gt;Comment&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;$&quot;Marked as superseded on &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DateTime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;UtcNow&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&#xA;            &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;&#xA;            &lt;span class=&quot;n&quot;&gt;_relationService&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Save&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;relation&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&#xA;        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;As shown above, you can also add a comment to a relation, which we use to store additional information on when the policy was superseded in our example, which can then be shown again on the Policy page. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The relation type itself is created on demand as non-bidirectional, &lt;code&gt;Document-to-Document&lt;/code&gt;, and importantly &lt;code&gt;isDependency: true&lt;/code&gt;:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight csharp&quot;&gt;&lt;code&gt;    &lt;span class=&quot;k&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;IRelationType&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;CreateRelationType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;        &lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;relationType&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;RelationType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&#xA;            &lt;span class=&quot;s&quot;&gt;&quot;Policy Supersedes&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&#xA;            &lt;span class=&quot;n&quot;&gt;ExampleConstants&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;RelationTypeAlias&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&#xA;            &lt;span class=&quot;n&quot;&gt;isBidrectional&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&#xA;            &lt;span class=&quot;n&quot;&gt;parentObjectType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Constants&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ObjectTypes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&#xA;            &lt;span class=&quot;n&quot;&gt;childObjectType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Constants&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ObjectTypes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&#xA;            &lt;span class=&quot;n&quot;&gt;isDependency&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&#xA;            &lt;span class=&quot;n&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&#xA;        &lt;span class=&quot;n&quot;&gt;_relationService&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Save&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;relationType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&#xA;        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;relationType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;3. Wiring it up.&lt;/strong&gt; Add the notification handler with the standard &lt;code&gt;IComposer&lt;/code&gt; boilerplate, nothing Relations-specific.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;4. Reading both directions in the view.&lt;/strong&gt; This is where the payoff shows up. &lt;code&gt;policyPage.cshtml&lt;/code&gt; reads the picker property directly for the forward direction, and calls &lt;code&gt;RelationService.GetByChildId&lt;/code&gt; for the reverse direction, the direction the picker alone could never give you:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight csharp&quot;&gt;&lt;code&gt;&lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;supersededByRelations&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;RelationService&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;GetByChildId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Model&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ExampleConstants&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;RelationTypeAlias&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight csharp&quot;&gt;&lt;code&gt;&lt;span class=&quot;nf&quot;&gt;@if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;supersededByRelations&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Any&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;())&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;div&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;style&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;border: 2px solid red; padding: 1em; margin-bottom: 1em;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt;&#xA;        &lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;strong&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;This&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;has&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;been&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;superseded&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&amp;lt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;strong&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt;&#xA;        &lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ul&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt;&#xA;            &lt;span class=&quot;nf&quot;&gt;@foreach&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;relation&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;supersededByRelations&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&#xA;            &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;                &lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;newerPolicy&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ContentQuery&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Content&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;relation&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ParentId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&#xA;                &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;newerPolicy&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;is&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&#xA;                    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;                        &lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;li&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt;&#xA;                            &lt;span class=&quot;n&quot;&gt;Replaced&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;by&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;@newerPolicy.Url()&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;@newerPolicy&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt;&#xA;                            &lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;br&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;/&amp;gt;&lt;/span&gt;&#xA;                            &lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;small&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;@relation&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Comment&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;small&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt;&#xA;                        &lt;span class=&quot;p&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;li&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt;&#xA;                    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;            &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;        &lt;span class=&quot;p&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ul&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;div&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;Open an old policy that&#x27;s been superseded, and the page now knows it  without ever scanning the rest of the tree.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fck836v1ca0lzekvqhwbg.png&quot; class=&quot;article-body-image-wrapper&quot;&gt;&lt;img src=&quot;https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fck836v1ca0lzekvqhwbg.png&quot; alt=&quot;Old policy page superseded&quot; width=&quot;587&quot; height=&quot;316&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  The other payoff: you can&#x27;t delete a still-referenced policy without a warning&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Setting &lt;code&gt;IsDependency = true&lt;/code&gt; on the relation type isn&#x27;t just documentation, it plugs straight into Umbraco&#x27;s own dependency checks. Try to delete or unpublish a policy that&#x27;s still marked as superseded by another one, and the backoffice will warn you it&#x27;s in use, the same way it would for a media item still referenced by a Content Picker elsewhere.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the practical version of &quot;what if you need to delete a shared component, but three pages still reference it&quot;: with a plain picker, deleting the referenced item is silent and the reference just breaks. With a proper Relation, Umbraco already knows something depends on it and stops you.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  When to reach for this&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;strong&gt;A picker is enough&lt;/strong&gt; when you only ever need to ask &quot;what does this content point at&quot;, the normal, forward direction.&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;strong&gt;The built-in &quot;Related Document&quot; relation&lt;/strong&gt; is fine for generic, low-stakes cross-references where you don&#x27;t care about precision on the reverse lookup.&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;strong&gt;A custom relation type&lt;/strong&gt; is worth the extra notification-handler code when you need a reverse lookup you can trust &quot;what points at me&quot; and/or you want deletion/unpublish safety for content that&#x27;s still depended on.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Pickers tell you what a page uses. Relations are what let you ask the question in the other direction.&lt;/p&gt;]]></description>
                    <pubDate>Mon, 31 Aug 2026 09:47:52 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://umbraco.com/blog/building-software-with-a-clean-conscience-why-umbraco-is-now-a-certified-b-corporation/</guid>
                    <title>Building Software with a Clean Conscience</title>
                    <link>https://umbraco.com/blog/building-software-with-a-clean-conscience-why-umbraco-is-now-a-certified-b-corporation/</link>
                    <description><![CDATA[Umbraco earns B Corp Certification, validating 20 years of ESG performance, 53% female hire diversity, ISO 27001 security, and sustainable tech growth.]]></description>
                    <pubDate>Mon, 31 Aug 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbfy.umbraco.collaboration</guid>
                    <title>UMBFY.Umbraco.Collaboration</title>
                    <link>https://marketplace.umbraco.com/package/umbfy.umbraco.collaboration</link>
                    <description><![CDATA[UMBFY Collaboration adds real-time presence, editing awareness, change notifications, and conflict prevention to the Umbraco backoffice for Umbraco CMS 17.x and 18.x. Redis is optional for multi-node hosts.]]></description>
                    <pubDate>Mon, 31 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.Innomate/releases/tag/v17.0.0-alpha001</guid>
                    <title>Limbo.Umbraco.Innomate 17.0.0-alpha001</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.Innomate/releases/tag/v17.0.0-alpha001</link>
                    <description><![CDATA[Umbraco integration for the Innomate API.]]></description>
                    <pubDate>Sun, 30 Aug 2026 11:28:05 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://www.proworks.com/blog/archive/announcing-the-new-proworks-umbraco-media-audit-package/</guid>
                    <title>Announcing the new ProWorks Umbraco Media Audit package!</title>
                    <link>https://www.proworks.com/blog/archive/announcing-the-new-proworks-umbraco-media-audit-package/</link>
                    <description><![CDATA[One of the things I&#x27;ve been asked for by clients more often than I&#x27;d expect in the last few months is to help them audit all their media so that they can clean out everything they&#x27;re not using.&#xA;The good news is that with access to a database and Claude, writing a little reusable python script the scrape everything was exceptionally easy. But by the third request I&#x27;d decided maybe that rather than doing this for my clients I could give them the autonomy and flexibility to do this by themselves on demand. After all, it&#x27;s a waste of their time and budget to need a developer to audit their media whenever they&#x27;re wanting to clean it up. The benefit of this package is it gives your content editors the autonomy to audit and clean up their own media on their own schedule whenever they want!&#xA;So with this, I present to you the new ProWorks Umbraco Media Audit package that I&#x27;ve released for Umbraco 17! This tidy little package adds a dashboard into your media section where you can run an audit on all of your media, discover what&#x27;s in use and what isn&#x27;t all in one location without having to click through item after item.&#xA;&#xA;There&#x27;s some caveats of course - the audit script is only searching for anything that&#x27;s directly referenced with a picker. If a client pasted a URL manually anywhere or is linking to an item in an e-mail marketing campaign, there&#x27;s currently no way for the Media Audit to tell. So it&#x27;s important that human eyes look at these items when determining if they&#x27;re still relevant, and getting detail on an item by item basis is very easy to do.&#xA;&#xA;And once an admin-only user has determined none of the media is in use, they can mark them all for deletion and move them into the recycle bin. If they&#x27;re really content all is well then there&#x27;s even a purge button to clear the recycle bin and remove the items from disk!&#xA;&#xA;We have a few features that we want to add in the future:&#xA;&#xA;Field auditing - do you have your alt text or captions filled out? We&#x27;d like to make this &quot;plug and play&quot; so you can add any fields that you want and the tool will check if they&#x27;re empty.&#xA;Integrating the above with Umbraco AI - if a field is empty, fill it in with Umbraco AI&#x27;s integrations to read media files and write alt text.&#xA;Display a thumbnail of the item in the dashboard (if it&#x27;s an image) to help with visual recognition&#xA;Check if images don&#x27;t have crops selected or set&#xA;&#xA;Are there any features that you&#x27;d love to see? Let us know!]]></description>
                    <pubDate>Fri, 28 Aug 2026 21:00:20 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.johanreitsma.com/blogs/quick-tip-extending-the-delivery-apis-content-response/</guid>
                    <title>Quick Tip: Extending the Delivery API&#x27;s Content Response</title>
                    <link>https://www.johanreitsma.com/blogs/quick-tip-extending-the-delivery-apis-content-response/</link>
                    <description><![CDATA[A quick look at how to extend Umbraco 17&#x2019;s Delivery API response with content from elsewhere in the content tree, without building a custom endpoint....]]></description>
                    <pubDate>Fri, 28 Aug 2026 20:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=Mp-5Uy7pZ9E</guid>
                    <title>umbraCoffee - Back To School</title>
                    <link>https://www.youtube.com/watch?v=Mp-5Uy7pZ9E</link>
                    <description><![CDATA[Welcome to your monthly dose of #umbraCoffee&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;! Your hosts - Marcin and Callum - together with their guest(s) will drive through all of the community news and happenings in the Umbraco world. So... grab a cuppa, join us LIVE and enjoy!&#xA;&#xA;See ya?!&#xA;&#xA;---&#xA;&#x2615; Wanna buy us a coffee/pizza/donuts?&#xA;https://www.buymeacoffee.com/umbracoffee&#xA;---&#xA;&#xA;Notes:&#xA;&#xA;// TODO]]></description>
                    <pubDate>Fri, 28 Aug 2026 10:02:44 Z</pubDate>
                        <category>community</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.adpreview</guid>
                    <title>SplatDev.Umbraco.Plugins.AdPreview</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.adpreview</link>
                    <description><![CDATA[Image ad preview property editor for Umbraco 13 and 17.]]></description>
                    <pubDate>Fri, 28 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://umbracofreelancer.net/blog/umbraco-ai-ships-with-nothing-in-it-and-that-is-the-whole-job/</guid>
                    <title>Umbraco AI ships with nothing in it</title>
                    <link>https://umbracofreelancer.net/blog/umbraco-ai-ships-with-nothing-in-it-and-that-is-the-whole-job/</link>
                    <description><![CDATA[Umbraco AI ships with nothing in it]]></description>
                    <pubDate>Thu, 27 Aug 2026 21:18:00 Z</pubDate>
                        <category>blog</category>
                        <category>community</category>
                </item>
                <item>
                    <guid>https://umbracocommunity.social/@owaincodes/117167568702510172</guid>
                    <title>OC.UFMFallbacks has been updated</title>
                    <link>https://umbracocommunity.social/@owaincodes/117167568702510172</link>
                    <description><![CDATA[OC.UFMFallbacks has been updated]]></description>
                    <pubDate>Thu, 27 Aug 2026 15:53:00 Z</pubDate>
                        <category>community</category>
                        <category>social</category>
                        <category>mastodon</category>
                </item>
                <item>
                    <guid>https://www.arroact.com/blogs/umbraco-18-elements-a-new-way-to-manage-reusable-content/</guid>
                    <title>Umbraco 18 Elements: A New Way to Manage Reusable Content</title>
                    <link>https://www.arroact.com/blogs/umbraco-18-elements-a-new-way-to-manage-reusable-content/</link>
                    <description><![CDATA[Umbraco 18 Elements: A New Way to Manage Reusable Content]]></description>
                    <pubDate>Thu, 27 Aug 2026 13:56:00 Z</pubDate>
                        <category>blog</category>
                        <category>community</category>
                </item>
                <item>
                    <guid>https://www.nathanielnunes.com/blog/umbraco-automate-teams-notification</guid>
                    <title>Notify a Teams channel when you publish content, using Umbraco Automate</title>
                    <link>https://www.nathanielnunes.com/blog/umbraco-automate-teams-notification</link>
                    <description><![CDATA[Use Umbraco Automate to post a notification to a Microsoft Teams channel whenever content is published, with no custom C#. A step by step walkthrough on Umbraco 17.]]></description>
                    <pubDate>Thu, 27 Aug 2026 11:30:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/usync.automate.actions</guid>
                    <title>uSync.Automate.Actions</title>
                    <link>https://marketplace.umbraco.com/package/usync.automate.actions</link>
                    <description><![CDATA[Run uSync imports, exports and reports from Umbraco Automate workflows, and trigger workflows from uSync events.]]></description>
                    <pubDate>Thu, 27 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/jumoo.translationmanager.automate</guid>
                    <title>Jumoo.TranslationManager.Automate</title>
                    <link>https://marketplace.umbraco.com/package/jumoo.translationmanager.automate</link>
                    <description><![CDATA[Create, submit and approve Translation Manager jobs from Umbraco Automate workflows, and start workflows from translation events.]]></description>
                    <pubDate>Thu, 27 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/usync.automate</guid>
                    <title>uSync.Automate</title>
                    <link>https://marketplace.umbraco.com/package/usync.automate</link>
                    <description><![CDATA[uSync for Umbraco Automate settings]]></description>
                    <pubDate>Thu, 27 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/usync.automate.actions.complete</guid>
                    <title>uSync.Automate.Actions.Complete</title>
                    <link>https://marketplace.umbraco.com/package/usync.automate.actions.complete</link>
                    <description><![CDATA[Push or pull content/media and settings items, and create restore points, via uSync.Complete&#x27;s publisher from Umbraco Automate workflows, and trigger workflows when a publish is received.]]></description>
                    <pubDate>Thu, 27 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/dotsee.responsiveimages</guid>
                    <title>DotSee.ResponsiveImages</title>
                    <link>https://marketplace.umbraco.com/package/dotsee.responsiveimages</link>
                    <description><![CDATA[Responsive image markup for Umbraco, driven entirely by configuration. Define breakpoint rule sets once in appsettings.json, then render them anywhere with a tag helper or from Razor: picture elements with per-breakpoint art direction, img tags with srcset and sizes, and responsive CSS background images with focal-point-aware background-position.&#xA;&#xA;Every crop is anchored on the focal point the editor set in the back office. That is the part a CDN cannot do for you: an edge resizer has to guess where the subject of an image is, while Umbraco already knows, because someone chose it. Faces stay in frame at every breakpoint.&#xA;&#xA;Lazy loading is native browser lazy loading plus inline LQIP (Low-Quality Image Placeholder) blur-ups generated at render time, so there is no runtime JavaScript dependency at all: no lazysizes, no bundler, nothing extra to ship. Above-the-fold images can instead be marked to load eagerly at high fetch priority, and they register preload hints that a single tag helper emits in your layout head, which is what actually moves your Largest Contentful Paint.&#xA;&#xA;A strict Content Security Policy is supported first class: pass a nonce and the placeholder styles and scripts are emitted as nonce-tagged blocks instead of inline attributes. Rendered markup and resolved rule sets are cached, and the cache is invalidated automatically when content or media changes, including through the cache refreshers that reach every node in a load-balanced setup.&#xA;&#xA;Optionally, hand the resizing off to the edge: point a rule set at Cloudflare Image Transformations and the package composes Cloudflare image URLs, focal point and all, instead of asking your origin to crop. Optional CDN cache purging drops replaced images from the edge when an editor saves new media. Both are off by default.&#xA;&#xA;The package ships a JSON schema for full appsettings IntelliSense and auto-registers through an Umbraco composer, so installing it and adding one addTagHelper line is the whole setup.]]></description>
                    <pubDate>Thu, 27 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=QSosnmqi6L8</guid>
                    <title>Blog schrijven &#x2B; vullen AI Agent Umbraco | True People</title>
                    <link>https://www.youtube.com/watch?v=QSosnmqi6L8</link>
                    <description><![CDATA[Ontdek hoe onze AI-agent binnen Umbraco zelfstandig een blog schrijft &#xE9;n de volledige pagina vult. Van briefing tot gevulde contentblokken, met een menselijke goedkeuring op de juiste momenten.&#xA;&#xA;Benieuwd wat Umbraco AI in jouw omgeving kan doen? Neem contact op via www.truepeople.nl]]></description>
                    <pubDate>Wed, 26 Aug 2026 14:15:31 Z</pubDate>
                        <category>community</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://world.hey.com/boriseetgerink/automated-umbraco-log- monitoring-and-bug-fixing-on-a-claude-code-routine-fec9eb6a</guid>
                    <title>Automated Umbraco log monitoring and bug fixing on a Claude Code Routine</title>
                    <link>https://world.hey.com/boriseetgerink/automated-umbraco-log- monitoring-and-bug-fixing-on-a-claude-code-routine-fec9eb6a</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Wed, 26 Aug 2026 11:12:00 Z</pubDate>
                        <category>blog</category>
                        <category>community</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.Emply/releases/tag/v13.0.0</guid>
                    <title>Limbo.Umbraco.Emply 13.0.0</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.Emply/releases/tag/v13.0.0</link>
                    <description><![CDATA[Umbraco integration for the Emply API.]]></description>
                    <pubDate>Wed, 26 Aug 2026 09:03:43 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://shazwazza.com/post/examine-v4-is-out/</guid>
                    <title>Examine v4 is out </title>
                    <link>https://shazwazza.com/post/examine-v4-is-out/</link>
                    <description><![CDATA[Examine v4 is out - Shazwazza]]></description>
                    <pubDate>Wed, 26 Aug 2026 00:30:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.powertoys</guid>
                    <title>Umbraco.Community.PowerToys</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.powertoys</link>
                    <description><![CDATA[A dashboard in the Umbraco Settings section that collects small backoffice admin tools (&quot;power toys&quot;) in one place, each with its own on/off switch. Ships with tools including a Navbar Clock, Login Customizer, Logo Changer, Help Menu Editor, Environment Indicator, Theme Maker, and Dashboard Manager, and other packages can register their own power toys onto the same dashboard without touching this package&#x27;s code.]]></description>
                    <pubDate>Wed, 26 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbrascript</guid>
                    <title>UmbraScript</title>
                    <link>https://marketplace.umbraco.com/package/umbrascript</link>
                    <description><![CDATA[UmbraScript is an xTalk-style scripting language for inspecting and automating content and media in Umbraco CMS. UmbraScript is a interpreted and dynamic language that should feel natural to developers and content editors alike.]]></description>
                    <pubDate>Wed, 26 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/our.umbraco.screensaver</guid>
                    <title>Our.Umbraco.Screensaver</title>
                    <link>https://marketplace.umbraco.com/package/our.umbraco.screensaver</link>
                    <description><![CDATA[After a few minutes without activity the backoffice logo takes over the screen and bounces around it like the old DVD logo, counting perfect corner hits. Any keystroke or mouse movement dismisses it. Because the overlay is opaque it doubles as a privacy screen when you walk away from your desk.]]></description>
                    <pubDate>Wed, 26 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://www.nevitech.co.uk/blog/why-i-choose-umbraco-over-wordpress/</guid>
                    <title>Why I choose Umbraco over WordPress</title>
                    <link>https://www.nevitech.co.uk/blog/why-i-choose-umbraco-over-wordpress/</link>
                    <description><![CDATA[Umbraco and WordPress solve different problems, and after years of building on both I know which one I want to still be maintaining in five years.]]></description>
                    <pubDate>Wed, 26 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://shazwazza.com/articles/examine-v4-is-out/</guid>
                    <title>Examine v4 is out</title>
                    <link>https://shazwazza.com/articles/examine-v4-is-out/</link>
                    <description><![CDATA[Examine v4 is out&#xA;Examine v4.0.0 has been released to NuGet! It&#x27;s been in beta since October 2023, so it feels great to finally have this one out the door.&#xA;The headline feature is faceting, which people have been asking me about for years, along with taxonomy indexes, deep paging, and a fair amount of modernization of the codebase.&#xA;What took so long&#xA;The first facet commit landed in November 2022 from Nikolaj Brask-Nielsen who did the original implementation, and then Chad Currie built taxonomy index support, deep paging and a lot of the surrounding infrastructure on top of that. Between them that&#x27;s well over a hundred commits of genuinely hard Lucene work, and honestly the community contributions on this release have been fantastic.&#xA;After that it sat in beta across nine releases. Part of that is simply that Examine is a side project I maintain around a full time job, and nothing was broken enough in the betas to force the issue.&#xA;The other part is that Examine v4 is built on Lucene.NET 4.8, which is itself still in beta, and I didn&#x27;t want to ship a final release that depended on a beta of something else. So the plan was to wait for Lucene.NET 4.8 to go stable first.&#xA;Lucene.NET 4.8.0-beta00001 was released in May 2017, and the last stable Lucene.NET release was 3.0.3 back in 2012, so in hindsight that was a fairly optimistic plan &#x1F60A;&#xA;That&#x27;s not a criticism by the way - porting Lucene to .NET is an enormous amount of work done by volunteers and the project is very much active. beta00018 shipped in June this year and the hope is for a final 4.8 release before the end of the year. In practice these betas have been running in production on a very large number of Umbraco sites for years now, so the beta label was never really the risk that it sounds like.&#xA;What changed is that Umbraco needed v4.&#xA;What&#x27;s new in v4&#xA;Faceting is the main one. You declare facet fields in your field definitions like any other field, request facets on a query with WithFacets(...), and read them back with GetFacet():&#xA;var results = searcher.CreateQuery(&quot;content&quot;)&#xA;    .Field(&quot;nodeName&quot;, &quot;product&quot;)&#xA;    .WithFacets(facets =&gt; facets.FacetString(&quot;category&quot;))&#xA;    .Execute();&#xA;&#xA;foreach (var value in results.GetFacet(&quot;category&quot;)!)&#xA;{&#xA;    Console.WriteLine($&quot;{value.Label}: {value.Value}&quot;);&#xA;}&#xA;&#xA;There are facet types for full text, numerics, dates and ranges, and each has a taxonomy variant. Being able to do this natively in Examine, rather than dropping down to Lucene yourself, is the bit I&#x27;m most pleased about in this release.&#xA;The rest of it:&#xA;&#xA;Taxonomy indexes - a sidecar index enabled with UseTaxonomyIndex, which gives you hierarchical facets and faster faceting generally. This started out as a separate index type and ended up merged into LuceneIndex, which is a much better place for it.&#xA;Deep paging - SearchAfterOptions lets you page a long way into a result set without Lucene having to materialize everything up to your offset. It works with faceted queries too.&#xA;Boost factors and phrase queries - WithBoost() on individual search values, and a proper Phrase() instead of the old escaped value approach.&#xA;Nullable reference types throughout, with warnings as errors, so every public API is annotated. You&#x27;ll likely get some new warnings when you upgrade, all of which were true before, you just couldn&#x27;t see them.&#xA;.NET 8, 9 and 10. .NET 6 support is gone.&#xA;&#xA;The replicator has also had a lot of work done to it. Taxonomy replication is handled properly, transient lock failures are retried instead of thrown, and persistent commit failures now surface through IsReplicationHealthy instead of being silently swallowed. If you&#x27;re running Examine on Azure App Service, or anything else with a network file system, that&#x27;s the part that matters to you.&#xA;There are breaking changes and they&#x27;re mostly constructors. The release notes have a summary and the full API change report lists every one of them.&#xA;Umbraco and the new search abstraction&#xA;Umbraco HQ have been rebuilding search from the ground up in Umbraco.Cms.Search, based on the Future of Search RFC written by Bjarke Berg and Kenn Jacobsen. It&#x27;s a provider based abstraction, so in principle you can put Elasticsearch, Algolia or anything else behind it.&#xA;For the initial release there is one provider, and it&#x27;s Examine. From the RFC:&#xA;&#xA;We plan to ship a single implementation of the search abstraction, which will be based on Examine to be backward compatible.&#xA;&#xA;Their README says it will replace the current search implementation &quot;at the earliest starting from Umbraco v19&quot; so I&#x27;m not going to put a date on that, but it ships as an add-on for v17 and v18 first and Examine is what sits underneath it either way.&#xA;Which meant that v4 suddenly had a real consumer with real deadlines, and a beta wasn&#x27;t going to cut it any more. It&#x27;s a nice position to be in though - Examine has been quietly doing its job under Umbraco for years, and it&#x27;s great to see it become the foundation for the new search stack too.&#xA;Backwards compatibility&#xA;Most of the work in the final stretch wasn&#x27;t features at all, it was making sure v4 could be a drop-in replacement for v3.&#xA;Examine underpins search in every Umbraco install, so telling everyone to upgrade and fix up their code isn&#x27;t a realistic answer. I spent a good while on this with Kenn Jacobsen and Nikolaj Geisle at Umbraco HQ - they would run v4 against the CMS, something would break, and we&#x27;d work out whether it was a genuine bug, an API I&#x27;d removed too eagerly, or something that needed a compatibility shim. Then repeat. There was a lot of testing on both sides of this.&#xA;A good example of the kind of thing that catches you out: I had removed some old positional overloads of AddExamineLuceneIndex and replaced them with optional parameters. That&#x27;s source compatible, so anything recompiling against v4 is fine. But optional parameters are a compile time feature, and Umbraco&#x27;s already published DLLs still had IL referencing the original method signatures, so it fell over on startup with a MissingMethodException. Source compatible, binary incompatible, and the only way to find it is to actually run it.&#xA;Automating the compatibility testing&#xA;Doing that verification manually over and over is pretty tedious, so I stopped doing it manually.&#xA;I wrote a set of Copilot skills that live in the Examine repo and automate the whole loop - clone the downstream consumer, rewrite its Examine NuGet package references into project references pointing at my local working copy, build it, run its tests, and report back exactly what broke. There&#x27;s one each for Umbraco CMS, Umbraco.Cms.Search and ExamineX, plus a compat validator agent that picks the right one and drives it.&#xA;That turned &quot;have I broken Umbraco?&quot; from an afternoon&#x27;s work into something I could run as a routine check while working on a branch. Combined with the Roslyn public API analyzer, which tracks every public member in a checked-in file and fails the build when one disappears, breaking changes had to be a deliberate decision rather than something discovered later by somebody else.&#xA;If you maintain a library with downstream consumers you care about, this is honestly worth setting up. It&#x27;s a lot more approachable to build than it was even a year ago, and it takes a whole category of worry off your plate.&#xA;Umbraco.Cms.Search is currently pinned to 4.0.0-beta.9 and can now move to the final release.&#xA;Documentation&#xA;The documentation site hadn&#x27;t been published since March 2023. Not for lack of anyone writing any - the publishing pipeline itself had quietly been broken for years. It only triggered on a branch nobody was pushing to, it used versions of the GitHub Pages actions that have since been removed, and it built with .NET 6, which can&#x27;t compile a project targeting .NET 8 or later. So documentation kept getting written and committed and never actually went anywhere.&#xA;That&#x27;s all fixed now and the docs rebuild and publish automatically on every push, which means about three years of writing has gone live in one go. Faceting, taxonomy indexes, deep paging and replication are all documented, so it&#x27;s well worth a look if the last version you saw was the old site.&#xA;A number of the older code samples turned out to be wrong as well, including every faceting example, which called a method that doesn&#x27;t exist. This time around every sample was compiled against the real v4 assemblies rather than just eyeballed, which is how those got caught.&#xA;The public API change report is published there too - 246 additions, 19 changed signatures and 14 removals between v3.10.0 and v4.0.0. It&#x27;s generated from the API surface files that the analyzer keeps in the repo rather than written by hand, so it&#x27;s the complete picture rather than what I remembered to write down.&#xA;What this means for ExamineX&#xA;I&#x27;ve been asked this a few times now so it&#x27;s worth spelling out.&#xA;ExamineX is my commercial product that swaps Examine&#x27;s Lucene implementation for Azure AI Search or Elasticsearch, so that you don&#x27;t have to deal with file locks, index corruption and index rebuilds on Azure App Service. It has always been an implementation of the Examine abstractions rather than a fork or a competing API.&#xA;That&#x27;s the important part here. Umbraco Search has a provider model and its default provider talks to Examine. Examine has its own implementation model underneath that, and that&#x27;s the layer ExamineX plugs into. They&#x27;re two separate seams stacked on top of each other, so ExamineX continues to work under Umbraco Search without needing to be an Umbraco Search provider at all - it just replaces what sits underneath the Examine one.&#xA;So the new Umbraco search stack doesn&#x27;t replace ExamineX, it sits on top of the same abstraction it always has. The v4 support including faceting is already written, I just haven&#x27;t cut the release yet - that&#x27;s next on my list.&#xA;Upgrading&#xA;If you&#x27;re on v3 and not using Umbraco then it should be reasonably straight forward. Retarget to net8.0 or later, rebuild, work through whatever the nullable annotations tell you, and check the API change report if you were constructing searchers or directory factories by hand.&#xA;If you&#x27;re on Umbraco, wait for Umbraco to pull it in rather than upgrading Examine underneath it yourself.&#xA;Everything is on GitHub and issues and PRs are always welcome. Give it a go!&#xA;Huge thanks to Chad, both Nikolajs and Kenn, and to everyone who ran the betas in production and told me what broke. Seventeen years in and Examine is in the best shape it&#x27;s ever been, which is a pretty good feeling &#x1F642;]]></description>
                    <pubDate>Tue, 25 Aug 2026 20:30:30 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://github.com/skybrud/Skybrud.Umbraco.Redirects/releases/tag/v17.1.0-beta001</guid>
                    <title>Skybrud.Umbraco.Redirects 17.1.0-beta001</title>
                    <link>https://github.com/skybrud/Skybrud.Umbraco.Redirects/releases/tag/v17.1.0-beta001</link>
                    <description><![CDATA[Award winning redirects manager for Umbraco.]]></description>
                    <pubDate>Tue, 25 Aug 2026 20:14:01 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.YouTube/releases/tag/v17.0.0-alpha002</guid>
                    <title>Limbo.Umbraco.YouTube 17.0.0-alpha002</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.YouTube/releases/tag/v17.0.0-alpha002</link>
                    <description><![CDATA[Video picker for inserting YouTube videos in Umbraco.]]></description>
                    <pubDate>Tue, 25 Aug 2026 14:51:26 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://github.com/abjerner/Limbo.Umbraco.Iddqd/releases/tag/v17.0.0-alpha004</guid>
                    <title>Limbo.Umbraco.Iddqd 17.0.0-alpha004</title>
                    <link>https://github.com/abjerner/Limbo.Umbraco.Iddqd/releases/tag/v17.0.0-alpha004</link>
                    <description><![CDATA[Limbo.Umbraco.Iddqd package with various developer oriented improvements for the Umbraco backoffice.]]></description>
                    <pubDate>Tue, 25 Aug 2026 14:24:02 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.Video/releases/tag/v17.0.0-alpha002</guid>
                    <title>Limbo.Umbraco.Video 17.0.0-alpha002</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.Video/releases/tag/v17.0.0-alpha002</link>
                    <description><![CDATA[Package serving as a base for Limbo&#x27;s video picker packages.]]></description>
                    <pubDate>Tue, 25 Aug 2026 13:41:12 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://github.com/abjerner/Limbo.Umbraco.Iddqd/releases/tag/v17.0.0-alpha003</guid>
                    <title>Limbo.Umbraco.Iddqd 17.0.0-alpha003</title>
                    <link>https://github.com/abjerner/Limbo.Umbraco.Iddqd/releases/tag/v17.0.0-alpha003</link>
                    <description><![CDATA[Limbo.Umbraco.Iddqd package with various developer oriented improvements for the Umbraco backoffice.]]></description>
                    <pubDate>Tue, 25 Aug 2026 10:49:53 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://www.thehumantech.agency/learn/upgrading-umbraco-13-to-17-what-we-learned/</guid>
                    <title>Upgrading Umbraco 13 to 17: What We Learned</title>
                    <link>https://www.thehumantech.agency/learn/upgrading-umbraco-13-to-17-what-we-learned/</link>
                    <description><![CDATA[What we learned upgrading a large production website from Umbraco 13 to 17, covering migrations, APIs, AngularJS, property editors, Forms, content and deployment.]]></description>
                    <pubDate>Tue, 25 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.themes.portfolio</guid>
                    <title>SplatDev.Umbraco.Themes.Portfolio</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.themes.portfolio</link>
                    <description><![CDATA[Portfolio theme for Umbraco - project grid, project detail, filtering, lightbox, about]]></description>
                    <pubDate>Tue, 25 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.socialmedia.channels.propertyeditor</guid>
                    <title>SplatDev.Umbraco.Plugins.SocialMedia.Channels.PropertyEditor</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.socialmedia.channels.propertyeditor</link>
                    <description><![CDATA[Social Media Channels property editor for Umbraco 17.]]></description>
                    <pubDate>Tue, 25 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.themes.forum</guid>
                    <title>SplatDev.Umbraco.Themes.Forum</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.themes.forum</link>
                    <description><![CDATA[Forum/community theme for Umbraco - thread list, post view, user profiles, categories]]></description>
                    <pubDate>Tue, 25 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://ddev.com/blog/umbraco-on-ddev/</guid>
                    <title>Umbraco on DDEV: .NET, SQL Server, and the generic project type</title>
                    <link>https://ddev.com/blog/umbraco-on-ddev/</link>
                    <description><![CDATA[An experiment in running Umbraco CMS and .NET 10 under DDEV, using the generic project type, a custom web image, and Azure SQL Edge.]]></description>
                    <pubDate>Tue, 25 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbfy.umbraco.mediaorder</guid>
                    <title>UMBFY.Umbraco.MediaOrder</title>
                    <link>https://marketplace.umbraco.com/package/umbfy.umbraco.mediaorder</link>
                    <description><![CDATA[Adds newest-first ordering and Name, Upload Date, and File Size sorting to the Umbraco Media Library.]]></description>
                    <pubDate>Tue, 25 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/esatto.umbraco.backoffice.cookiebanner</guid>
                    <title>Esatto.Umbraco.Backoffice.CookieBanner</title>
                    <link>https://marketplace.umbraco.com/package/esatto.umbraco.backoffice.cookiebanner</link>
                    <description><![CDATA[Turnkey GDPR/ePrivacy cookie consent for Umbraco 17 &amp; 18. A blocking consent dialog, per-category gating of scripts and embeds through the &lt;consent-script&gt; and &lt;consent-embed&gt; tag helpers, Google Consent Mode v2 signalling, an editor-managed cookie registry (cookieDefinition element type plus a cookieRegistry block list) and a rendered cookie policy page. Wiring is two lines of Razor and one app.UseCookieConsent() call.]]></description>
                    <pubDate>Mon, 24 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://dev.to/erikjanwestendorp/building-a-cloudflare-integration-for-umbraco-automate-3f8m</guid>
                    <title>Building a Cloudflare Integration for Umbraco Automate</title>
                    <link>https://dev.to/erikjanwestendorp/building-a-cloudflare-integration-for-umbraco-automate-3f8m</link>
                    <description><![CDATA[&lt;p&gt;When I first started experimenting with Umbraco Automate, I wanted to find a real-world use case instead of creating an integration just for the sake of trying the API. It didn&#x27;t take long to find one. On several Umbraco projects, we use Cloudflare in front of the website. When content changes, there are situations where we want to invalidate the cached version of the affected page.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Traditionally, I would solve this in code:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;Content published&#xA;      &#x2193;&#xA;Notification handler&#xA;      &#x2193;&#xA;Determine published URLs&#xA;      &#x2193;&#xA;Call Cloudflare API&#xA;      &#x2193;&#xA;Purge cache&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;That works. But after looking at Automate, I started wondering:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What if the application doesn&#x27;t need to know anything about Cloudflare at all?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Instead, publishing content could simply trigger an automation, with small reusable actions taking care of the individual steps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That idea eventually resulted in three NuGet packages:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;Umbraco.Community.Automate&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Umbraco.Community.Automate.Extensions&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Umbraco.Community.Automate.Cloudflare&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;All currently available as version &lt;code&gt;17.0.0&lt;/code&gt; for Umbraco 17.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This post describes how I got there, some of the problems I encountered, and what I learned about extending Umbraco Automate along the way.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  Starting with the obvious solution&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;My first idea was simple. Umbraco Automate already provides a &lt;strong&gt;Content Published&lt;/strong&gt; trigger, so I wanted to create a Cloudflare action that could take the published page and purge it from Cloudflare.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Something like:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;Content Published&#xA;      &#x2193;&#xA;Purge Cloudflare&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;The Cloudflare API itself makes this fairly straightforward.To purge specific URLs you can send a request to:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;POST /client/v4/zones/{zoneId}/purge_cache&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;with:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight json&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;files&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;    &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://www.example.com/some-page/&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;So initially I thought the Cloudflare action could simply accept the URL of the published page.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Content Published trigger doesn&#x27;t provide a URL.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It exposes information such as:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;contentKey&#xA;contentName&#xA;contentTypeKey&#xA;contentTypeAlias&#xA;cultures&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;And actually, that makes sense. A URL isn&#x27;t necessarily a property of the publish event.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;h1&gt;&#xA;  &#xA;  &#xA;  A content item doesn&#x27;t necessarily have one URL&#xA;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;This became the first interesting part of the implementation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider a multilingual Umbraco website:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;https://www.example.com/&#xA;https://www.example.com/en/&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;Now add multiple hostnames, which is perfectly valid in an Umbraco installation:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;https://www.example-a.com/&#xA;https://www.example-a.com/en/&#xA;&#xA;https://www.example-b.com/&#xA;https://www.example-b.com/en/&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;For a single content item, asking:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What is the URL?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;is therefore not always the right question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The better question is:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What are the published URLs for this content item and culture?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That distinction ended up having quite a large influence on the package design.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;h1&gt;&#xA;  &#xA;  &#xA;  Separating Umbraco from Cloudflare&#xA;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;My first instinct was to put the URL resolution inside the Cloudflare action.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The action could receive:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;Content Key&#xA;Culture&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;and internally:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Resolve the Umbraco content.&lt;/li&gt;&#xA;&lt;li&gt;Determine its URLs.&lt;/li&gt;&#xA;&lt;li&gt;Call Cloudflare.&lt;/li&gt;&#xA;&lt;li&gt;Purge those URLs.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;But that didn&#x27;t feel right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Resolving published URLs has nothing to do with Cloudflare.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same functionality could be useful when:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;notifying an external API;&lt;/li&gt;&#xA;&lt;li&gt;updating a search index;&lt;/li&gt;&#xA;&lt;li&gt;sending a webhook;&lt;/li&gt;&#xA;&lt;li&gt;invalidating another CDN;&lt;/li&gt;&#xA;&lt;li&gt;generating a sitemap;&lt;/li&gt;&#xA;&lt;li&gt;or building another Automate workflow.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So instead I created a generic action:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;Get Published Content URLs&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;and moved it into a separate package:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;Umbraco.Community.Automate.Extensions&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;Cloudflare became its own integration:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;Umbraco.Community.Automate.Cloudflare&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;This allows Automate to do what it is good at: composing small pieces of functionality.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The workflow becomes:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;Content Published&#xA;      &#x2193;&#xA;For Each Culture&#xA;      &#x2193;&#xA;Get Published Content URLs&#xA;      &#x2193;&#xA;Purge Cloudflare URLs&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;That separation is probably the design decision I&#x27;m happiest with.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;h1&gt;&#xA;  &#xA;  &#xA;  Building Get Published Content URLs&#xA;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;The generic action receives a content key and culture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Its settings are roughly:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight csharp&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;sealed&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;GetPublishedContentUrlsSettings&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Guid&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ContentKey&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&#xA;    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Culture&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Empty&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;The output deliberately contains an array:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight csharp&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;sealed&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;GetPublishedContentUrlsOutput&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Guid&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ContentKey&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&#xA;    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Culture&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Empty&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&#xA;&#xA;    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Urls&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[];&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;Notice that it&#x27;s &lt;code&gt;Urls&lt;/code&gt;, not &lt;code&gt;Url&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is important for installations where a culture is available through multiple domains.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Conceptually the action does:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;Content Key &#x2B; Culture&#xA;          &#x2193;&#xA; Umbraco published content&#xA;          &#x2193;&#xA; Primary &#x2B; alternative URLs&#xA;          &#x2193;&#xA;       string[]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;That output can then be consumed by any other Automate action.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;h1&gt;&#xA;  &#xA;  &#xA;  Lesson learned: be careful with service lifetimes&#xA;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;While building the action I ran into another useful lesson.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My first implementation injected &lt;code&gt;IPublishedContentQuery&lt;/code&gt; directly into the action.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That resulted in:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;Cannot consume scoped service&#xA;&#x27;Umbraco.Cms.Core.IPublishedContentQuery&#x27;&#xA;from singleton&#xA;&#x27;GetPublishedContentUrlsAction&#x27;.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;Automate actions are registered as singletons, while several Umbraco services used for published content are scoped.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Injecting one directly into a singleton therefore isn&#x27;t safe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead, the action needs to work with the appropriate Umbraco context/service scope when resolving published content.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It&#x27;s an easy mistake to make when building your first Automate extension because the action itself looks very similar to a normal service.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The important takeaway:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Always consider the lifetime of the services you inject into an Automate action.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;h1&gt;&#xA;  &#xA;  &#xA;  Cultures introduced another interesting problem&#xA;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;The Content Published trigger exposes &lt;code&gt;cultures&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not &lt;code&gt;culture&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That means a single publish operation can involve multiple cultures.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The obvious workflow is therefore:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;Content Published&#xA;      &#x2193;&#xA;For Each&#xA;      &#x2193;&#xA;Get Published Content URLs&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;The collection for the loop is:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;${ trigger.cultures }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;And inside the loop the current culture is:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;${ loop.item }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;Initially I accidentally passed:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;${ trigger.cultures }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;directly into the action&#x27;s &lt;code&gt;Culture&lt;/code&gt; field.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That resulted in something like:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;[&quot;es&quot;]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;being passed as the culture instead of:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;es&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;and consequently:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;Content &#x27;&amp;lt;guid&amp;gt;&#x27; is not published for culture &#x27;[&quot;es&quot;]&#x27;.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;The correct pattern is:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;For Each:&#xA;${ trigger.cultures }&#xA;&#xA;Get Published Content URLs:&#xA;&#xA;Content Key:&#xA;${ trigger.contentKey }&#xA;&#xA;Culture:&#xA;${ loop.item }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;A small mistake, but a good example of why understanding the difference between a collection binding and the current loop item matters.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;h1&gt;&#xA;  &#xA;  &#xA;  Then I wanted to purge multiple URLs at once&#xA;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Initially the Cloudflare package had:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;Purge Cloudflare URL&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;with:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight csharp&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Url&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Empty&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;This worked perfectly when combined with another &lt;code&gt;For Each&lt;/code&gt;:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;Get Published Content URLs&#xA;      &#x2193;&#xA;For Each URL&#xA;      &#x2193;&#xA;Purge Cloudflare URL&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;But Cloudflare already accepts multiple URLs in one request.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So why make one HTTP request per URL?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I changed the action to:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;Purge Cloudflare URLs&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;and the Cloudflare client now accepts a collection:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight csharp&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;Task&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;PurgeUrlsAsync&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&#xA;    &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;apiToken&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&#xA;    &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;zoneId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&#xA;    &lt;span class=&quot;n&quot;&gt;IEnumerable&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;urls&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&#xA;    &lt;span class=&quot;n&quot;&gt;CancellationToken&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cancellationToken&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;The resulting request can contain all URLs:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight json&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;files&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;    &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://www.example-a.com/en/&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;    &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://www.example-b.com/en/&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;This makes the workflow much nicer:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;Get Published Content URLs&#xA;      &#x2193;&#xA;Purge Cloudflare URLs&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;At least, that was the idea.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then I learned something interesting about Automate bindings.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;h1&gt;&#xA;  &#xA;  &#xA;  Binding an array isn&#x27;t the same as binding a string&#xA;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;My first settings model looked perfectly reasonable:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight csharp&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;sealed&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;PurgeUrlsSettings&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Urls&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[];&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;The previous action already returned:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight csharp&quot;&gt;&lt;code&gt;&lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Urls&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;so I expected this binding to work:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;${ previous.urls }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;Instead Automate failed before the action was even executed:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;Failed to resolve model &#x27;community.cloudflare.purgeUrls&#x27;&#xA;to type PurgeUrlsSettings.&#xA;&#xA;The JSON value could not be converted to System.String[].&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;That was confusing at first because the source value really was a &lt;code&gt;string[]&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The important detail is how action settings are stored.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The binding itself is initially represented as:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight json&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;urls&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;${ previous.urls }&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;That&#x27;s a string expression.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the property is already declared as &lt;code&gt;string[]&lt;/code&gt;, JSON deserialization needs to happen before that expression can resolve to its collection value.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;&quot;${ previous.urls }&quot;&#xA;        &#x2193;&#xA;Deserialize as string[]&#xA;        &#x2193;&#xA;&#x1F4A5;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;h1&gt;&#xA;  &#xA;  &#xA;  Looking at For Each provided the answer&#xA;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;The interesting thing was that this already worked:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;Get Published Content URLs&#xA;      &#x2193;&#xA;For Each&#xA;&#xA;Collection:&#xA;${ previous.urls }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;So Automate clearly &lt;em&gt;could&lt;/em&gt; consume my array.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That led me into the Automate source code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The built-in &lt;code&gt;For Each&lt;/code&gt; doesn&#x27;t define its collection setting as an array.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead, conceptually it does this:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight csharp&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Collection&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Empty&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;The setting contains the &lt;strong&gt;binding expression&lt;/strong&gt;, not the resolved collection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The expression is evaluated later at runtime.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That same approach works nicely for the Cloudflare action.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The setting can remain:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight csharp&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;sealed&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;PurgeUrlsSettings&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Urls&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Empty&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;and the configured value remains:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;${ previous.urls }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;At runtime, Automate&#x27;s &lt;code&gt;BindingEvaluator&lt;/code&gt; can evaluate the raw expression:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight csharp&quot;&gt;&lt;code&gt;&lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;value&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_bindingEvaluator&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;EvaluateRaw&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&#xA;    &lt;span class=&quot;n&quot;&gt;settings&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Urls&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&#xA;    &lt;span class=&quot;n&quot;&gt;context&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BindingData&lt;/span&gt;&#xA;        &lt;span class=&quot;p&quot;&gt;??&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Dictionary&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;object&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;?&amp;gt;());&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;The action can then turn that resolved value into the collection it needs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was probably the most interesting technical lesson from building the package.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sometimes the type of a &lt;strong&gt;configuration property&lt;/strong&gt; shouldn&#x27;t represent the type of the eventual runtime value.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;Setting&#xA;string expression&#xA;      &#x2193;&#xA;BindingEvaluator&#xA;      &#x2193;&#xA;runtime collection&#xA;      &#x2193;&#xA;Cloudflare API&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;is a better model.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;h1&gt;&#xA;  &#xA;  &#xA;  Normalizing the URLs&#xA;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Before sending anything to Cloudflare, the action normalizes the collection:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight csharp&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;urls&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;urls&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Where&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;url&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;IsNullOrWhiteSpace&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Select&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;url&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Trim&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;())&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Distinct&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;StringComparer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;OrdinalIgnoreCase&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;ToArray&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;Then it verifies that something remains:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight csharp&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;urls&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Length&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ActionResult&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Failed&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&#xA;        &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;ArgumentException&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&#xA;            &lt;span class=&quot;s&quot;&gt;&quot;At least one URL is required.&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;and validates the URLs:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight csharp&quot;&gt;&lt;code&gt;&lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;invalidUrl&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Find&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&#xA;    &lt;span class=&quot;n&quot;&gt;urls&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&#xA;    &lt;span class=&quot;n&quot;&gt;url&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Uri&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;TryCreate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&#xA;        &lt;span class=&quot;n&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&#xA;        &lt;span class=&quot;n&quot;&gt;UriKind&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Absolute&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&#xA;        &lt;span class=&quot;k&quot;&gt;out&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;&#xA;&#xA;&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;invalidUrl&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;is&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ActionResult&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Failed&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&#xA;        &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;ArgumentException&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&#xA;            &lt;span class=&quot;s&quot;&gt;$&quot;&#x27;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;invalidUrl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&#x27; is not a valid absolute URL.&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;Only after that does the action call Cloudflare.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;h1&gt;&#xA;  &#xA;  &#xA;  Creating a reusable Cloudflare connection&#xA;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;I didn&#x27;t want API tokens and zone IDs to be configured on every action.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Automate has a connection concept for exactly this purpose, so the Cloudflare package provides its own connection type.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The connection contains information such as:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;Account ID&#xA;Zone ID&#xA;API Token&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;The API token can also be validated against Cloudflare.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cloudflare provides an endpoint for checking whether a token is valid and active, which makes the connection test much more useful than simply checking whether a value was entered.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A successful response looks roughly like:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight json&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;result&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;status&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;active&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;success&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;This gives users feedback while configuring the connection instead of waiting for their first automation run to fail.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;h1&gt;&#xA;  &#xA;  &#xA;  Keep API tokens scoped&#xA;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;For the Cloudflare API token, I recommend granting only the permissions required by the workflow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For cache purging, don&#x27;t use a token with unnecessary account-wide permissions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The connection should know:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;API Token&#xA;Zone ID&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;and the action should only perform the operation it was designed for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It&#x27;s a small detail, but integrations like these make security boundaries very visible.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;h1&gt;&#xA;  &#xA;  &#xA;  The resulting packages&#xA;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;The experiment eventually became three packages.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  Umbraco.Community.Automate&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The convenience package.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Installing it brings in the complete collection:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight shell&quot;&gt;&lt;code&gt;dotnet add package Umbraco.Community.Automate&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  Umbraco.Community.Automate.Extensions&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Generic Automate building blocks:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight shell&quot;&gt;&lt;code&gt;dotnet add package Umbraco.Community.Automate.Extensions&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;Currently including:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;Get Published Content URLs&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  Umbraco.Community.Automate.Cloudflare&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The Cloudflare integration:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight shell&quot;&gt;&lt;code&gt;dotnet add package Umbraco.Community.Automate.Cloudflare&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;Currently providing the Cloudflare connection and cache purge functionality.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The packages are versioned alongside their supported Umbraco major version, so the first stable release is:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;17.0.0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;for Umbraco 17.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;h1&gt;&#xA;  &#xA;  &#xA;  Why I like this approach&#xA;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;The part I like most isn&#x27;t actually the Cloudflare API integration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Calling an HTTP API isn&#x27;t particularly complicated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The interesting part is the separation of responsibilities.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead of writing:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight csharp&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;ContentPublishedHandler&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;    &lt;span class=&quot;c1&quot;&gt;// Find content&lt;/span&gt;&#xA;    &lt;span class=&quot;c1&quot;&gt;// Determine cultures&lt;/span&gt;&#xA;    &lt;span class=&quot;c1&quot;&gt;// Determine domains&lt;/span&gt;&#xA;    &lt;span class=&quot;c1&quot;&gt;// Resolve URLs&lt;/span&gt;&#xA;    &lt;span class=&quot;c1&quot;&gt;// Read Cloudflare configuration&lt;/span&gt;&#xA;    &lt;span class=&quot;c1&quot;&gt;// Call Cloudflare&lt;/span&gt;&#xA;    &lt;span class=&quot;c1&quot;&gt;// Handle failures&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;we can create reusable building blocks:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;Content Published&#xA;      &#x2193;&#xA;For Each Culture&#xA;      &#x2193;&#xA;Get Published Content URLs&#xA;      &#x2193;&#xA;Purge Cloudflare URLs&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;And tomorrow somebody could build:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;Content Published&#xA;      &#x2193;&#xA;Get Published Content URLs&#xA;      &#x2193;&#xA;Notify external service&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;or:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;Content Published&#xA;      &#x2193;&#xA;Get Published Content URLs&#xA;      &#x2193;&#xA;Update search index&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;without changing &lt;code&gt;Get Published Content URLs&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That&#x27;s where I think Automate becomes really interesting.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;h1&gt;&#xA;  &#xA;  &#xA;  What I learned&#xA;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;A few things stood out while building these packages.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;&#xA;  &#xA;  &#xA;  Actions should do one thing&#xA;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;Get Published Content URLs&lt;/code&gt; shouldn&#x27;t know Cloudflare exists.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And &lt;code&gt;Purge Cloudflare URLs&lt;/code&gt; shouldn&#x27;t need to know anything about Umbraco content.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The workflow connects them.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;&#xA;  &#xA;  &#xA;  Model collections explicitly&#xA;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;A published content item can have multiple cultures, and one culture can have multiple URLs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Designing around collections from the start avoids assumptions that only work for simple websites.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;&#xA;  &#xA;  &#xA;  Bindings are runtime values&#xA;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;A binding expression such as:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;${ previous.urls }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;is stored as a string but may resolve to something completely different at runtime.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking at how Automate&#x27;s own &lt;code&gt;For Each&lt;/code&gt; implementation handles this was extremely useful.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;&#xA;  &#xA;  &#xA;  Watch your DI lifetimes&#xA;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Automate actions and Umbraco scoped services don&#x27;t necessarily share the same lifetime.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Be careful when injecting services such as published-content APIs directly into actions.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;&#xA;  &#xA;  &#xA;  Composition beats coupling&#xA;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The Cloudflare use case resulted in a generic action that turned out to be useful completely independently of Cloudflare.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That&#x27;s a good sign that the responsibility belongs in its own extension.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;h1&gt;&#xA;  &#xA;  &#xA;  What&#x27;s next?&#xA;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;There are plenty of directions this could go.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cloudflare supports more than purging individual URLs, so possible future actions include:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;Purge by cache tag&#xA;Purge by prefix&#xA;Purge by hostname&#xA;Purge everything&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;But I don&#x27;t want one giant &quot;Cloudflare action&quot; with every possible option.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I&#x27;d rather keep each operation explicit and let Automate compose them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The generic Extensions package also opens the door to other reusable Umbraco actions that aren&#x27;t tied to a specific integration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And that&#x27;s probably what I find most interesting about Automate: once you start thinking in small triggers, actions and outputs, you quickly start seeing automation opportunities everywhere.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;h1&gt;&#xA;  &#xA;  &#xA;  Try it&#xA;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;The packages are available on NuGet:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;Umbraco.Community.Automate&#xA;Umbraco.Community.Automate.Extensions&#xA;Umbraco.Community.Automate.Cloudflare&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;Source code, examples and issues are available on GitHub:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/erikjanwestendorp/Umbraco.Community.Automate&quot; rel=&quot;noopener noreferrer&quot;&gt;https://github.com/erikjanwestendorp/Umbraco.Community.Automate&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The project is open source, so feedback, ideas, issues and pull requests are very welcome.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you&#x27;re experimenting with Umbraco Automate as well, I&#x27;d love to hear what kind of integrations or reusable actions you&#x27;re building.&lt;/p&gt;]]></description>
                    <pubDate>Sun, 23 Aug 2026 11:37:09 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.nevitech.co.uk/blog/building-my-own-umbraco-lamp/</guid>
                    <title>Building my own Umbraco Lamp</title>
                    <link>https://www.nevitech.co.uk/blog/building-my-own-umbraco-lamp/</link>
                    <description><![CDATA[I have wanted an UmbLamp ever since Matt Brailsford posted it back in November 2023, but I did not own a 3D printer. That finally changed this July, so I ordered the parts and built one. Here is what I used, what went wrong, and the one mistake worth avoiding before you start.]]></description>
                    <pubDate>Sun, 23 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umb.elementfinder</guid>
                    <title>Umb.ElementFinder</title>
                    <link>https://marketplace.umbraco.com/package/umb.elementfinder</link>
                    <description><![CDATA[Find and track where Umbraco Element Types are used across your content pages, with a clear dashboard view of their usage and references.]]></description>
                    <pubDate>Sun, 23 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/njobdesk.umbraco</guid>
                    <title>NJobDesk.Umbraco</title>
                    <link>https://marketplace.umbraco.com/package/njobdesk.umbraco</link>
                    <description><![CDATA[Umbraco backoffice integration for NJobDesk, the scheduler-agnostic jobs dashboard for .NET: a Settings-section dashboard guarded by backoffice authentication, wired to any NJobDesk scheduler provider (Umbraco recurring jobs, Quartz via uQuartz, Hangfire). Supports Umbraco 16 and 17.]]></description>
                    <pubDate>Sun, 23 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.Skyfish/releases/tag/v17.0.0-alpha001</guid>
                    <title>Limbo.Umbraco.Skyfish 17.0.0-alpha001</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.Skyfish/releases/tag/v17.0.0-alpha001</link>
                    <description><![CDATA[Video picker for inserting Skyfish videos in Umbraco.]]></description>
                    <pubDate>Fri, 21 Aug 2026 12:06:14 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://github.com/abjerner/Limbo.Umbraco.Iddqd/releases/tag/v17.0.0-alpha002</guid>
                    <title>Limbo.Umbraco.Iddqd 17.0.0-alpha002</title>
                    <link>https://github.com/abjerner/Limbo.Umbraco.Iddqd/releases/tag/v17.0.0-alpha002</link>
                    <description><![CDATA[Limbo.Umbraco.Iddqd package with various developer oriented improvements for the Umbraco backoffice.]]></description>
                    <pubDate>Fri, 21 Aug 2026 08:39:56 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.advancedpermissions.ai</guid>
                    <title>Umbraco.Community.AdvancedPermissions.AI</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.advancedpermissions.ai</link>
                    <description><![CDATA[Optional AI companion for Advanced Permissions for Umbraco. It makes the Umbraco backoffice copilot permission-aware, so editors can ask in plain language who can do what, why an action is blocked, and what would fix it, plus audit a user group or a branch of the tree for risks and get the permission model itself explained. Every answer is computed by the package&#x27;s own permission-resolution engine, including the reasoning behind it, so the copilot stops guessing. Strictly read-only. Requires Umbraco AI with a configured copilot chat.]]></description>
                    <pubDate>Fri, 21 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.automate.extensions</guid>
                    <title>Umbraco.Community.Automate.Extensions</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.automate.extensions</link>
                    <description><![CDATA[Generic reusable actions and extensions for Umbraco Automate, including helpers for resolving published content URLs by culture and hostname.]]></description>
                    <pubDate>Fri, 21 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://kjac.dev/posts/from-examine-to-umbraco-search/</guid>
                    <title>From Examine to Umbraco Search</title>
                    <link>https://kjac.dev/posts/from-examine-to-umbraco-search/</link>
                    <description><![CDATA[Demonstrating an approach to migrate a site from Examine to Umbraco Search]]></description>
                    <pubDate>Fri, 21 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://medium.com/@teamAaitek/need-senior-cms-talent-fast-stop-waiting-months-for-recruitment-20ed26ef4f95?source=rss------umbraco-5</guid>
                    <title>Need Senior CMS Talent Fast? Stop Waiting Months for Recruitment.</title>
                    <link>https://medium.com/@teamAaitek/need-senior-cms-talent-fast-stop-waiting-months-for-recruitment-20ed26ef4f95?source=rss------umbraco-5</link>
                    <description><![CDATA[&lt;div class=&quot;medium-feed-item&quot;&gt;&lt;p class=&quot;medium-feed-image&quot;&gt;&lt;a href=&quot;https://medium.com/@teamAaitek/need-senior-cms-talent-fast-stop-waiting-months-for-recruitment-20ed26ef4f95?source=rss------umbraco-5&quot;&gt;&lt;img src=&quot;https://cdn-images-1.medium.com/max/1200/1*uld--j19fzIFjtUGzTLR2w.png&quot; width=&quot;1200&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;medium-feed-snippet&quot;&gt;Scaling an enterprise digital project often hits the same wall: finding vetted, certified senior developers who can hit the ground running&amp;#x2026;&lt;/p&gt;&lt;p class=&quot;medium-feed-link&quot;&gt;&lt;a href=&quot;https://medium.com/@teamAaitek/need-senior-cms-talent-fast-stop-waiting-months-for-recruitment-20ed26ef4f95?source=rss------umbraco-5&quot;&gt;Continue reading on Medium &#xBB;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;]]></description>
                    <pubDate>Thu, 20 Aug 2026 23:33:53 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://mattbrailsford.dev/introducing-copilot-workspace</guid>
                    <title>Introducing Umbraco AI Copilot Workspace</title>
                    <link>https://mattbrailsford.dev/introducing-copilot-workspace</link>
                    <description><![CDATA[The RC for Umbraco AI Copilot Workspace just went out on our open release branches, so it&#x2019;s time to properly introduce it.&#xA;If you&#x2019;ve used Umbraco...]]></description>
                    <pubDate>Thu, 20 Aug 2026 09:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/chatixy.umbraco</guid>
                    <title>Chatixy.Umbraco</title>
                    <link>https://marketplace.umbraco.com/package/chatixy.umbraco</link>
                    <description><![CDATA[Adds the Chatixy AI support agent to every front-end page of an Umbraco site. Install the package, set your widget key in appsettings.json - no Program.cs or template changes.]]></description>
                    <pubDate>Thu, 20 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/phases.umbraco.stickynotes</guid>
                    <title>Phases.Umbraco.StickyNotes</title>
                    <link>https://marketplace.umbraco.com/package/phases.umbraco.stickynotes</link>
                    <description><![CDATA[Leave internal sticky notes in the backoffice. A floating button opens draggable, colour-coded notes with formatting, images, and a notes list. Notes stay in the editor&#x27;s browser and never appear on the public site.]]></description>
                    <pubDate>Thu, 20 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/automatic.umbraco.documentgenerator</guid>
                    <title>Automatic.Umbraco.DocumentGenerator</title>
                    <link>https://marketplace.umbraco.com/package/automatic.umbraco.documentgenerator</link>
                    <description><![CDATA[Turn design screenshots into a working Umbraco schema. Upload mockups and the package proposes Document Types, Element Types and properties, then seeds a matching content tree - into the Document Type folder you choose, under the Content node you choose, varying by culture where you need it. Every proposal is reviewable and editable before anything is written, so you keep control of the schema. Supports Google Gemini, OpenAI, Anthropic Claude and self-hosted Ollama. Umbraco 14 and above.]]></description>
                    <pubDate>Thu, 20 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/digitalwonderlab.alttextassistant</guid>
                    <title>DigitalWonderlab.AltTextAssistant</title>
                    <link>https://marketplace.umbraco.com/package/digitalwonderlab.alttextassistant</link>
                    <description><![CDATA[Find and fix images missing alt text in Umbraco. A Media section dashboard lists every image with no alt text and lets editors add it inline, with one-click AI suggestions (Anthropic Claude, OpenAI, or Google Gemini vision) and bulk-suggest across the page. Bring your own API key. Works on Umbraco Cloud and all hosting environments.]]></description>
                    <pubDate>Thu, 20 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.automate</guid>
                    <title>Umbraco.Community.Automate</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.automate</link>
                    <description><![CDATA[A collection of community-built extensions and integrations for Umbraco Automate, providing reusable building blocks for creating powerful automation workflows.]]></description>
                    <pubDate>Thu, 20 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.automate.cloudflare</guid>
                    <title>Umbraco.Community.Automate.Cloudflare</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.automate.cloudflare</link>
                    <description><![CDATA[A Cloudflare integration for Umbraco Automate that adds a reusable connection and actions for purging cached URLs as part of configurable automation workflows.]]></description>
                    <pubDate>Thu, 20 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.DreamBroker/releases/tag/v17.0.0-alpha001</guid>
                    <title>Limbo.Umbraco.DreamBroker 17.0.0-alpha001</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.DreamBroker/releases/tag/v17.0.0-alpha001</link>
                    <description><![CDATA[Video picker for inserting DreamBroker videos in Umbraco.]]></description>
                    <pubDate>Wed, 19 Aug 2026 13:06:14 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.lgpd</guid>
                    <title>SplatDev.Umbraco.Plugins.Lgpd</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.lgpd</link>
                    <description><![CDATA[LGPD (Lei 13.709/2018) compliance for Umbraco: append-only consent with the ten legal bases of art. 7, the nine data subject rights of art. 18 with the 15-day deadline of art. 19, the record of processing operations of art. 37, and the encarregado disclosure of art. 41. Front-end consent banner and backoffice dashboard. Supports Umbraco 13 (net8.0) and Umbraco 17 (net10.0).]]></description>
                    <pubDate>Wed, 19 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/techxot.umbraco.aireadiness</guid>
                    <title>Techxot.Umbraco.AiReadiness</title>
                    <link>https://marketplace.umbraco.com/package/techxot.umbraco.aireadiness</link>
                    <description><![CDATA[Scores how readable your pages are to AI answer engines, generates JSON-LD from a page&#x27;s own&#xA;      content, and tracks the score on every publish so a regression is visible. Requires an InMotion&#xA;      subscription for scoring.]]></description>
                    <pubDate>Wed, 19 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.googleanalytics</guid>
                    <title>SplatDev.Umbraco.Plugins.GoogleAnalytics</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.googleanalytics</link>
                    <description><![CDATA[Google Analytics GA4 integration for Umbraco &#x2014; store tracking/measurement ID in settings and inject the GA4 script. Supports Umbraco 13 and 17.]]></description>
                    <pubDate>Wed, 19 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/proworks.umbraco.mediaaudit</guid>
                    <title>ProWorks.Umbraco.MediaAudit</title>
                    <link>https://marketplace.umbraco.com/package/proworks.umbraco.mediaaudit</link>
                    <description><![CDATA[Audit your Umbraco CMS (v17&#x2B;) media library right from the backoffice: classify every item as Used or Unused, drill into exactly what references it, and safely delete or purge the rest with a full accountability log.]]></description>
                    <pubDate>Wed, 19 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.aivisibility.v13</guid>
                    <title>Umbraco.Community.AiVisibility.V13</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.aivisibility.v13</link>
                    <description><![CDATA[The Umbraco 13 / .NET 8 lite SKU: Markdown page rendering, llms.txt, and robots.txt audit for ChatGPT, Claude, Perplexity, Gemini, and Bing Copilot &#x2014; configured via appsettings.json (no Backoffice dashboards).]]></description>
                    <pubDate>Tue, 18 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://www.goldfinch.me/blog/umbraco-automate-developer-automation-or-marketing-automation</guid>
                    <title>Umbraco Automate: Developer Automation or Marketing Automation?</title>
                    <link>https://www.goldfinch.me/blog/umbraco-automate-developer-automation-or-marketing-automation</link>
                    <description><![CDATA[Umbraco Automate is pitched at marketing teams, but it&#x27;s developer tooling, and that&#x27;s fine. What would have to change, from someone who&#x27;s watched Kentico do it.]]></description>
                    <pubDate>Tue, 18 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/baryodev.umbraco.readaloud</guid>
                    <title>BaryoDev.Umbraco.ReadAloud</title>
                    <link>https://marketplace.umbraco.com/package/baryodev.umbraco.readaloud</link>
                    <description><![CDATA[Read this first: this uses the same free endpoint Microsoft Edge uses for its own read-aloud feature. It is not a supported Microsoft API and could change or stop working without notice. There is no paid provider in this version and no credentials are read anywhere; a site that needs a supported service registers its own engine. If the endpoint fails at runtime the browser client falls back to the speech synthesis built into every modern browser, so a page always has a voice. With that said: add &quot;listen to this article&quot; to any page with a single element. Audio is generated and cached on your own server, word highlighting follows real timings from the engine rather than estimates, and nothing about a listener is ever stored. No table, no migration, no IP, no user agent. Free and MIT licensed, with no build step and no third-party dashboard.]]></description>
                    <pubDate>Tue, 18 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://www.linkedin.com/pulse/what-back-office-tells-you-pitch-never-adam-shallcross-xrkpe/</guid>
                    <title>What the back office tells you that the pitch never will</title>
                    <link>https://www.linkedin.com/pulse/what-back-office-tells-you-pitch-never-adam-shallcross-xrkpe/</link>
                    <description><![CDATA[This is the first of these. Every week I will write about one specific way digital work drifts from what it was supposed to achieve, usually because of a decision made years earlier by someone who has since left.]]></description>
                    <pubDate>Tue, 18 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://umbraco.com/blog/security-advisory-aug-18-2026-security-patches-for-umbraco-cms-umbraco-forms-and-umbraco-ai-now-available/</guid>
                    <title>Security Advisory: Security Patches for Umbraco CMS,  Umbraco Forms, and Umbraco AI now available</title>
                    <link>https://umbraco.com/blog/security-advisory-aug-18-2026-security-patches-for-umbraco-cms-umbraco-forms-and-umbraco-ai-now-available/</link>
                    <description><![CDATA[Security patches for Umbraco CMS, Forms, and AI are now out. We recommend you to upgrade to the fixed versions.]]></description>
                    <pubDate>Tue, 18 Aug 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/lait.umbraco.gotocontent</guid>
                    <title>Lait.Umbraco.GoToContent</title>
                    <link>https://marketplace.umbraco.com/package/lait.umbraco.gotocontent</link>
                    <description><![CDATA[Adds a floating &quot;Edit in Umbraco&quot; pill to the top-right of your public pages, visible only to signed-in backoffice editors. One click jumps straight from the live page to the content editor for the node you&#x27;re viewing. Zero configuration &#x2014; just add the package.]]></description>
                    <pubDate>Tue, 18 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/esatto.umbraco.backoffice.mediatreedraganddrop</guid>
                    <title>Esatto.Umbraco.Backoffice.MediaTreeDragAndDrop</title>
                    <link>https://marketplace.umbraco.com/package/esatto.umbraco.backoffice.mediatreedraganddrop</link>
                    <description><![CDATA[Native HTML5 drag-and-drop for the Umbraco 17/18 backoffice Media tree. Adds three-zone (above / into / below) drop targets per row with optimistic same-parent reorder and full cross-parent move support. Pure App_Plugins package &#x2014; no C# code.]]></description>
                    <pubDate>Tue, 18 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/jumoo.translationmanager.csv</guid>
                    <title>Jumoo.TranslationManager.CSV</title>
                    <link>https://marketplace.umbraco.com/package/jumoo.translationmanager.csv</link>
                    <description><![CDATA[CSV File Connector for Translation Manager for Umbraco]]></description>
                    <pubDate>Tue, 18 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.YouTube/releases/tag/v17.0.0-alpha001</guid>
                    <title>Limbo.Umbraco.YouTube 17.0.0-alpha001</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.YouTube/releases/tag/v17.0.0-alpha001</link>
                    <description><![CDATA[Video picker for inserting YouTube videos in Umbraco.]]></description>
                    <pubDate>Mon, 17 Aug 2026 13:27:49 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.memberdashboard</guid>
                    <title>Umbraco.Community.MemberDashboard</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.memberdashboard</link>
                    <description><![CDATA[A backoffice dashboard for managing Umbraco members in bulk: filter by member group and approval/lockout status, sort and page through the whole member base, unlock / approve / unapprove / delete many members at once, and edit a member in a side panel.]]></description>
                    <pubDate>Sat, 15 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.Fetch/releases/tag/v17.0.0-alpha001</guid>
                    <title>Limbo.Umbraco.Fetch 17.0.0-alpha001</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.Fetch/releases/tag/v17.0.0-alpha001</link>
                    <description><![CDATA[Umbraco package for periodically downloading files to disk.]]></description>
                    <pubDate>Fri, 14 Aug 2026 11:32:48 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://baryodev.medium.com/i-built-a-free-self-hosted-pwa-package-for-umbraco-because-the-alternative-bills-per-site-0f8ae279f98e?source=rss------umbraco-5</guid>
                    <title>I built a free, self-hosted PWA package for Umbraco, because the alternative bills per site</title>
                    <link>https://baryodev.medium.com/i-built-a-free-self-hosted-pwa-package-for-umbraco-because-the-alternative-bills-per-site-0f8ae279f98e?source=rss------umbraco-5</link>
                    <description><![CDATA[&lt;div class=&quot;medium-feed-item&quot;&gt;&lt;p class=&quot;medium-feed-image&quot;&gt;&lt;a href=&quot;https://baryodev.medium.com/i-built-a-free-self-hosted-pwa-package-for-umbraco-because-the-alternative-bills-per-site-0f8ae279f98e?source=rss------umbraco-5&quot;&gt;&lt;img src=&quot;https://cdn-images-1.medium.com/max/1400/0*EjatTe6pMaVpkNdy.png&quot; width=&quot;1400&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;medium-feed-snippet&quot;&gt;There are over 900 packages on the Umbraco Marketplace.&lt;/p&gt;&lt;p class=&quot;medium-feed-link&quot;&gt;&lt;a href=&quot;https://baryodev.medium.com/i-built-a-free-self-hosted-pwa-package-for-umbraco-because-the-alternative-bills-per-site-0f8ae279f98e?source=rss------umbraco-5&quot;&gt;Continue reading on Medium &#xBB;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;]]></description>
                    <pubDate>Fri, 14 Aug 2026 09:59:54 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://baryodev.medium.com/i-built-a-free-self-hosted-pwa-package-for-umbraco-because-the-alternative-bills-per-site-0f8ae279f98e?source=rss-d15ca64e7255------2</guid>
                    <title>I built a free, self-hosted PWA package for Umbraco, because the alternative bills per site</title>
                    <link>https://baryodev.medium.com/i-built-a-free-self-hosted-pwa-package-for-umbraco-because-the-alternative-bills-per-site-0f8ae279f98e?source=rss-d15ca64e7255------2</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Fri, 14 Aug 2026 09:59:54 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://medium.com/@teamAaitek/who-is-watching-your-enterprise-cms-at-2-00-am-6f729c2fe87e?source=rss------umbraco-5</guid>
                    <title>Who is Watching Your Enterprise CMS at 2:00 AM?</title>
                    <link>https://medium.com/@teamAaitek/who-is-watching-your-enterprise-cms-at-2-00-am-6f729c2fe87e?source=rss------umbraco-5</link>
                    <description><![CDATA[&lt;div class=&quot;medium-feed-item&quot;&gt;&lt;p class=&quot;medium-feed-image&quot;&gt;&lt;a href=&quot;https://medium.com/@teamAaitek/who-is-watching-your-enterprise-cms-at-2-00-am-6f729c2fe87e?source=rss------umbraco-5&quot;&gt;&lt;img src=&quot;https://cdn-images-1.medium.com/max/1200/1*t_ol4gGWXP46uWIcvCN1gg.png&quot; width=&quot;1200&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;medium-feed-snippet&quot;&gt;For enterprise platforms running Sitecore, Strapi, or Umbraco, downtime isn&amp;#x2019;t just an inconvenience &amp;#x2014; it directly impacts revenue and&amp;#x2026;&lt;/p&gt;&lt;p class=&quot;medium-feed-link&quot;&gt;&lt;a href=&quot;https://medium.com/@teamAaitek/who-is-watching-your-enterprise-cms-at-2-00-am-6f729c2fe87e?source=rss------umbraco-5&quot;&gt;Continue reading on Medium &#xBB;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;]]></description>
                    <pubDate>Fri, 14 Aug 2026 06:18:35 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://medium.com/@teamAaitek/is-technical-debt-slowing-down-your-sitecore-platform-905d74415f1a?source=rss------umbraco-5</guid>
                    <title>Is Technical Debt Slowing Down Your Sitecore Platform?</title>
                    <link>https://medium.com/@teamAaitek/is-technical-debt-slowing-down-your-sitecore-platform-905d74415f1a?source=rss------umbraco-5</link>
                    <description><![CDATA[&lt;div class=&quot;medium-feed-item&quot;&gt;&lt;p class=&quot;medium-feed-image&quot;&gt;&lt;a href=&quot;https://medium.com/@teamAaitek/is-technical-debt-slowing-down-your-sitecore-platform-905d74415f1a?source=rss------umbraco-5&quot;&gt;&lt;img src=&quot;https://cdn-images-1.medium.com/max/2600/1*qGaT170tcx6t1fu9Ymm9zQ.png&quot; width=&quot;3080&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;medium-feed-snippet&quot;&gt;Many enterprise organizations invest heavily in Sitecore, only to watch performance degrade and upgrade timelines stretch out indefinitely&amp;#x2026;&lt;/p&gt;&lt;p class=&quot;medium-feed-link&quot;&gt;&lt;a href=&quot;https://medium.com/@teamAaitek/is-technical-debt-slowing-down-your-sitecore-platform-905d74415f1a?source=rss------umbraco-5&quot;&gt;Continue reading on Medium &#xBB;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;]]></description>
                    <pubDate>Fri, 14 Aug 2026 06:06:23 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/usync.umbraco.commerce</guid>
                    <title>uSync.Umbraco.Commerce</title>
                    <link>https://marketplace.umbraco.com/package/usync.umbraco.commerce</link>
                    <description><![CDATA[uSync serializers and handlers for Umbraco Commerce. Extends uSync so store settings &#x2014; stores, currencies, countries, regions, tax classes, shipping/payment methods, order statuses, and email/print/export templates &#x2014; export and import as config files, the same way uSync handles content types and the rest of the backoffice. Discounts and gift cards are supported too, opt-in.]]></description>
                    <pubDate>Fri, 14 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/baryodev.umbraco.pwa</guid>
                    <title>BaryoDev.Umbraco.Pwa</title>
                    <link>https://marketplace.umbraco.com/package/baryodev.umbraco.pwa</link>
                    <description><![CDATA[Turn an Umbraco site into an installable, offline-capable app, and see who installed it from the backoffice you are already signed into. Free and self-hosted: the install data lands in your own database and never leaves your server, so there is no third-party dashboard to log into and no processor to declare.]]></description>
                    <pubDate>Fri, 14 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://samsolutions.medium.com/what-is-umbraco-a-complete-guide-to-the-open-source-cms-14a24eaefe51?source=rss------umbraco-5</guid>
                    <title>What Is Umbraco? A Complete Guide to the Open-Source CMS</title>
                    <link>https://samsolutions.medium.com/what-is-umbraco-a-complete-guide-to-the-open-source-cms-14a24eaefe51?source=rss------umbraco-5</link>
                    <description><![CDATA[&lt;div class=&quot;medium-feed-item&quot;&gt;&lt;p class=&quot;medium-feed-image&quot;&gt;&lt;a href=&quot;https://samsolutions.medium.com/what-is-umbraco-a-complete-guide-to-the-open-source-cms-14a24eaefe51?source=rss------umbraco-5&quot;&gt;&lt;img src=&quot;https://cdn-images-1.medium.com/max/1672/1*GvkMBnti26YzRjKOr3B76g.png&quot; width=&quot;1672&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;medium-feed-snippet&quot;&gt;Some CMS platforms arrive with strong opinions about how a site should work. Umbraco leaves more of those decisions open.&lt;/p&gt;&lt;p class=&quot;medium-feed-link&quot;&gt;&lt;a href=&quot;https://samsolutions.medium.com/what-is-umbraco-a-complete-guide-to-the-open-source-cms-14a24eaefe51?source=rss------umbraco-5&quot;&gt;Continue reading on Medium &#xBB;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;]]></description>
                    <pubDate>Thu, 13 Aug 2026 13:40:46 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.TwentyThree/releases/tag/v17.0.0-alpha002</guid>
                    <title>Limbo.Umbraco.TwentyThree 17.0.0-alpha002</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.TwentyThree/releases/tag/v17.0.0-alpha002</link>
                    <description><![CDATA[Video picker for inserting TwentyThree videos in Umbraco.]]></description>
                    <pubDate>Thu, 13 Aug 2026 08:48:01 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.Emply/releases/tag/v17.0.0-alpha001</guid>
                    <title>Limbo.Umbraco.Emply 17.0.0-alpha001</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.Emply/releases/tag/v17.0.0-alpha001</link>
                    <description><![CDATA[Umbraco integration for the Emply API.]]></description>
                    <pubDate>Thu, 13 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://umbraco.com/blog/security-heads-up-upcoming-security-patches-for-umbraco-cms-and-umbraco-forms-ready-on-august-18-2026-at-08-am-utc/</guid>
                    <title>Security Heads-Up: Upcoming Security Patches for Umbraco CMS and Umbraco Forms ready on August 18, 2026 at 08 AM UTC</title>
                    <link>https://umbraco.com/blog/security-heads-up-upcoming-security-patches-for-umbraco-cms-and-umbraco-forms-ready-on-august-18-2026-at-08-am-utc/</link>
                    <description><![CDATA[Heads-up: High-severity patches for Umbraco CMS, Forms, and AI arrive August 18, 2026, at 08 AM UTC. Prepare your systems for updates.]]></description>
                    <pubDate>Thu, 13 Aug 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/phases.umbraco.emojipicker</guid>
                    <title>Phases.Umbraco.EmojiPicker</title>
                    <link>https://marketplace.umbraco.com/package/phases.umbraco.emojipicker</link>
                    <description><![CDATA[Emoji Picker property editor and TipTap RTE toolbar button for inserting emoji at the caret. Compatible with Umbraco 17 and 18.]]></description>
                    <pubDate>Thu, 13 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/ucomments</guid>
                    <title>uComments</title>
                    <link>https://marketplace.umbraco.com/package/ucomments</link>
                    <description><![CDATA[Collaborative discussions, mentions and notifications directly inside the Umbraco backoffice.]]></description>
                    <pubDate>Thu, 13 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/phases.umbraco.charactercounter</guid>
                    <title>Phases.Umbraco.CharacterCounter</title>
                    <link>https://marketplace.umbraco.com/package/phases.umbraco.charactercounter</link>
                    <description><![CDATA[A Textbox-style property editor that shows a live character count while editors type, with soft warning and over-limit colors. Compatible with Umbraco 17 and 18.]]></description>
                    <pubDate>Thu, 13 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://shazwazza.com/articles/automate-all-the-things-my-codegarden-2026-talk-is-up/</guid>
                    <title>Automate All the Things - my Codegarden 2026 talk is up</title>
                    <link>https://shazwazza.com/articles/automate-all-the-things-my-codegarden-2026-talk-is-up/</link>
                    <description><![CDATA[My Codegarden 2026 talk, Automate All the Things: Building &amp; Evolving Umbraco Sites with AI Agents, is now up on YouTube:&#xA;&#x25B6;&#xFE0F; Watch it here&#xA;And everything I ran on stage - the prompts, the rules, the skills, the agents, the whole workflow - is open source here:&#xA;&#x1F4E6; github.com/Shazwazza/UmbracoAI&#xA;So what actually happens in it?&#xA;The whole talk is a live demo. I point GitHub Copilot CLI at a completely empty Umbraco install - no content types, no templates, no content, nothing but an API user I&#x27;d set up beforehand - and it designs, scaffolds, styles, populates, validates and commits an entire blogging website. Nobody opens the back office. Nobody writes a line of code.&#xA;It builds the document types, the templates, the CSS, the navigation, ten blog posts, goes and finds matching images for all of them, adds a tag cloud, generates a sitemap, runs accessibility checks, and commits after every single step.&#xA;The content isn&#x27;t generic filler, either. The agent is told to write about the presentation it&#x27;s currently part of, and about what it&#x27;s learning as it goes. So it writes blog posts about its own experience of being built, live, while a room full of people watches. It knows it&#x27;s on stage, and it will happily tell you so.&#xA;The bit I&#x27;m most excited about&#xA;The thing driving all of it is Conductor - a YAML-based multi-agent workflow runner. If you&#x27;ve used LangChain or LangGraph, it&#x27;s a bit like that, except you don&#x27;t write code, you write YAML. Each step is an agent with strongly typed inputs and outputs, so you can wire the output of one step into the input of another. Steps can run in parallel, they can fan out and fan back in, they can loop, they can each use a different model, and the whole thing can be templated.&#xA;The best part is you don&#x27;t even have to write the YAML. Installing Conductor installs a skill that writes Conductor workflows, so you can just ask for what you want. That&#x27;s exactly what I did - I told it I wanted a blog engine with a tag cloud and git commits along the way, and deliberately never told it how to use Umbraco. It figured that out entirely from the Umbraco MCP tool metadata.&#xA;The funny bits&#xA;Because it&#x27;s writing about itself as it goes, the titles are a delight. Some actual ones it came up with:&#xA;&#xA;Hello Codegarden, an AI agent walks into a CMS&#xA;The first keystroke is always the hardest&#xA;Publishing nine posts in parallel&#xA;Giving the tag cloud a job&#xA;Building navigation that feels obvious&#xA;My first accessibility pass, out loud&#xA;The day HMAC-signed images humbled me&#xA;&#xA;That last one got a proper laugh out of the room, because of course everybody has had that problem. And &quot;the first keystroke is always the hardest&quot; opened with something about the particular quiet that lives in the moment you create your very first document type, which is honestly more introspection than I manage before coffee.&#xA;One run decided to put a live counter on the home page showing how long it had been building and how many document types it had created, credited to &quot;one very caffeinated agent&quot;. Nobody asked it to do that.&#xA;The other consistent surprise: if you tell a model to be creative and invent its own visual identity, it will make it neon. Over and over. I never once said the word &quot;neon&quot;. Several runs independently decided the site should be called Aurora, which I also never mentioned. Something out there in training data really wants your blog to glow.&#xA;Go have a play&#xA;Clone the repo, install Conductor, point it at an empty Umbraco and watch it go. The README covers the setup. If you build something interesting with it, I&#x27;d genuinely love to hear about it. &#x1F642;]]></description>
                    <pubDate>Wed, 12 Aug 2026 19:36:08 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://shazwazza.com/post/automate-all-the-things-codegarden-2026/</guid>
                    <title>Automate All the Things - my Codegarden 2026 talk is up</title>
                    <link>https://shazwazza.com/post/automate-all-the-things-codegarden-2026/</link>
                    <description><![CDATA[My Codegarden 2026 talk, Automate All the Things: Building &amp; Evolving Umbraco Sites with AI Agents, is now up on YouTube:&#xA;&#x25B6;&#xFE0F; Watch it here&#xA;And everything I ran on stage - the prompts, the rules, the skills, the agents, the whole workflow - is open source here:&#xA;&#x1F4E6; github.com/Shazwazza/UmbracoAI&#xA;So what actually happens in it?&#xA;The whole talk is a live demo. I point GitHub Copilot CLI at a completely empty Umbraco install - no content types, no templates, no content, nothing but an API user I&#x27;d set up beforehand - and it designs, scaffolds, styles, populates, validates and commits an entire blogging website. Nobody opens the back office. Nobody writes a line of code.&#xA;It builds the document types, the templates, the CSS, the navigation, ten blog posts, goes and finds matching images for all of them, adds a tag cloud, generates a sitemap, runs accessibility checks, and commits after every single step.&#xA;The content isn&#x27;t generic filler, either. The agent is told to write about the presentation it&#x27;s currently part of, and about what it&#x27;s learning as it goes. So it writes blog posts about its own experience of being built, live, while a room full of people watches. It knows it&#x27;s on stage, and it will happily tell you so.&#xA;The bit I&#x27;m most excited about&#xA;The thing driving all of it is Conductor - a YAML-based multi-agent workflow runner. If you&#x27;ve used LangChain or LangGraph, it&#x27;s a bit like that, except you don&#x27;t write code, you write YAML. Each step is an agent with strongly typed inputs and outputs, so you can wire the output of one step into the input of another. Steps can run in parallel, they can fan out and fan back in, they can loop, they can each use a different model, and the whole thing can be templated.&#xA;The best part is you don&#x27;t even have to write the YAML. Installing Conductor installs a skill that writes Conductor workflows, so you can just ask for what you want. That&#x27;s exactly what I did - I told it I wanted a blog engine with a tag cloud and git commits along the way, and deliberately never told it how to use Umbraco. It figured that out entirely from the Umbraco MCP tool metadata.&#xA;The funny bits&#xA;Because it&#x27;s writing about itself as it goes, the titles are a delight. Some actual ones it came up with:&#xA;&#xA;Hello Codegarden, an AI agent walks into a CMS&#xA;The first keystroke is always the hardest&#xA;Publishing nine posts in parallel&#xA;Giving the tag cloud a job&#xA;Building navigation that feels obvious&#xA;My first accessibility pass, out loud&#xA;The day HMAC-signed images humbled me&#xA;&#xA;That last one got a proper laugh out of the room, because of course everybody has had that problem. And &quot;the first keystroke is always the hardest&quot; opened with something about the particular quiet that lives in the moment you create your very first document type, which is honestly more introspection than I manage before coffee.&#xA;One run decided to put a live counter on the home page showing how long it had been building and how many document types it had created, credited to &quot;one very caffeinated agent&quot;. Nobody asked it to do that.&#xA;The other consistent surprise: if you tell a model to be creative and invent its own visual identity, it will make it neon. Over and over. I never once said the word &quot;neon&quot;. Several runs independently decided the site should be called Aurora, which I also never mentioned. Something out there in training data really wants your blog to glow.&#xA;Go have a play&#xA;Clone the repo, install Conductor, point it at an empty Umbraco and watch it go. The README covers the setup. If you build something interesting with it, I&#x27;d genuinely love to hear about it. &#x1F642;]]></description>
                    <pubDate>Wed, 12 Aug 2026 19:36:08 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.datatypes.brazilstates</guid>
                    <title>SplatDev.Umbraco.DataTypes.BrazilStates</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.datatypes.brazilstates</link>
                    <description><![CDATA[A pre-configured Umbraco data type providing a dropdown of Brazil&#x27;s 27 federative units &#x2014; the 26 states plus the Distrito Federal. Values are stored in proper case with accents, as written in Portuguese. Umbraco 13 (net8.0) and 17 (net10.0); the data type installs itself on Umbraco 13.]]></description>
                    <pubDate>Wed, 12 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/utpro.feature.searchplus</guid>
                    <title>uTPro.Feature.SearchPlus</title>
                    <link>https://marketplace.umbraco.com/package/utpro.feature.searchplus</link>
                    <description><![CDATA[Enhance Umbraco site search with synonym expansion and diacritics-insensitive matching, managed from the backoffice. Users searching &#x27;laptop&#x27; will also find content containing &#x27;may tinh&#x27;, &#x27;pc&#x27;, or &#x27;computer&#x27;. Users searching without accents (&#x27;cong ty&#x27;) will find &#x27;cong ty&#x27;. Includes a backoffice UI under Settings for creating, editing and testing synonym groups. 25 common Vietnamese-English synonym groups are pre-loaded. Stores data in the Umbraco database (SQL Server, SQLite, PostgreSQL). Integrates automatically with uTPro.Extension.Search for zero-config query expansion. Also exposes an authenticated REST API for synonym CRUD and expansion testing.]]></description>
                    <pubDate>Wed, 12 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=1jZbBy0p3hI</guid>
                    <title>Unlocking the Power of Umbraco&#x27;s Commercial Products</title>
                    <link>https://www.youtube.com/watch?v=1jZbBy0p3hI</link>
                    <description><![CDATA[An exciting Umbraco India User Group meetup with Corn&#xE9; Hoskam, Technical Team Lead for Commercial Products at Umbraco and former Umbraco MVP &#x1F929;]]></description>
                    <pubDate>Tue, 11 Aug 2026 15:03:20 Z</pubDate>
                        <category>community</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://github.com/abjerner/Limbo.Umbraco.Iddqd/releases/tag/v17.0.0-alpha001</guid>
                    <title>Limbo.Umbraco.Iddqd 17.0.0-alpha001</title>
                    <link>https://github.com/abjerner/Limbo.Umbraco.Iddqd/releases/tag/v17.0.0-alpha001</link>
                    <description><![CDATA[Limbo.Umbraco.Iddqd package with various developer oriented improvements for the Umbraco backoffice.]]></description>
                    <pubDate>Tue, 11 Aug 2026 13:36:41 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.ModelsBuilder/releases/tag/v17.0.0-alpha002</guid>
                    <title>Limbo.Umbraco.ModelsBuilder 17.0.0-alpha002</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.ModelsBuilder/releases/tag/v17.0.0-alpha002</link>
                    <description><![CDATA[Limbo.Umbraco.ModelsBuilder is a custom models builder for Umbraco that provides extended functionality compared to Umbraco&#x27;s build-in models builder.]]></description>
                    <pubDate>Tue, 11 Aug 2026 09:25:42 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.MediaPicker/releases/tag/v17.0.0-alpha001</guid>
                    <title>Limbo.Umbraco.MediaPicker 17.0.0-alpha001</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.MediaPicker/releases/tag/v17.0.0-alpha001</link>
                    <description><![CDATA[Umbraco package that extends the functionality of Umbraco&#x27;s build-in media picker property editor.]]></description>
                    <pubDate>Tue, 11 Aug 2026 09:07:24 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/foxcart.template.flow</guid>
                    <title>FoxCart.Template.Flow</title>
                    <link>https://marketplace.umbraco.com/package/foxcart.template.flow</link>
                    <description><![CDATA[Flow design template for FoxCart: the soft counter-thesis to Lean &#x2014; nothing is cut, everything blends. A floating pill nav with an inline search field, gradient-blob decoration, wave-shaped section dividers, and product media clipped organically with a price pill that overlaps the edge. Ships 6 presets (Standard, Smoke, Ocean, Bloom, Citrus and Aurora, the last dark-only), complete page views (home, shop, product with variants and extra fields, cart, multi-step checkout, order confirmation, blog and content pages) and optional FoxCart Members view overrides. Installs a walkable store in one restart on top of FoxCart Template.]]></description>
                    <pubDate>Tue, 11 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/foxcart.template</guid>
                    <title>FoxCart.Template</title>
                    <link>https://marketplace.umbraco.com/package/foxcart.template</link>
                    <description><![CDATA[Template addon base for FoxCart: seeds the shared website/shop content model (Home, Shop, Product with variants and extra fields, Cart, Checkout, Order Confirmation, Content Page, Articles) with its Block List element types, plus a backoffice store installer and shared cart/checkout surface controllers. Design-agnostic &#x2014; install a design package (Lean, Clarity, Flow, Grid or Chakra) for the actual views and styling.]]></description>
                    <pubDate>Tue, 11 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/foxcart.template.clarity</guid>
                    <title>FoxCart.Template.Clarity</title>
                    <link>https://marketplace.umbraco.com/package/foxcart.template.clarity</link>
                    <description><![CDATA[Accessibility-first design template for FoxCart, built to WCAG 2.2: visible focus design language, fieldset-based forms, nothing conveyed by colour alone. Ships 4 selectable themes (Standard, Contrast, Dusk, Sage), complete page views (home, shop, product with variants and extra fields, cart, multi-step checkout, order confirmation, blog and content pages) and optional FoxCart Members view overrides. Installs a walkable store in one restart on top of FoxCart Template.]]></description>
                    <pubDate>Tue, 11 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.themes.landing</guid>
                    <title>SplatDev.Umbraco.Themes.Landing</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.themes.landing</link>
                    <description><![CDATA[Landing page theme for Umbraco - hero section, features grid, testimonials, pricing cards, FAQ accordion, CTA banner]]></description>
                    <pubDate>Tue, 11 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.npoco</guid>
                    <title>SplatDev.Umbraco.NPoco</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.npoco</link>
                    <description><![CDATA[NPoco database layer extensions for Umbraco 13 (net8.0) and Umbraco 17 (net10.0)]]></description>
                    <pubDate>Tue, 11 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.tools.packageactions</guid>
                    <title>SplatDev.Umbraco.Tools.PackageActions</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.tools.packageactions</link>
                    <description><![CDATA[Umbraco package action helpers &#x2014; run document type, data type, template and content node setup during package install.]]></description>
                    <pubDate>Tue, 11 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.examine</guid>
                    <title>SplatDev.Umbraco.Examine</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.examine</link>
                    <description><![CDATA[Examine/Lucene search extensions for Umbraco 13 (net8.0) and Umbraco 17 (net10.0)]]></description>
                    <pubDate>Tue, 11 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.themes.hotel</guid>
                    <title>SplatDev.Umbraco.Themes.Hotel</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.themes.hotel</link>
                    <description><![CDATA[Hotel/hospitality theme for Umbraco - rooms, booking, gallery, amenities, reviews, location map]]></description>
                    <pubDate>Tue, 11 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.themes.corporate</guid>
                    <title>SplatDev.Umbraco.Themes.Corporate</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.themes.corporate</link>
                    <description><![CDATA[Professional corporate theme for Umbraco - home, about, services, team, contact pages]]></description>
                    <pubDate>Tue, 11 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.themes.base</guid>
                    <title>SplatDev.Umbraco.Themes.Base</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.themes.base</link>
                    <description><![CDATA[Umbraco Base Theme - Foundation theme with reusable components: navigation, footer, sidebar, responsive grid. Required by all other UmbracoCms themes.]]></description>
                    <pubDate>Tue, 11 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.datatypes.usstates</guid>
                    <title>SplatDev.Umbraco.DataTypes.USStates</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.datatypes.usstates</link>
                    <description><![CDATA[US States data type for Umbraco 13 (net8.0) and Umbraco 17 (net10.0)]]></description>
                    <pubDate>Tue, 11 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/foxcart.template.chakra</guid>
                    <title>FoxCart.Template.Chakra</title>
                    <link>https://marketplace.umbraco.com/package/foxcart.template.chakra</link>
                    <description><![CDATA[Chakra design template for FoxCart: everything radiates from a centre. A concentric ring field wraps a circular product frame, deep full-bleed colour bands carry the weight of the page, and one accent colour only ever means &#x201C;act here&#x201D;. Calm pacing and wide air, suited to wellness, holistic and lifestyle catalogues. Ships 4 presets (Tachyon, Aura, Lightspeed and Eclipse, the last dark-only), complete page views (home, shop, product with variants and extra fields, cart, multi-step checkout, order confirmation, blog and content pages) and optional FoxCart Members view overrides. Installs a walkable store in one restart on top of FoxCart Template.]]></description>
                    <pubDate>Tue, 11 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.themes.blog</guid>
                    <title>SplatDev.Umbraco.Themes.Blog</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.themes.blog</link>
                    <description><![CDATA[Blog theme for Umbraco - post layout, author bio, comment section, categories sidebar, archive page]]></description>
                    <pubDate>Tue, 11 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.themes.conference</guid>
                    <title>SplatDev.Umbraco.Themes.Conference</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.themes.conference</link>
                    <description><![CDATA[Conference/event theme for Umbraco - schedule, speakers, venue, registration, countdown]]></description>
                    <pubDate>Tue, 11 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.themes.commerce</guid>
                    <title>SplatDev.Umbraco.Themes.Commerce</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.themes.commerce</link>
                    <description><![CDATA[E-commerce theme for Umbraco - product grid, product detail, cart, checkout, category browse]]></description>
                    <pubDate>Tue, 11 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.entityframework</guid>
                    <title>SplatDev.Umbraco.EntityFramework</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.entityframework</link>
                    <description><![CDATA[Entity Framework Core integration for Umbraco 13 (net8.0) and Umbraco 17 (net10.0)]]></description>
                    <pubDate>Tue, 11 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.pdfcurator</guid>
                    <title>SplatDev.Umbraco.Plugins.PdfCurator</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.pdfcurator</link>
                    <description><![CDATA[Book Library backoffice section for Umbraco 17. Dashboard, library browser, review queue, and reports for managing PDF digital books and documents. Pluggable Lit web component architecture ready for the full PdfCurator component suite. Supports Umbraco 13 (net8.0) and Umbraco 17 (net10.0).]]></description>
                    <pubDate>Tue, 11 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/foxcart.template.grid</guid>
                    <title>FoxCart.Template.Grid</title>
                    <link>https://marketplace.umbraco.com/package/foxcart.template.grid</link>
                    <description><![CDATA[Grid design template for FoxCart: commerce presented like a magazine spread. Oversized display type, an asymmetric layout primitive, and a rotated hard-shadow stamp that recurs on prices, badges and buttons. Ships 4 presets (Studio, Noir &#x2014; dark-only &#x2014;, Riot and Heritage, each moving type, border weight and motion rather than colour alone), complete page views (home, shop, product with variants and extra fields, cart, multi-step checkout, order confirmation, blog and content pages) and optional FoxCart Members view overrides. Installs a walkable store in one restart on top of FoxCart Template.]]></description>
                    <pubDate>Tue, 11 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/skybrud.umbraco.redirects.automate</guid>
                    <title>Skybrud.Umbraco.Redirects.Automate</title>
                    <link>https://marketplace.umbraco.com/package/skybrud.umbraco.redirects.automate</link>
                    <description><![CDATA[Automate addon for Skybrud Redirects.]]></description>
                    <pubDate>Tue, 11 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/foxcart.template.lean</guid>
                    <title>FoxCart.Template.Lean</title>
                    <link>https://marketplace.umbraco.com/package/foxcart.template.lean</link>
                    <description><![CDATA[Lean design template for FoxCart: a clean, hard-cut storefront design with 10 selectable themes, complete page views (home, shop, product with variants and extra fields, cart, multi-step checkout, order confirmation, blog and content pages) and optional FoxCart Members view overrides. Installs a walkable store in one restart on top of FoxCart Template.]]></description>
                    <pubDate>Tue, 11 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.defaultvalue</guid>
                    <title>SplatDev.Umbraco.Plugins.DefaultValue</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.defaultvalue</link>
                    <description><![CDATA[Set default values for Umbraco content properties by document type and property alias. Automatically populate properties when new content nodes are created. Supports Umbraco 13 (net8.0) and Umbraco 17 (net10.0).]]></description>
                    <pubDate>Tue, 11 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.copyvalue</guid>
                    <title>SplatDev.Umbraco.Plugins.CopyValue</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.copyvalue</link>
                    <description><![CDATA[Copy property values between Umbraco content nodes &#x2014; bulk copy, property mapping between different document types, and reusable mapping templates. Supports Umbraco 13 (net8.0) and Umbraco 17 (net10.0).]]></description>
                    <pubDate>Tue, 11 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.backups</guid>
                    <title>SplatDev.Umbraco.Plugins.Backups</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.backups</link>
                    <description><![CDATA[Create, schedule, and restore Umbraco backups directly from the backoffice. Supports 10&#x2B; cloud storage providers: Azure Blob, Amazon S3, Dropbox, Google Drive, OneDrive, Box, Mega, Seafile, SFTP, and local file system. Backup retention policies, email notifications, and CRON-based scheduling built in. Supports Umbraco 13 (net8.0) and Umbraco 17 (net10.0).]]></description>
                    <pubDate>Tue, 11 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.authorization.ldap</guid>
                    <title>SplatDev.Umbraco.Authorization.Ldap</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.authorization.ldap</link>
                    <description><![CDATA[LDAP/Active Directory SSO authentication for Umbraco 13 (net8.0) and Umbraco 17 (net10.0)]]></description>
                    <pubDate>Tue, 11 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.nugetcatalog</guid>
                    <title>SplatDev.Umbraco.Plugins.NuGetCatalog</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.nugetcatalog</link>
                    <description><![CDATA[Backoffice dashboard listing the packages you publish to nuget.org &#x2014; download counts, latest version and a short summary per package. Add specific packages by URL, hide the ones you don&#x27;t care about. Umbraco 17 (net10.0).]]></description>
                    <pubDate>Tue, 11 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://www.dynamicdave.nl/blog/an-unexpected-reflection/</guid>
                    <title>I&#x27;ve used Umbraco for more than a decade. An unexpected reflection.</title>
                    <link>https://www.dynamicdave.nl/blog/an-unexpected-reflection/</link>
                    <description><![CDATA[I just got back from vacation, and, for the first time in ages, I managed to ditch my laptop. So no Visual Studio, no migrations and no coding whatsoever. No people asking me &#x201C;can you just&#x2026;?&#x201D;. It felt pretty good to unplug for a bit. I wasn&#x2019;t mentally writing code the whole time, and I definitely didn&#x2019;t set out to think about Umbraco over my morning coffee.And I was planning on reading blog posts, listen to a few podcasts, reading the docs, etc. But the terrible mobile connection in France prevented that. So I kicked back, soaked up some sun, and enjoyed the joy of doing nothing productive (and a beer here of there), my mind wandered back to it anyway. Because this holiday made me look back and reflect at the last couple of years somehow. Maybe it was the lack of a laptop that made me a look back&#x2026;I&#x2019;ve been working with Umbraco for 10&#x2B; years now. I started somewhere around 2012 or 2013, with Umbraco 4. In that time, I&#x2019;ve watched versions come and go, seen the platform shift in big ways, and watched the community explode to what it is today. And I&#x2019;ve wrangled my way through more projects and upgrades than I care to count.Thinking about that is weird. I never expected, back when I started, that I&#x2019;d still be talking about Umbraco a decade later. It became part of my career, a source of major learning, and eventually even something I started writing about.So while I was taking a break, I found myself reflecting on this whole adventure. Not just on the version numbers, but on how the platform changed&#x2014;and, honestly, how I changed right alongside it.]]></description>
                    <pubDate>Mon, 10 Aug 2026 22:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://github.com/skybrud/Skybrud.Umbraco.Redirects.Automate/releases/tag/v17.0.0</guid>
                    <title>Skybrud.Umbraco.Redirects.Automate 17.0.0</title>
                    <link>https://github.com/skybrud/Skybrud.Umbraco.Redirects.Automate/releases/tag/v17.0.0</link>
                    <description><![CDATA[Automate addon for Skybrud Redirects.]]></description>
                    <pubDate>Mon, 10 Aug 2026 16:35:32 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://umbracocommunity.social/@umbraco/117070178598499388</guid>
                    <title>Codegarden 2026 talks are officially live on YouTube!</title>
                    <link>https://umbracocommunity.social/@umbraco/117070178598499388</link>
                    <description><![CDATA[&#x1F37F; Codegarden 2026 talks are officially live on YouTube!Missed a session? Want to revisit a mind-blowing talk? Or maybe you just want to experience the magic all over again?Stream the full lineup here &#x1F449; https://umbra.co/4xipSdAHappy watching! &#x1F499;#Umbraco]]></description>
                    <pubDate>Mon, 10 Aug 2026 09:41:00 Z</pubDate>
                        <category>hq</category>
                        <category>mastodon</category>
                        <category>social</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=hTgwqcfITqM</guid>
                    <title>Jen Wolke, Cooking Up Quality with Chef Claude</title>
                    <link>https://www.youtube.com/watch?v=hTgwqcfITqM</link>
                    <description><![CDATA[AI isn&#x27;t just for building things &#x2014; it&#x27;s for breaking them better, too. In this session, we&#x27;ll move beyond the usual AI hype and explore how Claude Chat on the Desktop and the Claude browser extension can become your secret weapons for smarter, faster QA. Think fewer missed bugs, tighter feedback loops, and a testing workflow that actually keeps pace with your team.]]></description>
                    <pubDate>Mon, 10 Aug 2026 08:25:02 Z</pubDate>
                        <category>hq</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=Fjk8iMfPdeE</guid>
                    <title>Matthew Wise, Vibe Coder to AI Engineer</title>
                    <link>https://www.youtube.com/watch?v=Fjk8iMfPdeE</link>
                    <description><![CDATA[From Designs to Umbraco (and Everything In Between)&#xA;A refreshingly honest journey through AI-assisted development &#x2014; going from designs to a fully CMS-managed Umbraco experience using Claude Code and context engineering. Starting as a vibe coder throwing prompts and hoping for the best, and ending up with a real workflow that actually delivers.&#xA;&#xA;What You&#x27;ll See Through real recordings and demonstrations:&#xA;&#xA;- Building Umbraco document types, compositions, and content with Claude Code&#xA;- Context engineering techniques &#x2014; planning, memories, and knowing when the AI needs a firm talking-to&#xA;- MCP servers and sub-agents (when they cooperate)&#xA;- Custom commands and skills that turned hours of work into minutes&#xA;&#xA;The Real Talk&#xA;This isn&#x27;t a highlight reel. Expect moments where Claude gets creative in unexpected ways, prompts go sideways, and the classic &quot;it works on my machine&quot; makes an appearance. That&#x27;s where the real learning happens.&#xA;&#xA;Perfect for developers ready to embrace AI workflows &#x2014; complete with the beautiful chaos.]]></description>
                    <pubDate>Mon, 10 Aug 2026 06:00:39 Z</pubDate>
                        <category>hq</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=JNAmfCsVmBY</guid>
                    <title>Nikolaj Hjelm Kaplan, Anne Pehrson &amp; Victor Nellemann, Inside the Danish Broadcasting News Platform</title>
                    <link>https://www.youtube.com/watch?v=JNAmfCsVmBY</link>
                    <description><![CDATA[Inside the Danish Broadcasting Corporation News Platform: Scaling Umbraco for 24/7 News&#xA;&#xA;When your CMS powers the daily work of several hundred journalists and publishes content to 9 out of 10 Danes, standard is never enough.&#xA;&#xA;The Danish Broadcasting Corporation rebuilt its mission-critical article CMS on Umbraco to replace a Drupal 7 platform approaching end-of-life. The result is a highly customised, high-performance editorial system that runs around the clock.&#xA;&#xA;In this session, you will see:&#xA;&#xA;- The overall architecture around Umbraco and how it integrates into DR&#x2019;s digital ecosystem&#xA;- How performance and stability are ensured in a 24/7 news cycle&#xA;- How a standard Umbraco installation was extended into a fully customised editorial platform&#xA;- Key backoffice customisations that support high-volume publishing with short turnaround times&#xA;- Lessons learned from migrating from Drupal 7 in a high-pressure environment&#xA;&#xA;This is a real-world enterprise implementation at national scale, with concrete architectural decisions, trade-offs, and practical insights you can take home.]]></description>
                    <pubDate>Mon, 10 Aug 2026 06:00:38 Z</pubDate>
                        <category>hq</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=4I_F5QJkvGE</guid>
                    <title>Lasse Fredslund, Rasmus John Pedersen, Umbraco Compose</title>
                    <link>https://www.youtube.com/watch?v=4I_F5QJkvGE</link>
                    <description><![CDATA[Come along for a deep technical tour through Umbraco Compose. Members of the product team will show off how it aggregates and combines data from multiple sources. Expect to see demos, tips, and loads of other technical insight into the platform!]]></description>
                    <pubDate>Mon, 10 Aug 2026 06:00:36 Z</pubDate>
                        <category>hq</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=KnfwRfpD5V8</guid>
                    <title>Owain Williams, Unlocking the Umbraco Management API Beyond the Backoffice</title>
                    <link>https://www.youtube.com/watch?v=KnfwRfpD5V8</link>
                    <description><![CDATA[The Umbraco backoffice runs on the Management API but what if you could harness that same power outside the CMS? Now you can.&#xA;&#xA;In this session, we&#x2019;ll cut through the jungle of Swagger docs together, surfacing hidden tips, decoding tricky payloads, and navigating the pain points so you don&#x2019;t have to. You&#x2019;ll see how to move beyond documentation into practical, real-world usage: integrating with external systems, extending functionality, and pushing the limits of what&#x2019;s possible with Umbraco.&#xA;&#xA;Expect plenty of hands-on advice, &#x201C;gotchas&#x201D; to avoid, and fresh inspiration for your own projects. You&#x2019;ll walk away confident to start building with the Management API &#x2014; and with new ideas on how it can transform the way you work with Umbraco.]]></description>
                    <pubDate>Mon, 10 Aug 2026 06:00:35 Z</pubDate>
                        <category>hq</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=hqCfrgQP-4M</guid>
                    <title>Kyle Brigham, The Future Is AI Search: Designing Umbraco for AEO and AI Discovery</title>
                    <link>https://www.youtube.com/watch?v=hqCfrgQP-4M</link>
                    <description><![CDATA[The &quot;Blue Link&quot; era is fading, and if you&#x27;re still building Umbraco sites solely for Google&#x2019;s first page, you&#x2019;re already behind. Today, we aren&#x27;t just optimizing for clicks; we&#x2019;re optimizing for answers.&#xA;&#xA;In this session, we&#x2019;ll move beyond the standard metadata fields and explore how the rise of Answer Engine Optimization (AEO) and AI Discovery is fundamentally changing the way we architect the backoffice and how we approach site content. &#xA;&#xA;In this session, we&#x27;ll dive into:&#xA;&#xA;- Why Search is now an ecosystem, not a destination.&#xA;- How to evolve website structure to support Large Language Models (LLMs) and AI overviews. &#xA;- Why a solid content strategy beats a &quot;magic SEO plugin&quot; every time.]]></description>
                    <pubDate>Mon, 10 Aug 2026 06:00:33 Z</pubDate>
                        <category>hq</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=Wk2c36P9SJw</guid>
                    <title>Jordan McFarlane, Umbraco Compose: What is this whole orchestration thing anyway</title>
                    <link>https://www.youtube.com/watch?v=Wk2c36P9SJw</link>
                    <description><![CDATA[Gone are the days where your website was backed by a CMS alone. It&#x27;s becoming increasingly common to power it with any number of three-letter acronyms - a PIM, a DAM, or even an ERP. You&#x27;ve probably got a search provider, maybe a marketing suite, and who knows what other systems that need their say in the experiences that you create for your customers.&#xA;&#xA;It&#x27;s a whole lot of technology, and a whole lot of effort to get each one talking with the others.&#xA;&#xA;Enter Umbraco Compose; a content orchestration platform that makes it easy to coordinate the flow of content between your backend systems and delivery channels.&#xA;&#xA;This talk will go into more detail about what this whole orchestration concept means, without getting too technical. You&#x27;ll hear more about typical challenges for content authors and business users that arise from bespoke solutions, and you&#x27;ll see how Compose can let you breeze right past them. You&#x27;ll get insight into what makes Compose a good fit for your project and learn all about what to expect from the product in future.]]></description>
                    <pubDate>Mon, 10 Aug 2026 06:00:31 Z</pubDate>
                        <category>hq</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=gE3WagFkWq8</guid>
                    <title>Matt Sutherland &amp; Georgina Bidder, A Website, an Email, and an AI Summary walk into a Bar&#x2026;</title>
                    <link>https://www.youtube.com/watch?v=gE3WagFkWq8</link>
                    <description><![CDATA[Creating and updating your website should be the least of your worries. With Umbraco, you get a content management system known and loved for its flexibility and great editing experience.&#xA;&#xA;Umbraco is easy to get started with install, set up, and host it yourself or let us take care of it all for you on Umbraco Cloud. https://try.umbraco.com&#xA;&#xA;Learn more about Umbraco on our website https://umbraco.com&#xA;Discover our Umbraco Community: https://community.umbraco.com/&#xA;Find the Umbraco source code on Github: https://github.com/umbraco/Umbraco-CMS&#xA;Visit the Umbraco Documentation: https://docs.umbraco.com]]></description>
                    <pubDate>Mon, 10 Aug 2026 06:00:30 Z</pubDate>
                        <category>hq</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=hHnG3WgAfmA</guid>
                    <title>Joe Glombek , Developers, Assemble! Community is Your Team&#x2019;s Superpower</title>
                    <link>https://www.youtube.com/watch?v=hHnG3WgAfmA</link>
                    <description><![CDATA[What happens when your team spends work time eating pizza and hanging out with other techies? Surprisingly, they don&#x2019;t just come back with stickers. They come back with ideas, solutions to problems, and a renewed enthusiasm for the work in front of them.&#xA;&#xA;The Umbraco community is one of the most active in the tech world, with in-person and virtual meetups across the globe hosting experts who love sharing their knowledge. For businesses, these events are an incredibly cost&#x2011;effective way to keep teams engaged and learning. While conferences or formal training can swallow days of time and thousands in cash, a local meetup costs little more than a couple of hours and a bus fare &#x2014; yet often delivers insights that save development time, reduce risk, keep technical debt in check and help teams adopt new technologies sooner while avoiding outdated approaches and reinventing the wheel.&#xA;&#xA;In this lightning talk, Joe shares what he&#x2019;s learned as an organiser of the Bristol Umbraco Meetup &#x2014; one of the longest&#x2011;running and best&#x2011;attended groups in the community.&#xA;&#xA;If you want a stronger tech team and bulletproof projects, helping them engage with the community might just be the highest-value superpower you can give them.]]></description>
                    <pubDate>Mon, 10 Aug 2026 06:00:30 Z</pubDate>
                        <category>hq</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=E3z8Wevmx_Q</guid>
                    <title>Markus Johansson, Hybrid Cache changes everything</title>
                    <link>https://www.youtube.com/watch?v=E3z8Wevmx_Q</link>
                    <description><![CDATA[When Umbraco introduced the new Hybrid Cache, it fundamentally changed the way that content is cached. It opens up new possibilities, but it also means that developers need to work differently when interacting with the published content of Umbraco. In this talk, we&#x27;ll explore what Hybrid Cache is, why it was introduced, how it improves performance, and what developers need to keep in mind when building solutions on top of it.]]></description>
                    <pubDate>Mon, 10 Aug 2026 06:00:30 Z</pubDate>
                        <category>hq</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=62LsHq_75PE</guid>
                    <title>Amalie Wowern, Commercial Products: What we&#x27;ve built and what&#x27;s next</title>
                    <link>https://www.youtube.com/watch?v=62LsHq_75PE</link>
                    <description><![CDATA[Update on the roadmap for Engage, Commerce, Workflow, Forms, UI Builder, and Deploy. What has happened this year, and what does the future bring.]]></description>
                    <pubDate>Mon, 10 Aug 2026 06:00:28 Z</pubDate>
                        <category>hq</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=QE9sIqk6w4s</guid>
                    <title>Tobias Jensen, Consolidating Multi-Country Marketing on Umbraco Cloud</title>
                    <link>https://www.youtube.com/watch?v=QE9sIqk6w4s</link>
                    <description><![CDATA[How do you move from scattered country websites and inconsistent messaging to one scalable global platform?&#xA;&#xA;In this case study, we explore how Orifarm unified multiple local market sites into a single Umbraco Cloud Baseline setup&#x2014;creating a strong global foundation while preserving the flexibility each market needs to succeed.&#xA;&#xA;Over time, independent country websites had evolved in different directions. Design systems varied, content structures diverged, and shared features were rebuilt again and again. The result was increasing complexity, inconsistent branding, and limited scalability. Orifarm needed a platform that could strengthen brand consistency, improve efficiency, and support future growth across markets.&#xA;&#xA;The ambition was clear: build once, reuse globally, and enable locally. The Umbraco Cloud Baseline became the technical and governance framework that made this possible. A shared codebase, standardized components, and defined global guidelines ensured consistency, while flexible content models and local configurations empowered markets to adapt messaging and campaigns to their needs.&#xA;&#xA;In this session, we share the business drivers behind the transformation, the architectural principles that shaped the solution, and the governance model that keeps it sustainable. We&#x2019;ll also openly discuss the mistakes we made along the way&#x2014;and the lessons learned&#x2014;so you can avoid the same pitfalls when building your own global platform.]]></description>
                    <pubDate>Mon, 10 Aug 2026 06:00:25 Z</pubDate>
                        <category>hq</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=QoMF-zeFQSc</guid>
                    <title>Daniel Horn, Migrating Three Large Websites Built on Kentico, WordPress and Webflow into One Umbraco</title>
                    <link>https://www.youtube.com/watch?v=QoMF-zeFQSc</link>
                    <description><![CDATA[Three large websites built on Kentico, WordPress, and Webflow were brought together into a single Umbraco platform for a global student organisation. Working through this consolidation highlighted a set of technical and editorial lessons that many Umbraco teams will recognise.&#xA;&#xA;Managing multiple CMS platforms in parallel led to repeated content updates, uneven structure, and editors switching between different tools. Over time, this increased coordination effort and made everyday maintenance harder than it needed to be.&#xA;&#xA;After reviewing the existing platforms, Umbraco was chosen based on its use of the .NET framework, alignment with Microsoft technology, Azure hosting support, EU hosting needs, and security requirements. Migrating more than five thousand pages brought up very practical questions around content modelling, field mapping, and deciding which content was still worth moving forward.&#xA;&#xA;Editor habits played an important role in several decisions. Many editors were coming from WordPress, where visual editing and drag based tools are familiar. The Umbraco editing experience felt different at first, so grid based editing and structured visual controls were introduced to help editors understand page layout while working. At the same time, features that felt unnecessary or cluttered in earlier tools were intentionally left out.&#xA;&#xA;The work also included referencing external data from SharePoint without duplicating it inside Umbraco, along with custom packages to support migration and editing needs.&#xA;&#xA;The talk focuses on lessons that Umbraco developers and architects can take into their own work when consolidating websites, handling large content sets, and supporting editors with different backgrounds.]]></description>
                    <pubDate>Mon, 10 Aug 2026 06:00:25 Z</pubDate>
                        <category>hq</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=-r4WlVvOwvw</guid>
                    <title>Becks Willis, Why most digital platforms struggle to justify their existence</title>
                    <link>https://www.youtube.com/watch?v=-r4WlVvOwvw</link>
                    <description><![CDATA[Most digital platforms are built with good intentions: better content, more flexibility, stronger performance, future-proofing. Teams work hard, launches go well, and early results often look positive.&#xA;&#xA;And yet, a few months later, many organisations struggle to answer a simple question: was this actually worth it?&#xA;&#xA;This talk explores why so many digital platforms become difficult to defend over time. Mainly because we never agree upfront how we&#x2019;ll know if they&#x2019;ve succeeded. So many sites and platforms are commissioned on ambition, but judged on dashboards and stats - with often the two being misaligned. &#xA;&#xA;Having been a performance marketing agency, when Hewitt Matthews bought tech agency, Quba, we needed to understand how these two services knit neatly together, and soon realised how few people get this right. With that in mind, I want to draw on the experience we gain from sitting in this middle pinch point. &#xA;&#xA;It&#x27;s not meant to be a case study or a &quot;how to&quot; session, but more of a talk on how we think about value, accountability and logenvity - and be a prompt for agencies and in-house teams to be more honest about what they&#x27;re budding and why. That being said, I&#x27;ll likely be talking about Umbraco Engage and how it serves as the gateway product between our performance business and our dev agency.&#xA;&#xA;If I nail this talk, people will leave with clearer questions to ask before the build so platforms are easier to defend later down the line.]]></description>
                    <pubDate>Mon, 10 Aug 2026 06:00:24 Z</pubDate>
                        <category>hq</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=gtK7gFXbfYg</guid>
                    <title>Rachel Breeze, Umbraco Decisions Stay, Upgrade, Rewrite</title>
                    <link>https://www.youtube.com/watch?v=gtK7gFXbfYg</link>
                    <description><![CDATA[With Umbraco 17 now available, the temptation to upgrade can be strong after all, it has new features and new performance gains, but upgrading isn&#x27;t always the right choice, and sticking with your current version isn&#x27;t always the wrong one. Every Umbraco project lives in its own reality. Each project has its own budgets, integrations, risk tolerance, developer capacity, and long-term business goals, all of which shape what &quot;the right path&quot; looks like.&#xA;In this talk, we&#x27;ll explore the full spectrum of options for maintaining an Umbraco site, from staying on the project&#x27;s current major version to upgrading thoughtfully or even rewriting when it truly makes sense.]]></description>
                    <pubDate>Mon, 10 Aug 2026 06:00:24 Z</pubDate>
                        <category>hq</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=b9mD8Xcge9o</guid>
                    <title>Martin Saaby, Composable B2B &#x2013; Why One of Denmark&#x2019;s Leading Wine Companies Chose Umbraco Compose</title>
                    <link>https://www.youtube.com/watch?v=b9mD8Xcge9o</link>
                    <description><![CDATA[Martin Saaby is Business Advisor &amp; Client Lead at Umbraco Platinum Partner Ecreo. With a background in international marketing and extensive experience in business development, he bridges strategy, data and technology. With deep expertise in Umbraco, he advises larger B2B companies on their digital platforms and helps them choose the right foundation for efficient scaling and sustainable competitive growth.]]></description>
                    <pubDate>Mon, 10 Aug 2026 06:00:23 Z</pubDate>
                        <category>hq</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://umbraco.com/blog/uprofile-august-2026-gia-matikainen/</guid>
                    <title>uProfile August 2026 - Gia Matikainen</title>
                    <link>https://umbraco.com/blog/uprofile-august-2026-gia-matikainen/</link>
                    <description><![CDATA[Meet Gia: Lead Umbraco Developer dreaming of building a thriving Umbraco community in Finland]]></description>
                    <pubDate>Mon, 10 Aug 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/our.umbraco.hideit</guid>
                    <title>Our.Umbraco.HideIt</title>
                    <link>https://marketplace.umbraco.com/package/our.umbraco.hideit</link>
                    <description><![CDATA[The &quot;now you see me, now you don&#x27;t&quot; package for Umbraco blocks! Toggle block visibility with a single click. Hidden blocks are automatically filtered from frontend rendering.]]></description>
                    <pubDate>Mon, 10 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/thebuilder.blurplaceholder</guid>
                    <title>TheBuilder.BlurPlaceholder</title>
                    <link>https://marketplace.umbraco.com/package/thebuilder.blurplaceholder</link>
                    <description><![CDATA[Generate WebP, BlurHash, or ThumbHash placeholders for Umbraco Image media and deliver them as one frontend-ready string.]]></description>
                    <pubDate>Mon, 10 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://adamc95.medium.com/hardening-against-csv-injection-in-umbraco-c0e5ad44327e?source=rss------umbraco-5</guid>
                    <title>Hardening against CSV Injection in Umbraco</title>
                    <link>https://adamc95.medium.com/hardening-against-csv-injection-in-umbraco-c0e5ad44327e?source=rss------umbraco-5</link>
                    <description><![CDATA[&lt;div class=&quot;medium-feed-item&quot;&gt;&lt;p class=&quot;medium-feed-image&quot;&gt;&lt;a href=&quot;https://adamc95.medium.com/hardening-against-csv-injection-in-umbraco-c0e5ad44327e?source=rss------umbraco-5&quot;&gt;&lt;img src=&quot;https://cdn-images-1.medium.com/max/600/0*pJ3atjCwTUiDeUay.gif&quot; width=&quot;600&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;medium-feed-snippet&quot;&gt;Hello, long time no blog. It has certainly been a while but I am still doing penetration testing.&lt;/p&gt;&lt;p class=&quot;medium-feed-link&quot;&gt;&lt;a href=&quot;https://adamc95.medium.com/hardening-against-csv-injection-in-umbraco-c0e5ad44327e?source=rss------umbraco-5&quot;&gt;Continue reading on Medium &#xBB;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;]]></description>
                    <pubDate>Sun, 09 Aug 2026 16:11:52 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umb.cachemanager</guid>
                    <title>Umb.CacheManager</title>
                    <link>https://marketplace.umbraco.com/package/umb.cachemanager</link>
                    <description><![CDATA[A backoffice dashboard for Umbraco 17 and later that allows you to view, inspect, and clear application caches without restarting the website.]]></description>
                    <pubDate>Sat, 08 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://dev.to/bernadet/expanding-the-backoffice-search-in-umbraco-highlighting-lesser-used-umbraco-features-2l4f</guid>
                    <title>Expanding the backoffice search in Umbraco - Highlighting lesser known Umbraco features</title>
                    <link>https://dev.to/bernadet/expanding-the-backoffice-search-in-umbraco-highlighting-lesser-used-umbraco-features-2l4f</link>
                    <description><![CDATA[&lt;p&gt;Recently, I started using &lt;a href=&quot;https://www.linkedin.com/in/erik-jan-westendorp/&quot; rel=&quot;noopener noreferrer&quot;&gt;Erik-Jan Westerndorp&#x27;s&lt;/a&gt; community package &quot;&lt;a href=&quot;https://marketplace.umbraco.com/package/umbraco.community.propertyeditors.heading&quot; rel=&quot;noopener noreferrer&quot;&gt;Heading&lt;/a&gt;&quot;. on a project. It&#x2019;s one of those packages that solves a very specific problem really neatly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case, the client wanted editors to be able to choose the heading level for a title on an element. So, for example, one image block might need an H2, while another might need an H3, depending on where it sits on the page.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The package worked great for that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, as often happens, solving one problem uncovered another.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not long after, the client came back with a new bit of feedback:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I can&#x2019;t search for the custom title I&#x2019;ve added.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And honestly, my first reaction was: &lt;em&gt;surely that should just work?&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I gave it a try - and they were right. The backoffice document search was only finding results based on the page name, not on values stored in custom fields.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8xkda7ei9wr9xbe0trjn.jpg&quot; class=&quot;article-body-image-wrapper&quot;&gt;&lt;img src=&quot;https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8xkda7ei9wr9xbe0trjn.jpg&quot; alt=&quot;Search for page name, finds result&quot; width=&quot;800&quot; height=&quot;383&quot;&gt;&lt;/a&gt;&lt;em&gt;Searching by page name returns the page&lt;/em&gt;&lt;br&gt;&#xA;&lt;a href=&quot;https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fowphbvusfxvmih85fm5p.jpg&quot; class=&quot;article-body-image-wrapper&quot;&gt;&lt;img src=&quot;https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fowphbvusfxvmih85fm5p.jpg&quot; alt=&quot;Search for page title, no result&quot; width=&quot;799&quot; height=&quot;344&quot;&gt;&lt;/a&gt;&lt;em&gt;Searching by page title returns no results&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first thing I did was check the internal index &#x2014; and the title field &lt;em&gt;was&lt;/em&gt; there, so that allowed me to cross off one possible issue.&lt;br&gt;&#xA;&lt;a href=&quot;https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy40nrhth5q0pp5aghszs.jpg&quot; class=&quot;article-body-image-wrapper&quot;&gt;&lt;img src=&quot;https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy40nrhth5q0pp5aghszs.jpg&quot; alt=&quot;Internal index&quot; width=&quot;800&quot; height=&quot;393&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the content &lt;em&gt;was&lt;/em&gt; being indexed - it just wasn&#x2019;t being searched by the backoffice search.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I asked a few colleagues about it, and the general feeling was that this probably wasn&#x2019;t something you could change. The assumption was that Umbraco backoffice search just searches a predefined set of fields and that was that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Still, it felt like there &lt;em&gt;had&lt;/em&gt; to be a way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And there is.&lt;/p&gt;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  The Missing Piece: UmbracoTreeSearcherFields&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;It turns out this is already supported and documented, but it was a feature I hadn&#x2019;t come across before. Since I suspect I&#x2019;m not the only one, it&#x2019;s worth highlighting here:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://docs.umbraco.com/umbraco-cms/extend-your-project/server-side-extensions/backoffice-search&quot; rel=&quot;noopener noreferrer&quot;&gt;Backoffice Search - A guide to customization of Backoffice Search&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That article introduced me to &lt;strong&gt;UmbracoTreeSearcherFields&lt;/strong&gt;, which controls the indexed fields used by backoffice search. By replacing it with a custom implementation, you can expand the list of searchable fields.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My first attempt looked like this:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight csharp&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;CustomUmbracoTreeSearcherFields&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ILanguageService&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;languageService&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;UmbracoTreeSearcherFields&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;languageService&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;IUmbracoTreeSearcherFields&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;IEnumerable&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;GetBackOfficeDocumentFields&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;base&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;GetBackOfficeFields&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;())&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;title&quot;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;I restarted my environment, tried again&#x2026; and it still didn&#x2019;t work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Backoffice search could still only find the page by name.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;&#xA;  &#xA;  &#xA;  The Catch: Variant Field Names&#xA;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;After taking a closer look at the index, the reason became clear: the field key wasn&#x2019;t simply title. Because the property had language variants, the indexed field name includes the language ISO code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So instead of hardcoding a single field name, I updated the implementation to generate the variant field names dynamically. That also makes it more future-proof &#x2014; if new languages are added later, search continues to work without any code changes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here&#x2019;s the updated version:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight csharp&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;CustomUmbracoTreeSearcherFields&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ILanguageService&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;languageService&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;UmbracoTreeSearcherFields&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;languageService&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;IUmbracoTreeSearcherFields&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;    &lt;span class=&quot;k&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;readonly&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;TitleAlias&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;PublishedModelHelper&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;GetModelPropertyAlias&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Page&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Title&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&#xA;&#xA;    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;IEnumerable&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;GetBackOfficeDocumentFields&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;base&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;GetBackOfficeDocumentFields&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Concat&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;GetVariantFieldNames&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;TitleAlias&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&#xA;    &lt;span class=&quot;k&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;IEnumerable&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;GetVariantFieldNames&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;alias&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&#xA;        &lt;span class=&quot;p&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;languageService&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;GetAllAsync&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;GetAwaiter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;GetResult&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Select&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;l&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;$&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;alias&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;IsoCode&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;ToLowerInvariant&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()}&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;And with that in place, the backoffice search started returning results based on the custom title value as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe1tz7ifjj35o7ohvoeyb.jpg&quot; class=&quot;article-body-image-wrapper&quot;&gt;&lt;img src=&quot;https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe1tz7ifjj35o7ohvoeyb.jpg&quot; alt=&quot;Search for page title, finds result&quot; width=&quot;798&quot; height=&quot;344&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  Why I&#x2019;m sharing this&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;This is one of those things that&#x2019;s probably obvious once you&#x2019;ve worked with it before, but until then, it&#x2019;s easy to assume backoffice search is less flexible than it actually is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you&#x2019;ve got editors relying on custom fields it&#x2019;s worth checking whether those fields are included in backoffice search. If they&#x2019;re already indexed, you may only need to extend UmbracoTreeSearcherFields to make them searchable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A small change, but a very useful one for editors.&lt;/p&gt;]]></description>
                    <pubDate>Fri, 07 Aug 2026 12:53:14 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://manifesto.co.uk/thinking/technology/umbraco-codegarden-day-1-ai-elements-awards</guid>
                    <title>Umbraco Codegarden 2026 Day 1: AI, Elements &amp; Community News | manifesto</title>
                    <link>https://manifesto.co.uk/thinking/technology/umbraco-codegarden-day-1-ai-elements-awards</link>
                    <description><![CDATA[Explore key takeaways from Day 1 of Umbraco Codegarden 2026, including major product keynotes, AI governance, new Elements features, and the Umbraco Awards.]]></description>
                    <pubDate>Fri, 07 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.commandpalette</guid>
                    <title>Umbraco.Community.CommandPalette</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.commandpalette</link>
                    <description><![CDATA[A Cmd&#x2B;K command palette for the Umbraco backoffice. Jump to any node, run an action on the current node, or switch section - without touching the mouse or waiting for the content tree to expand.]]></description>
                    <pubDate>Fri, 07 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.simplestats</guid>
                    <title>Umbraco.Community.SimpleStats</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.simplestats</link>
                    <description><![CDATA[A lightweight Umbraco backoffice package that tracks page views for your content and shows the results inside the CMS &#x2014; no external analytics service, tracking snippet, or cookies required.]]></description>
                    <pubDate>Fri, 07 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://www.nevitech.co.uk/blog/setting-up-windows-server-2025-for-umbraco/</guid>
                    <title>Setting up Windows Server 2025 for Umbraco</title>
                    <link>https://www.nevitech.co.uk/blog/setting-up-windows-server-2025-for-umbraco/</link>
                    <description><![CDATA[Every time I build a new server I go through the same sequence, and every time I find myself trying to remember what I did last time. So this is my reference for turning a clean Windows Server 2025 instance into something that will happily host Umbraco on IIS and SQL Express, in the order I actually do things.]]></description>
                    <pubDate>Thu, 06 Aug 2026 23:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://umbracocommunity.social/@umbraco/117047410343596739</guid>
                    <title>Umbraco CMS 17.6 and 18.1 are out </title>
                    <link>https://umbracocommunity.social/@umbraco/117047410343596739</link>
                    <description><![CDATA[Umbraco CMS 17.6 and 18.1 are out &#x1F389;Upgrade to get small features, performance improvements, and another round of bug fixes. Find the release notes here:#Umbraco 17.6: https://umbra.co/4pU0kBbhttps://umbra.co/4fGA9u4  #Umbraco 18.1: https://umbra.co/4fwezY4https://umbra.co/4pV0c4a#Umbraco]]></description>
                    <pubDate>Thu, 06 Aug 2026 19:14:00 Z</pubDate>
                        <category>mastodon</category>
                        <category>social</category>
                        <category>hq</category>
                </item>
                <item>
                    <guid>https://github.com/umbraco/Umbraco-CMS/releases/tag/release-18.1.0</guid>
                    <title>Umbraco CMS 18.1.0</title>
                    <link>https://github.com/umbraco/Umbraco-CMS/releases/tag/release-18.1.0</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Thu, 06 Aug 2026 06:16:01 Z</pubDate>
                        <category>hq</category>
                        <category>release</category>
                </item>
                <item>
                    <guid>https://github.com/umbraco/Umbraco-CMS/releases/tag/release-17.6.0</guid>
                    <title>Umbraco CMS 17.6.0</title>
                    <link>https://github.com/umbraco/Umbraco-CMS/releases/tag/release-17.6.0</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Thu, 06 Aug 2026 06:15:55 Z</pubDate>
                        <category>hq</category>
                        <category>release</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/reflections.umbraco17.starterkit</guid>
                    <title>Reflections.Umbraco17.StarterKit</title>
                    <link>https://marketplace.umbraco.com/package/reflections.umbraco17.starterkit</link>
                    <description><![CDATA[Reflections.Umbraco17.StarterKit]]></description>
                    <pubDate>Thu, 06 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/reflections.umbraco18.starterkit</guid>
                    <title>Reflections.Umbraco18.StarterKit</title>
                    <link>https://marketplace.umbraco.com/package/reflections.umbraco18.starterkit</link>
                    <description><![CDATA[A ready-to-use starter website, schema, templates, media, SEO fields, and sample content for Umbraco 18.]]></description>
                    <pubDate>Thu, 06 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://umbracocommunity.social/@owaincodes/117042396570290086</guid>
                    <title>Automation for the People - Coming to an Umbraco meetup soon</title>
                    <link>https://umbracocommunity.social/@owaincodes/117042396570290086</link>
                    <description><![CDATA[Coming to an Umbraco meetup soon. Shame these aren&#x27;t in-person but will still be great to see all the umbracians from around the world. #umbraco]]></description>
                    <pubDate>Wed, 05 Aug 2026 16:55:00 Z</pubDate>
                        <category>community</category>
                        <category>social</category>
                        <category>mastodon</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/sa.automate.brickset</guid>
                    <title>SA.Automate.Brickset</title>
                    <link>https://marketplace.umbraco.com/package/sa.automate.brickset</link>
                    <description><![CDATA[Brickset connection types and actions for Umbraco Automate. Look up and search LEGO sets as part of an automation workflow.]]></description>
                    <pubDate>Wed, 05 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/sa.automate.clockify</guid>
                    <title>SA.Automate.Clockify</title>
                    <link>https://marketplace.umbraco.com/package/sa.automate.clockify</link>
                    <description><![CDATA[Clockify connection types and actions for Umbraco Automate. Start and stop timers, or log a completed entry by duration or explicit dates, as part of an automation workflow.]]></description>
                    <pubDate>Wed, 05 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/our.umbraco.loginbranding</guid>
                    <title>Our.Umbraco.LoginBranding</title>
                    <link>https://marketplace.umbraco.com/package/our.umbraco.loginbranding</link>
                    <description><![CDATA[White-label the Umbraco backoffice login screen from Content &#x2192; Login Branding. Editors pick background and logo images from Media, set a custom greeting and supporting text, and preview desktop/mobile before saving.]]></description>
                    <pubDate>Wed, 05 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://bsky.app/profile/aaronsadler.dev/post/3msb2mlwmps2i</guid>
                    <title>Interim fix for memory issues when running Umbraco on Docker </title>
                    <link>https://bsky.app/profile/aaronsadler.dev/post/3msb2mlwmps2i</link>
                    <description><![CDATA[I&#x27;ve released a package as an interim fix for memory issues when running Umbraco on Docker with memory limits, it targets V13, V17 and V18.&#xA;&#xA;You can read the issue here:&#xA;https://github.com/umbraco/Umbraco-CMS/issues/23556&#xA;&#xA;You can grab the package here:&#xA;https://www.nuget.org/packages/Umbraco.Community.Imaging.ImageSharp/1.1.0&#xA;&#xA;#Umbraco #NuGet]]></description>
                    <pubDate>Tue, 04 Aug 2026 13:54:00 Z</pubDate>
                        <category>community</category>
                        <category>bluesky</category>
                        <category>social</category>
                </item>
                <item>
                    <guid>https://skrift.io/issues/#130</guid>
                    <title>Skrift Issue #130</title>
                    <link>https://skrift.io/issues/#130</link>
                    <description><![CDATA[Featuring guest posts by Jesper Mayntzhusen on &quot;Preparing your site and packages for load balancing&quot; and Nathaniel Grantham-Knight on &quot;How to build an Umbraco 17 dashboard with Vite&quot;]]></description>
                    <pubDate>Tue, 04 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                        <category>skrift</category>
                </item>
                <item>
                    <guid>https://community.umbraco.com/blog/2026/08/what-were-most-excited-about-on-the-new-community-site-part-2-of-2/</guid>
                    <title>What we&#x27;re most excited about on the new Community site - part 2 of 2</title>
                    <link>https://community.umbraco.com/blog/2026/08/what-were-most-excited-about-on-the-new-community-site-part-2-of-2/</link>
                    <description><![CDATA[The time has finally come for the second part of this exciting two-part series. This time, you will hear from Sebastiaan and Laura, who share what they are most excited about on the new Community site.]]></description>
                    <pubDate>Tue, 04 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.imaging.imagesharp</guid>
                    <title>Umbraco.Community.Imaging.ImageSharp</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.imaging.imagesharp</link>
                    <description><![CDATA[Stops Umbraco sites being OOM-killed in memory-limited containers while browsing the media section. ImageSharp decodes each source image at full resolution before resizing, and concurrent thumbnail requests are not bounded, so peak memory is the number of images being processed at once multiplied by the decoded source size. This package caps both the unmanaged buffer pool ImageSharp retains between requests and how many images are processed concurrently, deriving both from the memory available to the process. It is a backport of the fix proposed for the CMS in umbraco/Umbraco-CMS#23557, for Umbraco 17 sites that need it before it ships in the product.]]></description>
                    <pubDate>Tue, 04 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.imaging.imagesharp2</guid>
                    <title>Umbraco.Community.Imaging.ImageSharp2</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.imaging.imagesharp2</link>
                    <description><![CDATA[Stops Umbraco sites being OOM-killed in memory-limited containers while browsing the media section. ImageSharp decodes each source image at full resolution before resizing, and concurrent thumbnail requests are not bounded, so peak memory is the number of images being processed at once multiplied by the decoded source size. This package caps both the unmanaged buffer pool ImageSharp retains between requests and how many images are processed concurrently, deriving both from the memory available to the process. It is a backport of the fix proposed for the CMS in umbraco/Umbraco-CMS#23557, for Umbraco 17 sites that need it before it ships in the product.]]></description>
                    <pubDate>Tue, 04 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.ai.templatewizard</guid>
                    <title>Umbraco.Community.AI.TemplateWizard</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.ai.templatewizard</link>
                    <description><![CDATA[AI.Template Wizard is an Umbraco CMS package that exposes AI tools for working with templates, partial views, and block components. It integrates with the Umbraco.AI framework.]]></description>
                    <pubDate>Tue, 04 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/wayfinder.umbraco</guid>
                    <title>Wayfinder.Umbraco</title>
                    <link>https://marketplace.umbraco.com/package/wayfinder.umbraco</link>
                    <description><![CDATA[Umbraco-hosted implementation of Wayfinder service design &#x2014; a DB-backed, uSync-portable service blueprint store, backoffice authoring API, and GDS-style stage rendering (controllers, tag helpers, Razor views) for any Umbraco v17&#x2B; site. No multi-tenancy or auth opinions of its own; a host wires its own identity/tenant resolution on top.]]></description>
                    <pubDate>Mon, 03 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://community.umbraco.com/blog/2026/08/saying-goodbye-to-the-commerce-advisory-board/</guid>
                    <title>Saying Goodbye to the Commerce Advisory Board</title>
                    <link>https://community.umbraco.com/blog/2026/08/saying-goodbye-to-the-commerce-advisory-board/</link>
                    <description><![CDATA[For the last two years, the Commerce Advisory Board has been a driving force behind how we think about and shape Umbraco Commerce. But all good things come to an end. Commerce is in a really good place today, with our main focus on stability and reliability, though we&#x27;ll keep evolving it where it makes sense. With that, it&#x27;s time to close this chapter.]]></description>
                    <pubDate>Mon, 03 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/uskinnedsitebuilder.starterkit.wellspring</guid>
                    <title>uSkinnedSiteBuilder.StarterKit.Wellspring</title>
                    <link>https://marketplace.umbraco.com/package/uskinnedsitebuilder.starterkit.wellspring</link>
                    <description><![CDATA[Wellspring Starter Kit for uSkinned Site Builder for Umbraco CMS]]></description>
                    <pubDate>Mon, 03 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/uskinnedsitebuilder.starterkit.hairco</guid>
                    <title>uSkinnedSiteBuilder.StarterKit.HairCo</title>
                    <link>https://marketplace.umbraco.com/package/uskinnedsitebuilder.starterkit.hairco</link>
                    <description><![CDATA[HairCo Starter Kit for uSkinned Site Builder for Umbraco CMS]]></description>
                    <pubDate>Mon, 03 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.skynetaccessibilityscanner</guid>
                    <title>Umbraco.Community.SkynetAccessibilityScanner</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.skynetaccessibilityscanner</link>
                    <description><![CDATA[Scan, monitor, and identify website accessibility issues across WCAG 2.0, 2.1, 2.2, ADA, Section 508, EN 301 549, UK Equality Act, Australian DDA, and Canada ACA, directly from the Umbraco backoffice.]]></description>
                    <pubDate>Sun, 02 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/knowit.umbraco.instantblockpreview.v17</guid>
                    <title>Knowit.Umbraco.InstantBlockPreview.V17</title>
                    <link>https://marketplace.umbraco.com/package/knowit.umbraco.instantblockpreview.v17</link>
                    <description><![CDATA[Instant block and grid previews in Umbraco without saving your documents]]></description>
                    <pubDate>Sat, 01 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.kanban</guid>
                    <title>Umbraco.Community.Kanban</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.kanban</link>
                    <description><![CDATA[Kanban board and calendar views for Umbraco child nodes.]]></description>
                    <pubDate>Sat, 01 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.kanban.contentment</guid>
                    <title>Umbraco.Community.Kanban.Contentment</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.kanban.contentment</link>
                    <description><![CDATA[Contentment Property provider for Umbraco.Community.Kanban]]></description>
                    <pubDate>Sat, 01 Aug 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://community.umbraco.com/blog/2026/07/an-hour-on-our-one-last-time/</guid>
                    <title>An Hour on Our One Last Time</title>
                    <link>https://community.umbraco.com/blog/2026/07/an-hour-on-our-one-last-time/</link>
                    <description><![CDATA[The end of an era: after 15&#x2B; years, I&#x27;ve switched off our.umbraco.com. I wrote up some of the story, the karma, the spam wars and a few fond arguments https://community.umbraco.com/blog/2026/07/an-hour-on-our-one-last-time/#Umbraco #H5YR Our.]]></description>
                    <pubDate>Fri, 31 Jul 2026 10:20:00 Z</pubDate>
                        <category>blog</category>
                        <category>community</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=RaFus8cVC24</guid>
                    <title>umbraCoffee - Summer Vibes Only</title>
                    <link>https://www.youtube.com/watch?v=RaFus8cVC24</link>
                    <description><![CDATA[Welcome to your monthly dose of #umbraCoffee&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;! Your hosts - Marcin and Callum - together with their guest(s) will drive through all of the community news and happenings in the Umbraco world. So... grab a cuppa, join us LIVE and enjoy!&#xA;&#xA;See ya?!&#xA;&#xA;---&#xA;&#x2615; Wanna buy us a coffee/pizza/donuts?&#xA;https://www.buymeacoffee.com/umbracoffee&#xA;---&#xA;&#xA;Notes:&#xA;&#xA;// TODO]]></description>
                    <pubDate>Fri, 31 Jul 2026 10:14:35 Z</pubDate>
                        <category>community</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.schemeweaver.deploy</guid>
                    <title>Umbraco.Community.SchemeWeaver.Deploy</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.schemeweaver.deploy</link>
                    <description><![CDATA[Umbraco Deploy addon for SchemeWeaver &#x2014; deploys Schema.org mappings between environments as disk-based Deploy artifacts, alongside the document types they belong to. Requires Umbraco Deploy (OnPrem or Cloud) on the host site.]]></description>
                    <pubDate>Fri, 31 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://umbraco.com/blog/designing-umbraco-with-umbraco-building-a-backoffice-design-system-in-claude-design/</guid>
                    <title>Designing Umbraco with Umbraco: building a backoffice design system in Claude Design</title>
                    <link>https://umbraco.com/blog/designing-umbraco-with-umbraco-building-a-backoffice-design-system-in-claude-design/</link>
                    <description><![CDATA[Create high-fidelity, interactive prototypes and mock-ups in no time. Discover how to build an Umbraco backoffice design system using Claude Design.]]></description>
                    <pubDate>Thu, 30 Jul 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://examinex.online/2026/07/29/version-10-0-0-released</guid>
                    <title>ExamineX 10.0 for Azure Search and 7.0 for Elasticsearch released to support Umbraco 18</title>
                    <link>https://examinex.online/2026/07/29/version-10-0-0-released</link>
                    <description><![CDATA[ExamineX 10.0 for Azure Search and 7.0 for Elasticsearch released to support Umbraco 18]]></description>
                    <pubDate>Wed, 29 Jul 2026 19:52:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.wearediagram.com/blog/why-umbraco-17-is-more-than-an-end-of-life-escape</guid>
                    <title>Why Umbraco 17 Is More Than an End-of-Life Escape</title>
                    <link>https://www.wearediagram.com/blog/why-umbraco-17-is-more-than-an-end-of-life-escape</link>
                    <description><![CDATA[&amp;nbsp;]]></description>
                    <pubDate>Wed, 29 Jul 2026 15:40:39 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/geochecker.umbraco</guid>
                    <title>GeoChecker.Umbraco</title>
                    <link>https://marketplace.umbraco.com/package/geochecker.umbraco</link>
                    <description><![CDATA[Scores how ready your Umbraco site is to be found and cited by AI engines &#x2014; llms.txt, robots.txt AI rules, sitemap, structured data and more &#x2014; from a dashboard in the backoffice.]]></description>
                    <pubDate>Wed, 29 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/sa.automate.qrcode</guid>
                    <title>SA.Automate.QRcode</title>
                    <link>https://marketplace.umbraco.com/package/sa.automate.qrcode</link>
                    <description><![CDATA[QR code generation actions for Umbraco Automate, powered by QRCoder. Generate a QR code for a URL as part of an automation workflow.]]></description>
                    <pubDate>Wed, 29 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.automate.clickup</guid>
                    <title>Umbraco.Community.Automate.ClickUp</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.automate.clickup</link>
                    <description><![CDATA[OAuth-based ClickUp provider for Umbraco Automate.]]></description>
                    <pubDate>Wed, 29 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/utpro.feature.seoaudit</guid>
                    <title>uTPro.Feature.SEOAudit</title>
                    <link>https://marketplace.umbraco.com/package/utpro.feature.seoaudit</link>
                    <description><![CDATA[Site-wide SEO &amp; content audit for Umbraco (16, 17, 18). Crawls every Content &amp; Media URL (plus sitemap.xml), checks for broken links, images and resources, and audits each page: SEO (title, meta description, canonical, H1-H3, noindex/nofollow, lang), Open Graph &amp; Twitter cards, technical SEO (HTTPS, gzip, browser caching, schema.org, viewport, favicon), content quality (word count, readability, keyword density, thin &amp; duplicate content), a static accessibility subset and estimated carbon emissions with an A-F rating. Get a per-run health score, a per-page composite SEO score (Lighthouse-style, 0-100), issues grouped by severity and priority, orphaned-page detection, incremental scans, CSV export and a per-page detail view - all inside the backoffice. Adds a per-node SEO Audit tab in the Content and Media editors that auto-audits on open. Runs as a recurring background job (auto-discovered by uTPro Job Monitor). Server-side and SSRF-safe. Built on the framework-agnostic T4VN.Seo.Core engine.]]></description>
                    <pubDate>Wed, 29 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://www.linkedin.com/posts/umbraco-dutchumbracoalliance-developercommunity-share-7487806765947076608-9G4d/?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAAAa7vhsBsn9_Sr12Vc0j55T5l3l83ogK05g</guid>
                    <title>First speaker announced for Dutch Umbraco Alliance Festival </title>
                    <link>https://www.linkedin.com/posts/umbraco-dutchumbracoalliance-developercommunity-share-7487806765947076608-9G4d/?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAAAa7vhsBsn9_Sr12Vc0j55T5l3l83ogK05g</link>
                    <description><![CDATA[First speaker announced for Dutch Umbraco Alliance Festival ]]></description>
                    <pubDate>Tue, 28 Jul 2026 12:19:00 Z</pubDate>
                        <category>community</category>
                        <category>social</category>
                        <category>linkedin</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/mgc.instagramfeed</guid>
                    <title>MGC.InstagramFeed</title>
                    <link>https://marketplace.umbraco.com/package/mgc.instagramfeed</link>
                    <description><![CDATA[A high-performance Razor Class Library for Umbraco 17 (.NET 10) that integrates Instagram feeds using the official Instagram Graph API (v21.0). &#xA;      Features automatic Umbraco dictionary item seeding through package migration, secure configuration of Instagram Access Token and User ID via &#xA;      Umbraco Dictionary keys, zero-config dependency injection registration through InstagramComposer, and strongly typed C# models for Instagram &#xA;      profile data and media items including images, reels, and carousel albums with captions, like counts, comment counts, thumbnails, media URLs, &#xA;      and permalinks.]]></description>
                    <pubDate>Tue, 28 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.netlifydashboard</guid>
                    <title>Umbraco.Community.NetlifyDashboard</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.netlifydashboard</link>
                    <description><![CDATA[A backoffice dashboard for Netlify: connect with a personal access token, view your last deploys and their status, and purge the Netlify CDN cache (full or by cache tag).]]></description>
                    <pubDate>Tue, 28 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://umbraco.com/blog/security-advisory-july-28-2026-security-patches-for-umbraco-forms-are-now-available/</guid>
                    <title>Security Patches for Umbraco Forms are now available</title>
                    <link>https://umbraco.com/blog/security-advisory-july-28-2026-security-patches-for-umbraco-forms-are-now-available/</link>
                    <description><![CDATA[A high-level security vulnerability has been identified in Umbraco Forms. A security patch for Umbraco Forms 13, 17, and 18 is out now. We highly recommend upgrading.]]></description>
                    <pubDate>Tue, 28 Jul 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://owain.codes/blog/2026/july/a-reusable-deploy-pipeline-for-umbraco-cloud/</guid>
                    <title>A reusable deploy pipeline for Umbraco Cloud</title>
                    <link>https://owain.codes/blog/2026/july/a-reusable-deploy-pipeline-for-umbraco-cloud/</link>
                    <description><![CDATA[Create a reusable deploy pipeline for Umbraco Cloud]]></description>
                    <pubDate>Mon, 27 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbhost.automate.teamwork</guid>
                    <title>UmbHost.Automate.Teamwork</title>
                    <link>https://marketplace.umbraco.com/package/umbhost.automate.teamwork</link>
                    <description><![CDATA[Teamwork Projects connection type and actions for Umbraco Automate.]]></description>
                    <pubDate>Fri, 24 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbhost.automate.github</guid>
                    <title>UmbHost.Automate.GitHub</title>
                    <link>https://marketplace.umbraco.com/package/umbhost.automate.github</link>
                    <description><![CDATA[GitHub connection type, actions, a jsonpath binding filter and an X-Hub-Signature-256 webhook authenticator for Umbraco Automate.]]></description>
                    <pubDate>Fri, 24 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://umbraco.com/blog/security-advisory-upcoming-security-patch-for-umbraco-forms-ready-on-july-28-2026-at-08-am-utc/</guid>
                    <title>Security Advisory: Upcoming Security Patch for Umbraco Forms ready on July 28, 2026 at 08 AM UTC</title>
                    <link>https://umbraco.com/blog/security-advisory-upcoming-security-patch-for-umbraco-forms-ready-on-july-28-2026-at-08-am-utc/</link>
                    <description><![CDATA[A security vulnerability has been identified in Umbraco Forms. A security patch for Umbraco Forms 13, 17, and 18 are scheduled for release on Tuesday, July 28th, 2026 at 08 AM UTC.]]></description>
                    <pubDate>Thu, 23 Jul 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=QB05kK-yAt4</guid>
                    <title>uSkinned Upgrade Umbraco Cloud 13 to 17</title>
                    <link>https://www.youtube.com/watch?v=QB05kK-yAt4</link>
                    <description><![CDATA[Upgrade Umbraco Cloud 13 to 17 | uSkinned Site Builder 6 to 7 | Tutorial - YouTube]]></description>
                    <pubDate>Wed, 22 Jul 2026 12:56:00 Z</pubDate>
                        <category>community</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=D-ypwpXtZYA</guid>
                    <title>uSkinned Upgrade Umbraco CMS 8 to 17</title>
                    <link>https://www.youtube.com/watch?v=D-ypwpXtZYA</link>
                    <description><![CDATA[Upgrade Umbraco CMS 8 to 17 | uSkinned Site Builder 1 to 7 | Tutorial - YouTube]]></description>
                    <pubDate>Wed, 22 Jul 2026 12:56:00 Z</pubDate>
                        <category>community</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://uskinned.net/blog/two-upgrade-guides-to-help-you-get-to-umbraco-17/</guid>
                    <title>uSkinned Umbraco 17 Upgrade Video Guides</title>
                    <link>https://uskinned.net/blog/two-upgrade-guides-to-help-you-get-to-umbraco-17/</link>
                    <description><![CDATA[Umbraco 17 Upgrade Video Guides&#xA;&#xA;Ready to make the move to Umbraco 17? We&#x27;ve got you covered. &#xA;&#xA;We&#x27;ve created two practical video guides to help you upgrade to the latest Long-Term Support (LTS) release. Whether you&#x27;re running a long-standing self-hosted project or an Umbraco Cloud website, Marc walks you through the process step by step.]]></description>
                    <pubDate>Wed, 22 Jul 2026 12:55:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://umbraco.com/blog/green-track-to-codegarden/</guid>
                    <title>The Green Track to Codegarden</title>
                    <link>https://umbraco.com/blog/green-track-to-codegarden/</link>
                    <description><![CDATA[Discover how Umbraco&#x27;s Green Track travelers saved 1.5 tonnes of CO2 by taking the train to Codegarden, redefining productive and sustainable business travel.]]></description>
                    <pubDate>Wed, 22 Jul 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.ai.mediajanitor</guid>
                    <title>Umbraco.Community.AI.MediaJanitor</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.ai.mediajanitor</link>
                    <description><![CDATA[An AI Media Assistant for the Umbraco Media section. Finds images with missing alt text, generic names, or in the wrong folder and suggests a better file name, alt text, caption, and folder &#x2014; you review, edit, and apply.]]></description>
                    <pubDate>Tue, 21 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.adminonly</guid>
                    <title>Umbraco.Community.AdminOnly</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.adminonly</link>
                    <description><![CDATA[A friendlier backoffice for non-admin editors. Hide document types, tabs and properties from everyone who isn&#x27;t an administrator &#x2014; without touching user groups, permissions or document type structure. Editors see only what&#x27;s relevant to their work; admins keep the full picture, with a lock icon marking every hidden item. Configuration is point-and-click from a settings dashboard, so there is no code to write and nothing to recompile. Note: this is a backoffice UX layer, not server-side authorization &#x2014; use Umbraco&#x27;s user groups and permissions to protect sensitive data.]]></description>
                    <pubDate>Tue, 21 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.iconpicker</guid>
                    <title>Umbraco.Community.IconPicker</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.iconpicker</link>
                    <description><![CDATA[Pick SVG icons straight from your own sprite. IconPicker adds a property editor that reads any SVG sprite in your site&#x27;s wwwroot folder and lets editors choose a symbol from it &#x2014; no icon library to install, no duplicate assets. The icons your designer delivered are the icons your editors get.]]></description>
                    <pubDate>Tue, 21 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.linkedpages</guid>
                    <title>Umbraco.Community.LinkedPages</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.linkedpages</link>
                    <description><![CDATA[Package Description]]></description>
                    <pubDate>Tue, 21 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.headsup</guid>
                    <title>Umbraco.Community.HeadsUp</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.headsup</link>
                    <description><![CDATA[Protects Umbraco editors against lost content when the same document is open in multiple tabs or edited by multiple users. Notifies other editors in real time when a document they have open is saved or published, lists the changed fields and offers to reload.]]></description>
                    <pubDate>Tue, 21 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://flowcourier.com/blog/aeo-for-umbraco/</guid>
                    <title>AEO for Umbraco: Your Next Visitor Is an AI</title>
                    <link>https://flowcourier.com/blog/aeo-for-umbraco/</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Mon, 20 Jul 2026 17:24:00 Z</pubDate>
                        <category>blog</category>
                        <category>community</category>
                </item>
                <item>
                    <guid>https://blog.tsd.digital/assume-your-software-will-outlive-its-end-of-life/</guid>
                    <title>Assume your software will outlive its end-of-life</title>
                    <link>https://blog.tsd.digital/assume-your-software-will-outlive-its-end-of-life/</link>
                    <description><![CDATA[We still run an Umbraco v4 site, on purpose. End-of-life is a date on the vendor&#x27;s calendar, not a fact about your customer&#x27;s business. Why the version you ship is the one worth designing for, and how to tell a managed risk from plain neglect.]]></description>
                    <pubDate>Mon, 20 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/thebuilder.webanalytics</guid>
                    <title>TheBuilder.WebAnalytics</title>
                    <link>https://marketplace.umbraco.com/package/thebuilder.webanalytics</link>
                    <description><![CDATA[Vercel Web Analytics inside the Umbraco backoffice.]]></description>
                    <pubDate>Sun, 19 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.formsaudittrail</guid>
                    <title>Umbraco.Community.FormsAuditTrail</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.formsaudittrail</link>
                    <description><![CDATA[A view-only audit trail for Umbraco Forms design changes. Tracks who changed what on form designs (fields, pages, workflows and form settings) and surfaces the history in a backoffice dashboard with filtering, field-level diffs and CSV export.]]></description>
                    <pubDate>Fri, 17 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/utpro.feature.urlviewer</guid>
                    <title>uTPro.Feature.UrlViewer</title>
                    <link>https://marketplace.umbraco.com/package/utpro.feature.urlviewer</link>
                    <description><![CDATA[Fetch and inspect any URL as Googlebot, Bingbot or a real browser, directly from your Umbraco site (Umbraco 16, 17, 18). Follows the full redirect chain and shows the response headers for every hop, renders the raw HTML source with line numbers, and analyses the page for spam/hack keywords, hidden CSS (a common cloaking trick), meta tags and common JavaScript issues (eval, document.write, obfuscation, mixed content and more). Includes automatic cloaking detection that compares what a search-engine bot sees versus what Chrome sees, plus a one-click VirusTotal link for the domain. Ideal for SEO debugging, diagnosing hacked or cloaked pages, and inspecting redirects. The fetch runs server-side and blocks private/local addresses for safety.]]></description>
                    <pubDate>Fri, 17 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/cloudlens</guid>
                    <title>CloudLens</title>
                    <link>https://marketplace.umbraco.com/package/cloudlens</link>
                    <description><![CDATA[Compare content between Umbraco Cloud environments from the backoffice before every deployment.]]></description>
                    <pubDate>Fri, 17 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://owain.codes/blog/2026/july/build-a-custom-umbraco-automate-action/</guid>
                    <title>Build a custom Umbraco Automate action</title>
                    <link>https://owain.codes/blog/2026/july/build-a-custom-umbraco-automate-action/</link>
                    <description><![CDATA[Creating a custom action in Umbraco Automate to pull tags from a blog and display them as hashtags in social connections.]]></description>
                    <pubDate>Fri, 17 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://umbracocommunity.social/@owaincodes/116928799744745888</guid>
                    <title>Owain.Codes v2 Umbraco Automate packages for Bluesky, Mastodon and LinkedIn have been released.</title>
                    <link>https://umbracocommunity.social/@owaincodes/116928799744745888</link>
                    <description><![CDATA[Busy night - version 2 of my Umbraco.Automate packages have been released. Changing the config pattern and a few improvements. Bluesky, Mastodon and LinkedIn packages all updated. #umbraco]]></description>
                    <pubDate>Thu, 16 Jul 2026 10:59:00 Z</pubDate>
                        <category>community</category>
                        <category>mastodon</category>
                        <category>social</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/flowcourier.umbraco.aeo</guid>
                    <title>Flowcourier.Umbraco.AEO</title>
                    <link>https://marketplace.umbraco.com/package/flowcourier.umbraco.aeo</link>
                    <description><![CDATA[Make your Umbraco site readable by AI answer engines (ChatGPT, Claude, Perplexity, Gemini, &#x2026;). Install one package and your site immediately serves an /llms.txt index, an /llms-full.txt full-site Markdown dump, and a clean Markdown rendering of any page when you append .md to its URL &#x2014; all generated live from the published-content cache, with no editor work and no content changes. Multi-site and multilingual aware, discoverable via alternate links, content negotiation and an optional robots.txt hint, with ETag/304 caching built in. Designed for sites where Umbraco renders the front end (Razor/MVC) &#x2014; not for headless setups. Free for Umbraco 17.5&#x2B;, including commercial production use.]]></description>
                    <pubDate>Thu, 16 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/esatto.umbraco.backoffice.dictionarylocalization</guid>
                    <title>Esatto.Umbraco.Backoffice.DictionaryLocalization</title>
                    <link>https://marketplace.umbraco.com/package/esatto.umbraco.backoffice.dictionarylocalization</link>
                    <description><![CDATA[Bridges Umbraco 17 content Dictionary items into the backoffice UI localization system. After install, any `#Key` in a content-type property label (or anywhere `localize.string()` is called) resolves to the current backoffice user&#x27;s culture value from the Dictionary section. Works for every existing and future dictionary key; no per-key manifest wiring.]]></description>
                    <pubDate>Thu, 16 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/foxcart.members</guid>
                    <title>FoxCart.Members</title>
                    <link>https://marketplace.umbraco.com/package/foxcart.members</link>
                    <description><![CDATA[Member area addon for FoxCart: profile management, order history, saved addresses and complete authentication flows built on Umbraco Members. Ships as a Razor Class Library with overridable Flowbite-style default views.]]></description>
                    <pubDate>Thu, 16 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://medium.com/@associative-india/top-umbraco-development-company-in-pune-associative-780722f22eb2?source=rss------umbraco-5</guid>
                    <title>Top Umbraco Development Company in Pune | Associative</title>
                    <link>https://medium.com/@associative-india/top-umbraco-development-company-in-pune-associative-780722f22eb2?source=rss------umbraco-5</link>
                    <description><![CDATA[&lt;div class=&quot;medium-feed-item&quot;&gt;&lt;p class=&quot;medium-feed-image&quot;&gt;&lt;a href=&quot;https://medium.com/@associative-india/top-umbraco-development-company-in-pune-associative-780722f22eb2?source=rss------umbraco-5&quot;&gt;&lt;img src=&quot;https://cdn-images-1.medium.com/max/1080/1*-vNHPgEKoCTInnwPbQpBcA.png&quot; width=&quot;1080&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;medium-feed-snippet&quot;&gt;Welcome to Associative, a premier full-service software development firm headquartered in Pune, Maharashtra, India.&lt;/p&gt;&lt;p class=&quot;medium-feed-link&quot;&gt;&lt;a href=&quot;https://medium.com/@associative-india/top-umbraco-development-company-in-pune-associative-780722f22eb2?source=rss------umbraco-5&quot;&gt;Continue reading on Medium &#xBB;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;]]></description>
                    <pubDate>Wed, 15 Jul 2026 10:15:28 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.getnet</guid>
                    <title>SplatDev.Umbraco.Plugins.Getnet</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.getnet</link>
                    <description><![CDATA[Umbraco 17 plugin that registers the Getnet (Santander acquirer) SDK (SplatDev.Payments.Getnet): options binding, the API client, and the named Getnet HttpClient. Webhook/backoffice controllers and payment orchestration are application-specific and stay in the consuming app.]]></description>
                    <pubDate>Wed, 15 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.santander</guid>
                    <title>SplatDev.Umbraco.Plugins.Santander</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.santander</link>
                    <description><![CDATA[Umbraco 17 plugin for the Santander Open Banking suite: a composer that registers SplatDev.Payments.Santander (options, client, the 8 product services, and the named mTLS HttpClient with the ICP-Brasil e-CNPJ certificate) plus a guarded backoffice/server-to-server banking API controller.]]></description>
                    <pubDate>Wed, 15 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/dragonfly.umbraco10.forms.web</guid>
                    <title>Dragonfly.Umbraco10.Forms.Web</title>
                    <link>https://marketplace.umbraco.com/package/dragonfly.umbraco10.forms.web</link>
                    <description><![CDATA[A collection of custom Umbraco Forms FieldTypes and Helpers (Umbraco 17&#x2B;) [Full install for website]]]></description>
                    <pubDate>Wed, 15 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://www.dynamicdave.nl/blog/no-laptop-still-learning-an-umbraco-developers-holiday-checklist/</guid>
                    <title>No Laptop, Still Learning: An Umbraco Developer&#x27;s Holiday Checklist</title>
                    <link>https://www.dynamicdave.nl/blog/no-laptop-still-learning-an-umbraco-developers-holiday-checklist/</link>
                    <description><![CDATA[In a few days, I&#x27;m packing my bags for a holiday, and for the first time in ages, my laptop will stay home. No Visual Studio. No Docker containers spinning up in the background. No sneaky last-minute Git commits. And, honestly, no more of those &quot;let me just fix this one bug real quick&quot; moments.And to be completely honest? I can&#x27;t wait.But that doesn&#x27;t mean I&#x27;m putting my developer brain entirely on pause. If you&#x27;ve been working with Umbraco for years&#x2014;like me&#x2014;you know it&#x27;s much more than a tool you clock in and out of each day. It&#x27;s a community, an ecosystem, and, let&#x27;s be real, a craft that&#x27;s always changing. Even if I don&#x27;t write a line of code, there&#x27;s no shortage of ways to stay inspired and come back from my break with fresh perspectives.Here&#x27;s how I&#x27;m planning to keep the inspiration flowing while away.]]></description>
                    <pubDate>Tue, 14 Jul 2026 22:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://github.com/skybrud/Skybrud.Umbraco.Redirects/releases/tag/v18.0.0-alpha001</guid>
                    <title>Skybrud.Umbraco.Redirects 18.0.0-alpha001</title>
                    <link>https://github.com/skybrud/Skybrud.Umbraco.Redirects/releases/tag/v18.0.0-alpha001</link>
                    <description><![CDATA[Award winning redirects manager for Umbraco.]]></description>
                    <pubDate>Tue, 14 Jul 2026 12:12:30 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://www.zpqrtbnk.net/posts/and-to-18/</guid>
                    <title>And to 18</title>
                    <link>https://www.zpqrtbnk.net/posts/and-to-18/</link>
                    <description><![CDATA[Having just upgraded this site to Umbraco 17, it seemed right to finish the work and go to 18.&#xA;The actual update is straighforward. NuGet-update packages,&#xA;deal with a few obsoleted methods that need to be removed,&#xA;refactor an UmbracoApiController. Less than 30 minutes of work.&#xA;Reboot... and we are now on 18!&#xA;Time to monitor the application and check that everything works.&#xA;Since I am currently working with Datadog,&#xA;I have access to their dogfooding program.&#xA;And thus, the Docker platform that hosts this site is fully instrumented.&#xA;So... this is what we are going to use.&#xA;DISCLAIMER: I work with them, I like it there, I may be biased, etc.&#xA;And also the dogfooding program comes free, which helps.&#xA;Datadog Agent&#xA;The dashboard complains that I run an old version of the agent and should upgrade.&#xA;Since the agent itself runs on Docker, that is a quick docker-compose operation&#xA;(dc is my alias for docker compose):&#xA;dc pull&#xA;dc down dd-agent&#xA;dc up dd-agent -dDisks&#xA;Next, the monitors I have defined warn me that my disk space is getting low.&#xA;&#xA;Weird enough, it seems that my small /dev/sda1 root partition is filling up,&#xA;while my huge /dev/sda2 partition, specifically dedicated to Docker&#xA;(mounted as /var/lib/docker), is idle.&#xA;A quick search reveals this has been reported before&#xA;and is a matter of containerd writing to the wrong FS.&#xA;Edit /etc/containerd/config.toml to specify root = &quot;/var/lib/docker/containerd&quot;,&#xA;stop Docker, reboot machine, restart all containers, cleanup, fixed.&#xA;Monitors are back to green:&#xA;&#xA;Memory&#xA;Now, this is what I was impatient to see. For reasons, I have a large (10K) number of not-so-small&#xA;documents in this system, that of course I should delete, but for&#xA;the sake of the argument, let us say I have to keep them.&#xA;Previously, the container would eat up about 2GB on startup. Expensive.&#xA;But these documents are practically never ever touched.&#xA;Woot, the container is now using around 256MB and remains stable.&#xA;The new Umbraco hybrid cache is doing wonders here! Massive win!&#xA;&#xA;At times though... the memory does jump up to 2GB. It just happens,&#xA;and I do not know why.&#xA;I need to monitor the situation, so I am going to define a new monitor&#xA;on the container&#x27;s memory usage. There. Now I will receive an email in&#xA;case we cross the 1GB threshold.&#xA;&#xA;HTTPS&#xA;And then... I cannot access the backoffice anymore. Back to this:&#xA;error:invalid_request&#xA;error_description:This server only accepts HTTPS requests.&#xA;error_uri:https://documentation.openiddict.com/errors/ID2083&#xA;But the front website works. Now if I try to enable headers forwarding&#xA;in NGINX, this is replaced by a plain 400 error, both on back-office and&#xA;front websites.&#xA;You will find many pages about this issue, but that one&#xA;was really helpful. I finally got it to work with only these two&#xA;forwarded headers in NGINX:&#xA;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&#xA;proxy_set_header X-Forwarded-Proto $scheme;&#xA;And this in Program.cs:&#xA;builder.Services.Configure(options =&gt;&#xA;{&#xA;    options.ForwardedHeaders =&#xA;        ForwardedHeaders.XForwardedFor |&#xA;        ForwardedHeaders.XForwardedProto |&#xA;        ForwardedHeaders.XForwardedHost;&#xA;&#xA;    // docker network is 172.0.0.0/8&#xA;    options.KnownIPNetworks.Add(new System.Net.IPNetwork(System.Net.IPAddress.Parse(&quot;172.0.0.0&quot;), 8));&#xA;});&#xA;And of course .UseForwardedHeaders() on the application.&#xA;Now it works, and I understand why, which is always better.&#xA;Memory (again)&#xA;Sure enough, I did get the email about the memory growing too big.&#xA;Look at this:&#xA;&#xA;Memory was stable and then it bumped to 2&#x2B;GB. It went back down when I&#xA;asked Docker Compose to restart the container. Now what happened that would&#xA;cause the memory to go up like this? This: I deployed a new version of the container.&#xA;FWIW here is what the monitor reports:&#xA;&#xA;It sure is pretty nice but does not explain why&#xA;&#xA;Restarting the container is fine&#xA;Recreating the container is not&#xA;&#xA;Looking at the filesystems, it definitively look like Examine rebuilds&#xA;it entire indexes on restart, thus loading all content. But why?&#xA;Spoiler: I asked Claude.&#xA;And Claude told me that the issue was that Docker&#xA;container have a randomly assigned hostname, which means Umbraco could not&#xA;verify the state of this instance by checking its database tables, and thus&#xA;performed a &quot;cold boot&quot;, and thus rebuilt indexes.&#xA;Adding a hostname: whatever in the Docker Compose configuration file was all&#xA;that was needed. Now the website container retains its hostname even when re-created&#xA;and I can confirm memory stays low. Always.&#xA;Next&#xA;What else on the Radar? Another DB! MSSQL is amazing, but has this constraint&#xA;that it wants to use a minimum of 2GB of memory no matter what. This is&#xA;a lot (and expensive). There have been a few efforts at providing a&#xA;data layer for Postgres recently, and Claude can probably help us here.&#xA;I will follow conversations and experiment as soon as possible.&#xA;And before we close this post, I cannot resist a bit of teasing. Thanks&#xA;to the Datadog agent, all my logs are pushed to a central place. These are&#xA;my Umbraco logs:&#xA;&#xA;But of course I also have my other websites, or MSSQL, or MySql, or Forgejo logs here, as well as metrics about the&#xA;CPUs and disks of my containers, network traffic, SQL queries/s...]]></description>
                    <pubDate>Tue, 14 Jul 2026 12:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/utpro.feature.jobmonitor</guid>
                    <title>uTPro.Feature.JobMonitor</title>
                    <link>https://marketplace.umbraco.com/package/utpro.feature.jobmonitor</link>
                    <description><![CDATA[Read-and-trigger monitor for Umbraco recurring background jobs (Umbraco 16, 17, 18). Adds a Jobs dashboard under the Settings section that lists every recurring background job registered in the site, shows each job&#x27;s timing parameters (period, delay, server roles), records execution telemetry the CMS does not persist natively, estimates the next run, reflects load-balancing and server-role behaviour, and lets an authorized backoffice user trigger a job on demand (&quot;Run now&quot;). Discovers both modern IRecurringBackgroundJob implementations and legacy RecurringHostedServiceBase jobs automatically - no per-job wiring. Read-only by default; the only write is the manual trigger, which runs off the request thread, guards against overlap, and records who initiated it.]]></description>
                    <pubDate>Tue, 14 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://umbraco.com/blog/umbraco-search/</guid>
                    <title>The Future of Search in Umbraco</title>
                    <link>https://umbraco.com/blog/umbraco-search/</link>
                    <description><![CDATA[Explore the final release of Umbraco Search, including the new search abstraction, Examine provider, backoffice tools, and future provider flexibility.]]></description>
                    <pubDate>Tue, 14 Jul 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.zpqrtbnk.net/posts/umbraco-13-to-17/</guid>
                    <title>Umbraco 13 to 17</title>
                    <link>https://www.zpqrtbnk.net/posts/umbraco-13-to-17/</link>
                    <description><![CDATA[This site has started as an Umbraco v4.x site, and has been regularly upgraded since then, never completely rebuilt. It has been running Umbraco 13 for about 3 years now, and it is about time to upgrade. We started with 17 in mind, so this post is about upgrading to 17. But 18 is out, and we are going to upgrade to it soon.&#xA;Packages&#xA;This is the easy part. The solution contains two projects: a Core project, and a UI project. Open each .csproj file, bump TargetFramework from net8.0 to net10.0, bump Umbraco package references from 13.0.2 to 17.4.0, bump a few other packages as per NuGet&#x27;s suggestions.&#xA;The excellent Breaking Changes documentation tells us to remove RazorCompileOnBuild and RazorCompileOnPublish so, let us do it. It also tells us to clean our Program class a little. Remove a .AddDeliveryApi() call, remove a .UserInstallerEndpoints() calls, that is it.&#xA;At this point, rebuilding fails.&#xA;ModelsBuilderSettings.ModelsMode used to be an enum, looks like it is now a string. Quite simple to fix. Everything that queried the IPublishedContentCache does not compile anymore, porting to IPublishedContentQuery is trivial. There is no IContentService.SaveAndPublish() anymore, apparently, and one needs to Save() then Publish().&#xA;All in all, nothing dramatic.&#xA;Some of my custom Markdown property editor and converter will not compile, I am going to comment them out for the time being. And... it builds. Will it boot?&#xA;Database&#xA;Trying to boot the site fails... with a BootFailedException. A migration seems to want to delete a non-existing constraint named DF_umbracoUser_createDate. A quick Internet search shows that this happened to others as well, so something must have gone wrong with migrations at some point. Not going to troubleshoot, manually creating the missing constraints before upgrading is quicker:&#xA; ALTER TABLE umbracoUser ADD CONSTRAINT DF_umbracoUser_createDate DEFAULT GETUTCDATE() FOR createDate;&#xA; ALTER TABLE umbracoUser ADD CONSTRAINT DF_umbracoUser_updateDate  DEFAULT GETUTCDATE() FOR updateDate;&#xA;&#xA;And presto... the site upgrades, boots, and I can log into the back-office.&#xA;Networking&#xA;At least, I can on my development machine, where I access Umbraco directly on localhost via IIS. But on production, where Umbraco runs in a Docker container behind NGINX, I get weird 400 Bad Request errors. At this point I went through a few hours of frustration and random experiments.&#xA;I sort of thought that it might have to do with forwarded headers as my issue was close to this Umbraco forum post. I added the ForwardedHeaders middleware to the app, along with the headers in NGINX configuration. Would not work. Then I left the middleware in place but reverted the NGINX configuration. It finally worked. I don&#x27;t know why.&#xA;Now connecting to the back-office would fail with upstream sent too big header while reading response header from upstream errors being logged. That one was easier, it&#x27;s an FAQ and applying the fix to NGINX configuration fixed it all.&#xA;At that point we have: a functional back-office, and broken sites due to...&#xA;Data Types&#xA;A range of data types are gone or have changed. And of course my custom data types are CompletelyBroken&#x2122; which is not a surprise, since the back-office UI has been entirely rebuilt.&#xA;First, native data types. Basically, go into the Data Types back-office section, and re-assign those that have issues to the proper property type. Rather simple. Weird enough, a content list datatype is throwing in the back-office, because of its orderBy value. Something a migration did not catch? Manually re-saving the datatype fixes it.&#xA;And then, I actually use two custom data types:&#xA;&#xA;ZpqrtBnk.ImageFocus is an image focus data type which is an alternative to crops. It allows the user to define a rectangle that represents the &quot;zone of interest&quot; of an image. That zone is defined on the media itself. Next, whenever we need to render the media, we can automatically figure out the best crop based upon this zone.&#xA;ZpqrtBnk.Markdown is a custom Markdown data type that uses the back-office widget pretty much unchanged, but implements some rendering helpers for links or images.&#xA;&#xA;As far as Markdown is concerned, I was using a property editor in order to support additional custom syntax. Turns out a property editor is not needed anymore, a plain IMarkdownToHtmlConverter implementation is all that is needed. So, the property editor is gone, and it is way nicer this way.&#xA;On the other hand the image focus editor needs to be completely rebuilt.&#xA;My First Property Editor&#xA;There is some nice documentation about property editors in v17, so let us follow it.&#xA;mkdir PropertyEditors&#xA;cd PropertyEditors&#xA;npm create vite@latest ZpqrtBnk.ImageFocus&#xA;# with Lit&#xA;# with TypeScript&#xA;# without Vite RollDown (but I was not proposed it)&#xA;cd ZpqrtBnk.ImageFocus&#xA;npm i &amp;&amp; npm install -D @umbraco-cms/backoffice@17.4.0&#xA;rm -rf public/* src/*&#xA;&#xA;Then,&#xA;&#xA;Update vite.config.ts&#xA;Create src/zpqrtbnk-imgfocus.element.ts&#xA;Create public/umbraco-package.json&#xA;&#xA;Is all it takes. OK, it takes a bit of time to figure out how to put everything together but hey, this is my very first time with the new UI. The end result is quite polished. As in, it makes way more sense than the convoluted Angular version.&#xA;In the end,&#xA;npm run build&#xA;&#xA;Drops files in my site&#x27;s App_Plugins and we are done. As in, it just works. I have to say the experience is quite pleasant.&#xA;Models&#xA;We are not entirely done with backend work. A few more things have changed, including the CLR type of objects returned by various data types. So, most of our models are broken.&#xA;The new MediaPicker3 for instance does not return a plain IPublishedContent, but a MediaWithCrops. I do not care about crops. And I had a media converter ensuring that the property value type would be reported as Image in case the picker can only pick one single image. So... that converter needs a bit of update to report the proper type, and to unwrap MediaWithCrops to Image wherever appropriate.&#xA;And then, with the various changes applied to property types, I though I would rebuild my models. Turns out they were built using the Our.ModelsBuilder edition of the Models Builder, not the built-in one, because I am using some extra features.&#xA;Well, a few more hours were spent bringing Our.ModelsBuilder to 2026 standards. It still is a huge mess, but at least it is working again. I have pushed the changes to the repository. I do not believe anyone uses it anymore, but hey. It has advanced features that Core does not provide.&#xA;Wrapping Up&#xA;At this point, I have a running back-office, clean data types, everything is nice, time to test the front-end.&#xA;And... it works.&#xA;What else can I say? Total time spent is probably 1 to 2 days of work. I like it way better than rebuilding everything, I really like that it this used to be a v4 site :) It is funny to see how many things have not changed much over the past 4-5 years, in terms of low-level concepts. On the other hand the experience is getting way more polished and user-friendly. And I love the new back-office.&#xA;The new Markdown editor does not seem fully stable, but probably it will get better with 18.&#xA;Good work, team!]]></description>
                    <pubDate>Sun, 12 Jul 2026 20:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://cornehoskam.com/posts/how-i-upgraded-umbraco-13-to-17-in-less-than-two-hours</guid>
                    <title>How I upgraded Umbraco 13 to 17 in less than two hours!</title>
                    <link>https://cornehoskam.com/posts/how-i-upgraded-umbraco-13-to-17-in-less-than-two-hours</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Sat, 11 Jul 2026 10:19:00 Z</pubDate>
                        <category>blog</category>
                        <category>community</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/flowcourier.umbraco.ai.agents.translation</guid>
                    <title>Flowcourier.Umbraco.AI.Agents.Translation</title>
                    <link>https://marketplace.umbraco.com/package/flowcourier.umbraco.ai.agents.translation</link>
                    <description><![CDATA[Translate whole Umbraco pages in one click &#x2014; every property, nested block content and SEO fields &#x2014; using the AI provider you already configured through Umbraco AI. Every translation lands as a draft and goes through a human approval flow before anything publishes, with reviewer emails, automatic reminders and a Translation Workflow dashboard inside Umbraco&#x27;s Translation section. Free for Umbraco 17.5&#x2B;, including commercial production use.]]></description>
                    <pubDate>Sat, 11 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/flowcourier.umbraco.ai.agents.seo</guid>
                    <title>Flowcourier.Umbraco.AI.Agents.Seo</title>
                    <link>https://marketplace.umbraco.com/package/flowcourier.umbraco.ai.agents.seo</link>
                    <description><![CDATA[Improve the SEO of any Umbraco page in one click. The SEO Agent reads the open page, works out which properties are SEO and metadata fields &#x2014; even when they have non-standard names &#x2014; and drafts optimised meta titles, descriptions and social fields from the page&#x27;s own content, using the AI provider you already configured through Umbraco AI. Every suggestion is staged into the editor for you to review, edit and Save; nothing is ever written without you. Free for Umbraco 17.5&#x2B;, including commercial production use.]]></description>
                    <pubDate>Sat, 11 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://www.nevitech.co.uk/blog/migrating-umbraco-13-to-umbraco-17-on-umbraco-cloud/</guid>
                    <title>Migrating Umbraco 13 to Umbraco 17 on Umbraco Cloud</title>
                    <link>https://www.nevitech.co.uk/blog/migrating-umbraco-13-to-umbraco-17-on-umbraco-cloud/</link>
                    <description><![CDATA[A developer guide to upgrading an Umbraco 13 site to Umbraco 17 on Umbraco Cloud by migrating locally and deploying into a fresh Cloud project, covering the full sequence through to a low downtime go live.]]></description>
                    <pubDate>Fri, 10 Jul 2026 23:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.FilterList/releases/tag/v17.0.0-alpha001</guid>
                    <title>Limbo.Umbraco.FilterList 17.0.0-alpha001</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.FilterList/releases/tag/v17.0.0-alpha001</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Fri, 10 Jul 2026 15:17:02 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://www.nathanielnunes.com/blog/pin-umbraco-docs-version-tampermonkey</guid>
                    <title>Pinning docs.umbraco.com to a Specific Version with Tampermonkey</title>
                    <link>https://www.nathanielnunes.com/blog/pin-umbraco-docs-version-tampermonkey</link>
                    <description><![CDATA[Here is a Tampermonkey userscript that pins docs.umbraco.com to whatever version you are actually working on.]]></description>
                    <pubDate>Fri, 10 Jul 2026 11:30:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://cornehoskam.com/posts/how-i-upgraded-umbraco-13-to-17-in-less-than-two-hours/</guid>
                    <title>How I upgraded Umbraco 13 to 17 in less than two hours!</title>
                    <link>https://cornehoskam.com/posts/how-i-upgraded-umbraco-13-to-17-in-less-than-two-hours/</link>
                    <description><![CDATA[I jumped straight from Umbraco 13 to 17 on Umbraco Cloud in under two hours, TinyMCE to Tiptap and all. Here&#x27;s the full checklist of what I touched.]]></description>
                    <pubDate>Fri, 10 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/our.umbraco.mediamanager</guid>
                    <title>Our.Umbraco.MediaManager</title>
                    <link>https://marketplace.umbraco.com/package/our.umbraco.mediamanager</link>
                    <description><![CDATA[Safe, async media cleanup for Umbraco 16&#x2013;17: find and remove unused media nodes, duplicates, broken nodes and orphaned physical files, guarded by a deep reference scan, with dry-run preview and Recycle Bin safety.]]></description>
                    <pubDate>Fri, 10 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.ModelsBuilder/releases/tag/v17.0.0-alpha001</guid>
                    <title>Limbo.Umbraco.ModelsBuilder 17.0.0-alpha001</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.ModelsBuilder/releases/tag/v17.0.0-alpha001</link>
                    <description><![CDATA[Limbo.Umbraco.ModelsBuilder is a custom models builder for Umbraco that provides extended functionality compared to Umbraco&#x27;s build-in models builder.]]></description>
                    <pubDate>Thu, 09 Jul 2026 08:05:11 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/geoa.aivisibility</guid>
                    <title>Geoa.AiVisibility</title>
                    <link>https://marketplace.umbraco.com/package/geoa.aivisibility</link>
                    <description><![CDATA[Make your Umbraco site visible to AI answer engines (ChatGPT, Perplexity, Gemini). Geoa injects registry-verified Organization schema (DK / NO / SE / FI), FAQ and Article JSON-LD, and an optional llms.txt file, then scores every page for answer-engine readiness. Track E-E-A-T signals, build citation corroboration (sameAs), and see which AI crawlers visit your site &#x2014; all from a native backoffice dashboard, powered by the Geoa platform.]]></description>
                    <pubDate>Thu, 09 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.automate.inspector</guid>
                    <title>Umbraco.Community.Automate.Inspector</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.automate.inspector</link>
                    <description><![CDATA[Package Description]]></description>
                    <pubDate>Thu, 09 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.uibuilder.automate</guid>
                    <title>Umbraco.UIBuilder.Automate</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.uibuilder.automate</link>
                    <description><![CDATA[Umbraco UI Builder triggers and actions for Umbraco Automate]]></description>
                    <pubDate>Thu, 09 Jul 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.automate.slack</guid>
                    <title>Umbraco.Automate.Slack</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.automate.slack</link>
                    <description><![CDATA[Slack connection and actions for Umbraco Automate]]></description>
                    <pubDate>Thu, 09 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://hayleymarkdigital.co.uk/blog/exploring-umbraco-ai-for-end-users/</guid>
                    <title>Exploring Umbraco AI for end users</title>
                    <link>https://hayleymarkdigital.co.uk/blog/exploring-umbraco-ai-for-end-users/</link>
                    <description><![CDATA[Providing reliable, proactive and personable freelance support for website updates, SEO, lead generation and ongoing marketing strategies.]]></description>
                    <pubDate>Thu, 09 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://umbraco.com/blog/launching-umbraco-automate/</guid>
                    <title>Launching Umbraco Automate</title>
                    <link>https://umbraco.com/blog/launching-umbraco-automate/</link>
                    <description><![CDATA[Streamline your CMS workflows with Umbraco Automate. Create unlimited drag-and-drop automations, triggers, and AI tool integrations in Umbraco 17&#x2B;.]]></description>
                    <pubDate>Thu, 09 Jul 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://owain.codes/blog/2026/july/are-you-okay/</guid>
                    <title>Are you okay</title>
                    <link>https://owain.codes/blog/2026/july/are-you-okay/</link>
                    <description><![CDATA[On men, mental health, and the communities that keep us going, in a job AI is quietly rewriting.]]></description>
                    <pubDate>Thu, 09 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://skttl.dev/blog/go-to-partial/</guid>
                    <title>Make Razor Partials Navigable in VS Code</title>
                    <link>https://skttl.dev/blog/go-to-partial/</link>
                    <description><![CDATA[A small VS Code extension that adds Go to Definition and live diagnostics for Razor partial view references in .cshtml files.]]></description>
                    <pubDate>Thu, 09 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://dev.to/chaudharidevam/why-we-pair-nextjs-with-umbraco-17--842</guid>
                    <title>Why We Pair Next.js with Umbraco 17 ?</title>
                    <link>https://dev.to/chaudharidevam/why-we-pair-nextjs-with-umbraco-17--842</link>
                    <description><![CDATA[&lt;p&gt;When building a content-driven website, there are two goals that are often in tension: give visitors a fast, modern, SEO-friendly site, and give the content team a CMS they can actually use without calling a developer every time a page needs to change.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Our answer is to split the problem in two and let each half of the stack do what it&#x27;s best at:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;strong&gt;Umbraco 17&lt;/strong&gt;, running on &lt;strong&gt;.NET 10&lt;/strong&gt;, as the content backend&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;strong&gt;Next.js 16&lt;/strong&gt; with &lt;strong&gt;React 19&lt;/strong&gt;, running on the App Router, as the presentation layer&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Here&#x27;s why we made that call, and how it plays out in practice.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  Two apps, one clean contract&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Rather than bolting a headless CMS onto an existing site, we build the two halves as genuinely independent applications that only talk to each other over HTTP:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The Umbraco installation is the backoffice, the content types, the media library, the database. This is where content editors log in, build pages out of reusable blocks, and manage content like blog posts.&lt;/li&gt;&#xA;&lt;li&gt;The Next.js app is a standalone frontend. It never touches the Umbraco database directly, every piece of content it renders comes from an HTTP call.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;That separation is the whole point of a &quot;headless&quot; CMS: the people managing content and the people managing the website&#x27;s code can move independently. CMS upgrades don&#x27;t require a frontend deploy, and frontend releases don&#x27;t require touching the CMS.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  The content pipeline: Umbraco&#x27;s Delivery API&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Umbraco 17 ships with a Content Delivery API a built-in, versioned JSON API that exposes published content without any custom plumbing. We lean on it heavily rather than building a bespoke API from scratch, which saves real development time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A page fetch from Next.js looks like this in practice:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight http&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;GET /umbraco/delivery/api/v2/content/item/home?expand=properties[$all[properties[$all[properties[$all]]]]]&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;That &lt;code&gt;expand&lt;/code&gt; parameter is doing a lot of work: pages are built by editors dragging and dropping content blocks (hero sections, feature grids, image-and-text panels, calls to action) using Umbraco&#x27;s Block Grid editor, and those blocks can be nested. The expansion query lets us pull an entire page blocks inside blocks inside blocks in a single round trip instead of chasing references with follow-up requests.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the Next.js side, a small typed fetch helper wraps every one of these calls, attaches an API key, and lets Next&#x27;s own data cache handle short-lived revalidation. There&#x27;s no GraphQL client, no heavyweight SDK just &lt;code&gt;fetch()&lt;/code&gt;, TypeScript types that mirror the Umbraco content model, and a short cache window so published changes show up almost immediately without hammering the CMS on every request.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  Rendering: server-rendered, block by block&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Generic content pages funnel through a single catch-all route that renders server-side on each request. Instead of one big template, rendering is driven by content type: a dispatcher component looks at what kind of block came back from Umbraco a feature section, an image gallery, a testimonial, a two-column layout and hands it off to the matching React component.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The effect is that adding a new content block is mostly a two-sided change: define the element type in Umbraco, add a matching case in the renderer. Editors get a new building block to compose pages with; developers don&#x27;t have to build new pages from scratch every time a new layout is needed.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  Beyond the CMS defaults&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The Delivery API covers page content well, but a few features need more than &quot;fetch a page and render it&quot;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;strong&gt;Filtering and search.&lt;/strong&gt; Category pages, tag pages, and &quot;previous/next&quot; navigation are backed by custom API endpoints that walk the content tree directly, and free-text search runs on Umbraco&#x27;s built-in Lucene-based indexer rather than an external search service. That avoids standing up and paying for a separate search product just to let visitors search content.&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;strong&gt;Forms.&lt;/strong&gt; Submissions are validated in the browser, sent through a Next.js API route, and stored by a small custom endpoint on the Umbraco side with a lightweight dashboard added to the Umbraco backoffice so the team can review submissions without leaving the CMS they already use every day.&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;strong&gt;Media handling.&lt;/strong&gt; Images uploaded into Umbraco&#x27;s media library are served through Next.js&#x27;s image optimizer, so editors don&#x27;t need to think about responsive image sizes or formats that&#x27;s handled automatically on the way out.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  What this stack gets you&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Putting it together, the architecture gives:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;strong&gt;Speed&lt;/strong&gt;, from server rendering and Next.js&#x27;s image and asset optimization&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;strong&gt;SEO control that lives with content&lt;/strong&gt;, since page titles, descriptions, and indexing rules are authored directly in Umbraco and flow straight into page metadata no separate SEO tooling to keep in sync&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;strong&gt;A content team that isn&#x27;t blocked by developers&lt;/strong&gt;, because new pages are built from existing blocks rather than new code&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;strong&gt;A frontend that isn&#x27;t blocked by the CMS release cycle&lt;/strong&gt;, because the two halves deploy independently&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  Trade-offs worth naming&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Being candid, this approach isn&#x27;t free. Running on Umbraco 17 and Next.js 16 means running close to the front of both ecosystems fewer battle-tested examples to lean on, but a stack that stays current for years rather than needing a rewrite in one. And a headless setup means CMS preview/draft workflows, sitemaps, and secrets/hosting management all need to be built or configured deliberately they don&#x27;t come for free just because the CMS has them out of the box in a traditional, non-headless setup.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a site with a real content operation behind it, splitting &quot;where content lives&quot; from &quot;how it&#x27;s presented&quot; is worth the extra moving part. It lets each side of the team content and engineering work at their own pace, without waiting on each other.&lt;/p&gt;]]></description>
                    <pubDate>Wed, 08 Jul 2026 07:49:11 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.drafts</guid>
                    <title>Umbraco.Community.Drafts</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.drafts</link>
                    <description><![CDATA[Auto-save your work as you go, just like Gmail. Never lose your edits again.]]></description>
                    <pubDate>Wed, 08 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.linkaudit</guid>
                    <title>Umbraco.Community.LinkAudit</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.linkaudit</link>
                    <description><![CDATA[A lightweight, single-purpose link auditor for Umbraco. Scans published content on a schedule (or on demand), reports broken external links and links that point at hosts you would rather keep internal &#x2014; all from a read-only backoffice dashboard. Reads the content cache directly rather than crawling the rendered site.]]></description>
                    <pubDate>Wed, 08 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://www.dynamicdave.nl/blog/umbraco-18-elements/</guid>
                    <title>Umbraco 18 Finally gives reusable content the home it deserves</title>
                    <link>https://www.dynamicdave.nl/blog/umbraco-18-elements/</link>
                    <description><![CDATA[There are flashy features that get everyone excited&#x2014;new editors, AI integrations, shiny dashboards. They look great in a keynote and are fun to show off. But then there are those features that, quietly, just fix long-standing headaches. For me, the new Library and Elements in Umbraco 18 are absolutely in that second group.When I first saw these demoed at Codegarden, I immediately thought, &quot;Here we go. This is definitely going to be one of my favorite updates since a long time.&quot; It&#x27;s not a brand-new idea. In fact, it&#x27;s almost more impressive because it turns something most experienced Umbraco developers have hacked together themselves into an actual, official feature.If you&#x2019;ve built Umbraco websites for any length of time, you&#x2019;ve probably done this: made a &#x201C;Globals &#x201C; of &#x201C;Various Content&#x201D; node and hidden it, set up a Shared Content folder, tossed reusable stuff onto a Settings page, or kept a folder with call-to-actions, testimonials, author profiles, or banners. None of which are even real pages.Did it work? Yeah&#x2026; most of the time. But let&#x27;s be honest&#x2014;it always felt like a kludge.That kind of content never really belonged alongside website pages. This &#x201C;content&#x201D; didn&#x2019;t need URLs; users weren&#x2019;t supposed to visit it. We only structured things this way because editors needed somewhere to manage reusable pieces. For years, we just pretended these were documents because Umbraco left us no other option.With Umbraco 18, the compromise disappears.]]></description>
                    <pubDate>Tue, 07 Jul 2026 22:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://umbracocommunity.social/@UmbHost/116877874250829198</guid>
                    <title>UmbHost GreenStack&#x27;s UK is now live!</title>
                    <link>https://umbracocommunity.social/@UmbHost/116877874250829198</link>
                    <description><![CDATA[&#x1F33F;&#x1F1EC;&#x1F1E7;&#x1F680; GreenStack&#x27;s UK is now live! &#x1F33F;&#x1F1EC;&#x1F1E7;&#x1F680; Our most requested feature since the January launch! Full UK data residency for Umbraco hosting! Files, databases, and backups all stay in the UK, served from our new London infrastructure. All package tiers (Core, Pro, and Scale) are available from day one, with the same pricing as the EU region. If data residency has been holding you back, that barrier is gone &#x1F4A5; https://umbhost.net/blog/2026/07/greenstack-comes-home-uk-region-now-available#Umbraco #Hosting #GreenStack]]></description>
                    <pubDate>Tue, 07 Jul 2026 15:54:09 Z</pubDate>
                        <category>community</category>
                        <category>social</category>
                        <category>mastodon</category>
                </item>
                <item>
                    <guid>https://skrift.io/issues/#129</guid>
                    <title>Skrift Issue #129</title>
                    <link>https://skrift.io/issues/#129</link>
                    <description><![CDATA[Featuring guest posts by Bogdan Kosarevskyi on &quot;The tip of the observability iceberg: depth is not measured in meters, but in levels of observation&quot; and Hubert Galuszka on &quot;Virtual Members: Passwordless Umbraco Auth Without the Identity-Provider Bill&quot;]]></description>
                    <pubDate>Tue, 07 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                        <category>skrift</category>
                </item>
                <item>
                    <guid>https://umbraco.com/blog/security-advisory-july-7-2026-security-patches-are-now-available/</guid>
                    <title>Security Advisory, July 7, 2026: Security Patches are now available</title>
                    <link>https://umbraco.com/blog/security-advisory-july-7-2026-security-patches-are-now-available/</link>
                    <description><![CDATA[Summary: A vulnerability classified as high has been found and fixed in Umbraco 13, 17, and 18.]]></description>
                    <pubDate>Tue, 07 Jul 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://umbraco.com/blog/uprofile-july-2026-georgina-bidder/</guid>
                    <title>uProfile July 2026 - Georgina Bidder</title>
                    <link>https://umbraco.com/blog/uprofile-july-2026-georgina-bidder/</link>
                    <description><![CDATA[Meet Georgina: From the deep end to the Codegarden stage: Meet Core Collaborator Georgina Bidder!]]></description>
                    <pubDate>Tue, 07 Jul 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/thtaai</guid>
                    <title>ThtaAi</title>
                    <link>https://marketplace.umbraco.com/package/thtaai</link>
                    <description><![CDATA[AI-powered content generation for the Umbraco backoffice. Uses a local LLM (or other LLM API) to generate page content, block content, and full pages from natural-language prompts, with editorial review before anything publishes.]]></description>
                    <pubDate>Tue, 07 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://github.com/abjerner/Limbo.Umbraco.TextBox/releases/tag/v17.0.0-alpha001</guid>
                    <title>Limbo.Umbraco.TextBox 17.0.0-alpha001</title>
                    <link>https://github.com/abjerner/Limbo.Umbraco.TextBox/releases/tag/v17.0.0-alpha001</link>
                    <description><![CDATA[Limbo Textbox&#xA0;(or&#xA0;Limbo.Umbraco.TextBox) is a package that adds new textbox and textarea property editors for Umbraco 10&#x2B;. While having similar functionality to the build in property editors, this package adds a few extra features.]]></description>
                    <pubDate>Mon, 06 Jul 2026 11:46:55 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://marathonus.com/about/blog/what-umbraco-codegarden-2026-left-on-me-permanently/</guid>
                    <title>What Umbraco Codegarden 2026 Left on Me&amp;#x2014;Permanently | Marathon Consulting</title>
                    <link>https://marathonus.com/about/blog/what-umbraco-codegarden-2026-left-on-me-permanently/</link>
                    <description><![CDATA[Marathon&#x27;s Scott Clevenger reflects on Umbraco Codegarden 2026 &amp;#x2014; an MVP, a tattoo, and a platform that&#x27;s ready for whatever comes next.]]></description>
                    <pubDate>Mon, 06 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.linkedin.com/pulse/ai-signalling-end-cms-we-know-simply-becoming-much-bigger-durrant-z3nme/</guid>
                    <title>Is AI signalling the end of the CMS as we know it? Or is it simply becoming something much bigger?</title>
                    <link>https://www.linkedin.com/pulse/ai-signalling-end-cms-we-know-simply-becoming-much-bigger-durrant-z3nme/</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Mon, 06 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://gibe.digital/blog/gibe-goes-to-codegarden-2026-edition/</guid>
                    <title>Gibe goes to Codegarden (2026 edition)</title>
                    <link>https://gibe.digital/blog/gibe-goes-to-codegarden-2026-edition/</link>
                    <description><![CDATA[Gibe reflects on Codegarden 2026, covering the latest Umbraco announcements, standout sessions, community highlights, and our Package Award nomination.]]></description>
                    <pubDate>Mon, 06 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://owainjones.dev/blog/new-giscus-powered-comments-and-h5yr-widget/</guid>
                    <title>New Giscus powered comments and H5YR widget!</title>
                    <link>https://owainjones.dev/blog/new-giscus-powered-comments-and-h5yr-widget/</link>
                    <description><![CDATA[I&amp;#x27;ve added a giscus powered comments, and the awesome H5YR widget, to my blog posts!]]></description>
                    <pubDate>Sat, 04 Jul 2026 19:18:36 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.nevitech.co.uk/blog/introducing-imagesharp-trimcache-for-umbraco/</guid>
                    <title>Introducing ImageSharp TrimCache for Umbraco</title>
                    <link>https://www.nevitech.co.uk/blog/introducing-imagesharp-trimcache-for-umbraco/</link>
                    <description><![CDATA[A free Umbraco package that trims the ImageSharp.Web image cache by age on a schedule, for both the local physical cache and Azure Blob storage. Stop the media cache growing unbounded on Umbraco Cloud and self hosted sites.]]></description>
                    <pubDate>Fri, 03 Jul 2026 23:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://shazwazza.com/post/letting-ai-agents-loose-on-examine/</guid>
                    <title>Letting AI agents loose on Examine</title>
                    <link>https://shazwazza.com/post/letting-ai-agents-loose-on-examine/</link>
                    <description><![CDATA[I&#x27;ve been maintaining Examine for a very long time now. It&#x27;s the search and indexing library that sits underneath every Umbraco site, and like any project that&#x27;s been around long enough, it has plenty of hot paths that could be faster, a steady trickle of issues that need triaging, and a backlog of &quot;I&#x27;ll get to that eventually&quot; performance work that, well&#x2026; I never actually get to.&#xA;So a couple of months ago I thought I&#x27;d try an experiment - what if I stopped doing all of that myself and instead let a bunch of AI agents do it for me, on a schedule, while I got on with everything else? This post is about how that went. I&#x27;ve shipped a few releases off the back of it and some of the hot-path improvements are genuinely a bit ridiculous.&#xA;So what are these &quot;agentic workflows&quot;?&#xA;The thing I installed is GitHub Next&#x27;s Agentic Workflows - a set of markdown-defined workflows that run in GitHub Actions and drive an AI agent to do actual maintenance work on your repo. They&#x27;re not chat bots. They run on a schedule, they have persistent memory, they open real pull requests, and they leave the &quot;should this ship?&quot; decision to me.&#xA;I ended up with a few of them running on Examine:&#xA;&#xA;Perf Improver - runs daily, hunts for performance bottlenecks, writes benchmarks to actually prove the improvement, and opens a draft PR with the before/after numbers.&#xA;Efficiency Improver - its scrappier sibling, focused on the smaller allocation-and-LINQ-state-machine wins that add up over time.&#xA;Daily Issue Triage - goes through untriaged issues, sets types, applies labels, spots duplicates, and leaves a tidy triage report for me.&#xA;Agentic Maintenance - keeps the whole setup ticking along.&#xA;&#xA;Each one is just a markdown file in .github/workflows/ with a description, a schedule, some safe-outputs limits (things like &quot;you may open at most 4 PRs per run, and they must be drafts&quot;) and a big prompt describing how to behave. That&#x27;s it. The nice part is that the guardrails are declarative, so the agent can&#x27;t merge its own PRs, it can&#x27;t touch protected files, and it can only comment so many times per run. All of that is baked in.&#xA;How it actually works day to day&#xA;The bit that makes this more than a gimmick is the persistent memory. Every run, the Perf Improver reads its own notes - which build/test/benchmark commands it validated, what&#x27;s on its optimisation backlog, what it worked on last time, and which suggestions I&#x27;ve already ticked off. Then it does a couple of tasks in a round-robin fashion so it&#x27;s not endlessly poking at the same corner of the codebase.&#xA;It also keeps a single rolling &quot;Monthly Activity&quot; issue open with a checklist of what needs my attention. So my side of it is pretty simple: the agent opens a draft PR with measured before/after numbers, I read it and run CI, and if I&#x27;m happy with it I merge. That&#x27;s the whole loop. I&#x27;m the reviewer, the agent is the workhorse doing the grind I never had time for.&#xA;So what did they actually get done?&#xA;Over roughly the last two months, here&#x27;s what these workflows actually got up to on Examine:&#xA;&#xA;124 successful Perf Improver runs and 9 successful Efficiency Improver runs&#xA;20 successful Daily Issue Triage runs quietly keeping the issue tracker tidy&#xA;24 performance/efficiency PRs reviewed and merged (13 from Perf Improver, 11 from Efficiency Improver) between late May and the end of June&#xA;And the bit that actually matters - three releases shipped off this work: v3.8.0, v3.9.0 and the v4.0.0-beta.7 pre-release&#xA;&#xA;That last point is really the whole thing. This isn&#x27;t a pile of speculative branches rotting in a fork somewhere - it&#x27;s code that went through my review, passed CI, and is now sitting in NuGet packages that real Umbraco sites are running.&#xA;Show me the numbers&#xA;Right, this is the part I actually get excited about. One of my favourite things about the Perf Improver is that its prompt tells it to only attempt improvements it can actually measure - establish a baseline first, make the change, then measure again and document both numbers. For the algorithmic hot-path stuff that means benchmarks, so along the way it built out a proper BenchmarkDotNet suite that compares the current source against the published NuGet packages (3.0.1 through 3.3.0), which means I can show you real, reproducible deltas instead of hand waving.&#xA;The full-text search hot path&#xA;ManagedQuery is the primary full-text search entry point in Examine - it&#x27;s what runs on basically every search. The agent noticed it had no dedicated benchmark, wrote one, and then stacked up a series of small, individually measured changes: a volatile factory cache in SearchContext.GetFieldValueType, an early return in the extract-terms check, and killing off some redundant ConcurrentDictionary lookups in AddDocument.&#xA;Here&#x27;s the current source vs the most recent 3.3.0 release, on a 1,000-document index:&#xA;&#xA;&#xA;&#xA;Method&#xA;Version&#xA;Mean&#xA;Allocated&#xA;&#xA;&#xA;&#xA;&#xA;ManagedQueryAllFields&#xA;3.3.0&#xA;11.42 ms&#xA;1,323 KB&#xA;&#xA;&#xA;ManagedQueryAllFields&#xA;Source&#xA;2.17 ms&#xA;371 KB&#xA;&#xA;&#xA;&#xA;That&#x27;s about 5.3x faster and roughly 3.6x less memory allocated on the single most travelled code path in the whole library. On the busiest thing Examine does. I&#x27;ll happily take that.&#xA;Building queries&#xA;GroupedAnd / GroupedOr / GroupedNot are the workhorses of the query builder. A little string[] fast-path (skipping a defensive .ToArray() copy when the caller already handed it a string[]) plus some allocation trimming got this:&#xA;&#xA;&#xA;&#xA;Method&#xA;Version&#xA;Mean&#xA;Allocated&#xA;&#xA;&#xA;&#xA;&#xA;CreateQueryOnly&#xA;3.3.0&#xA;3,995 ns&#xA;8.34 KB&#xA;&#xA;&#xA;CreateQueryOnly&#xA;Source&#xA;319 ns&#xA;2.20 KB&#xA;&#xA;&#xA;GroupedAndStringArray&#xA;3.3.0&#xA;21,377 ns&#xA;21.10 KB&#xA;&#xA;&#xA;GroupedAndStringArray&#xA;Source&#xA;16,659 ns&#xA;14.34 KB&#xA;&#xA;&#xA;&#xA;The CreateQuery() baseline dropping from 8.34 KB down to 2.2 KB is a lovely little win, and the grouped clauses are about 25% faster with a third of the allocation shaved off.&#xA;Constructing a ValueSet&#xA;Every single document you index goes through a ValueSet constructor. The old path allocated an intermediate dictionary and a generator state machine per field, which is exactly the kind of thing you don&#x27;t notice until you&#x27;re bulk indexing a big site. The agent got rid of both:&#xA;&#xA;&#xA;&#xA;Method&#xA;Version&#xA;Mean&#xA;Allocated&#xA;&#xA;&#xA;&#xA;&#xA;FromDictionary5Fields&#xA;3.3.0&#xA;1,183 ns&#xA;2,200 B&#xA;&#xA;&#xA;FromDictionary5Fields&#xA;Source&#xA;226 ns&#xA;592 B&#xA;&#xA;&#xA;FromDictionary20Fields&#xA;3.3.0&#xA;4,007 ns&#xA;6,544 B&#xA;&#xA;&#xA;FromDictionary20Fields&#xA;Source&#xA;654 ns&#xA;1,520 B&#xA;&#xA;&#xA;&#xA;That&#x27;s roughly 5-6x faster and about 4x less allocated on indexing, and when you&#x27;re rebuilding the index on a large Umbraco site that adds up fast.&#xA;The really nice touch is that these benchmark result tables now live in &lt;remarks&gt; doc-comments right next to the benchmark code, so the numbers are versioned in the repo alongside the thing they measure. The agent did that bit too.&#xA;Was it actually worth it?&#xA;For me the thing that makes it work is the measurement. Everything comes to me as a small, focused, draft PR with the numbers attached, so I can look at it, sanity check it, run CI, and decide in a couple of minutes. It&#x27;s not zero effort - I still read every change before it goes anywhere near main - but the ratio is fantastic. I&#x27;m getting a steady stream of well-measured, single-purpose performance PRs on a library I care about, on paths I&#x27;d genuinely never have found the time to optimise by hand, and I&#x27;ve shipped real releases because of it. For a project I maintain around everything else, that&#x27;s a pretty great deal.&#xA;If you maintain a repo with a backlog you never get to, especially performance work that needs benchmarks to justify it, I&#x27;d recommend giving GitHub Next&#x27;s agentics a go.&#xA;You can see all of it out in the open on the Examine repo - the [perf-improver] and [efficiency-improver] PRs, the benchmark suite, and the releases they fed into. And there&#x27;s a nice bonus here for me too: ExamineX, my managed, cloud-hosted Examine search offering, runs on this exact same internal plumbing. So all this work the agents have been doing to tighten up Examine&#x27;s query and indexing hot paths feeds straight through into ExamineX - the underlying engine gets faster and leaner, and every ExamineX site gets those wins for free without changing a thing. If you&#x27;d rather have your search running as a managed service instead of hosting Lucene indexes on your own servers, that&#x27;s what ExamineX is there for. &#x1F642;]]></description>
                    <pubDate>Fri, 03 Jul 2026 17:45:20 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.Tables/releases/tag/v17.0.0-alpha001</guid>
                    <title>Limbo.Umbraco.Tables 17.0.0-alpha001</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.Tables/releases/tag/v17.0.0-alpha001</link>
                    <description><![CDATA[Limbo.Umbraco.Tables is a package for Umbraco featuring property editor for building table based content.]]></description>
                    <pubDate>Fri, 03 Jul 2026 12:56:06 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://medium.com/@ravimotha/umbraco-london-july-meetup-the-write-up-b4ce49a37390?source=rss-8e76be83b03f------2</guid>
                    <title>Umbraco London July Meetup .. the write- up</title>
                    <link>https://medium.com/@ravimotha/umbraco-london-july-meetup-the-write-up-b4ce49a37390?source=rss-8e76be83b03f------2</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Fri, 03 Jul 2026 09:18:14 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://medium.com/@ravimotha/umbraco-london-july-meetup-the-write-up-b4ce49a37390?source=rss------umbraco-5</guid>
                    <title>Umbraco London July Meetup .. the write- up</title>
                    <link>https://medium.com/@ravimotha/umbraco-london-july-meetup-the-write-up-b4ce49a37390?source=rss------umbraco-5</link>
                    <description><![CDATA[&lt;div class=&quot;medium-feed-item&quot;&gt;&lt;p class=&quot;medium-feed-image&quot;&gt;&lt;a href=&quot;https://medium.com/@ravimotha/umbraco-london-july-meetup-the-write-up-b4ce49a37390?source=rss------umbraco-5&quot;&gt;&lt;img src=&quot;https://cdn-images-1.medium.com/max/2600/1*TzZ8HkxpsC1nIL1zJpZFjA@2x.jpeg&quot; width=&quot;4624&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;medium-feed-snippet&quot;&gt;Umbraco london is trying something silly a short unprogrammed stream of useless brain fog.&lt;/p&gt;&lt;p class=&quot;medium-feed-link&quot;&gt;&lt;a href=&quot;https://medium.com/@ravimotha/umbraco-london-july-meetup-the-write-up-b4ce49a37390?source=rss------umbraco-5&quot;&gt;Continue reading on Medium &#xBB;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;]]></description>
                    <pubDate>Fri, 03 Jul 2026 09:18:14 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://mattbrailsford.dev/creating-a-safe-space-for-editors-to-be-wrong</guid>
                    <title>Creating A Safe Space for Editors to Be Wrong</title>
                    <link>https://mattbrailsford.dev/creating-a-safe-space-for-editors-to-be-wrong</link>
                    <description><![CDATA[I spend most of my time these days working on Umbraco AI, bringing AI into the hands of content editors. So I think a lot about what actually makes...]]></description>
                    <pubDate>Fri, 03 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/phases.umbraco.contentsearch</guid>
                    <title>Phases.Umbraco.ContentSearch</title>
                    <link>https://marketplace.umbraco.com/package/phases.umbraco.contentsearch</link>
                    <description><![CDATA[Advanced content search for the Umbraco backoffice. Editors can search content by document type and property, view results in a sortable grid, export to CSV or Excel, and save searches for later.]]></description>
                    <pubDate>Fri, 03 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=X8im857dhUs</guid>
                    <title>UMBRAAD 2026 | Accessibility Manual Testing: Why Lived Experience Matters - Thiago Carmo</title>
                    <link>https://www.youtube.com/watch?v=X8im857dhUs</link>
                    <description><![CDATA[Accessibility Manual Testing: Why Lived Experience Matters by Thiago Carmo&#xA;&#xA;UMBRAAD is a free virtual Umbraco community event packed with practical talks, live demos, and expert Q&amp;A sessions on building a more inclusive web.&#xA;&#xA;Read more on https://umbraad.com]]></description>
                    <pubDate>Thu, 02 Jul 2026 07:48:53 Z</pubDate>
                        <category>community</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=AsKGl8N20ek</guid>
                    <title>UMBRAAD 2026 | Accessibility Debt in Digital Products - Shivansh Mathur</title>
                    <link>https://www.youtube.com/watch?v=AsKGl8N20ek</link>
                    <description><![CDATA[Accessibility Debt in Digital Products: What AI Fixes and What It Doesn&#x27;t by Shivansh Mathur&#xA;&#xA;UMBRAAD is a free virtual Umbraco community event packed with practical talks, live demos, and expert Q&amp;A sessions on building a more inclusive web.&#xA;&#xA;Read more on https://umbraad.com]]></description>
                    <pubDate>Thu, 02 Jul 2026 07:28:49 Z</pubDate>
                        <category>community</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=on7fwoS32Hs</guid>
                    <title>UMBRAAD 2026 | Write Once, Reach Everyone: Accessible Writing - Corey Vilhauer</title>
                    <link>https://www.youtube.com/watch?v=on7fwoS32Hs</link>
                    <description><![CDATA[Write Once, Reach Everyone: Accessible Writing and GEO Want the Same Solution by Corey Vilhauer&#xA;&#xA;UMBRAAD is a free virtual Umbraco community event packed with practical talks, live demos, and expert Q&amp;A sessions on building a more inclusive web.&#xA;&#xA;Read more on https://umbraad.com]]></description>
                    <pubDate>Thu, 02 Jul 2026 07:24:46 Z</pubDate>
                        <category>community</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=FwgBVdGi3mw</guid>
                    <title>UMBRAAD 2026 | Why Automated Accessibility Tools Are Not Enough - Shadrack William Kyei</title>
                    <link>https://www.youtube.com/watch?v=FwgBVdGi3mw</link>
                    <description><![CDATA[Why Automated Accessibility Tools Are Not Enough by Shadrack William Kyei&#xA;&#xA;UMBRAAD is a free virtual Umbraco community event packed with practical talks, live demos, and expert Q&amp;A sessions on building a more inclusive web.&#xA;&#xA;Read more on https://umbraad.com]]></description>
                    <pubDate>Thu, 02 Jul 2026 07:19:35 Z</pubDate>
                        <category>community</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=Oa6Y7u3qITo</guid>
                    <title>UMBRAAD 2026 | What No One Tells You About Working in Accessibility - Danny Lancaster</title>
                    <link>https://www.youtube.com/watch?v=Oa6Y7u3qITo</link>
                    <description><![CDATA[What No One Tells You About Working in Accessibility by Danny Lancaster&#xA;&#xA;UMBRAAD is a free virtual Umbraco community event packed with practical talks, live demos, and expert Q&amp;A sessions on building a more inclusive web.&#xA;&#xA;Read more on https://umbraad.com]]></description>
                    <pubDate>Thu, 02 Jul 2026 07:16:46 Z</pubDate>
                        <category>community</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=1tUY7i2mKI4</guid>
                    <title>UMBRAAD 2026 | Shift Left on Accessibility: Beyond the Audit - Ramona Domen</title>
                    <link>https://www.youtube.com/watch?v=1tUY7i2mKI4</link>
                    <description><![CDATA[Shift Left on Accessibility: Beyond the Audit by Ramona Domen&#xA;&#xA;UMBRAAD is a free virtual Umbraco community event packed with practical talks, live demos, and expert Q&amp;A sessions on building a more inclusive web.&#xA;&#xA;Read more on https://umbraad.com]]></description>
                    <pubDate>Thu, 02 Jul 2026 07:13:10 Z</pubDate>
                        <category>community</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=spFK0VODBiI</guid>
                    <title>UMBRAAD 2026 | Designing for cognition - Ellie Barrett</title>
                    <link>https://www.youtube.com/watch?v=spFK0VODBiI</link>
                    <description><![CDATA[Designing for cognition by Ellie Barrett&#xA;&#xA;UMBRAAD is a free virtual Umbraco community event packed with practical talks, live demos, and expert Q&amp;A sessions on building a more inclusive web.&#xA;&#xA;Read more on https://umbraad.com]]></description>
                    <pubDate>Thu, 02 Jul 2026 07:05:11 Z</pubDate>
                        <category>community</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=dStALum-g_k</guid>
                    <title>UMBRAAD 2026 | Automating Accessibility Audits - Jordan Smith</title>
                    <link>https://www.youtube.com/watch?v=dStALum-g_k</link>
                    <description><![CDATA[Automating Accessibility Audits: Building a Full-Pipeline A11Y Scanning &amp; Reporting Tool by Jordan Smith.&#xA;&#xA;UMBRAAD is a free virtual Umbraco community event packed with practical talks, live demos, and expert Q&amp;A sessions on building a more inclusive web.&#xA;&#xA;Read more on https://umbraad.com]]></description>
                    <pubDate>Thu, 02 Jul 2026 07:00:43 Z</pubDate>
                        <category>community</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=IRYNePlevSo</guid>
                    <title>UMBRAAD 2026 | Accessibility starts before the software - Carl Sargunar</title>
                    <link>https://www.youtube.com/watch?v=IRYNePlevSo</link>
                    <description><![CDATA[Accessibility starts before the software: hardware, cloud tooling, LLMs and diminishing returns by Carl Sargunar.&#xA;&#xA;UMBRAAD is a free virtual Umbraco community event packed with practical talks, live demos, and expert Q&amp;A sessions on building a more inclusive web.&#xA;&#xA;Read more on https://umbraad.com]]></description>
                    <pubDate>Thu, 02 Jul 2026 06:44:05 Z</pubDate>
                        <category>community</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.dutchumbracoalliance.nl/en</guid>
                    <title>Dutch Umbraco Alliance Festival, a new festival on september 22 in the netherlands.</title>
                    <link>https://www.dutchumbracoalliance.nl/en</link>
                    <description><![CDATA[Dutch Umbraco Alliance Festival, a new festival on september 22 in the netherlands. We like to get a lot of people.]]></description>
                    <pubDate>Thu, 02 Jul 2026 05:29:39 Z</pubDate>
                        <category>community</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/ideo.umbraco.mediamanager</guid>
                    <title>Ideo.Umbraco.MediaManager</title>
                    <link>https://marketplace.umbraco.com/package/ideo.umbraco.mediamanager</link>
                    <description><![CDATA[Safe, async media cleanup for Umbraco v17: find and remove orphaned media nodes and orphaned physical files, guarded by a deep reference scan, with dry-run preview and Recycle Bin safety.]]></description>
                    <pubDate>Thu, 02 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://umbraco.com/blog/the-agent-ready-cms-enable-the-ecosystem-umbraco-s-mcp-as-a-platform-and-software-factory/</guid>
                    <title>The Agent-Ready CMS: Enable the ecosystem</title>
                    <link>https://umbraco.com/blog/the-agent-ready-cms-enable-the-ecosystem-umbraco-s-mcp-as-a-platform-and-software-factory/</link>
                    <description><![CDATA[Learn how Umbraco&#x2019;s MCP platform and software factory empower partners and clients to build agentic AI tools for a truly agent-ready CMS ecosystem.]]></description>
                    <pubDate>Thu, 02 Jul 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.imagesharp.trimcache</guid>
                    <title>Umbraco.Community.ImageSharp.TrimCache</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.imagesharp.trimcache</link>
                    <description><![CDATA[Scheduled, age-based trimming of the ImageSharp.Web image cache for Umbraco. Supports both the Azure Blob cache and the local physical cache, keeping the cache from growing unbounded (for example exceeding Umbraco Cloud media-storage limits). Old variants are removed in the background and regenerated on the next request. Supports Umbraco 13, 17 and 18.]]></description>
                    <pubDate>Thu, 02 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://www.linkedin.com/feed/update/urn:li:ugcPost:7478382465955500033/</guid>
                    <title>How to setup Claude Design &#x2B; the Umbraco UI Library</title>
                    <link>https://www.linkedin.com/feed/update/urn:li:ugcPost:7478382465955500033/</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Wed, 01 Jul 2026 17:53:35 Z</pubDate>
                        <category>community</category>
                        <category>linkedin</category>
                        <category>social</category>
                </item>
                <item>
                    <guid>https://dev.to/mpisaacs/codegarden-2026-a-little-late-because-it-gave-me-something-to-build-2em6</guid>
                    <title>Codegarden 2026 - a little late, because it gave me something to build</title>
                    <link>https://dev.to/mpisaacs/codegarden-2026-a-little-late-because-it-gave-me-something-to-build-2em6</link>
                    <description><![CDATA[&lt;p&gt;A few weeks ago I was in Copenhagen for my first Codegarden, and one quiet thought has stuck with me since. It didn&#x27;t come from a keynote. It came from the bit the keynote leaves out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I&#x27;ve worked with Umbraco for years, but I&#x27;d never been to Codegarden, and I turned up without much of a fixed idea of what the two days would be. I kept that open on purpose. I wanted to take it in rather than measure it against something I&#x27;d decided in advance. What struck me most was that the value came from two places at once. The sessions were a fantastic source of inspiration; everything from keynotes to guest speakers all seemed to resonate in some way or another. The conversations in between the sessions - drifting around the event space and finding common ground with anyone and everyone - proved just as valuable. I came home more energised than I&#x27;ve been in a while, with a notebook full of half-formed ideas and a better feel for the community I&#x27;m part of.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the thing I kept turning over afterwards was that bit the keynote leaves out. That&#x27;s what I want to write about.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  The easy half and the hard half&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Every major Umbraco release gets the same treatment. A polished keynote, a clean demo, a feature that looks effortless on stage. There&#x27;s plenty in 18, and which part matters most depends on what you&#x27;re building. For me it&#x27;s Elements: a new Library section where you manage reusable content and reference it through a new element picker. Create once, use everywhere. It&#x27;s a genuinely good direction. Reusable content has lived awkwardly in the content tree for years, and Library finally gives it a proper home.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What the demos don&#x27;t show you is the part I&#x27;ve been playing around with for the past few weeks. Taking a real Umbraco 17 site, with content pickers threaded through block lists, block grids, rich text blocks and base document properties, and getting all of it to point at the new Library without an editor ever noticing anything moved underneath them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The feature is the easy half. The migration is the half that decides whether anyone actually uses it.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  Why migration is where adoption lives&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;A new way of modelling content only matters if existing sites can get to it. New projects will use Library because it&#x27;s there and it&#x27;s the obvious choice. The much bigger pile of work is the sites already in production, built the old way, where reusable content was faked with content pickers pointing at hidden nodes because that was the best tool on offer at the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Upgrade conversations with clients are increasingly turning into &quot;end of life is on the way, you need to upgrade!&quot; but Umbraco have given us some genuinely useful new features that can turn those conversations from scaring clients away from security woes to improving their content management and supercharging their marketing activities.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There&#x27;s a timing thing here. The migration path has to exist when the feature does, not three months later when the upgrade conversation has gone cold. A site that wants Library is at its most willing in the window right after release, while the appetite is fresh and the project is being planned anyway. Miss that window and you&#x27;re asking someone to reopen a decision they&#x27;ve already made, which almost never happens.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That&#x27;s the question I bring to every shiny thing on a keynote slide. Not &quot;is this exciting&quot;, but &quot;what&#x27;s the real path from a live production site to it, and how much of that path can be made painless&quot;. The exciting idea is the easy part. The route onto it is the work.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  What the package actually does&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;This is the problem the Library Migrator package is built to solve, and the job is less glamorous than it sounds. It moves documents from Content into Library, so the things that were always meant to be reusable end up where they belong. It swaps every content picker on the relevant types for an element picker pointed at Library, so editors keep the same workflow and have nothing new to learn. And it rewrites the stored values, which is the part that earns its keep: every value held in an old content picker is updated to reference the new elements, across block lists, block grids, rich text blocks and base document properties. One reference left behind is a broken link an editor finds at the worst possible moment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;None of that shows up in a demo, using a brand new, tailored project designed to show the feature off at its best. Yet content is the centrepiece of all CMS solutions and the value in existing content is always at the forefront of our clients&#x27; minds. Whether it&#x27;s a same-platform upgrade or a complete rebuild, the question of migration always gets raised.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Library Migrator is out now. If you&#x27;re looking at an Umbraco 17 site and wondering how on earth it&#x27;s going to reach 18&#x27;s (or 21 if you&#x27;re LTS-conscious) Library, that&#x27;s exactly what it&#x27;s for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://marketplace.umbraco.com/package/growcreate.librarymigrator&quot; rel=&quot;noopener noreferrer&quot;&gt;Library Migrator on Umbraco Marketplace&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/GrowCreate/Growcreate.LibraryMigrator&quot; rel=&quot;noopener noreferrer&quot;&gt;Library Migrator repository&lt;/a&gt;&lt;/p&gt;]]></description>
                    <pubDate>Wed, 01 Jul 2026 15:53:03 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.dot-see.com/blog/mega-update-dotseediscipline-ui-based-configuration/</guid>
                    <title>Mega update: DotSee.Discipline UI-based configuration</title>
                    <link>https://www.dot-see.com/blog/mega-update-dotseediscipline-ui-based-configuration/</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Wed, 01 Jul 2026 14:26:05 Z</pubDate>
                        <category>blog</category>
                        <category>community</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.TwentyThree/releases/tag/v17.0.0-alpha001</guid>
                    <title>Limbo.Umbraco.TwentyThree 17.0.0-alpha001</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.TwentyThree/releases/tag/v17.0.0-alpha001</link>
                    <description><![CDATA[Video picker for inserting TwentyThree videos in Umbraco.]]></description>
                    <pubDate>Wed, 01 Jul 2026 11:21:15 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://www.cantarus.com/articles/codegarden-2026-open-composable-ai-future/?utm_source=linkedin.com&amp;utm_medium=social&amp;utm_campaign=blog-codegarden-2026-06</guid>
                    <title>Umbraco Codegarden 2026: Open, composable and ready for an AI future</title>
                    <link>https://www.cantarus.com/articles/codegarden-2026-open-composable-ai-future/?utm_source=linkedin.com&amp;utm_medium=social&amp;utm_campaign=blog-codegarden-2026-06</link>
                    <description><![CDATA[Cantarus - Umbraco Codegarden 2026: Open, composable and ready for an AI future | Cantarus]]></description>
                    <pubDate>Wed, 01 Jul 2026 08:59:55 Z</pubDate>
                        <category>blog</category>
                        <category>community</category>
                </item>
                <item>
                    <guid>https://kjac.dev/posts/postgresql-provider-for-umbraco-search/</guid>
                    <title>PostgreSQL provider for Umbraco Search</title>
                    <link>https://kjac.dev/posts/postgresql-provider-for-umbraco-search/</link>
                    <description><![CDATA[Introducing a PostgreSQL powered search provider for Umbraco Search.]]></description>
                    <pubDate>Wed, 01 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/utpro.feature.simpleformbuilder</guid>
                    <title>uTPro.Feature.SimpleFormBuilder</title>
                    <link>https://marketplace.umbraco.com/package/utpro.feature.simpleformbuilder</link>
                    <description><![CDATA[Lightweight form builder for Umbraco 16, 17 and 18 backoffice. Create, manage, and render dynamic forms with 19&#x2B; field types, groups/columns layout, client-side validation, sensitive data encryption, multi-language support, custom field extensibility, entry storage, secure file uploads (stored outside wwwroot, authenticated download), entry export as CSV or ZIP (data &#x2B; uploaded files), and public submit/render APIs. Render any form with a single ViewComponent call. Database-agnostic: runs on SQL Server, SQLite and PostgreSQL.]]></description>
                    <pubDate>Wed, 01 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/growcreate.librarymigrator</guid>
                    <title>Growcreate.LibraryMigrator</title>
                    <link>https://marketplace.umbraco.com/package/growcreate.librarymigrator</link>
                    <description><![CDATA[A backoffice package for Umbraco 18&#x2B; that migrates content saved as Element Types to the new Library (reusable elements) feature introduced in Umbraco 18.]]></description>
                    <pubDate>Wed, 01 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/casko.xmlsitemapsforumbraco</guid>
                    <title>Casko.XmlSitemapsForUmbraco</title>
                    <link>https://marketplace.umbraco.com/package/casko.xmlsitemapsforumbraco</link>
                    <description><![CDATA[XML Sitemaps for Umbraco helps Umbraco projects publish XML sitemaps in a structured, configurable way. It is designed for teams that want reliable sitemap delivery for search engines without having to build and maintain the full solution themselves.]]></description>
                    <pubDate>Wed, 01 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://owain.codes/blog/2026/july/using-umbracoautomate-to-populate-content-from-an-api/</guid>
                    <title>Using Umbraco.Automate to populate content from an API</title>
                    <link>https://owain.codes/blog/2026/july/using-umbracoautomate-to-populate-content-from-an-api/</link>
                    <description><![CDATA[Learn how to automatically populate Umbraco content from an external API using Umbraco.Automate, with a hands-on Pok&#xE9;API example and video demo.]]></description>
                    <pubDate>Wed, 01 Jul 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>http://www.zpqrtbnk.net/posts/u17/</guid>
                    <title>U17</title>
                    <link>http://www.zpqrtbnk.net/posts/u17/</link>
                    <description><![CDATA[&lt;p&gt;This site has started as an Umbraco v4.x site, and has been regularly upgraded since then, never completely rebuilt. It has been running Umbraco 13 for about 3 years now, and it is about time to upgrade to Umbraco 17.&lt;/p&gt;&#xA;&lt;h4&gt;Packages&lt;/h4&gt;&#xA;&lt;p&gt;This is the easy part. The solution contains two projects: a Core project, and a UI project. Open each &lt;code&gt;.csproj&lt;/code&gt; file, bump &lt;code&gt;TargetFramework&lt;/code&gt; from &lt;code&gt;net8.0&lt;/code&gt; to &lt;code&gt;net10.0&lt;/code&gt;, bump Umbraco package references from &lt;code&gt;13.0.2&lt;/code&gt; to &lt;code&gt;17.4.0&lt;/code&gt;, bump a few other packages as per NuGet&#x27;s suggestions.&lt;/p&gt;&#xA;&lt;p&gt;The excellent &lt;a href=&quot;https://docs.umbraco.com/umbraco-cms/get-started/upgrading-and-migrating/version-specific&quot;&gt;Breaking Changes&lt;/a&gt; documentation tells us to remove &lt;code&gt;RazorCompileOnBuild&lt;/code&gt; and &lt;code&gt;RazorCompileOnPublish&lt;/code&gt; so, let us do it. It also tells us to clean our &lt;code&gt;Program&lt;/code&gt; class a little. Remove a &lt;code&gt;.AddDeliveryApi()&lt;/code&gt; call, remove a &lt;code&gt;.UserInstallerEndpoints()&lt;/code&gt; calls, that is it.&lt;/p&gt;&#xA;&lt;p&gt;At this point, rebuilding fails.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;ModelsBuilderSettings.ModelsMode&lt;/code&gt; used to be an &lt;code&gt;enum&lt;/code&gt;, looks like it is now a &lt;code&gt;string&lt;/code&gt;. Quite simple to fix. Everything that queried the &lt;code&gt;IPublishedContentCache&lt;/code&gt; does not compile anymore, porting to &lt;code&gt;IPublishedContentQuery&lt;/code&gt; is trivial. There is no &lt;code&gt;IContentService.SaveAndPublish()&lt;/code&gt; anymore, apparently, and one needs to &lt;code&gt;Save()&lt;/code&gt; then &lt;code&gt;Publish()&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;All in all, nothing dramatic.&lt;/p&gt;&#xA;&lt;p&gt;Some of my custom Markdown property editor and converter will not compile, I am going to comment them out for the time being.&lt;/p&gt;&#xA;&lt;p&gt;And... it builds.&lt;/p&gt;&#xA;&lt;h4&gt;Database&lt;/h4&gt;&#xA;&lt;p&gt;Trying to boot the site fails... with a &lt;code&gt;BootFailedException&lt;/code&gt;. A migration seems to want to delete a non-existing constraint named &lt;code&gt;DF_umbracoUser_createDate&lt;/code&gt;. A quick Internet search shows that this happened to others as well, so something must have gone wrong with migrations at some point. Not going to troubleshoot, creating the missing constraints before upgrading is quicker:&lt;/p&gt;&#xA;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt; ALTER TABLE umbracoUser ADD CONSTRAINT DF_umbracoUser_createDate DEFAULT GETUTCDATE() FOR createDate;&#xA; ALTER TABLE umbracoUser ADD CONSTRAINT DF_umbracoUser_updateDate  DEFAULT GETUTCDATE() FOR updateDate;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;And presto... the site upgrades, boots, and I can log into the back-office.&lt;/p&gt;&#xA;&lt;h4&gt;Data Types&lt;/h4&gt;&#xA;&lt;p&gt;A range of data types are gone or have changed. And of course my custom data types are CompletelyBroken&#x2122; which is not a surprise, since the back-office UI has been entirely rebuilt.&lt;/p&gt;&#xA;&lt;p&gt;First, native data types. Basically, go into the &lt;em&gt;Data Types&lt;/em&gt; back-office section, and re-assign those that have issues to the proper property type. Rather simple. Weird enough, a content list datatype is throwing in the back-office, because of its &lt;code&gt;orderBy&lt;/code&gt; value. Something a migration did not catch? Manually re-saving the datatype fixes it.&lt;/p&gt;&#xA;&lt;p&gt;And then, I actually use two custom data types:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;ZpqrtBnk.ImgFocus&lt;/code&gt; is an image focus data type which is an alternative to crops. It allows the user to define a rectangle that represents the &amp;quot;zone of interest&amp;quot; of an image. That zone is defined on the media itself. Next, whenever we need to render the media, we can automatically figure out the best crop based upon this zone.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;ZpqrtBnk.Markdown&lt;/code&gt; is a custom Markdown data type that uses the back-office widget pretty much unchanged, but implements some rendering helpers for links or images.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;As far as Markdown is concerned, I was using a property editor in order to support additional custom syntax. Turns out a property editor is not needed anymore, a plain &lt;code&gt;IMarkdownToHtmlConverter&lt;/code&gt; implementation is all that is needed. So, the property editor is gone, and it is way nicer this way.&lt;/p&gt;&#xA;&lt;p&gt;On the other hand the image focus editor needs to be completely rebuilt.&lt;/p&gt;&#xA;&lt;h4&gt;My First Property Editor&lt;/h4&gt;&#xA;&lt;p&gt;There is some nice &lt;a href=&quot;https://docs.umbraco.com/umbraco-cms/extend-your-project/tutorials/creating-a-property-editor&quot;&gt;documentation&lt;/a&gt; about property editors in v17, so let us follow it.&lt;/p&gt;&#xA;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;mkdir PropertyEditors&#xA;cd PropertyEditors&#xA;npm create vite@latest ZpqrtBnk.ImgFocus&#xA;# with Lit&#xA;# with TypeScript&#xA;# without Vite RollDown (but I was not proposed it)&#xA;cd ZpqrtBnk.ImgFocus&#xA;npm i &amp;amp;&amp;amp; npm install -D @umbraco-cms/backoffice@17.4.0&#xA;rm -rf public/* src/*&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then,&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Update &lt;code&gt;vite.config.ts&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Create &lt;code&gt;src/zpqrtbnk-imgfocus.element.ts&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Create &lt;code&gt;public/umbraco-package.json&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Is all it takes. OK, it takes a bit of time to figure out how to put everything together but hey, this is my very first time with the new UI. The end result is &lt;em&gt;quite&lt;/em&gt; polished. As in, it makes way more sense than the convoluted Angular version.&lt;/p&gt;&#xA;&lt;p&gt;In the end,&lt;/p&gt;&#xA;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;npm run build&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Drops files in my site&#x27;s &lt;code&gt;App_Plugins&lt;/code&gt; and we are done. As in, it just works. I have to say the experience is quite pleasant.&lt;/p&gt;&#xA;&lt;h4&gt;Models&lt;/h4&gt;&#xA;&lt;p&gt;We are not entirely done with backend work. A few more things have changed, including the CLR type of objects returned by various data types.&lt;/p&gt;&#xA;&lt;p&gt;The new &lt;code&gt;MediaPicker3&lt;/code&gt; for instance does not return a plain &lt;code&gt;IPublishedContent&lt;/code&gt;, but a &lt;code&gt;MediaWithCrops&lt;/code&gt;. I do not care about crops. And I had a media converter ensuring that the property value type would be reported as &lt;code&gt;Image&lt;/code&gt; in case the picker can only pick one single image. So... that converter needs a bit of update to report the proper type, and to unwrap &lt;code&gt;MediaWithCrops&lt;/code&gt; to &lt;code&gt;Image&lt;/code&gt; wherever appropriate.&lt;/p&gt;&#xA;&lt;p&gt;And then, with the various changes applied to property types, I though I would rebuild my models. Turns out they were built using the &lt;code&gt;Our.ModelsBuilder&lt;/code&gt; edition of the Models Builder, not the built-in one, because I am using some extra features.&lt;/p&gt;&#xA;&lt;h4&gt;Front-End Time&lt;/h4&gt;&#xA;&lt;p&gt;At this point, I have a running back-office, clean data types (though missing my Markdown converter, but that will be fixed later), everything is nice, time to test the front-end.&lt;/p&gt;&#xA;&lt;p&gt;And... it does not work.&lt;/p&gt;]]></description>
                    <pubDate>Tue, 30 Jun 2026 18:17:02 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=_tNVDlw2T18</guid>
                    <title>Umbraco Automate demo, Umbraco Codegarden 2026</title>
                    <link>https://www.youtube.com/watch?v=_tNVDlw2T18</link>
                    <description><![CDATA[Discover the capabilities of Umbraco Automate, a native workflow automation tool integrated directly into the Umbraco back office. This session provides a comprehensive look at how you can create, manage, and execute complex automation chains triggered by backend events like content modifications or media uploads.&#xA;&#xA;Learn how the architecture coordinates triggers and actions, allowing you to build intricate logic chains across the entire Umbraco ecosystem. The presentation details native integrations with Umbraco Engage, Forms, Commerce, Deploy, and AI Agents, demonstrating how workflows can operate autonomously when ecosystem events occur.&#xA;&#xA;Who This Video Is For&#xA;This video is designed for Umbraco developers, system architects, and content administrators looking to streamline backend operations. Understanding these automation workflows will help teams eliminate repetitive tasks, integrate external systems seamlessly, and safely embed AI utilities into their daily content management processes.&#xA;&#xA;Chapters&#xA;00:00 - Introduction to Umbraco Automate&#xA;&#xA;00:38 - Understanding Triggers, Actions, and Logic Chains&#xA;&#xA;00:54 - Ecosystem Integration: Forms, Commerce, Deploy, and AI&#xA;&#xA;01:18 - Demo: Content Saved Trigger &amp; Slack Notification Setup&#xA;&#xA;02:34 - Demo: Connecting AI Agents and Webhooks&#xA;&#xA;03:48 - Demo: Automated Media Transcription on Upload&#xA;&#xA;05:26 - Implementing a Human-in-the-Loop Approval Step&#xA;&#xA;06:30 - Community Packages and Early Access Extensions&#xA;&#xA;07:34 - Open Source Availability and Wrap-up&#xA;&#xA;Key Takeaways&#xA;Native Workflow Engine: Build and manage complex automation chains directly within the Umbraco back office without relying on external third-party integration platforms.&#xA;&#xA;AI &amp; Webhook Extensibility: Send data to AI agents for automated summaries or transcriptions, and route outputs to external endpoints via standard HTTP webhooks.&#xA;&#xA;Human-in-the-Loop Guardrails: Insert manual approval gates into automated processes to pause execution until an administrator reviews and verifies the data.&#xA;&#xA;Ecosystem &amp; Community Ready: Supports core Umbraco products alongside popular community packages like Translation Manager for automated translations and Newsletter Studio for transactional mailing lists.&#xA;&#xA;Free and Open Source: Umbraco Automate is fully open source and available for immediate deployment.&#xA;&#xA;Important Links&#xA;Umbraco Automate Project Page: [Insert Link]&#xA;&#xA;Launch Announcement &amp; Documentation: [Insert Link]&#xA;&#xA;Community Extension Guide: [Insert Link]&#xA;&#xA;Featured Session - AI and Umbraco by Matt: [Insert Link]]]></description>
                    <pubDate>Tue, 30 Jun 2026 08:41:04 Z</pubDate>
                        <category>hq</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/phases.umbraco.community.templatehistory</guid>
                    <title>Phases.Umbraco.Community.TemplateHistory</title>
                    <link>https://marketplace.umbraco.com/package/phases.umbraco.community.templatehistory</link>
                    <description><![CDATA[Track version history for Umbraco templates, stylesheets, scripts, and partial views. Compare diffs side-by-side or unified, restore previous versions, and browse recent changes from a dedicated History workspace tab and Settings dashboard.]]></description>
                    <pubDate>Tue, 30 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/oc.automate.linkedin</guid>
                    <title>OC.Automate.LinkedIn</title>
                    <link>https://marketplace.umbraco.com/package/oc.automate.linkedin</link>
                    <description><![CDATA[LinkedIn integration for Umbraco Automate. Post content to LinkedIn as part of your automation workflows.]]></description>
                    <pubDate>Tue, 30 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/knowit.umbraco.aitranslate</guid>
                    <title>Knowit.Umbraco.AiTranslate</title>
                    <link>https://marketplace.umbraco.com/package/knowit.umbraco.aitranslate</link>
                    <description><![CDATA[A guided AI translation dashboard for Umbraco. Pick a language pair (or create a new language), choose pages or the whole site, and translate content into other languages using your Umbraco.AI profile. Media references are carried over, link titles are translated, and everything is saved as drafts for review. Requires the Umbraco.AI package.]]></description>
                    <pubDate>Tue, 30 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umcontenttranslator</guid>
                    <title>umContentTranslator</title>
                    <link>https://marketplace.umbraco.com/package/umcontenttranslator</link>
                    <description><![CDATA[Translate Umbraco content across cultures with AI. umContentTranslator walks your content tree, collects translatable values, batches them, and writes the AI translations back into the target languages &#x2014; preserving Block Grid and Block List structure, rich text, Markdown, links, and other editor-specific data. Powered by Claude (Anthropic) or OpenAI, it also translates Umbraco dictionary items and adds a Content Translator section with a translation dialog and a Translation Logs dashboard. Includes a built-in free trial.]]></description>
                    <pubDate>Tue, 30 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://skttl.dev/blog/small-ux-details-ai-coding/</guid>
                    <title>Small UX Details Make AI Coding Better</title>
                    <link>https://skttl.dev/blog/small-ux-details-ai-coding/</link>
                    <description><![CDATA[After trying Devin, Windsurf, Codeium, Claude Code, and now the Codex desktop app, I keep coming back to the same thing: small interface details matter a lot when AI is writing code.]]></description>
                    <pubDate>Tue, 30 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://umbraco.com/blog/going-from-umbraco-13-to-17/</guid>
                    <title>Going from Umbraco 13 to 17</title>
                    <link>https://umbraco.com/blog/going-from-umbraco-13-to-17/</link>
                    <description><![CDATA[Upgrading from Umbraco 13 to 17 LTS? Discover the two main migration paths and learn how Umbraco Cloud can smooth your transition before the 2026 EOL date for Umbraco 13.]]></description>
                    <pubDate>Tue, 30 Jun 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://dev.to/luukpeters/advanced-permissions-meets-umbraco-18-26g0</guid>
                    <title>Advanced Permissions meets Umbraco 18!</title>
                    <link>https://dev.to/luukpeters/advanced-permissions-meets-umbraco-18-26g0</link>
                    <description><![CDATA[&lt;p&gt;A few days ago, the final version of &lt;a href=&quot;https://umbraco.com/blog/umbraco-18-release/&quot; rel=&quot;noopener noreferrer&quot;&gt;Umbraco 18 was released&lt;/a&gt;! So it was time to update my Advanced Permissions package to support Umbraco 18.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was not just a simple case of updating a few namespaces and dependencies and calling it done. The main new feature in Umbraco 18 was a perfect candidate for Advanced Permissions support, so that is exactly what I added!&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  What is new in Umbraco 18&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The Umbraco 18 release is (and I quote) &quot;a short and sweet release&quot;. The main attraction is the new Library section and the first version of reusable Elements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffkf4v757xyftp3s0ci5m.png&quot; class=&quot;article-body-image-wrapper&quot;&gt;&lt;img src=&quot;https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffkf4v757xyftp3s0ci5m.png&quot; alt=&quot;The new Library section in Umbraco 18&quot; width=&quot;771&quot; height=&quot;366&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reusable Elements in the Library section are essentially Content nodes without rendering and routing. Other than that, they behave a lot like Content: you can create, delete, move them, and so on. That made them the perfect candidate for support in v18 of the Advanced Permissions package.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Besides Library support, the package also has a few other improvements and additions. Let&#x27;s talk about them!&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  Library support!&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The first obvious new feature is the Permissions Editor for the Library. Just like with Content, you can set permissions for a User Group using the same inheritance and scoping system as the Content Permissions Editor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8nndmdxhifxli40asm5w.png&quot; class=&quot;article-body-image-wrapper&quot;&gt;&lt;img src=&quot;https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8nndmdxhifxli40asm5w.png&quot; alt=&quot;The Library Permissions Editor&quot; width=&quot;800&quot; height=&quot;313&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You&#x27;ll notice that not every permission is applicable in every case, so N/A is displayed when a permission does not apply.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And just like with Content, the Library also has an Access Viewer where you can see the effective permissions for a User Group or an individual User.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzbiitpigy6g93hfw3092.png&quot; class=&quot;article-body-image-wrapper&quot;&gt;&lt;img src=&quot;https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzbiitpigy6g93hfw3092.png&quot; alt=&quot;The Library Access Viewer&quot; width=&quot;800&quot; height=&quot;287&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also added a Library Element Type Permissions Editor. Just like the Document Type Permissions Editor, you can set the insert options for Element Types for a specific User Group.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft64dxrjo4kahxha0w8j7.png&quot; class=&quot;article-body-image-wrapper&quot;&gt;&lt;img src=&quot;https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft64dxrjo4kahxha0w8j7.png&quot; alt=&quot;The Library Element Type Permissions Editor&quot; width=&quot;800&quot; height=&quot;265&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With this Permissions Editor, you can control whether a User Group can create instances of an Element Type. This acts as a filter on the &quot;create&quot; list in the Library. And when a User has multiple User Groups, the well-established resolver will determine the effective permissions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Currently, because of a limitation in Umbraco, it is not yet possible to scope these permissions to a specific part of the Library tree like the Document Type Permissions Editor does.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And of course, the Element Type Permissions Editor also has an associated Access Viewer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Febygmk78o91jrk6chea0.png&quot; class=&quot;article-body-image-wrapper&quot;&gt;&lt;img src=&quot;https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Febygmk78o91jrk6chea0.png&quot; alt=&quot;Library Elements Access Viewer&quot; width=&quot;800&quot; height=&quot;270&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  Redesign&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Because of all these new Permissions Editors and Access Viewers, the menu became harder to read at a glance. So the main menu has been redesigned around the scope of the editor and viewer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1g4dv1ag1ofbm6hh95uw.png&quot; class=&quot;article-body-image-wrapper&quot;&gt;&lt;img src=&quot;https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1g4dv1ag1ofbm6hh95uw.png&quot; alt=&quot;The reworked menu of Advanced Permissions&quot; width=&quot;800&quot; height=&quot;390&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All editors and viewers in the menu are now called Permissions Editor and Access Viewer respectively. Their purpose is determined by the menu header they are under: Content, Document Type, Library, or Library Element Type.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the screenshot, you&#x27;ll also notice a slight redesign of the workspaces for the editors and viewers. They now look more Umbraco native and display a one-line description of what the editor or viewer is for. And when you have not selected anything yet, it will now display a much nicer view. This will also be ported back to the Umbraco 17 version.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  To help or not to help&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;In the top-right corner of each editor or viewer, you&#x27;ll also notice a &quot;learn more&quot; button. This button gives access to more detailed documentation. It describes what the editor or viewer is for, and it links to more generic documentation explaining the concepts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider this a first version. It is already much better than nothing, but I think it can still be improved over time. This will also be ported back to the Umbraco 17 version.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  Localization support!&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;And lastly, apart from the expanded documentation, Advanced Permissions now has localization for all languages that the Backoffice supports. Obviously, these translations are automatically generated because I am not fluent in 28 languages, so if you find an error, please let me know!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All in all, I think this is a very nice and complete release. I&#x27;m happy that Advanced Permissions can support new Umbraco features as soon as they come out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can find Advanced Permissions for Umbraco here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NuGet:&lt;br&gt;&#xA;&lt;a href=&quot;https://www.nuget.org/packages/Umbraco.Community.AdvancedPermissions/&quot; rel=&quot;noopener noreferrer&quot;&gt;https://www.nuget.org/packages/Umbraco.Community.AdvancedPermissions/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Umbraco Marketplace:&lt;br&gt;&#xA;&lt;a href=&quot;https://marketplace.umbraco.com/package/umbraco.community.advancedpermissions&quot; rel=&quot;noopener noreferrer&quot;&gt;https://marketplace.umbraco.com/package/umbraco.community.advancedpermissions&lt;/a&gt;&lt;/p&gt;]]></description>
                    <pubDate>Sun, 28 Jun 2026 19:49:52 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://owain.codes/blog/2026/june/ocautomatelinkedin-now-available/</guid>
                    <title>OC.Automate update</title>
                    <link>https://owain.codes/blog/2026/june/ocautomatelinkedin-now-available/</link>
                    <description><![CDATA[OC.Automate.LinkedIn is out of beta and OC.Automate.Bluesky and OC.Automate.Mastodon are all working on Umbraco 18]]></description>
                    <pubDate>Sun, 28 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=mEa90pJb0Bw</guid>
                    <title>umbraCoffee - Codegarden 2026 Wrapped &#x1F32F;</title>
                    <link>https://www.youtube.com/watch?v=mEa90pJb0Bw</link>
                    <description><![CDATA[Welcome to your monthly dose of #umbraCoffee&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;! Your hosts - Marcin and Callum - together with their guest(s) will drive through all of the community news and happenings in the Umbraco world. So... grab a cuppa, join us LIVE and enjoy!&#xA;&#xA;See ya?!&#xA;&#xA;---&#xA;&#x2615; Wanna buy us a coffee/pizza/donuts?&#xA;https://www.buymeacoffee.com/umbracoffee&#xA;---&#xA;&#xA;Topics:&#xA;//ToDo:]]></description>
                    <pubDate>Fri, 26 Jun 2026 23:06:54 Z</pubDate>
                        <category>community</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://github.com/umbraco/Announcements/issues/36</guid>
                    <title>[Breaking change]: Umbraco Search replaces existing search in Umbraco 19</title>
                    <link>https://github.com/umbraco/Announcements/issues/36</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Fri, 26 Jun 2026 11:38:19 Z</pubDate>
                        <category>hq</category>
                        <category>announcement</category>
                </item>
                <item>
                    <guid>https://community.umbraco.com/blog/2026/06/what-were-most-excited-about-on-the-new-community-site-part-1-of-2/</guid>
                    <title>What we&#x27;re most excited about on the new Community site - part 1 of 2</title>
                    <link>https://community.umbraco.com/blog/2026/06/what-were-most-excited-about-on-the-new-community-site-part-1-of-2/</link>
                    <description><![CDATA[What we&#x27;re most excited about on the new Community site - part 1 of 2 | Umbraco Community]]></description>
                    <pubDate>Fri, 26 Jun 2026 11:16:40 Z</pubDate>
                        <category>blog</category>
                        <category>community</category>
                </item>
                <item>
                    <guid>https://anju-dev-notes.hashnode.dev/my-first-codegarden-experience-a-journey-from-india-to-copenhagen</guid>
                    <title>My First Codegarden Experience &#x2014; A Journey from India to Copenhagen</title>
                    <link>https://anju-dev-notes.hashnode.dev/my-first-codegarden-experience-a-journey-from-india-to-copenhagen</link>
                    <description><![CDATA[Attending Codegarden for the first time was truly a milestone moment in my career &#x2014; not just because of the event itself, but because it also became a very personal and memorable journey for me.&#xA;This]]></description>
                    <pubDate>Fri, 26 Jun 2026 10:36:14 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.Innomate/releases/tag/v13.0.0-alpha004</guid>
                    <title>Limbo.Umbraco.Innomate 13.0.0-alpha004</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.Innomate/releases/tag/v13.0.0-alpha004</link>
                    <description><![CDATA[Umbraco integration for the Innomate API.]]></description>
                    <pubDate>Fri, 26 Jun 2026 09:02:31 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.entityactions.forcedelete</guid>
                    <title>Umbraco.Community.EntityActions.ForceDelete</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.entityactions.forcedelete</link>
                    <description><![CDATA[Add a Force Delete entity action to the Umbraco backoffice, allowing developers and editors to permanently remove documents.]]></description>
                    <pubDate>Fri, 26 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.schemeweaver.ai</guid>
                    <title>Umbraco.Community.SchemeWeaver.AI</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.schemeweaver.ai</link>
                    <description><![CDATA[AI-powered schema mapping for SchemeWeaver using Umbraco.AI]]></description>
                    <pubDate>Fri, 26 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://owain.codes/blog/2026/june/umbraco-automate/</guid>
                    <title>Umbraco Automate</title>
                    <link>https://owain.codes/blog/2026/june/umbraco-automate/</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Fri, 26 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://owain.codes/blog/2026/june/umbraco-automate-workflows/</guid>
                    <title>Umbraco Automate Workflows</title>
                    <link>https://owain.codes/blog/2026/june/umbraco-automate-workflows/</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Fri, 26 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.proworks.com/blog/archive/building-with-claude-and-umbraco-setting-up-mcp-and-creating-content-with-ai/</guid>
                    <title>Building with Claude and Umbraco: Setting Up MCP and Creating Content with AI</title>
                    <link>https://www.proworks.com/blog/archive/building-with-claude-and-umbraco-setting-up-mcp-and-creating-content-with-ai/</link>
                    <description><![CDATA[&lt;p&gt;I&#x27;ll be honest, when Jason first mentioned setting up an MCP server to connect Claude to our Umbraco dev environment, I assumed it was going to be a difficult dev-heavy project that would take the day at least, and be a bit past my coding comprehension ability as a Front End Developer. I even made a new local branch assuming I was going to have to write and commit code.&lt;/p&gt;&#xA;&lt;p&gt;Nope! It wasn&#x27;t like that at all. And I&#x27;m still a little surprised about it. It was just setting up a config file in Claude and setting up API users in Umbraco.&lt;/p&gt;&#xA;&lt;p&gt;If you&#x27;re an Umbraco developer who&#x27;s been curious about AI-assisted content workflows but figured the setup overhead wasn&#x27;t worth it, this post is for you. I&#x27;m going to walk through exactly what I did, what tripped me up (spoiler: one small thing), and what became possible on the other side of it.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Part 1: What Is the Umbraco MCP Server, Anyway?&lt;/h2&gt;&#xA;&lt;p&gt;MCP stands for Model Context Protocol. It&#x27;s an open standard that lets AI assistants like Claude connect directly to external tools and services, not just chat about them, but actually interact with them.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;https://docs.umbraco.com/umbraco-in-ai/mcp/cms-developer-mcp&quot;&gt;Umbraco MCP server&lt;/a&gt; is an implementation of that standard for Umbraco. Once it&#x27;s set up and connected, Claude can read and write content in your Umbraco instance through the Management API. We&#x27;re talking creating pages, updating properties, working with block components, the same things you&#x27;d do in the back office, but driven by Claude. It&#x27;s actually pretty amazing to see it work.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Part 2: Setting Up the MCP Server&lt;/h2&gt;&#xA;&lt;p&gt;Before anything else, a quick note on prerequisites. You&#x27;ll need an Umbraco site to connect to (we&#x27;re using our dev environment), and Claude Desktop or Cowork installed on your machine. That&#x27;s really it on the &amp;quot;before you start&amp;quot; front, which was the first pleasant surprise.&lt;/p&gt;&#xA;&lt;p&gt;The MCP server itself is configured through a JSON config file in Claude. Go to your &lt;strong&gt;Claude settings&lt;/strong&gt;, then &lt;strong&gt;Developer&lt;/strong&gt;, and click the &lt;strong&gt;&amp;quot;Edit Config&amp;quot;&lt;/strong&gt; button to bring up the &lt;em&gt;&lt;strong&gt;claude_desktop_config.json&lt;/strong&gt;&lt;/em&gt; file in your favorite editor.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Close Claude completely (including killing it in the taskbar) while working on the config file. If Claude is running, it will overwrite your changes when it closes.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Make sure you&#x27;re on the latest version of Node before you start.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Drop this into your config file, change the name as you like, change the BASE_URL to your site, and we&#x27;ll cover the CLIENT_ID and SECRET in the next steps.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;&amp;quot;mcpServers&amp;quot;: {&#xA;  &amp;quot;YOUR-umbraco-dev-mcp-server&amp;quot;: {&#xA;    &amp;quot;command&amp;quot;: &amp;quot;npx&amp;quot;,&#xA;    &amp;quot;args&amp;quot;: [&#xA;      &amp;quot;@umbraco-cms/mcp-dev@latest&amp;quot;&#xA;    ],&#xA;    &amp;quot;env&amp;quot;: {&#xA;      &amp;quot;UMBRACO_CLIENT_ID&amp;quot;: &amp;quot;umbraco-back-office-api-user&amp;quot;,&#xA;      &amp;quot;UMBRACO_CLIENT_SECRET&amp;quot;: &amp;quot;12345-GUID-OR-PASSWORD-6789&amp;quot;,&#xA;      &amp;quot;UMBRACO_BASE_URL&amp;quot;: &amp;quot;https://your-site.io&amp;quot;,&#xA;      &amp;quot;UMBRACO_INCLUDE_TOOL_COLLECTIONS&amp;quot;: &amp;quot;document,media,document-type,data-type&amp;quot;&#xA;    }&#xA;  }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Part 3: Creating an API User in the Umbraco Back Office&lt;/h2&gt;&#xA;&lt;p&gt;This is the part I was most nervous about. &amp;quot;API user&amp;quot; sounds like something that involves a terminal and a lot of Googling. It does not. It&#x27;s just a few clicks in the Umbraco back office and I was genuinely a little embarrassed by how straightforward it was.&lt;/p&gt;&#xA;&lt;p&gt;Head into your Umbraco back office and navigate to the Users section. We&#x27;re going to create both a new User Group and a new API user. First, the User Group. Create one and call it MCP-User-Developer and give it as much control as a developer would. If you ever wanted another group called MCP-User-Editor with less control, you can do that too. For now, add Content, Media and Settings sections and turn on everything you&#x27;d like it to have access to.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://dev-proworks-v13-site.useast01.umbraco.io/media/5sbd1xfk/group-1.png&quot; alt=&quot;creating a user group&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;Next, go to Users and create a new API User. Name it something like &amp;quot;something-mcp-developer&amp;quot; and make it a member of the MCP-User-Developer group we just made. Add an email address for its username and check on access to start nodes (or give it full access).&lt;/p&gt;&#xA;&lt;p&gt;Now the key step: click the Client Credentials button to add the key we&#x27;ll need in the Claude config file. The ID will have a prefix of &amp;quot;umbraco-back-office&amp;quot; and then you name it whatever you want. In my example I went with &amp;quot;api-user&amp;quot;, so the full ID becomes &amp;quot;umbraco-back-office-api-user&amp;quot;. For the Secret, generate a GUID or secure password however you like.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Once you click Create, the password won&#x27;t be visible again. Save it somewhere before moving on!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://dev-proworks-v13-site.useast01.umbraco.io/media/oshpbxuf/credentials.png&quot; alt=&quot;credentials&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now we have all the info for the config file. Go back and add &amp;quot;umbraco-back-office-api-user&amp;quot; to the &lt;code&gt;UMBRACO_CLIENT_ID&lt;/code&gt; and your password to the &lt;code&gt;UMBRACO_CLIENT_SECRET&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Part 4: Connecting Claude to Your Umbraco Site&lt;/h2&gt;&#xA;&lt;p&gt;At this point you&#x27;ve got the config file set up and your API user created. The last step is getting Claude to actually recognize the connection. Save your claude_desktop_config.json file and restart Claude. Go to Settings, then Developer again, and you should see your MCP server listed there and running.&lt;/p&gt;&#xA;&lt;p&gt;I was stuck here for a bit because I was not on the latest version of Node, and also because I had the UMBRACO_CLIENT_ID wrong. Woops! So make sure your config has all the correct info. But if everything checks out you should see a &amp;quot;running&amp;quot; label next to your server, and you&#x27;re now connected!&lt;/p&gt;&#xA;&lt;p&gt;A quick way to confirm everything is working is to just ask Claude something simple about your site. Something like &amp;quot;list the pages under the home node&amp;quot; or &amp;quot;what document types are available?&amp;quot; If Claude comes back with real data from your Umbraco instance, you&#x27;re in business. As soon as it gave me the ID of the home node of our dev site, I knew things were about to get real.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Part 5: Creating Content with Claude&lt;/h2&gt;&#xA;&lt;p&gt;This is the fun part.&lt;/p&gt;&#xA;&lt;p&gt;Once Claude is connected to your Umbraco instance, you can start asking it to do real content work. Not just drafting copy in the chat window, but actually creating and populating pages inside Umbraco. I started simple, asking Claude to create a Basic Page under the home node with a title and some body text. It did it. First try. I went and checked the back office and there it was, sitting as a draft, ready to review.&lt;/p&gt;&#xA;&lt;p&gt;From there I started pushing it further. Our Basic Page document type has a bunch of block components available, things like Feature Boxes, Statistics, Testimonials, FAQ sections, Numbered Steps, and a Two-Column Comparison block. I described what I wanted the page to be about and asked Claude to use as many relevant components as made sense for the content. The results were genuinely impressive, well-structured pages with appropriate blocks chosen for the content, not just a wall of rich text.&lt;/p&gt;&#xA;&lt;p&gt;A few tips from what I&#x27;ve learned so far:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Give Claude context about your document types.&lt;/strong&gt; The more it knows about your block components and what fields they have, the better the output.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Keep pages as drafts first.&lt;/strong&gt; Claude creates content as drafts by default, which is exactly what you want. Review before publishing.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Be specific about tone and content.&lt;/strong&gt; Claude will make reasonable choices on its own, but the more direction you give it, the closer the first draft will be to what you actually want.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Watch out for placeholder content.&lt;/strong&gt; Claude may generate fictional quotes or statistics as placeholders. Always review before anything goes live.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;One small thing to be aware of: on our setup, pages created via the MCP server sometimes needed the template set manually in the back office before they&#x27;d render on the front end. It&#x27;s a quick fix, just one more thing to check on your first run through.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Part 6: Real-World Use Cases&lt;/h2&gt;&#xA;&lt;p&gt;So what&#x27;s this actually good for in practice? After spending some time with it, here are the use cases that have stood out most.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Spinning up draft pages quickly.&lt;/strong&gt; If you&#x27;ve got a list of pages that need to exist, Claude can create and populate them fast. What might take an editor an afternoon of copying, pasting and formatting can happen in minutes. The drafts still need a human review pass, but you&#x27;re starting from something solid rather than a blank page.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Consistent page structure across a site.&lt;/strong&gt; When Claude is working from the same document type and block components every time, the output is naturally consistent. Every page gets a hero, a logical block order, appropriate use of the available components. It&#x27;s a lot harder to end up with that one orphaned page that&#x27;s formatted completely differently from everything else.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Exploring content strategy.&lt;/strong&gt; This one surprised me. Being able to say &amp;quot;create a page making the case for upgrading Umbraco and use whichever block components make sense&amp;quot; and get back a fully structured draft is genuinely useful for figuring out what you actually want to say. It&#x27;s a fast way to go from a topic to a first draft you can react to.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Auditing and rewriting existing content.&lt;/strong&gt; Claude can read your existing pages too, which means you can ask it to review copy, flag inconsistencies, or suggest rewrites across multiple pages without touching the back office yourself.&lt;/p&gt;&#xA;&lt;p&gt;Like I said, I knew things were about to get real.&lt;/p&gt;&#xA;&lt;p&gt;We&#x27;re still figuring out the best workflows ourselves at ProWorks, but it&#x27;s already changing how we think about content production. I&#x27;m excited to see where it goes from here.&lt;/p&gt;&#xA;&lt;p&gt;If you have questions or want to share what you&#x27;ve built with it, feel free to reach out.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Alan Ballard, Front End Developer, ProWorks&lt;/em&gt;&lt;/p&gt;]]></description>
                    <pubDate>Thu, 25 Jun 2026 16:00:16 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=WtatxMNRW8Y</guid>
                    <title>Umbraco MCP as a Platform Intoduction</title>
                    <link>https://www.youtube.com/watch?v=WtatxMNRW8Y</link>
                    <description><![CDATA[Phil Whittaker and Bolette Kern introduce the &quot;Umbraco in AI&quot; framework, showcasing how the Umbraco Management API exposes content, media, document types, and search configurations to modern AI models. This session highlights how to bridge the CMS with artificial intelligence using the Model Context Protocol (MCP) and dedicated command-line tools.&#xA;&#xA;Learn how to move beyond local environments using Hosted MCP servers with secure OAuth authentication, connect terminal environments directly via the new CLI tool, and use the Base MCP SDK to make custom Umbraco packages agent-ready. The talk also explores advanced architectural patterns like MCP chaining and an automated five-phase Software Factory.&#xA;&#xA;This video is for Umbraco package authors, digital agencies, and platform developers looking for a structured path to implement AI agents. By leveraging these official tools, development teams can eliminate manual integration plumbing and focus entirely on building custom logic, strategy, and creative experiences for clients.&#xA;&#xA;Key Takeaways:&#xA;- Management API Core: Serves as the central translation engine, transforming structured CMS capabilities into discoverable data points that LLMs can read, reason about, and automate.&#xA;&#xA;- Multi-Channel Architecture: Support for Local MCP (on-machine agents), Hosted MCP (cloud remote agent access via secure user authentication), and a developer-centric CLI tool.&#xA;&#xA;- Marketplace Readiness: The official Base MCP SDK enables package authors to instantly convert existing OpenAPI schemas into functional MCP servers with minimal overhead.&#xA;&#xA;- The Five-Phase Software Factory: A command-line toolkit that handles boilerplate scaffolding, project configuration, API schema discovery, tool generation, and automated integration/evaluation testing.&#xA;&#xA;- Advanced MCP Chaining: Eliminates redundant manual configurations through structural orchestration patterns like proxying, delegation, and composite multi-step tools.&#xA;&#xA;Timeline Chapters: &#xA;00:00 - Introduction to the Umbraco in AI Strategy&#xA;00:59 - Interactive Integration Diagram Overview&#xA;01:07 - The Central Role of the Umbraco Management API&#xA;01:29 - Stage 1: The Local Developer MCP Foundation&#xA;02:10 - Stage 2: Hosted MCP and Custom ChatGPT App Setup Demo&#xA;03:24 - Native Connections via the CLI Tool and Claude Code Integration&#xA;05:08 - Unpacking the Differences: Local MCP vs. Hosted MCP vs. CLI&#xA;06:49 - Stage 3: Making Umbraco Packages Agent-Ready with the Base SDK&#xA;07:43 - Stage 4: Scaffolding a Server Using the Five-Phase Software Factory&#xA;09:57 - Stage 5: Advanced MCP Chaining (Proxying, Delegation, and Composite Tools)&#xA;11:07 - Composing Shared Capabilities Across Custom MCP Servers&#xA;11:51 - Stage 6: The New Umbraco in AI Documentation Section&#xA;12:12 - Summary: Lowering Barriers and Reducing Friction for Digital Agencies&#xA;&#xA;Resources and Links:&#xA;Official Umbraco in AI Documentation: https://docs.umbraco.com/umbraco-in-ai&#xA;&#xA;Model Context Protocol (MCP) Core Concepts: https://docs.umbraco.com/umbraco-in-ai/concepts/model-context-protocol&#xA;&#xA;Base MCP Package Guide &amp; Repository Info: https://docs.umbraco.com/umbraco-in-ai/mcp/base-mcp&#xA;&#xA;Developer MCP Server Configurations: https://docs.umbraco.com/umbraco-in-ai/mcp/cms-developer-mcp&#xA;&#xA;Umbraco AI strategy: www.umbraco.com/ai &#xA;&#xA;Umbraco Official CMS Resources: www.umbraco.com]]></description>
                    <pubDate>Thu, 25 Jun 2026 10:11:03 Z</pubDate>
                        <category>hq</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=PmSAsJMs_lw</guid>
                    <title>Unboxing Umbraco 18</title>
                    <link>https://www.youtube.com/watch?v=PmSAsJMs_lw</link>
                    <description><![CDATA[Join us for a developer&#x27;s perspective on Umbraco 18, the new Standard-Term Support release of the CMS.&#xA;&#xA;We discuss the new Elements feature, typed OpenAPI schemas for the Delivery API, and the move from Swashbuckle to Microsoft.AspNetCore.OpenApi.&#xA;&#xA;We also look at features you may have missed in recent Umbraco 17 minors, and explain the plan for Umbraco 17 - the current Long-Term Support release.&#xA;&#xA;Chapters: &#xA;00:00 Introduction&#xA;00:51 Releases review&#xA;02:50 A look at Elements&#xA;14:06 Typed OpenAPI schemas for the Delivery API&#xA;18:29 Moving from Swashbuckle to Microsoft.AspNetCore.OpenApi&#xA;21:10 The new login screen!&#xA;23:30 Umbraco 17 minors review&#xA;23:51 Umbraco 17.4 changes for AI&#xA;27:36 Upgrade considerations&#xA;29:21 Finding more information&#xA;&#xA;&#xA;Related resources: &#xA;Dive into the Umbraco 18 final release blog post: [URL]&#xA;&#xA;Visit our Umbraco 18 product page: https://umbraco.com/products/umbraco-cms/umbraco-18/&#xA;&#xA;Ready to learn more? Explore the Umbraco 18 documentation: https://docs.umbraco.com/umbraco-cms&#xA;&#xA;Specific documentation links:&#xA;Version-specific upgrade instructions: https://docs.umbraco.com/umbraco-cms/18.latest/get-started/upgrading-and-migrating/version-specific&#xA;&#xA;Umbraco 18 Release Candidate blog post: https://umbraco.com/blog/umbraco-18-release-candidate/&#xA;&#xA;Laura&#x27;s blog post on migrating away from Swashbuckle: https://dev.to/lauraneto/umbraco-18-and-openapi-a-heads-up-for-extension-developers-1k7&#xA;&#xA;Filip&#x27;s product update from Codegarden: https://umbraco.com/blog/umbraco-product-updatecodegarden-keynote-highlights-q2-2026/&#xA;&#xA;Andy Butland&#x27;s CMS Roadmap talk from Codegarden: https://www.youtube.com/watch?v=HO0BsEebTys]]></description>
                    <pubDate>Thu, 25 Jun 2026 10:10:54 Z</pubDate>
                        <category>hq</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://codeshare.co.uk/blog/clean-starter-kit-v8-released/</guid>
                    <title>Clean Starter Kit v8 Released</title>
                    <link>https://codeshare.co.uk/blog/clean-starter-kit-v8-released/</link>
                    <description><![CDATA[Clean Starter Kit v8 released for Umbraco 18. Explore the new element library features, block list labels workaround, and runtime migration solution for categories.]]></description>
                    <pubDate>Thu, 25 Jun 2026 08:07:26 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/krebil.umbracoazuresearch</guid>
                    <title>Krebil.UmbracoAzureSearch</title>
                    <link>https://marketplace.umbraco.com/package/krebil.umbracoazuresearch</link>
                    <description><![CDATA[Plug Azure AI Search into Umbraco Search as a fully-featured provider: filtering, faceting, sorting, culture/segment variants, and protected content out of the box.]]></description>
                    <pubDate>Thu, 25 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://umbraco.com/blog/umbraco-18-release/</guid>
                    <title>Umbraco 18 Release</title>
                    <link>https://umbraco.com/blog/umbraco-18-release/</link>
                    <description><![CDATA[The latest Major Release of Umbraco is here: Umbraco 18. Including Phase One of Elements for reusable content management, and typed OpenAPI schemas for the Delivery API. Upgrade today]]></description>
                    <pubDate>Thu, 25 Jun 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.memberlogin</guid>
                    <title>Umbraco.Community.MemberLogin</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.memberlogin</link>
                    <description><![CDATA[Sign in to the front-end as a member from the Umbraco backoffice, with optional culture and redirect page, opening in a new tab.]]></description>
                    <pubDate>Thu, 25 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://www.nurhakkaya.com/2026/06/im-umbraco-mvp-for-fifth-year-running.html</guid>
                    <title>I&#x27;m an Umbraco MVP for the fifth year running!</title>
                    <link>https://www.nurhakkaya.com/2026/06/im-umbraco-mvp-for-fifth-year-running.html</link>
                    <description><![CDATA[Every year, Umbraco recognises the people who have gone above and beyond with their contributions to Umbraco projects and community, and I am pleased to announce that I am honoured to be renewed as an Umbraco MVP for the fifth consecutive year.&amp;nbsp;To celebrate this achievement, I also wrote an article which you can read here.&amp;nbsp;Thank you, Umbraco, and the Umbraco community, for their fantastic support in making this happen once more! #h5yr&amp;nbsp;]]></description>
                    <pubDate>Wed, 24 Jun 2026 14:04:05 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=4hKRsNnKzkY</guid>
                    <title>Phil Whittaker, Umbraco in AI</title>
                    <link>https://www.youtube.com/watch?v=4hKRsNnKzkY</link>
                    <description><![CDATA[In this session from Codegarden, Phil Whittaker explores the strategic vision and practical application of Umbraco in an AI-first world. The discussion details how AI agents and Large Language Models (LLMs) interact with the CMS outside of the traditional backoffice environment using shared best practices.&#xA;&#xA;The presentation covers the architectural shift from a base Model Context Protocol (MCP) server to a chained MCP architecture. By reducing technical friction, developers can enable AI agents to assist directly with content modeling, site deployment, and day-to-day management tasks.&#xA;&#xA;This video is designed for Umbraco developers, digital agencies, and content editors looking to integrate AI orchestration into modern web development. As agentic workflows become standard, learning how to build composable AI skills and deploy deterministic workflows ensures your digital experiences remain maintainable and future-proof.&#xA;&#xA;Key Takeaways:&#xA;- Augmentation over Automation: Focusing on how developers and AI can collaborate effectively rather than replacing human expertise.&#xA;&#xA;- The Open-Source Advantage: Why Umbraco&#x27;s transparent architecture makes it uniquely positioned for efficient AI model training and context comprehension.&#xA;&#xA;- Streamlining the Pitch Phase: Using the Umbraco UI library within design tools to prototype backoffice extensions rapidly.&#xA;&#xA;- The MCP Software Factory: Combining deterministic CLI phases and probabilistic AI phases to scaffold, build, and test custom MCP servers.&#xA;&#xA;- Chained and Remote MCPs: Establishing cross-connector collaboration between external tools (like Google Drive) and Umbraco to manage content at scale.&#xA;&#xA;Timeline Chapters:&#xA;00:00 - Introduction to Umbraco in AI&#xA;01:40 - The Evolution of AI and Agentic Products&#xA;03:03 - Strategy for Reducing Friction with AI Agents&#xA;04:56 - Open Source as an AI Advantage&#xA;06:59 - Leveraging AI in the Product Pitch Phase&#xA;11:56 - Implementing Backoffice Extension Skills&#xA;14:33 - AI in Production: Content Modeling and Implementation&#xA;21:32 - The Role of the Community AI Team&#xA;22:23 - Building Umbraco MCP Servers via Software Factories&#xA;27:07 - Architecture of Chained MCPs&#xA;29:03 - The AI-Accelerated Editor Experience&#xA;33:14 - Practical Prompts and Cross-Connector Collaboration&#xA;36:22 - Hosting Options: Umbraco Cloud and Cloudflare Workers&#xA;38:00 - Custom Editor Workflows and Deterministic Processes&#xA;42:46 - Building for Future Capabilities and Conclusion&#xA;&#xA;Resources and Links&#xA;Umbraco AI Initiatives &amp; Product Pages: https://umbraco.com/products/ai/&#xA;&#xA;Latest Umbraco Product Update: https://umbraco.com/blog/umbraco-product-updatecodegarden-keynote-highlights-q2-2026/ &#xA;&#xA;Umbraco in AI documentation: https://docs.umbraco.com/umbraco-in-ai&#xA;&#xA;Codegarden: https://codegarden.umbraco.com/]]></description>
                    <pubDate>Wed, 24 Jun 2026 11:15:38 Z</pubDate>
                        <category>hq</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.johanreitsma.com/blogs/validating-an-umbraco-13-to-17-upgrade-with-a-sitemap-audit/</guid>
                    <title>Validating an Umbraco 13 to 17 Upgrade with a Sitemap Audit</title>
                    <link>https://www.johanreitsma.com/blogs/validating-an-umbraco-13-to-17-upgrade-with-a-sitemap-audit/</link>
                    <description><![CDATA[How I used a small .NET console tool to crawl a sitemap, compare Umbraco 13 and 17 environments, and quickly find broken pages after an upgrade....]]></description>
                    <pubDate>Wed, 24 Jun 2026 10:54:04 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.linkedin.com/pulse/you-never-know-whatll-stick-briony-mckenzie-2bjie/</guid>
                    <title>You Never Know What&#x27;ll Stick</title>
                    <link>https://www.linkedin.com/pulse/you-never-know-whatll-stick-briony-mckenzie-2bjie/</link>
                    <description><![CDATA[On unconventional career paths, accidental dev tools, and great people. There]]></description>
                    <pubDate>Wed, 24 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/sa.automate.weatherapi</guid>
                    <title>SA.Automate.WeatherApi</title>
                    <link>https://marketplace.umbraco.com/package/sa.automate.weatherapi</link>
                    <description><![CDATA[WeatherAPI.com connection types and actions for Umbraco Automate. Get the current weather for a location as part of an automation workflow.]]></description>
                    <pubDate>Wed, 24 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/lait.umbraco.content.draganddrop</guid>
                    <title>Lait.Umbraco.Content.DragAndDrop</title>
                    <link>https://marketplace.umbraco.com/package/lait.umbraco.content.draganddrop</link>
                    <description><![CDATA[Drag-and-drop and keyboard reordering for the Umbraco backoffice Content tree, plus the ability to drag an item out of a collection (list view) and drop it anywhere in the content tree. Three-zone drop targets, cross-parent moves, a move-in-progress spinner and WCAG-compliant keyboard grab &amp; place.]]></description>
                    <pubDate>Wed, 24 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://www.dynamicdave.nl/blog/developer-productivity-hacks/</guid>
                    <title>Boost Your Workflow with Umbraco 17: Developer Productivity Hacks</title>
                    <link>https://www.dynamicdave.nl/blog/developer-productivity-hacks/</link>
                    <description><![CDATA[As developers, we&#x2019;re always searching for ways to get our work done faster. New frameworks roll out and promise to make us blazing fast, AI tools keep booming with talk about writing half our code, and if you&#x2019;ve ever sat through a developer conference lately, you know there&#x2019;s always a session on &#x201C;How to be More Productive.&#x201D; But after working with Umbraco since version 4, I have to be honest: those massive productivity leaps don&#x2019;t really come from the shiny, new, revolutionary tools. It all comes down to friction. And not the dramatic, show-stopping kind. I mean those hundreds of tiny speed bumps scattered all over your day. A few extra clicks in the Umbraco backoffice. Rebuilding the same component again and again. Always double-checking a property alias. Waiting for your solution to spin up. Poring over a monster Razor file, desperately trying to recall where you put that chunk of markup. None of these feel like deal-breakers on their own, but stacked together? Suddenly, you&#x2019;re delivering features at a crawl. What&#x2019;s won me over with the latest Umbraco versions, especially Umbraco 17, is just how much more aligned the platform is with standard .NET development. It feels less like you&#x2019;re wrestling with a quirky CMS and more like you&#x2019;re just building .NET applications. There&#x2019;s a real payoff: less fighting the system means more time solving real business problems.Over the years I&#x2019;ve picked up quite a few habits that speed up Umbraco development and make it less painful&#x2014;some are tied directly to Umbraco 17, while others are just hard-earned lessons from a decade of building websites.&amp;nbsp;Here&#x2019;s what&#x2019;s helped the most for me.]]></description>
                    <pubDate>Tue, 23 Jun 2026 22:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=wx7Qiyi2Y90</guid>
                    <title>Kenn Jacobsen, It&#x27;s Elemental; reuse your content!</title>
                    <link>https://www.youtube.com/watch?v=wx7Qiyi2Y90</link>
                    <description><![CDATA[Discover how upcoming updates to the Umbraco CMS introduce a dedicated, native framework for managing reusable components. This session details the architectural transition away from traditional content tree workarounds toward a structured, centralized approach that optimizes backend performance and editorial control.&#xA;&#xA;Learn about the native Library section and Elements feature launching with Umbraco 18, alongside an early look at the comprehensive block editor integrations scheduled for Umbraco 19. The presentation highlights how these framework changes resolve historical challenges regarding schema inflation, content routing security, and context-switching during development.&#xA;&#xA;Who This Video Is For:&#xA;This session is designed for Umbraco developers, solution architects, and technical content editors managing complex, multi-site, or multi-tenant environments. Understanding these architectural changes ensures teams can design leaner schemas and build intuitive, decoupled component libraries for future projects.&#xA;&#xA;Key Takeaways:&#xA;- Built on Existing Frameworks: Elements utilize familiar native systems like Models Builder and IPublishedElement, ensuring a minimal learning curve for developers.&#xA;&#xA;- Leaner Database Schemas: Eliminates the necessity of duplicating document types for local and global contexts, maintaining uniform rendering pipelines regardless of data origin.&#xA;&#xA;- Native Security and Non-Routable Architecture: Centralized elements do not generate independent URLs or templates, removing template-sniffing risks and Delivery API exposure.&#xA;&#xA;- Segmented Permissions: Dedicated configuration layers separate content tree permissions from library access, reducing administration overhead in tenant environments.&#xA;&#xA;- Strict Control Mechanisms: Content libraries remain strictly opt-in on a per-element-type basis, preventing structural clutter from baseline utility compositions.&#xA;&#xA;Video Chapters:&#xA;00:00 - Introduction and Welcome&#xA;00:22 - Traditional Workarounds for Reusable Content&#xA;01:29 - Editor Friction and Content Tree Workflows&#xA;02:32 - Block Structure and JSON Serialization Challenges&#xA;05:32 - Technical Friction: Routing, Delivery API, and Security&#xA;07:04 - Schema Growth and Component Rendering Complexities&#xA;08:42 - Centralizing Content: Arriving in the New Library Section&#xA;09:44 - Architectural Overview: Sourcing Elements vs Local Blocks&#xA;11:55 - Cross-Context Tracking with the Out-of-Context Link Icon&#xA;14:26 - Element Characteristics: Lifecycles, Permissions, and Multi-Tenancy&#xA;16:52 - Managing Library Control via Opt-In Configurations&#xA;17:29 - Future Scope: Consolidating Editorial Features into the Library&#xA;18:16 - Implementation Roadmap: Umbraco 18 and Umbraco 19 Updates&#xA;18:44 - Live Demo: Implementing and Configuring the Element Picker&#xA;21:48 - Managing Lifecycles, Single-Sourced Editing, and Preview Mode&#xA;28:44 - Technical Preview: Future Block Editor Integrations&#xA;34:12 - Advanced Editorial Control: Disconnecting and Transferring Sourced Elements&#xA;40:59 - Strategic Takeaways and Presentation Wrap-Up&#xA;&#xA;Key Resources and Links:&#xA;Umbraco 18 Release Candidate: https://umbraco.com/blog/umbraco-18-release-candidate/ &#xA;&#xA;Umbraco CMS: https://umbraco.com/products/umbraco-cms/]]></description>
                    <pubDate>Tue, 23 Jun 2026 12:44:00 Z</pubDate>
                        <category>hq</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=gtGw-mY3c2U</guid>
                    <title>Matt Brailsford, AI in Umbraco</title>
                    <link>https://www.youtube.com/watch?v=gtGw-mY3c2U</link>
                    <description><![CDATA[Umbraco AI Staff Engineer and Lead Developer, Matt Brailsford, goes beneath the surface of out-of-the-box copilot packages to show how developers can extend the core platform. Using a real-world podcast management system as a blueprint, this technical deep dive demonstrates how to leverage native framework architecture to build tailored client solutions.&#xA;&#xA;The presentation walks through practical implementations of programmatic speech-to-text execution, custom LLM profile isolation, and context layering. Matt illustrates how to inject dynamic data from background systems and empower models to run custom execution tools rather than relying on manual, hard-coded prompt strings.&#xA;&#xA;This video is for Umbraco backend developers, solution architects, and engineering leads looking to solve complex business requirements with generative AI. It details how to move away from rigid chat interfaces and toward resilient, goal-oriented AI agents integrated into back-office event handlers and automation pipelines.&#xA;&#xA;What You Will Learn:&#xA;- How to orchestrate background queuing for long-running LLM tasks without blocking the content-saving process.&#xA;&#xA;- The method for building custom context resource types that auto-generate Umbraco back-office UI elements using C# code attributes.&#xA;&#xA;- How to implement custom AI Tools that give LLMs secure access to external data registries like the HubSpot API.&#xA;&#xA;- The architectural benefits of shifting from step-by-step prompting to goal-oriented AI Agent reasoning.&#xA;&#xA;- Techniques for marrying Umbraco AI with Umbraco Automate to manage custom event triggers, workflow conditioning, and token management.&#xA;&#xA;Chapters:&#xA;00:00 - Introduction &amp; The Core Philosophy of Umbraco AI&#xA;01:52 - Demo Overview: Podcast Management Requirements&#xA;03:49 - Setting up a Background Queue &amp; Loop Prevention&#xA;06:41 - Configuring Connections, LLM Profiles, and Brand Context&#xA;08:02 - Step 1: Programmatic Audio Transcription Implementation&#xA;09:47 - Step 2: Generating Episode Summaries &amp; Show Notes&#xA;12:12 - Debugging LLM Behavior via AI Back Office Logs&#xA;14:04 - Extending Context: Building Custom Resource Types&#xA;18:16 - Always Inject vs. On-Demand Context Configurations&#xA;21:48 - Empowering LLMs via Custom AI Tools &amp; HubSpot API&#xA;29:27 - Shifting to AI Agents for Goal-Oriented Reasoning&#xA;34:54 - Analyzing Agent Decision-Making &amp; Conversation Logs&#xA;37:16 - Integrating Umbraco AI with Umbraco Automate&#xA;41:40 - Custom Triggers, Actions, and Automated Notifications&#xA;44:18 - Summary of Extension Points &amp; Closing Remarks&#xA;&#xA;Links &amp; Resources: &#xA;Umbraco, the agent-ready CMS: https://umbraco.com/products/ai/&#xA;&#xA;Umbraco AI Framework Documentation &amp; Developer Guides: https://docs.umbraco.com/ai-in-umbraco&#xA;&#xA;Umbraco Automate product page: https://umbraco.com/products/add-ons/automate/&#xA;&#xA;Codegarden 2026 Session Schedule &amp; Announcements: https://codegarden.umbraco.com/]]></description>
                    <pubDate>Tue, 23 Jun 2026 09:19:15 Z</pubDate>
                        <category>hq</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=Vd1SLvO1pcE</guid>
                    <title>Bolette Kern, Umbraco CMS in the Age of AI</title>
                    <link>https://www.youtube.com/watch?v=Vd1SLvO1pcE</link>
                    <description><![CDATA[Umbraco CMS Product Manager, Bolette Kern, outlines the strategic evolution of content management systems in the era of generative artificial intelligence. Rather than hard-coding trendy, rigid AI features directly into the core platform, Umbraco&#x27;s architecture focuses on establishing an extensible framework built on choice, governance, and structural flexibility.&#xA;&#xA;This session breaks down how organizations can implement AI workflows on their own terms, utilizing localized control profiles, pre-generation data screening, and automated performance testing. It also highlights how the platform is preparing for an ecosystem where external AI agents read, write, and manage content alongside human creators.&#xA;&#xA;This video is for digital agency architects, enterprise development teams, content strategists, and product owners who need to design future-proof content platforms. It provides a technical blueprint for maintaining data privacy, evaluating non-deterministic LLM outputs, and managing concurrent multi-author content changes safely.&#xA;&#xA;What You Will Learn:&#xA;- The structural risks of vendor-locked AI strategies and why platform flexibility acts as a long-term competitive advantage.&#xA;&#xA;- How to configure pre-generation PII guardrails using regular expressions to protect sensitive user data before it reaches external LLMs.&#xA;&#xA;- Methods for quality-checking non-deterministic prompt outputs using automated grading criteria and side-by-side model comparisons.&#xA;&#xA;- The architecture of Model Context Protocol (MCP) servers and open-source agent skills designed to guide AI assistants in writing idiomatic Umbraco code.&#xA;&#xA;- A first look at upcoming core CMS features for real-time editor collaboration, property-level merge resolution, and visual text differentiation within block editors.&#xA;&#xA;Chapters&#xA;00:00 - The Role of a CMS in an Unpredictable Future&#xA;02:04 - Umbraco&#x27;s Two-Track AI Strategy Overview&#xA;03:02 - The Risks of Hard-Coding AI into the CMS Core&#xA;05:15 - Demo: Managing LLM Connections, Profiles, and Contexts&#xA;06:14 - Enforcing PII Guardrails and Content Integrity Rules&#xA;08:36 - Testing and Grading Non-Deterministic AI Prompt Performance&#xA;13:32 - Leveraging the Umbraco AI Foundation for Custom Packages&#xA;15:30 - Track 2: Interfacing with External AI Agents&#xA;17:43 - Open-Source Agent Skills for Best-Practice Code Generation&#xA;22:46 - Model Context Protocol (MCP) Platform Architecture&#xA;26:48 - Demo: Content Orchestration via the Hosted CMS Editor MCP&#xA;31:43 - Automating Content Audits with Global Updates&#xA;35:18 - Core Platform Advantages in a Code-Generation Ecosystem&#xA;38:41 - Roadmap: Property-Level Editor Collaboration &amp; Conflict Resolution&#xA;41:44 - Integrating Visual Diff Views into the Publishing Flow&#xA;&#xA;Links &amp; Resources&#xA;&#xA;Umbraco, the agent-ready CMS: https://umbraco.com/products/ai/the-agent-ready-cms/ &#xA;&#xA;Codegarden: https://codegarden.umbraco.com/]]></description>
                    <pubDate>Tue, 23 Jun 2026 08:19:07 Z</pubDate>
                        <category>hq</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://dev.to/bernadet/extending-tiptap-in-umbraco-a-real-world-list-example-1hd1</guid>
                    <title>Extending Tiptap in Umbraco &#x2013; a real world list example</title>
                    <link>https://dev.to/bernadet/extending-tiptap-in-umbraco-a-real-world-list-example-1hd1</link>
                    <description><![CDATA[&lt;p&gt;If you&#x27;ve spent any time migrating editors or building rich-text features, you&#x27;ll know Tiptap looks great on paper but sometimes feels a little... minimal compared to what TinyMCE shipped out of the box. At ilionx we&#x27;ve been moving a few large sites to Umbraco 17 and bumped into the same feedback: list style options. Nothing dramatic, just the ability to pick Roman numerals, different bullet shapes, that sort of thing, but enough to make editors ask for the old behavior back.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So we wrote a small TypeScript extension that adds back list-style variants. It gets built to App_Plugins with Vite, plugs into the UmbTiptapExtensionApiBase and wires up extra toolbar menu items. The actual extension is tiny, it just adds a listStyleType attribute to the list nodes and renders it as inline CSS, but the surrounding bits (icons, toolbar menus, wiring) make the UX feel polished.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Tiptap has solid docs on extending and creating extensions, and Umbraco documents how to register a Tiptap extension, but stitching everything together took a little trial and error. Below is the extension configuration we used. It looks like a lot for a simple feature, but a fair chunk of the files are just icons and small glue code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmpscmls4o6334edu9dwi.jpg&quot; class=&quot;article-body-image-wrapper&quot;&gt;&lt;img src=&quot;https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmpscmls4o6334edu9dwi.jpg&quot; alt=&quot; &quot; width=&quot;558&quot; height=&quot;581&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let&#x2019;s start with the actual extension definitions in &lt;code&gt;Umbraco-package.json&lt;/code&gt;, where we define 4 extensions:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight json&quot;&gt;&lt;code&gt;&lt;span class=&quot;nl&quot;&gt;&quot;extensions&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;icons&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;alias&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;My.Icons.TiptapListStyle&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;js&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/App_Plugins/My.TiptapListStyle/list-style-icons.js&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;tiptapExtension&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;alias&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;My.Tiptap.ListStyle&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;api&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/App_Plugins/My.TiptapListStyle/list-style.tiptap-api.js&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;meta&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;icon&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;icon-ordered-list&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;label&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;List style type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;group&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;#tiptap_extGroup_formatting&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;tiptapToolbarExtension&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;kind&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;menu&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;alias&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;My.Tiptap.Toolbar.OrderedList&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;overwrites&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Umb.Tiptap.Toolbar.OrderedList&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;api&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/App_Plugins/ My.TiptapListStyle/ordered-list-menu.tiptap-toolbar-api.js&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;forExtensions&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;My.Tiptap.ListStyle&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot; My.Tiptap.OrderedList&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;items&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;label&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Numbered list&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;data&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;appearance&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;icon&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;icon-ordered-list&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;label&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Numbered list: i, ii, iii&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;data&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;lower-roman&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;appearance&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;icon&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;icon-list-style-lower-roman&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;//&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;other&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;style&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;definitions&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;here&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &#xA;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;tiptapToolbarExtension&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;kind&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;menu&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;alias&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot; My.Tiptap.Toolbar.BulletList&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;overwrites&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Umb.Tiptap.Toolbar.BulletList&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;api&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/App_Plugins/My.TiptapListStyle/bullet-list-menu.tiptap-toolbar-api.js&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;forExtensions&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;My.Tiptap.ListStyle&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Umb.Tiptap.BulletList&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;items&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;label&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Bullet list&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;data&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;appearance&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;icon&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;icon-bulleted-list&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;label&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Bullet list: circle&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;data&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;circle&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;appearance&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;icon&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;icon-list-style-bullet-circle&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;      &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;//&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;other&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;style&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;definitions&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;err&quot;&gt;here&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;Here&#x2019;s what we register:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;an icon set (a bunch of tiny SVGs showing what each list style looks like)&lt;/li&gt;&#xA;&lt;li&gt;one Tiptap extension which carries the list-style attribute&lt;/li&gt;&#xA;&lt;li&gt;two toolbar extensions that replace the ordered/bulleted list buttons with menus that expose the variants.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  The icon set&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The icons are trivial: I asked an AI to generate SVGs for different list markers and put each one in a tiny TypeScript file that exports the SVG string.&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight typescript&quot;&gt;&lt;code&gt;&lt;span class=&quot;cm&quot;&gt;/** Ordered list with lower-roman markers (i, ii, iii). */&lt;/span&gt;&#xA;&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;`&amp;lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;1.75&quot;&amp;gt;&amp;lt;text x=&quot;1&quot; y=&quot;7.5&quot; font-size=&quot;4.5&quot; fill=&quot;currentColor&quot; stroke=&quot;none&quot; font-family=&quot;serif&quot; font-style=&quot;italic&quot;&amp;gt;i.&amp;lt;/text&amp;gt;&amp;lt;path d=&quot;M9 6h12&quot;/&amp;gt;&amp;lt;text x=&quot;1&quot; y=&quot;13.5&quot; font-size=&quot;4.5&quot; fill=&quot;currentColor&quot; stroke=&quot;none&quot; font-family=&quot;serif&quot; font-style=&quot;italic&quot;&amp;gt;ii.&amp;lt;/text&amp;gt;&amp;lt;path d=&quot;M9 12h12&quot;/&amp;gt;&amp;lt;text x=&quot;1&quot; y=&quot;19.5&quot; font-size=&quot;4.5&quot; fill=&quot;currentColor&quot; stroke=&quot;none&quot; font-family=&quot;serif&quot; font-style=&quot;italic&quot;&amp;gt;iii.&amp;lt;/text&amp;gt;&amp;lt;path d=&quot;M9 18h12&quot;/&amp;gt;&amp;lt;/svg&amp;gt;`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;And a small registry file maps the icon names to those files:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight typescript&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&#xA;  &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;    &lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;icon-list-style-lower-roman&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&#xA;    &lt;span class=&quot;na&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;./icons/svg-ordered-list-lower-roman.js&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;&#xA;  &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&#xA;    &lt;span class=&quot;c1&quot;&gt;//...&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;These images are purely to make the toolbar menus readable &#x2014; a little UX polish so editors instantly recognise the option they&#x2019;re picking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwq4cx2w5cdb00ep1rkyq.jpg&quot; class=&quot;article-body-image-wrapper&quot;&gt;&lt;img src=&quot;https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwq4cx2w5cdb00ep1rkyq.jpg&quot; alt=&quot; &quot; width=&quot;305&quot; height=&quot;270&quot;&gt;&lt;/a&gt; &lt;br&gt;&#xA;&lt;a href=&quot;https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy66bsar5ax2iu3fm0ig4.jpg&quot; class=&quot;article-body-image-wrapper&quot;&gt;&lt;img src=&quot;https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy66bsar5ax2iu3fm0ig4.jpg&quot; alt=&quot; &quot; width=&quot;392&quot; height=&quot;313&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  The Tiptap extension&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The extension itself is surprisingly compact. It adds a &lt;code&gt;listStyleType&lt;/code&gt; attribute to the built-in &lt;code&gt;orderedList&lt;/code&gt; and &lt;code&gt;bulletList&lt;/code&gt; nodes and serialises it as inline &lt;code&gt;list-style-type&lt;/code&gt; style so the HTML stays portable and renders the same in the backoffice and on the front end.&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight typescript&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Extension&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;UmbTiptapExtensionApiBase&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;@umbraco-cms/backoffice/tiptap&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&#xA;&#xA;&lt;span class=&quot;cm&quot;&gt;/**&#xA; * Extends the built-in orderedList and bulletList nodes with a `listStyleType`&#xA; * attribute that maps to the CSS `list-style-type` property.&#xA; *&#xA; * The attribute is serialised as an inline style so the stored HTML is portable&#xA; * and renders correctly both in the backoffice editor and on the front end.&#xA; */&lt;/span&gt;&#xA;&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;ListStyleExtension&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Extension&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;create&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;&#xA;  &lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;listStyle&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&#xA;&#xA;  &lt;span class=&quot;nf&quot;&gt;addGlobalAttributes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&#xA;      &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;        &lt;span class=&quot;na&quot;&gt;types&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;orderedList&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;bulletList&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&#xA;        &lt;span class=&quot;na&quot;&gt;attributes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;          &lt;span class=&quot;na&quot;&gt;listStyleType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;            &lt;span class=&quot;na&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&#xA;            &lt;span class=&quot;na&quot;&gt;parseHTML&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;element&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;element&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;style&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;listStyleType&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&#xA;            &lt;span class=&quot;na&quot;&gt;renderHTML&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;attributes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;              &lt;span class=&quot;k&quot;&gt;if &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;attributes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;listStyleType&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;])&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{};&lt;/span&gt;&#xA;              &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;style&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;`list-style-type: &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;attributes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;listStyleType&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;`&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;&#xA;            &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&#xA;          &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&#xA;        &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&#xA;      &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;&#xA;  &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;&#xA;&#xA;&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;ListStyleTiptapExtensionApi&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;UmbTiptapExtensionApiBase&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;  &lt;span class=&quot;nf&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(...&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;ConstructorParameters&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;typeof&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;UmbTiptapExtensionApiBase&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;    &lt;span class=&quot;k&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(...&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&#xA;    &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;getTiptapExtensions&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;ListStyleExtension&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;&#xA;  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;That&#x2019;s it, the extension maps an attribute to CSS and makes sure works in both front- and backoffice. Nothing scary.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  The toolbar extensions&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Because ordered and unordered lists are separate toolbar buttons, we overwrite each one with a menu that exposes the style variants. To avoid duplicating logic we put the toolbar behaviour into a single helper and import it from the two small extension files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each toolbar menu has to do a few things:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;create a list if the selection isn&#x2019;t in one&lt;/li&gt;&#xA;&lt;li&gt;switch between ordered and bullet lists&lt;/li&gt;&#xA;&lt;li&gt;toggle or set a specific list-style-type and reflect the active state in the menu UI.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;That last bit is where the logic concentrates, the UI needs to show which style is active and allow toggling back to the default behaviour.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The per-list-type extension files look like this:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight typescript&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;createListStyleMenuToolbarApi&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;./list-style-menu-toolbar-api.js&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&#xA;&#xA;&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;createListStyleMenuToolbarApi&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;bulletList&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;And the shared toolbar helper contains the actual implementation and state logic:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight typescript&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Editor&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;@umbraco-cms/backoffice/tiptap&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&#xA;&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;UmbTiptapToolbarElementApiBase&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;@umbraco-cms/backoffice/tiptap&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&#xA;&#xA;&lt;span class=&quot;kd&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;ListStyleMenuItem&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;?:&lt;/span&gt; &lt;span class=&quot;kr&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;&#xA;&#xA;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;getStyleType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;item&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;?:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;ListStyleMenuItem&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt; &lt;span class=&quot;kr&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;undefined&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;  &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;item&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;?.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&#xA;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;applyListStyle&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&#xA;  &lt;span class=&quot;nx&quot;&gt;editor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Editor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&#xA;  &lt;span class=&quot;nx&quot;&gt;listType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;orderedList&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;bulletList&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&#xA;  &lt;span class=&quot;nx&quot;&gt;styleType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kr&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;  &lt;span class=&quot;k&quot;&gt;if &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;editor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;isActive&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;listType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;currentStyle&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;editor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;getAttributes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;listType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)[&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;listStyleType&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;kr&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&#xA;    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;newStyle&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;currentStyle&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;styleType&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;styleType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&#xA;    &lt;span class=&quot;nx&quot;&gt;editor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;chain&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;focus&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;updateAttributes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;listType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;listStyleType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;newStyle&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}).&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;run&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;&#xA;    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&#xA;  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&#xA;  &lt;span class=&quot;k&quot;&gt;if &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;listType&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;orderedList&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;    &lt;span class=&quot;nx&quot;&gt;editor&lt;/span&gt;&#xA;      &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;chain&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&#xA;      &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;focus&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&#xA;      &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;toggleOrderedList&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&#xA;      &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;updateAttributes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;orderedList&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;listStyleType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;styleType&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;&#xA;      &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;run&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;&#xA;  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;    &lt;span class=&quot;nx&quot;&gt;editor&lt;/span&gt;&#xA;      &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;chain&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&#xA;      &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;focus&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&#xA;      &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;toggleBulletList&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&#xA;      &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;updateAttributes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;bulletList&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;listStyleType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;styleType&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;&#xA;      &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;run&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;&#xA;  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&#xA;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;applyDefaultList&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;editor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Editor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;listType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;orderedList&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;bulletList&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;  &lt;span class=&quot;k&quot;&gt;if &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;editor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;isActive&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;listType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;currentStyle&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;editor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;getAttributes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;listType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)[&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;listStyleType&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;kr&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&#xA;    &lt;span class=&quot;k&quot;&gt;if &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;currentStyle&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;      &lt;span class=&quot;nx&quot;&gt;editor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;chain&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;focus&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;updateAttributes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;listType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;listStyleType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}).&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;run&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;&#xA;      &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;    &lt;span class=&quot;k&quot;&gt;if &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;listType&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;orderedList&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;      &lt;span class=&quot;nx&quot;&gt;editor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;chain&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;focus&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;toggleOrderedList&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;run&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;      &lt;span class=&quot;nx&quot;&gt;editor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;chain&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;focus&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;toggleBulletList&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;run&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&#xA;  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&#xA;  &lt;span class=&quot;k&quot;&gt;if &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;listType&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;orderedList&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;    &lt;span class=&quot;nx&quot;&gt;editor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;chain&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;focus&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;toggleOrderedList&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;run&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;&#xA;  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;    &lt;span class=&quot;nx&quot;&gt;editor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;chain&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;focus&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;toggleBulletList&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;run&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;&#xA;  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&#xA;&lt;span class=&quot;cm&quot;&gt;/**&#xA; * Toolbar menu API for ordered/bullet list buttons with list-style-type variants.&#xA; */&lt;/span&gt;&#xA;&lt;span class=&quot;k&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;createListStyleMenuToolbarApi&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;listType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;orderedList&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;bulletList&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;  &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;UmbTiptapToolbarElementApiBase&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;    &lt;span class=&quot;nx&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;isActive&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;editor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;?:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Editor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;item&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;?:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;ListStyleMenuItem&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;boolean&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;      &lt;span class=&quot;k&quot;&gt;if &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;editor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&#xA;&#xA;      &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;styleType&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;getStyleType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;item&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&#xA;      &lt;span class=&quot;k&quot;&gt;if &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;styleType&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;undefined&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;editor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;isActive&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;listType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&#xA;      &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&#xA;      &lt;span class=&quot;k&quot;&gt;if &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;styleType&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;currentStyle&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;editor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;getAttributes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;listType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)[&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;listStyleType&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&#x27;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;kr&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&#xA;        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;editor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;isActive&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;listType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;currentStyle&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&#xA;      &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&#xA;      &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;editor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;isActive&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;listType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;listStyleType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;styleType&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&#xA;    &lt;span class=&quot;nx&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;execute&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;editor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;?:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Editor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;item&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;?:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;ListStyleMenuItem&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;      &lt;span class=&quot;k&quot;&gt;if &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;editor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&#xA;&#xA;      &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;styleType&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;getStyleType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;item&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&#xA;      &lt;span class=&quot;k&quot;&gt;if &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;styleType&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;undefined&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;styleType&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;        &lt;span class=&quot;nf&quot;&gt;applyDefaultList&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;editor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;listType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&#xA;        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&#xA;      &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&#xA;      &lt;span class=&quot;nf&quot;&gt;applyListStyle&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;editor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;listType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;styleType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;  &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  TODO / caveats&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I&#x2019;m still getting comfortable with TypeScript, so this isn&#x27;t a 100%-polished extension. One known quirk: clicking a custom style button after setting a style will clear the style but not fully remove the list node the way the stock ordered/bullet button does. It&#x27;s a small UX edge-case and likely fixable by tweaking the toggle logic, but I haven&#x27;t had time for it yet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to copy this approach, the important bits are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;expose a &lt;code&gt;listStyleType&lt;/code&gt; attribute on the list nodes,&lt;/li&gt;&#xA;&lt;li&gt;serialize it in a way that works in both editor and front end (inline style is the simplest)&lt;/li&gt;&#xA;&lt;li&gt;replace the toolbar buttons with menus that set/update that attribute.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Hopefully this saves you a few hours of experimentation. The overall idea is small, but the payoff for editors is surprisingly nice.&lt;/p&gt;]]></description>
                    <pubDate>Tue, 23 Jun 2026 07:37:36 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.linkedin.com/pulse/my-first-codegarden-ai-umbraco-17-18-why-im-excited-build-murthy-3ncxe/</guid>
                    <title>My First CodeGarden: AI, Umbraco 17 and 18, and Why I</title>
                    <link>https://www.linkedin.com/pulse/my-first-codegarden-ai-umbraco-17-18-why-im-excited-build-murthy-3ncxe/</link>
                    <description><![CDATA[This was my first time travelling to Copenhagen, and my first ever CodeGarden, and what a way to start. I went over with Luca Colella and Kat Dixon and we had a brilliant couple of days.]]></description>
                    <pubDate>Tue, 23 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/knowit.umbraco.editorlock</guid>
                    <title>Knowit.Umbraco.EditorLock</title>
                    <link>https://marketplace.umbraco.com/package/knowit.umbraco.editorlock</link>
                    <description><![CDATA[Prevents two editors from changing the same content node at the same time. When a node is already open, a second editor gets a read-only view with a red border and can either Request access (the current editor is prompted to accept or decline) or Force access (an immediate takeover with confirmation). Locks auto-release when the holder disconnects or goes idle, so nodes never get stuck. Real-time over SignalR.]]></description>
                    <pubDate>Tue, 23 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/sa.automate.pushover</guid>
                    <title>SA.Automate.Pushover</title>
                    <link>https://marketplace.umbraco.com/package/sa.automate.pushover</link>
                    <description><![CDATA[Pushover connection type and action for Umbraco Automate. Send notifications to Pushover as part of an automation workflow.]]></description>
                    <pubDate>Tue, 23 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/sa.automate.ntfy</guid>
                    <title>SA.Automate.Ntfy</title>
                    <link>https://marketplace.umbraco.com/package/sa.automate.ntfy</link>
                    <description><![CDATA[ntfy connection types and actions for Umbraco Automate. Send notifications to ntfy as part of an automation workflow.]]></description>
                    <pubDate>Tue, 23 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://umbraco.com/blog/the-pragmatic-enterprise-balancing-ai-innovation-with-predictable-tco/</guid>
                    <title>The Pragmatic Enterprise: Balancing AI Innovation with Predictable TCO</title>
                    <link>https://umbraco.com/blog/the-pragmatic-enterprise-balancing-ai-innovation-with-predictable-tco/</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Tue, 23 Jun 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.Video/releases/tag/v17.0.0-alpha001</guid>
                    <title>Limbo.Umbraco.Video 17.0.0-alpha001</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.Video/releases/tag/v17.0.0-alpha001</link>
                    <description><![CDATA[Package serving as a base for Limbo&#x27;s video picker packages.]]></description>
                    <pubDate>Mon, 22 Jun 2026 18:05:01 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=TRGFLqq711g</guid>
                    <title>Bjarke Berg, Running Umbraco in a Changing World</title>
                    <link>https://www.youtube.com/watch?v=TRGFLqq711g</link>
                    <description><![CDATA[Umbraco Cloud Lead, Bjarke Berg, delivers a technical keynote at Codegarden 2026 detailing the operational realities of hosting web platforms in a shifting threat and traffic landscape. With automated bot scanning and AI-driven probes doubling overall platform requests to 10 billion monthly hits, legacy hosting defaults are no longer sufficient to guarantee stability.&#xA;&#xA;The presentation reviews a year of infrastructure updates driven by a core philosophy of user self-service. Key product rollouts include edge-enriched performance analytics via Cloudflare, custom fallback error pages, granular carbon tracking APIs through direct Azure integration, and dedicated compute load balancing powered by out-of-process Redis caching.&#xA;&#xA;Who This Video Is For:&#xA;This session is designed for technical architects, systems administrators, backend developers, and digital agencies operating Umbraco infrastructure. It provides actionable best practices on platform protection, explains the performance impacts of production runtime mode configurations, and maps out the platform&#x27;s architectural transition to containerized, CI/CD-aligned artifact deployments.&#xA;&#xA;Key Takeaways:&#xA;- How automated bot traffic has shifted platform demands and why edge network DOS mitigation is mandatory.&#xA;&#xA;- The security and performance implications of compiling views using Production Runtime Mode settings.&#xA;&#xA;- How to configure custom fallback pages, localized maintenance windows, and proactive alert rules using webhooks.&#xA;&#xA;- The mechanics of load balancing using out-of-process Redis caching under sticky session configurations.&#xA;&#xA;- The upcoming Artifact Deployment model designed for external CI/CD pipelines and zero-downtime rolling updates.&#xA;&#xA;- Umbraco&#x2019;s long-term infrastructure roadmap moving toward multicloud availability, containerization, and Linux hosting environments.&#xA;&#xA;Chapters:&#xA;00:00 - Introduction &amp; Self-Service Strategy&#xA;02:12 - Traffic &amp; Performance Edge Analytics&#xA;06:11 - Custom Error Pages &amp; Sustainability Dashboards&#xA;08:07 - Load Balancing &amp; Redis Caching Configurations&#xA;10:42 - Scaling Under 2026 Bot &amp; Automated Traffic Pressures&#xA;12:50 - Security Foundations &amp; DOS Mitigation&#xA;15:33 - Maximizing Performance via Production Runtime Mode&#xA;17:22 - Web Application Firewalls &amp; Content Caching Headers&#xA;23:17 - Clean Repositories &amp; Configuration Best Practices&#xA;24:28 - Proactive Uptime Monitoring &amp; Webhook Alert Rules&#xA;27:15 - Scheduled Maintenance Windows by Timezone&#xA;31:07 - Architectural Shift: Introducing Artifact Deployments&#xA;35:10 - Read-Only Schema Controls &amp; Automated Pull Requests&#xA;37:27 - Unlocking Zero-Downtime Rolling Updates&#xA;38:42 - Long-Term Horizon: Multicloud, Containers, and Linux&#xA;&#xA;Links &amp; Resources:&#xA;Umbraco Cloud product page: https://umbraco.com/products/umbraco-cloud/&#xA;&#xA;Umbraco for Enterprise Solutions: https://umbraco.com/products/umbraco-for-enterprise/&#xA;&#xA;Umbraco Product Update q2, 2026: https://umbraco.com/blog/umbraco-product-updatecodegarden-keynote-highlights-q2-2026/ &#xA;&#xA;Codegarden Sessions &amp; Announcements: https://codegarden.umbraco.com/]]></description>
                    <pubDate>Mon, 22 Jun 2026 11:23:06 Z</pubDate>
                        <category>hq</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=ThgXALBfU-g</guid>
                    <title>Umbraco Codegarden Keynote, 2026: Mats Persson, Emma Bustow &amp; Filip Bech-Larsen</title>
                    <link>https://www.youtube.com/watch?v=ThgXALBfU-g</link>
                    <description><![CDATA[This keynote kicks off the flagship annual event, Codegarden, bringing together the global community to look back at a milestone year and preview what lies ahead for the ecosystem.&#xA;&#xA;The presentation is hosted by Umbraco CEO Mats Persson, Umbraco CTO Filip Bech-Larsen, and Head of Developer Relations Emma Burstow. Together, they outline recent growth metrics, international initiatives, and shifting developer dynamics across the ecosystem.&#xA;&#xA;The keynote is split into distinct parts. First, Emma and Mats cover community milestones, international office expansion, and business achievements. Following their segment, Filip steps into a solo keynote presentation focusing on core technical updates, massive platform architecture updates, and major product announcements.&#xA;&#xA;WHO THIS VIDEO IS FOR&#xA;This video is essential viewing for Umbraco developers, solutions architects, agency partners, open-source contributors, and technology leaders. Staying aligned with the platform&#x2019;s core engineering choices ensures your teams can plan upgrades accurately, adopt native AI capabilities securely, and design future-proof, composable architectures.&#xA;&#xA;TIMESTAMPS&#xA;Part 1: Community &amp; Business Milestones (Mats &amp; Emma)&#xA;00:00 - Welcome to Codegarden 2026 &amp; Opening Remarks&#xA;&#xA;01:00 - Speaker Introductions &amp; Record-Breaking Attendance Figures&#xA;&#xA;02:02 - The Infamous Pre-Conference Social Bike Ride Recap&#xA;&#xA;04:40 - Global Footprint: Meetups, Festivals, and the New Melbourne Office&#xA;&#xA;07:20 - AI Hackathons &amp; &quot;Vibe Coding&quot; Innovation Era&#xA;&#xA;15:08 - Guest Segment: Top Hackathon Packages Showcase with Lottie Pitcher&#xA;&#xA;19:08 - Maturing the Marketplace: Platform Strategy, Search, and Vendor Trust&#xA;&#xA;26:23 - Breakout Sessions &amp; Community Roadmap Overview&#xA;&#xA;29:55 - Community Teams &amp; Feedback-Driven Development&#xA;&#xA;32:28 - 2026 Most Valuable People (MVP) Awards Ceremony&#xA;&#xA;Part 2: Product Keynote &amp; Technical Announcements (Filip)&#xA;39:35 - Part 2 Intro: Balancing Developer Love with Business Trust&#xA;&#xA;42:05 - Enterprise Security: ISO 27001 Certification &amp; Cloud 100% SLA Policies&#xA;&#xA;43:25 - CMS Core: Umbraco 17 LTS Overview &amp; Umbraco 13 EOL Timeline&#xA;&#xA;45:16 - Architectural Shifts: Entity Framework (EF Core) &amp; Search Abstraction 1.0&#xA;&#xA;46:50 - Content Modeling: Introducing Native &quot;Elements&quot; &amp; Feature Demo&#xA;&#xA;51:50 - The Umbraco AI Framework: Guiding Principles &amp; Architecture&#xA;&#xA;55:15 - Model Context Protocol (MCP) Server &amp; Hosted Remote MCP for Cloud (Beta)&#xA;&#xA;58:10 - Data Privacy &amp; Testing: Microsoft Extensions AI, Guardrails, and Base Models&#xA;&#xA;1:03:05 - Community Innovation: AI Log Analyzer Feature Demo&#xA;&#xA;1:04:52 - Extending the UI: Semantic AI Search, Voice Mode, and Copilot Upgrades&#xA;&#xA;1:08:10 - Major Announcement: Native Workflow Engine (&quot;Umbraco Automate&quot;)&#xA;&#xA;1:16:32 - Composable Architecture: Umbraco Compose &amp; Injection Upgrades&#xA;&#xA;1:21:56 - Platform Add-ons: Engage Personalization, Forms Analytics, and Commerce Scale&#xA;&#xA;1:25:44 - Cloud Portal Infrastructure: Live Edge Insights &amp; Gamified Recommendations&#xA;&#xA;1:31:26 - Major Announcement: Direct Architecture Load Balancing on Umbraco Cloud&#xA;&#xA;KEY TAKEAWAYS&#xA;A New Class of Content: The debut of &quot;Elements&quot; as a fourth native type introduces clean, non-routable, reusable content models managed via a central Library Section, drastically improving author workflows.&#xA;&#xA;Umbraco Automate: The release of built-in low-code workflow automation allows developers and editors to map triggers (like saving content or uploading media) directly to chain-linked actions, API webhooks, and AI pipelines.&#xA;&#xA;Remote MCP Integration: The Model Context Protocol is shifting to a fully hosted cloud structure this summer, granting secure backend developer contexts to AI tools without complex local token installations.&#xA;&#xA;Direct Cloud Load Balancing: Starting July 1st, Umbraco Cloud will support single-click multi-instance scaling backed by dedicated Redis caching tiers to ensure infrastructure elasticity.&#xA;&#xA;OFFICIAL LINKS &amp; RESOURCES&#xA;Umbraco Product Homepage: www.umbraco.com&#xA;&#xA;Codegarden 2026 keynote highlight Blog Post: https://umbraco.com/blog/umbraco-product-updatecodegarden-keynote-highlights-q2-2026/ &#xA;&#xA;Explore the Umbraco Marketplace: https://marketplace.umbraco.com/ &#xA;&#xA;Community Announcements &amp; Upcoming Events: https://community.umbraco.com/&#xA;&#xA;Codegarden website: https://codegarden.umbraco.com/ &#xA;&#xA;Read the Umbraco Code of Conduct: [Insert Link]]]></description>
                    <pubDate>Mon, 22 Jun 2026 10:51:13 Z</pubDate>
                        <category>hq</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=LWtYvcAalac</guid>
                    <title>Arnold Visser, Build. Scale. Grow. From Running Projects to Growing Portfolios with Umbraco Cloud.</title>
                    <link>https://www.youtube.com/watch?v=LWtYvcAalac</link>
                    <description><![CDATA[Umbraco Head of Business Development, Arnold Visser, discusses the operational evolution of managing large client portfolios. While digital agencies have traditionally excelled at building individual Umbraco projects, long-term success requires a shift toward managing, supporting, and scaling those assets as business-critical platforms.&#xA;&#xA;This presentation details how Umbraco Cloud and the Umbraco Enterprise offering are changing to support agencies beyond the initial launch phase. By introducing deeper runtime diagnostics, isolated dedicated tiers at lower price points, and flexible licensing options, the ecosystem aims to minimize the hours development teams spend on infrastructure maintenance and deployment coordination.&#xA;&#xA;This video is for digital agency executives, account managers, technical architects, and project managers handling multiple live Umbraco environments. It provides a strategic look at moving away from reactive server management toward a mature, portfolio-wide operational framework that protects client uptime and uncovers ongoing growth opportunities.&#xA;&#xA;What You Will Learn:&#xA;&#xA;- The operational inflection points that occur when an agency scales from 5 to more than 50 active projects.&#xA;&#xA;- Core updates to Umbraco Cloud, including Load Balancing, 90 days of edge traffic insights, custom branded maintenance pages, and ISO 27001 compliance.&#xA;&#xA;- Commercial adjustments to the platform, such as lower-cost entry tiers for dedicated resources and the introduction of an agency-wide Umbraco Deploy license.&#xA;&#xA;- The mid-term technical roadmap covering proactive health alerting via webhooks, automated scaling, and customizable maintenance windows.&#xA;&#xA;- How to leverage artifact deployments and container-based infrastructure to execute rolling updates without client site downtime.&#xA;&#xA;Chapters:&#xA;00:00 - Introduction: The Portfolio Gap&#xA;01:42 - The Shift from Building to Operating Platforms&#xA;02:52 - Build vs. Scale vs. Grow Framework&#xA;04:45 - The Tribal Knowledge Trap at 50&#x2B; Projects&#xA;05:45 - The Role of Umbraco Cloud Infrastructure&#xA;06:57 - Umbraco for Enterprise Overview&#xA;08:48 - Solving Common Operational Challenges&#xA;11:01 - Addressing Partner Feedback on Visibility and Costs&#xA;12:38 - Traffic Performance Insights and Runtime Data&#xA;14:04 - Plan Extensions and Custom Maintenance Pages&#xA;17:01 - New Dedicated Scaling Options and Lower Pricing&#xA;19:46 - Umbraco Deploy Agency Licensing&#xA;21:11 - The Unified Umbraco Partner Portal&#xA;23:08 - Operational Roadmap: Alerting, Webhooks, and Metrics&#xA;26:21 - Artifact Deployment, Rolling Updates, and Containers&#xA;&#xA;Links &amp; Resources:&#xA;Umbraco Cloud product page: https://umbraco.com/products/umbraco-cloud/&#xA;&#xA;Umbraco for Enterprise Solutions: https://umbraco.com/products/umbraco-for-enterprise/&#xA;&#xA;Umbraco Product Update q2, 2026: https://umbraco.com/blog/umbraco-product-updatecodegarden-keynote-highlights-q2-2026/ &#xA;&#xA;Codegarden Sessions &amp; Announcements: https://codegarden.umbraco.com/]]></description>
                    <pubDate>Mon, 22 Jun 2026 10:28:07 Z</pubDate>
                        <category>hq</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=HO0BsEebTys</guid>
                    <title>Andy Butland, Our Roadmap, Your CMS  Umbraco 17 Released and What We&#x27;re Building Next</title>
                    <link>https://www.youtube.com/watch?v=HO0BsEebTys</link>
                    <description><![CDATA[Umbraco Head of CMS, Andy Butland, shares a comprehensive update on the CMS platform ecosystem. This session highlights the post-launch reception of the Umbraco 17 LTS release and provides a technical overview of what to expect in the Umbraco 18 launch.&#xA;&#xA;The presentation details how the development team balances new feature work with core platform performance. Key focus areas include back-office rendering optimizations, advanced caching strategies, and foundational upgrades designed to streamline both the developer and content editor experience.&#xA;&#xA;This video is for Umbraco developers, architects, and content managers who want to understand the platform&#x27;s current trajectory. It offers practical technical insights into optimization configurations like Production Runtime Mode and maps out structural shifts for future major releases.&#xA;&#xA;What You Will Learn&#xA;&#xA;- The core capabilities of reusable content elements and type-safe schemas in Umbraco 18.&#xA;&#xA;- How recent performance tuning reduced backend requests by 40% and cut high-latency load times.&#xA;&#xA;- Best practices for configuring Production Runtime Mode and smart Output Caching.&#xA;&#xA;- Ongoing architectural migrations, including the transition to EF Core and Examine search updates.&#xA;&#xA;- Future roadmap goals for variant media, block personalization, and multi-editor collaboration safety.&#xA;&#xA;Chapters&#xA;00:00 - Introduction &amp; Umbraco 18 Overview&#xA;00:26 - Reusable Content Elements in v18&#xA;02:01 - Delivery API &amp; Type-Safe Schemas&#xA;02:44 - Upgrading to v18 &amp; OpenAPI Changes&#xA;04:52 - Umbraco 17 LTS Updates &amp; Adoption&#xA;05:45 - Back Office Request &amp; Loading Performance&#xA;09:14 - Server Operations &amp; Cache Optimizations&#xA;12:50 - Production Runtime Mode Best Practices&#xA;14:28 - Smart Output Caching &amp; Customization&#xA;17:38 - Lightweight External Members for High Concurrency&#xA;20:47 - Quality of Life Wins for Editors &amp; Developers&#xA;27:08 - AI-Assisted Coding &amp; Code Quality Management&#xA;34:09 - Roadmap: Elements Phase 2 &amp; Library Upgrades&#xA;35:20 - Technical Shift: Migration to EF Core&#xA;38:15 - Future Features: Variant Media &amp; Collaboration&#xA;&#xA;Links &amp; Resources&#xA;&#xA;Umbraco CMS: https://umbraco.com/products/umbraco-cms/&#xA;&#xA;Umbraco Product Update Q2: https://umbraco.com/blog/umbraco-product-updatecodegarden-keynote-highlights-q2-2026/&#xA;&#xA;Umbraco CMS documentation: https://docs.umbraco.com/umbraco-cms &#xA;&#xA;Examine Search Abstraction Package: [Insert Link]&#xA;&#xA;Umbraco Documentation &amp; Latest Releases: [Insert Link]]]></description>
                    <pubDate>Mon, 22 Jun 2026 08:57:50 Z</pubDate>
                        <category>hq</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://umbracocommunity.social/@CorneHoskam/116792346368820033</guid>
                    <title>&quot;We Need to Go Deeper: Extending Umbraco&#x27;s Extensions&quot; Codegarden workshop now available as an escape room</title>
                    <link>https://umbracocommunity.social/@CorneHoskam/116792346368820033</link>
                    <description><![CDATA[&#x1F527; We turned our Codegarden workshop into an escape room.Ronald Barendse, Nathan Woulfe and I ran &quot;We Need to Go Deeper: Extending Umbraco&#x27;s Extensions&quot;, four hours of coding quests across Engage, Workflow and Deploy, each one unlocking a fragment of a bigger puzzle.And here&#x27;s the thing... you can play it too! The whole workshop is public, so clone the repo and work through the quests at your own pace. &#x1F447;https://cornehoskam.com/posts/extending-umbracos-extensions-a-codegarden-workshop-you-can-try-yourself/#umbraco #codegarden #dotnet #extensions]]></description>
                    <pubDate>Mon, 22 Jun 2026 07:48:45 Z</pubDate>
                        <category>community</category>
                        <category>social</category>
                        <category>mastodon</category>
                </item>
                <item>
                    <guid>https://umbuntu.uk/blog/codegarden-2026-ubuntu</guid>
                    <title>Codegarden 2026: Ubuntu</title>
                    <link>https://umbuntu.uk/blog/codegarden-2026-ubuntu</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Mon, 22 Jun 2026 06:44:08 Z</pubDate>
                        <category>blog</category>
                        <category>community</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/kontainer.umbraco</guid>
                    <title>kontainer.umbraco</title>
                    <link>https://marketplace.umbraco.com/package/kontainer.umbraco</link>
                    <description><![CDATA[Adds a media picker to pick media items from a Kontainer repository]]></description>
                    <pubDate>Mon, 22 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://33b6c16b-3387-4d68-9090-4cb1f20ea7b3.azurewebsites.nethttps://owain.codes/blog/2026/june/its-coffee-time/</guid>
                    <title>It&#x27;s Coffee Time!</title>
                    <link>https://33b6c16b-3387-4d68-9090-4cb1f20ea7b3.azurewebsites.nethttps://owain.codes/blog/2026/june/its-coffee-time/</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Mon, 22 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://umbraco.com/blog/uprofile-june-2026-ben-szymanski/</guid>
                    <title>uProfile June 2026 - Ben Szymanski</title>
                    <link>https://umbraco.com/blog/uprofile-june-2026-ben-szymanski/</link>
                    <description><![CDATA[From restoring vintage Macs to catching waves and building backoffice magic - meet 2026 Umbraco MVP Ben Szymanski.]]></description>
                    <pubDate>Mon, 22 Jun 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://owain.codes/blog/2026/june/its-coffee-time/</guid>
                    <title>It&#x27;s Coffee Time!</title>
                    <link>https://owain.codes/blog/2026/june/its-coffee-time/</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Mon, 22 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://umbuntu.uk/blog/codegarden-2026-ubuntu/</guid>
                    <title>Codegarden 2026: Ubuntu</title>
                    <link>https://umbuntu.uk/blog/codegarden-2026-ubuntu/</link>
                    <description><![CDATA[&quot;I am because we are&quot;]]></description>
                    <pubDate>Mon, 22 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://owaincodes.uksouth01.umbraco.io/blog/2026/june/its-coffee-time/</guid>
                    <title>It&#x27;s Coffee Time!</title>
                    <link>https://owaincodes.uksouth01.umbraco.io/blog/2026/june/its-coffee-time/</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Mon, 22 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://markmcdonald.dev/writing/what-codegarden-inspired-me-to-build-next/</guid>
                    <title>What Codegarden Inspired Me to Build Next</title>
                    <link>https://markmcdonald.dev/writing/what-codegarden-inspired-me-to-build-next/</link>
                    <description><![CDATA[What I learned building an AI-assisted pipeline that maps existing sites into reusable Umbraco components.]]></description>
                    <pubDate>Mon, 22 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://cornehoskam.com/posts/extending-umbracos-extensions-a-codegarden-workshop-you-can-try-yourself/</guid>
                    <title>Extending Umbraco&#x27;s Extensions: A Codegarden Workshop You Can Try Yourself</title>
                    <link>https://cornehoskam.com/posts/extending-umbracos-extensions-a-codegarden-workshop-you-can-try-yourself/</link>
                    <description><![CDATA[Clone and try our four-hour Codegarden workshop on extending Umbraco&#x27;s extensions: an escape room of coding quests across Engage, Workflow and Deploy.]]></description>
                    <pubDate>Mon, 22 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.linkedin.com/pulse/most-interesting-thing-codegarden-wasnt-feature-adam-shallcross-cmxwe/</guid>
                    <title>The most interesting thing at CodeGarden wasn</title>
                    <link>https://www.linkedin.com/pulse/most-interesting-thing-codegarden-wasnt-feature-adam-shallcross-cmxwe/</link>
                    <description><![CDATA[There were plenty of shiny things to look at this year. New content types, a workflow engine, hosted servers you can spin up in minutes.]]></description>
                    <pubDate>Mon, 22 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/frontendsupport.partialtextstring</guid>
                    <title>FrontendSupport.PartialTextString</title>
                    <link>https://marketplace.umbraco.com/package/frontendsupport.partialtextstring</link>
                    <description><![CDATA[Basically a TextString, but you can specify prefix and/or postfix strings to show, which can make it much easier to understand exactly what&#x27;s supposed to go into the field.]]></description>
                    <pubDate>Sat, 20 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/lait.umbraco.analytics.plausible</guid>
                    <title>Lait.Umbraco.Analytics.Plausible</title>
                    <link>https://marketplace.umbraco.com/package/lait.umbraco.analytics.plausible</link>
                    <description><![CDATA[Surfaces Plausible Analytics tracking data inside the Umbraco backoffice: a Content dashboard and a per-page block on each document&#x27;s Info tab.]]></description>
                    <pubDate>Sat, 20 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/lait.umbraco.ui.scrolltofield</guid>
                    <title>Lait.Umbraco.UI.ScrollToField</title>
                    <link>https://marketplace.umbraco.com/package/lait.umbraco.ui.scrolltofield</link>
                    <description><![CDATA[A table of contents navigation helper for the Umbraco backoffice. Adds a dockable outline panel to the document editor that lists the page&#x27;s tabs, property groups and Block List / Block Grid items &#x2014; so editors keep their overview and can jump straight to any section on long content pages. Click an entry to scroll it into view and highlight it.]]></description>
                    <pubDate>Sat, 20 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://mastodon.social/@greystate/116774972921955847</guid>
                    <title>Spin up Umbraco websites quickly with Umbeasy</title>
                    <link>https://mastodon.social/@greystate/116774972921955847</link>
                    <description><![CDATA[Need to spin up an #Umbraco website for a quick test of something?Try the friction-free #Umbreasy &#x26A1;&#x1F3C3;&#x200D;&#x2642;&#xFE0F;&#x200D;&#x27A1;&#xFE0F;It&#x27;s in beta right now: https://umbreasy.com]]></description>
                    <pubDate>Fri, 19 Jun 2026 04:51:47 Z</pubDate>
                        <category>community</category>
                        <category>social</category>
                        <category>mastodon</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/esatto.umbraco.backoffice.redirects</guid>
                    <title>Esatto.Umbraco.Backoffice.Redirects</title>
                    <link>https://marketplace.umbraco.com/package/esatto.umbraco.backoffice.redirects</link>
                    <description><![CDATA[Dead-URL &#x2192; new-URL redirects for Umbraco 17. Provides a SQL-backed Redirects table, a Settings-section dashboard for editors to manage 301 rules, and an IContentFinder that resolves redirects at request time. A single flat list of redirects: exact case-insensitive matching with query-string preservation, draft rows, and idempotent migrations.]]></description>
                    <pubDate>Fri, 19 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://www.shoutdigital.com/insights/codegarden-2026-and-the-next-chapter-for-umbraco/</guid>
                    <title>Codegarden 2026 and the next chapter for Umbraco | Shout Digital</title>
                    <link>https://www.shoutdigital.com/insights/codegarden-2026-and-the-next-chapter-for-umbraco/</link>
                    <description><![CDATA[AI, automation, community - Umbraco MVP Ian Grieve talks about his key takeaways from Copenhagen.]]></description>
                    <pubDate>Fri, 19 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.nathanielnunes.com/blog/umbraco-mvp-codegarden-2026/</guid>
                    <title>Copenhagen, Codegarden, and My First Year as an Umbraco MVP</title>
                    <link>https://www.nathanielnunes.com/blog/umbraco-mvp-codegarden-2026/</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Thu, 18 Jun 2026 17:53:16 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.nathanielnunes.com/blog/umbraco-mvp-codegarden-2026</guid>
                    <title>Copenhagen, Codegarden, and My First Year as an Umbraco MVP</title>
                    <link>https://www.nathanielnunes.com/blog/umbraco-mvp-codegarden-2026</link>
                    <description><![CDATA[My first year as an Umbraco MVP: receiving the award at Codegarden 2026 in Copenhagen, the MVP Summit, the sessions, the people, and the moments between.]]></description>
                    <pubDate>Thu, 18 Jun 2026 11:30:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=FKpbT4LQHd0</guid>
                    <title>Codegarden Aftermovie 2026</title>
                    <link>https://www.youtube.com/watch?v=FKpbT4LQHd0</link>
                    <description><![CDATA[&#x1F430; The Rabbit faced traffic jams, train delays, and several moments of &#x201C;you&#x2019;ve got to be kidding me&#x201D; on the way to Codegarden.&#xA;&#xA;Then: Codegarden.&#xA;&#xA;&#x1F37F; Hit play to see how quickly travel stress turned into community vibes, new friendships, and a reminder that Codegarden isn&#x2019;t just an event.&#xA;&#xA;It&#x2019;s a family reunion that keeps growing &#x1FAF6;&#xA;&#xA;And before your grandma out-plans you and claims that prime summer weekend for her 90th birthday, lock your calendar for 2027: &#x1F475;&#x1F94A;&#xA;&#xA;&#x1F4CD; &#xD8;ksnehallen, Copenhagen &#x1F3F0;&#xA;&#x1F4C5; June 9&#x2013;10, 2027 &#x1F986;&#x1F1E9;&#x1F1F0;]]></description>
                    <pubDate>Thu, 18 Jun 2026 10:39:22 Z</pubDate>
                        <category>hq</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://owain.codes/blog/2026/june/codegarden-2026/</guid>
                    <title>Codegarden 2026 recap</title>
                    <link>https://owain.codes/blog/2026/june/codegarden-2026/</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Thu, 18 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://owaincodes.uksouth01.umbraco.io/blog/2026/june/codegarden-2026/</guid>
                    <title>Codegarden 2026 recap</title>
                    <link>https://owaincodes.uksouth01.umbraco.io/blog/2026/june/codegarden-2026/</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Thu, 18 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://frytom.org/2026/06/13/tilbake-fra-kobenhavn-og-umbraco-codegarden-2026-%F0%9F%87%A9%F0%9F%87%B0/</guid>
                    <title>Tilbake fra K&#xF8;benhavn og Umbraco Codegarden 2026! &#x1F1E9;&#x1F1F0;</title>
                    <link>https://frytom.org/2026/06/13/tilbake-fra-kobenhavn-og-umbraco-codegarden-2026-%F0%9F%87%A9%F0%9F%87%B0/</link>
                    <description><![CDATA[Noen dager fylt med faglig p&#xE5;fyll, gode samtaler og sterke relasjoner &#x2014; det er alltid noe eget med Codegarden. Umbraco-communityet er ikke en kult, men&amp;#8230; det er kanskje det n&#xE6;rmeste vi kommer &#x2026;]]></description>
                    <pubDate>Thu, 18 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.linkedin.com/pulse/my-first-umbraco-codegarden-more-than-stickers-t-shirts-dave-jonker-tew6e/?trackingId=QknJFmSATw6wxaZj0VosrA%3D%3D</guid>
                    <title>My First Umbraco Codegarden: More Than Stickers and T-Shirts</title>
                    <link>https://www.linkedin.com/pulse/my-first-umbraco-codegarden-more-than-stickers-t-shirts-dave-jonker-tew6e/?trackingId=QknJFmSATw6wxaZj0VosrA%3D%3D</link>
                    <description><![CDATA[After my blog was recently featured on umb.fyi &#x2014; thanks to Matt Brailsford for that &#x2014; I felt like I also owed the community a proper write-up about my very first Codegarden experience.]]></description>
                    <pubDate>Thu, 18 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/lait.umbraco.search.typesense</guid>
                    <title>Lait.Umbraco.Search.Typesense</title>
                    <link>https://marketplace.umbraco.com/package/lait.umbraco.search.typesense</link>
                    <description><![CDATA[An extension for Umbraco CMS providing a custom search engine integration with Typesense.]]></description>
                    <pubDate>Thu, 18 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/oc.automate.bluesky</guid>
                    <title>OC.Automate.Bluesky</title>
                    <link>https://marketplace.umbraco.com/package/oc.automate.bluesky</link>
                    <description><![CDATA[Bluesky connection type and action for Umbraco Automate. Post to Bluesky as part of an automation workflow.]]></description>
                    <pubDate>Thu, 18 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://33b6c16b-3387-4d68-9090-4cb1f20ea7b3.azurewebsites.nethttps://owain.codes/blog/2026/june/codegarden-2026/</guid>
                    <title>Codegarden 2026 recap</title>
                    <link>https://33b6c16b-3387-4d68-9090-4cb1f20ea7b3.azurewebsites.nethttps://owain.codes/blog/2026/june/codegarden-2026/</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Thu, 18 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://medium.com/@ravimotha/codegarden-26-a-review-aa35c60e3b08?source=rss-8e76be83b03f------2</guid>
                    <title>Codegarden 26 : a review</title>
                    <link>https://medium.com/@ravimotha/codegarden-26-a-review-aa35c60e3b08?source=rss-8e76be83b03f------2</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Wed, 17 Jun 2026 17:42:48 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://medium.com/@ravimotha/codegarden-26-a-review-aa35c60e3b08?source=rss------umbraco-5</guid>
                    <title>Codegarden 26 : a review</title>
                    <link>https://medium.com/@ravimotha/codegarden-26-a-review-aa35c60e3b08?source=rss------umbraco-5</link>
                    <description><![CDATA[&lt;div class=&quot;medium-feed-item&quot;&gt;&lt;p class=&quot;medium-feed-image&quot;&gt;&lt;a href=&quot;https://medium.com/@ravimotha/codegarden-26-a-review-aa35c60e3b08?source=rss------umbraco-5&quot;&gt;&lt;img src=&quot;https://cdn-images-1.medium.com/max/2160/1*toX2D2qIoJiKh7DBjvlAoQ@2x.jpeg&quot; width=&quot;2160&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;medium-feed-snippet&quot;&gt;Photo by Lukas Rychvalsky on Unsplash&lt;/p&gt;&lt;p class=&quot;medium-feed-link&quot;&gt;&lt;a href=&quot;https://medium.com/@ravimotha/codegarden-26-a-review-aa35c60e3b08?source=rss------umbraco-5&quot;&gt;Continue reading on Medium &#xBB;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;]]></description>
                    <pubDate>Wed, 17 Jun 2026 17:42:48 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.jeroenbreuer.nl/blog/my-codegarden-2026-highlights/</guid>
                    <title>My Codegarden 2026 highlights</title>
                    <link>https://www.jeroenbreuer.nl/blog/my-codegarden-2026-highlights/</link>
                    <description><![CDATA[A summary of my Codegarden 2026 highlights.]]></description>
                    <pubDate>Wed, 17 Jun 2026 14:26:59 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://jcdc.dev/blog/umbraco-package-automate-inspector</guid>
                    <title>Umbraco Package: Automate Inspector</title>
                    <link>https://jcdc.dev/blog/umbraco-package-automate-inspector</link>
                    <description><![CDATA[Explore everything Umbraco Automate has to offer with this new community package!]]></description>
                    <pubDate>Wed, 17 Jun 2026 07:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.blendinteractive.com/thoughts/codegarden-2026/</guid>
                    <title>Codegarden 2026 Road Report: Umbraco&#x2019;s Bet on AI and Reusable Content | Blend Interactive</title>
                    <link>https://www.blendinteractive.com/thoughts/codegarden-2026/</link>
                    <description><![CDATA[A road report from Codegarden 2026 &amp;mdash; Umbraco]]></description>
                    <pubDate>Wed, 17 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.youtubepicker</guid>
                    <title>Umbraco.Community.YouTubePicker</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.youtubepicker</link>
                    <description><![CDATA[Custom Umbraco datatype to enable editors to pick YouTube videos or playlists from a specific YouTube channel. You&#x27;ll need a Google account and signup for an API key before you can use it.]]></description>
                    <pubDate>Wed, 17 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://codeshare.co.uk/blog/my-codegarden-2026-experience/</guid>
                    <title>My Codegarden 2026 Experience</title>
                    <link>https://codeshare.co.uk/blog/my-codegarden-2026-experience/</link>
                    <description><![CDATA[My Codegarden 2026 experience: keynotes, talks, awards, and the moments that reminded me why this community matters. Nine years, still getting goosebumps.]]></description>
                    <pubDate>Tue, 16 Jun 2026 02:57:14 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umcontentgenerator</guid>
                    <title>umContentGenerator</title>
                    <link>https://marketplace.umbraco.com/package/umcontentgenerator</link>
                    <description><![CDATA[AI-powered content generation for Umbraco: create fully-populated Block Grid and Block List pages &#x2014; text and images &#x2014; base on template page and short promt, powered by OpenAI.]]></description>
                    <pubDate>Tue, 16 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/esatto.umbraco.backoffice.contenttreedraganddrop</guid>
                    <title>Esatto.Umbraco.Backoffice.ContentTreeDragAndDrop</title>
                    <link>https://marketplace.umbraco.com/package/esatto.umbraco.backoffice.contenttreedraganddrop</link>
                    <description><![CDATA[Native HTML5 drag-and-drop for the Umbraco 17 backoffice Content tree. Adds three-zone (above / into / below) drop targets per row with optimistic same-parent reorder and full cross-parent move support. Pure App_Plugins package &#x2014; no C# code.]]></description>
                    <pubDate>Tue, 16 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://aaronsadler.dev/blog/2026/june/16/codegarden-2026-i-went-to-copenhagen-for-a-week</guid>
                    <title>Codegarden 2026: I went to Copenhagen for a week</title>
                    <link>https://aaronsadler.dev/blog/2026/june/16/codegarden-2026-i-went-to-copenhagen-for-a-week</link>
                    <description><![CDATA[My week in Copenhagen for Codegarden 2026: the MVP Summit, the launch of Umbraco Automate, the sessions that stood out, and why I keep coming back. Continue reading]]></description>
                    <pubDate>Tue, 16 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://dev.to/luukpeters/tiptap-is-not-broken-your-expectations-are-5h8m</guid>
                    <title>TipTap is not broken. Your expectations are.</title>
                    <link>https://dev.to/luukpeters/tiptap-is-not-broken-your-expectations-are-5h8m</link>
                    <description><![CDATA[&lt;p&gt;Since the Umbraco 16 release, Umbraco ships only with the TipTap Rich Text Editor. This was unfortunately something that Umbraco was forced to do. TinyMce 7 has a license that is incompatible with the open source license of Umbraco and TinyMce 6 was going out of support. So an alternative had to be found.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Umbraco did a pretty good job at abstracting the rich text data. In Umbraco 15 both TinyMCE and TipTap were still present and exchangeable because of this abstraction. And arguably, the way you can set up your toolbars for the TipTap editor is superior to TinyMCE. But still, a new Rich Text Editor is a big change that presents real challenges.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These challenges are most obvious when looking at the Umbraco forum&#x27;s &lt;a href=&quot;https://forum.umbraco.com/tag/tip-tap/78&quot; rel=&quot;noopener noreferrer&quot;&gt;tip-tap tag&lt;/a&gt;. Topics vary, but a few come up again and again:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Additional HTML tags getting added to the markup, like a &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; tag inside a &lt;code&gt;&amp;lt;li&amp;gt;&lt;/code&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;The inability to add certain tags to TipTap, like &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; tags&lt;/li&gt;&#xA;&lt;li&gt;The inability to add styling to an element, for instance to create a link that looks like a button&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;These are valid challenges, especially if you&#x27;re upgrading from an existing TinyMCE setup. But this is also a good moment to ask two questions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;strong&gt;Why&lt;/strong&gt; do I want the same behaviour?&lt;/li&gt;&#xA;&lt;li&gt;And was the old behaviour actually any good to begin with?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  You don&#x27;t have to migrate everything at once&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Before getting into that, it&#x27;s worth knowing that TinyMCE is still available as a community package for Umbraco 16&#x2B;. If you&#x27;re in the middle of a project, dealing with a large codebase, or just not ready to rethink your Rich Text Editor setup right now, that&#x27;s a valid escape hatch. Swap in the package, keep things running, and give yourself time to migrate properly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But &quot;later&quot; should still be on the roadmap. The package is community maintained, not an official Umbraco product, so there are no guarantees around long-term support or compatibility with future Umbraco versions. Relying on it indefinitely carries the same risk as the situation Umbraco just came out of with TinyMCE 6.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So use it if you need to. Just don&#x27;t treat it as a permanent solution.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  The RTE is not a page builder&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I&#x27;m not a big fan of giving editors too much freedom in a Rich Text Editor. Don&#x27;t get me wrong, RTEs are great and help editors a lot. But give too much rope and things go wrong fast. My preference is for RTEs to handle the basics: adding a link, making text bold or italic, maybe a table if the frontend deals with it gracefully on mobile.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I don&#x27;t like is image placement and scaling inside an RTE. Without proper processing this is a problem for performance and mobile layouts. I also don&#x27;t like HTML snippets or trying to add CSS classes to elements from within an editor. It&#x27;s error prone, and if something breaks, you need HTML knowledge to fix it. That&#x27;s not a realistic expectation for most editors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So when people ask how to replicate that kind of behaviour in TipTap, I&#x27;d rather ask why they need it at all.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  Stop fighting the editor, start working with Umbraco&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Instead of trying to make TipTap behave like TinyMCE did, consider using the tools Umbraco already gives you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Need a link that looks like a button? Use a block inside the Rich Text Editor. TipTap has solid block support, and Umbraco exposes this well. You get a structured piece of content with its own view, its own properties, fully typed, fully renderable. An editor picks a &quot;Button&quot; block, fills in the label and the link and that&#x27;s it. No CSS classes, no raw HTML, no risk of someone pasting &lt;code&gt;style=&quot;color:red&quot;&lt;/code&gt; into a script tag three months later.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Need a pull quote, a callout, a code snippet with syntax highlighting? Same answer. Model it as a block. Render it properly. Keep the RTE itself lean.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The argument I keep hearing is that recreating all of this takes more time than just making the old thing work again. That&#x27;s sometimes true in the short term. But you&#x27;re building something more maintainable, more predictable and more editor-friendly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There&#x27;s another reason to think twice before pouring effort into recreating editor-specific behaviour: Umbraco has already switched its default Rich Text Editor once. It could happen again. If your implementation leans heavily on workarounds and editor-specific quirks, you&#x27;re setting yourself up for the same migration pain all over again. If instead your RTE is kept lean and the complex bits live in blocks with their own models and views, a future editor switch becomes much less of an event. The RTE just renders text. Everything interesting is already abstracted away.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  What about the extra markup?&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; inside &lt;code&gt;&amp;lt;li&amp;gt;&lt;/code&gt; is worth addressing separately, because it looks like a bug but it isn&#x27;t. TipTap is built on ProseMirror, which uses a strict document schema where every node needs to contain the right type of child node. For list items, that child is a block node and a paragraph is that block node. This is what makes editing reliable: without it, you can end up in situations where the cursor can&#x27;t be placed inside a list item at all, or where deleting an item breaks unexpectedly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This behaviour is not unique to TipTap. Any editor built on ProseMirror does the same thing, and that includes quite a few well-known ones. TinyMCE handled lists differently, but that doesn&#x27;t make TinyMCE&#x27;s approach the correct one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your frontend CSS breaks because of this, that&#x27;s a one-time fix, typically just adjusting margin or display rules on &lt;code&gt;li p&lt;/code&gt;. Once it&#x27;s done, you&#x27;re working with markup that is actually more structurally consistent than what TinyMCE produced.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  Closing thought&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;A new editor is disruptive. But disruption is also a chance to reconsider decisions that were made years ago under different constraints, maybe with less knowledge of what Umbraco could do, or just because TinyMCE made it easy and easy felt like good enough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;TipTap is not TinyMCE. It&#x27;s not trying to be. And once you stop expecting it to be, you might find it pushes you toward solutions that are cleaner, better structured and easier to hand off to an editor who has no idea what a DOM is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Work with the grain of the tool, not against it.&lt;/p&gt;]]></description>
                    <pubDate>Mon, 15 Jun 2026 12:47:24 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://codeshare.co.uk/blog/how-i-hacked-the-sticker-printers-at-codegarden-2026/</guid>
                    <title>How I Hacked the Sticker Printers at Codegarden 2026</title>
                    <link>https://codeshare.co.uk/blog/how-i-hacked-the-sticker-printers-at-codegarden-2026/</link>
                    <description><![CDATA[Discover how constraints sparked innovation at Codegarden 2026. I bypassed printer limitations using only my phone and creative problem-solving techniques.]]></description>
                    <pubDate>Mon, 15 Jun 2026 10:29:21 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://umbracocommunity.social/@owaincodes/116753175751677147</guid>
                    <title>New release for umbPublisher 1.5.1</title>
                    <link>https://umbracocommunity.social/@owaincodes/116753175751677147</link>
                    <description><![CDATA[New release for umbPublisher 1.5.1Tags that are set in #obsidian can now be mapped to #umbraco property editor. Available on https://community.obsidian.md/plugins/umbpublisher]]></description>
                    <pubDate>Mon, 15 Jun 2026 08:43:36 Z</pubDate>
                        <category>community</category>
                        <category>social</category>
                        <category>mastodon</category>
                </item>
                <item>
                    <guid>https://dev.to/d_inventor/i-attended-umbraco-codegarden-2026-5dak</guid>
                    <title>I attended Umbraco Codegarden 2026!</title>
                    <link>https://dev.to/d_inventor/i-attended-umbraco-codegarden-2026-5dak</link>
                    <description><![CDATA[&lt;p&gt;Codegarden was last week in Copenhagen! I was there this time and here are my thoughts about the event. Previous time I attended was in 2023, so I will draw some comparisons to that year. It was a great experience and I left feeling generally excited and inspired.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  Organization&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Just like previous time, the event was very well-organized. At Codegarden, you&#x27;re always well taken care of with lunch and dinner, great instructions, a little kick-off at the start of every day and a lot of spatial diversity. You always know what to expect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was very happy to see that the quiet area was easy to find and it was mentioned at the beginning of the event. The previous time I didn&#x27;t know that such a quiet area existed and I spoke out about that. It gave me comfort that I knew where to retreat to when I needed to. Additionally, there were many places to stand or sit outside and inside. The event was also a little shorter, which made it more manageable for me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The location was absolutely ideal for the amount of people that attended. There were many attendees (about 700 they said, if I remember correctly), but at no point did the venue feel crowded. I could always easily get to where I wanted to go, there were no long queues and there was always enough seats for all the talks at every stage.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  Talks&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I&#x27;ll admit that, on the previous Codegarden, I had the wrong expectations for the talks. Talks are obviously aimed at specific target audiences and I don&#x27;t belong to all of them. Some talks aim to inform, while others aim to inspire. Stories are not tutorials. Also, sometimes a talk doesn&#x27;t teach you something new, but simply validates what you were already doing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it was this time too. My focus is currently shifting slightly away from coding and more towards collaboration and I am looking for inspiration on how to deliver better software faster. I specifically wanted to attend &lt;em&gt;Debugging Teams: What High-Performing Developer Teams Do Differently&lt;/em&gt;, because it seemed relevant to me. Although I was hoping for a deep analysis in development process and teamwork strategies, I ended up learning about the importance of trust and of sharing the &quot;what&quot;, &quot;how&quot; and &quot;why&quot; of what we do. It surely gave me something to think about.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I listened to &lt;em&gt;Building Resilient Umbraco Integrations&lt;/em&gt;. A more tutorial-style demonstration with insightful information about what you need to think about when integrating with external services. The presentation included concrete code examples that gave concrete solutions to the presented problems. I personally already knew all of it, but it was nice to see anyway, because it confirms that I&#x27;m already doing it right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A special mention goes to Semira Allen and Jason Wodicka with their talks &lt;em&gt;Drowning in Details: Turning TechTalk Into Everyday Language&lt;/em&gt; and &lt;em&gt;How (not) to mess up everything&lt;/em&gt;. Their talks were incredibly engaging and they were a joy to listen to. I had a good laugh and they were each inspiring in their own ways.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  Some additional thoughts&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Copenhagen:&lt;/strong&gt; The fact that it was in Copenhagen was what made me consider it again. I am not big on traveling abroad and the trip to Odense and back was seriously daunting. Being able to get there with just the airplane made the whole trip so much better!&lt;br&gt;&#xA;&lt;strong&gt;AI:&lt;/strong&gt; I haven&#x27;t mentioned AI in this blog. That&#x27;s because I find the ethics of the application of AI at the moment very questionable. I am still working on forming a well-informed opinion. Umbraco and the community have showcased some very impressive work with AI.&lt;br&gt;&#xA;&lt;strong&gt;Umbraco awards:&lt;/strong&gt; In case you didn&#x27;t know it yet: we were nominated for an Umbraco award for &quot;Accessibility and Security&quot;! Even though we didn&#x27;t win the award, I believe that our submission was still the best. The winning solution had a more visible approach to accessibility, but we can show off a real certification of accessibility with end-user testimonies to back it up. The nomination is a nice validation of my team&#x27;s hard work.&lt;br&gt;&#xA;&lt;strong&gt;Umbraco in the bigger picture?&lt;/strong&gt; Right now I am learning from people like &lt;a href=&quot;https://www.youtube.com/@ModernSoftwareEngineeringYT&quot; rel=&quot;noopener noreferrer&quot;&gt;Dave Farley&lt;/a&gt;, &lt;a href=&quot;https://www.youtube.com/@EmilyBache-tech-coach&quot; rel=&quot;noopener noreferrer&quot;&gt;Emily Bache&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/channel/UC3RKA4vunFAfrfxiJhPEplw&quot; rel=&quot;noopener noreferrer&quot;&gt;Derek Comartin&lt;/a&gt; about better software development practices. Some of it is more about architecture and some of it is about collaboration and process. I feel like these topics deserve more attention in the Umbraco community. I need a talk named &lt;em&gt;How I upgraded my mid-size web agency from feature branch and PR drag to real CI/CD&lt;/em&gt;. Maybe I get to give this talk myself one day, who knows.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  Conclusion&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;It was a great event, and I&#x27;m very happy that I could be there. If it&#x27;s like this again next year, then I will be eager to attend. Thank you Umbraco for everything!&lt;/p&gt;]]></description>
                    <pubDate>Mon, 15 Jun 2026 07:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://owain.codes/blog/2026/june/ocautomatemastodon-released/</guid>
                    <title>OC.Automate.Mastodon released</title>
                    <link>https://owain.codes/blog/2026/june/ocautomatemastodon-released/</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Mon, 15 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://owaincodes.uksouth01.umbraco.io/blog/2026/june/ocautomatemastodon-released/</guid>
                    <title>OC.Automate.Mastodon released</title>
                    <link>https://owaincodes.uksouth01.umbraco.io/blog/2026/june/ocautomatemastodon-released/</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Mon, 15 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/esatto.umbraco.backoffice.sharedpreviewlink</guid>
                    <title>Esatto.Umbraco.Backoffice.SharedPreviewLink</title>
                    <link>https://marketplace.umbraco.com/package/esatto.umbraco.backoffice.sharedpreviewlink</link>
                    <description><![CDATA[Shareable preview links for Umbraco 17. Editors mint a tokenized URL via a workspace-action button; recipients open the URL externally and see the current draft (no backoffice login). Tokens are 7-day data-protected; recipient cookie scopes preview to the specific page for 5 minutes.]]></description>
                    <pubDate>Mon, 15 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/oc.automate.mastodon</guid>
                    <title>OC.Automate.Mastodon</title>
                    <link>https://marketplace.umbraco.com/package/oc.automate.mastodon</link>
                    <description><![CDATA[Mastodon connection type and action for Umbraco Automate. Post statuses to any Mastodon instance as part of an automation workflow.]]></description>
                    <pubDate>Mon, 15 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://33b6c16b-3387-4d68-9090-4cb1f20ea7b3.azurewebsites.nethttps://owain.codes/blog/2026/june/ocautomatemastodon-released/</guid>
                    <title>OC.Automate.Mastodon released</title>
                    <link>https://33b6c16b-3387-4d68-9090-4cb1f20ea7b3.azurewebsites.nethttps://owain.codes/blog/2026/june/ocautomatemastodon-released/</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Mon, 15 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://umbraco.com/blog/across-the-himalayas-and-into-the-heart-of-umbraco/</guid>
                    <title>Across the Himalayas and Into the Heart of Umbraco</title>
                    <link>https://umbraco.com/blog/across-the-himalayas-and-into-the-heart-of-umbraco/</link>
                    <description><![CDATA[Meet Rashmita and Jasper, the founders of One Tech Nepal. Discover how they use their 100% Umbraco agency to fund IT education and libraries in remote Himalayan schools.]]></description>
                    <pubDate>Mon, 15 Jun 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.nevitech.co.uk/blog/codegarden-2026-a-week-in-copenhagen-i-wont-forget/</guid>
                    <title>Codegarden 2026: A Week in Copenhagen I Won&#x27;t Forget</title>
                    <link>https://www.nevitech.co.uk/blog/codegarden-2026-a-week-in-copenhagen-i-wont-forget/</link>
                    <description><![CDATA[Justin reflects on an unforgettable week at Codegarden 2026 in Copenhagen, where he was recognised as an Umbraco MVP, invited on stage during the keynote to demo his AI Log Analyser package, and won the AI Package Award.]]></description>
                    <pubDate>Sun, 14 Jun 2026 23:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://blog.aabech.no/archive/introducing-larsingerlogue-cv-5000/</guid>
                    <title>Introducing Larsingerlogue CV-5000</title>
                    <link>https://blog.aabech.no/archive/introducing-larsingerlogue-cv-5000/</link>
                    <description><![CDATA[&lt;h2&gt;Or how I gave Behringer FCV100 the reference power supply it deserves to use for CV-modulation with Korg Minilogue XD&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;If you&#x27;re here to solve the problem and don&#x27;t care for a story, keep scrolling, you&#x27;ll get to schematics, breadboard pictures and an ingredient list.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;There&#x27;s also a &lt;a href=&quot;#video-montage&quot;&gt;short video montage&lt;/a&gt; for the even more impatient.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://blog.aabech.no/media/1080/intro-image.png&quot; alt=&quot;A logo with the text Larsingerlogue CV-5000 and an FCV100 connected to a gray box&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is quite a different post than I usually make, if I&#x27;m allowed to call it usually anymore at all. In any case, I&#x27;ve been playing the keys in a band for a couple of years and have yearned for a proper synth to supplement my (6) master keyboards. Recently I acquired my first ever analogue synthesizer. It only took 40 years for the dream to come through. I found a 15% cheaper second hand &amp;quot;unused&amp;quot; Korg Minilogue XD. But I only had damper pedals to use with it. Half the fun of synthesizers for me is varying the low pass filter cutoff. It&#x27;s what gives that cool swiping, buzzing or muffled sound depending on how you &amp;quot;turn&amp;quot; it. For that I needed another type of pedal, and not just a regular one.&lt;/p&gt;&#xA;&lt;p&gt;The Minilogue has a ton of hand-controlled potentiometer knobs we can use for a multitude of parameters, amongst others the filter cutoff. However it does not have a regular 1/4&amp;quot; jack slot for expression pedals like keyboards usually have. It has a damper slot, but only for CC64 on/off (sustain on and off). What we want is a full, preferably analogue, range from 0 to 100%. Expression pedals are excellent for this since they&#x27;re basically pot meters you turn with your foot.&lt;/p&gt;&#xA;&lt;p&gt;What the Minilogue comes with are two 1/8&amp;quot; jack &amp;quot;CV in&amp;quot; ports. So I browsed the interwebz for &amp;quot;CV pedal&amp;quot; and found a bunch of alternatives. Since I&#x27;m eyeing a Behringer Poly D come fall I thought the Behringer FCV100 V2 pedal seemed a good deal. It&#x27;s advertised as a volume pedal with a CV option, including reversing polarity. So I ordered one and excitedly unpacked it while the band leader ran out to buy the last 1/8&amp;quot; to 1/8&amp;quot; cable and a 1/8&amp;quot; to 1/4&amp;quot; adapter. I&#x27;d dutifully inserted a 9V battery and optimistically hooked everything up...&lt;/p&gt;&#xA;&lt;p&gt;Nothing!&lt;/p&gt;&#xA;&lt;p&gt;I tried both CV inputs, both polarities, tons of options on the minilogue, but still nothing.&lt;br /&gt;&#xA;When I got home - I plugged a 1/8&amp;quot; into the &lt;em&gt;input&lt;/em&gt; port which according to the interwebs should &amp;quot;power it on&amp;quot;. Still nothing from the CV output. And yes, I &lt;em&gt;had&lt;/em&gt; measured the voltage on the 9V battery.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Note: I have had no ambition doing electronics &amp;quot;right&amp;quot; with this project, nor writing a proper tutorial with a &amp;quot;right&amp;quot; way of doing it. This is a story about fiddling around and getting things to work. It is &lt;em&gt;not&lt;/em&gt; a tutorial in proper electronics, in fact almost the opposite. I have not bothered to look up facts or calculated things. This means people who know their way around electronics might find this article revolting. I&#x27;m sorry. It was a way for me to brush up on how things work and get something working quickly. DIY by fiddling around until it works. Again, sorry, but hopefully other learners might be inspired to both fiddle around &lt;em&gt;and&lt;/em&gt; learn to do the calculations. There&#x27;s even a gem of an insight in the end that only hit me while writing this post. &#x1F607;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2&gt;The research&lt;/h2&gt;&#xA;&lt;p&gt;According to the interwebz, someone claimed to have gotten CV output when they had plugged an unconnected 1/8&amp;quot; jack into input 2, but showed no proof or measurements. The next answer was someone who had done some due dilligence and measured the output. Apparently it only works with instruments that feed a reference voltage from its control voltage (CV) &lt;em&gt;input&lt;/em&gt; in order for the pedal to vary it.&lt;/p&gt;&#xA;&lt;p&gt;So I dug out my trusty old multimeter and started the process of dusting off the parts of my brain still remembering reading &lt;a href=&quot;https://www.goodreads.com/book/show/10796575-there-are-no-electrons&quot;&gt;&amp;quot;There are no Electrons: Electronics for Earthlings&amp;quot;&lt;/a&gt; ten plus years ago. I learned about what tip, ring and sleeve (TRS) for jack plugs are, and all the other variants. Measuring DC between the tip and sleeve of the unconnected side of the cable when pressing the pedal did absolutely nothing. Measuring resistance though showed a varying impedance of 0 through 50k&#x3A9;. If I flipped between TRS and RTS mode on the pedal it seemingly reversed the resistance on the ring, but the tip stayed fixed on 50k&#x3A9; in TRS mode. In any case, after some brain clearing with ChatGPT, I could conclude that the pedal in CV mode is &lt;em&gt;only&lt;/em&gt; a 50k&#x3A9; potmeter and does not provide any of the sweet power from the (now useless) 9V battery I had inserted.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Note: I&#x27;ve left the pedal in RTS mode. In order to use both and reverse polarity there&#x27;s more research and a V2 to be built. See closer to the end for a short rant about the factory presets in Minilogue XD.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I figured there has to be a way to provide that power even if the synth doesn&#x27;t. So after a little more chatting with ChatGPT I figured I could dig through all my old cables and adapters to find an USB cable and adapter we&#x27;re not using. I should be able to &amp;quot;inject&amp;quot; it&#x27;s 5V DC voltage into the jack cable instead of relying on the synth to provide it. I dug through all my treasure drawers and found an USB mini-B 4-pin (?) to USB A cable and cut off the mini-B plug to reveal the two VCC/GND cables and two data cables. I found a couple of horribly old AC USB adapters and measured the DC from both via the cable&#x27;s red (VCC) and black (GND) wires. One gave 3.3V and the other gave 5V. I happily threw the overdue 3.3V one in the &amp;quot;to recycling&amp;quot; bin and rubbed my hands together over the other. (Throwing out one old device should score me at least one plus in the wife&#x27;s accounting system.)&lt;/p&gt;&#xA;&lt;h2&gt;Specifications&lt;/h2&gt;&#xA;&lt;p&gt;Of course it&#x27;s prudent to actually check the specs of the hardware you&#x27;re trying to shove a current into. So I dug up the details in the manuals, which to be honest are both quite a tad more than averagely vague about how to connect control voltage hardware.&lt;/p&gt;&#xA;&lt;p&gt;The Minilogue XD manual has the following gem of a CV mention:&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;CV IN 1 and 2 jacks (3.5 mm monaural mini-phone jack; input voltage: &#x2013;5V to 5V in modulation mode, &#x2013;3V to 5V in CV/gate mode)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;So I figured I&#x27;m safe proceeding with my 0-5V endeavour. We &lt;em&gt;are&lt;/em&gt; going to use it for modulation.&lt;/p&gt;&#xA;&lt;p&gt;The FCV100 manual has a similarly brief description of it&#x27;s &amp;quot;CV&amp;quot; output:&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;1/4&amp;quot; TS - unbalanced Tip: Supply volt. from unit/instr. to be controlled: Impedance: 50kOhm Ring: Slider pick-up (CV dependend on ped. position, impedance: 0-50kOhm)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;There&#x27;s some more specs around 2V and output impedance, but as far as I&#x27;ve understood that&#x27;s all about the volume control feature of the pedal. I have a hard time interpreting whether that sentence says &amp;quot;bring your own power&amp;quot; or &amp;quot;we&#x27;ll use the battery you inserted&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;Having this information and some support from the [un]trusty LLM though, I pressed on to simulating the imagined setup.&lt;/p&gt;&#xA;&lt;h2&gt;Tinkering&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.tinkercad.com/&quot;&gt;Tinkercad&lt;/a&gt; is an awesome tool for budding DYIers wanting to learn or experiment with electronics. Especially if starting to experiment with arduinos or other consumer grade microcontrollers. I could safely experiment with placement of the resistors and different resistance values and until I got the desired voltage output on the simulator&#x27;s multimeter.&lt;/p&gt;&#xA;&lt;p&gt;In place of the pedal I added a regular pot meter. It has three pins which is basically a 1:1 representation of the tip, ring and sleeve on a jack plug. The middle pin is the &amp;quot;wiper&amp;quot;, which I&#x27;d measured on the pedal to output a varying resistance between the ring and sleeve on the opposite end of the jack cable.&lt;br /&gt;&#xA;Back and forth with GPT and the multimeter for a while made me understand that the CV input on the Minilogue likely has an internal 1M&#x3A9; or larger resistor, just like a multimeter has. That&#x27;s how it&#x27;s able to read the voltage loss between the sides and thereby also receive the varying &amp;quot;control voltage&amp;quot; input from the pedal.&lt;/p&gt;&#xA;&lt;p&gt;Tinkercad also sports a USB connector and all the resistors you can dream of. And that&#x27;s the whole recipe for this &amp;quot;CV adapter&amp;quot;. It took some time to remember my URIs (Ohm&#x27;s law) and how things affect the dance of the electrons (or little green men if you prefer). To be honest I still don&#x27;t really know, but fiddling and discussing with GPT got me to something that works with a fair understanding. Mr. GPT had suggested a 50 k&#x3A9; resistor between the pedal and synth, but the simulations led me to choose a 10 k&#x3A9;. Again, the learned and/or dilligent would bother to calculate why.&lt;/p&gt;&#xA;&lt;p&gt;The ingredients for the simulation ended up as follows:&lt;/p&gt;&#xA;&lt;table&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr&gt;&#xA;&lt;th&gt;Name&lt;/th&gt;&#xA;&lt;th&gt;Value&lt;/th&gt;&#xA;&lt;th&gt;Description&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&lt;tr&gt;&#xA;&lt;td&gt;USB Standard A&lt;/td&gt;&#xA;&lt;td&gt;-&lt;/td&gt;&#xA;&lt;td&gt;USB connector. It gives 5V in the simulator as expected.&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Resistor A&lt;/td&gt;&#xA;&lt;td&gt;150 &#x3A9; &lt;br&gt;(several&amp;nbsp;tries)&lt;/td&gt;&#xA;&lt;td&gt;A resistor to limit the circuit current slightly from the USB output. Just to be precaucious.&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Resistor B&lt;/td&gt;&#xA;&lt;td&gt;10 k&#x3A9;&lt;/td&gt;&#xA;&lt;td&gt;A resistor to protect and limit the current going into the synth. (We&#x27;d rather not blow it up...)&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Fake CV in port&lt;/td&gt;&#xA;&lt;td&gt;1 M&#x3A9;&lt;/td&gt;&#xA;&lt;td&gt;A resistor representing the internal impedance of the synth&#x27;s CV sensor and the tip (VCC) and sleeve (GND) of the jack plug.&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Multimeter&lt;/td&gt;&#xA;&lt;td&gt;-&lt;/td&gt;&#xA;&lt;td&gt;A multimeter in resistance mode measuring the loss over the &quot;fake CV in port&quot; resistor.&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Fake pedal&lt;/td&gt;&#xA;&lt;td&gt;50 k&#x3A9;&lt;/td&gt;&#xA;&lt;td&gt;A potentiometer representing the pedal and the tip (VCC), ring (CV out), and sleeve (GND) of the jack plug.&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&lt;/table&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Here&#x27;s the breadboard layout:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://blog.aabech.no/media/1074/larsingerlogue-breadboard-tinkercad.png&quot; alt=&quot;A breadboard layout representing the pedal, extra parts and synth&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;I&#x27;m extremely discontent with how Tinkercad figured to lay out the schematic, but in any case I suppose it is correct. Why couldn&#x27;t the pot go straight to the 10k resistor? Oh well, here&#x27;s it is in all it&#x27;s jumbled glory:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://blog.aabech.no/media/1077/larsingerlogue-schematic-tinkercad.png&quot; alt=&quot;An electronic shematic representing the pedal, extra parts and synth&quot; /&gt;&lt;/p&gt;&#xA;&lt;h2&gt;Prototyping and building in real life&lt;/h2&gt;&#xA;&lt;p&gt;Having the simulation show thumbs up I figured I should try it in real life and do some measurements before hooking anything up to my brand new synth. For some reason Tinkercad shows a tiny explosion on the USB connector when the simulation starts, but my adapter stood the test and I suspect there might be a bug with the implementation on Tinkercad. &#x1F607;&lt;/p&gt;&#xA;&lt;p&gt;I have both breadboards and a plethora of resistors lying around from my Arduino adventures last decade. Finding a breadboard and some resistors didn&#x27;t bide much problem. They&#x27;re all within arms length to my left. But this is where I started going back and forth between the breadboard and Tinkercad. Turns out real life didn&#x27;t give the same measurements as the simulation. Even if I used a PSU of 5.5V instead of a USB connector. My adapter gives 5.5V, remember?&lt;/p&gt;&#xA;&lt;p&gt;Here&#x27;s a little montage of all the crocodiles holding things together.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://blog.aabech.no/media/1073/larsingerlogue-breadboard-prototype.png&quot; alt=&quot;Picture montage showing a breadboard, wires, crocodile clips and a multimeter&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;After a while I had the right resistors to see 0-5V on the multimeter having hooked up the pedal to my shortest mangled jack-cable. I excitedly hooked up some crocodiles to the other half-jack and the breadboard, wearily shoved the plug into my synth and tried the pedal. Sucess! The LCD-display on the synth showed 0 to ... 97%??? So even if the simulator and my multimeter showed I output 5V from the pedal when 100% down the Minilogue expects more. Anyone knowledgeable with electronics will likely know why, but I merely suspect that it somehow &amp;quot;feels&amp;quot; the max input from the source is 5.5V. So it was out with the jack, out with the GND crocodile and in and out with misc initial resistors until I saw 0-100% CV input on the synth. A 150 &#x3A9; resistor turned out to be the sweet spot.&lt;/p&gt;&#xA;&lt;p&gt;I now had proof I could build this &amp;quot;CV-adapter&amp;quot;, so it was time for V1.&lt;/p&gt;&#xA;&lt;h2&gt;Assembling V1&lt;/h2&gt;&#xA;&lt;p&gt;Again from my Arduino-days I found a few circuit boards in my drawers. The smallest ones were 24x18 holes (7x3cm) - a little big. But incidentally I could spot in the corner of my eye something resembling an Arduino-case.  The 7x3 board fits perfectly within, and it&#x27;s a slim one just 1.5cm tall. Perfect!&lt;/p&gt;&#xA;&lt;p&gt;On to the soldering. Not that I lacked any space, but it&#x27;s always nice not having to cross wires. Enter a slightly unorthodox tool, my favorite program in the whole world: Excel. Who needs technical drawing software when you have colorable cells? I first drew up the layout on the left, but inspecting the casing I&#x27;d found I figured I&#x27;d rather flip it around. So I ended up going for the layout on the right.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://blog.aabech.no/media/1079/larsingerlogue_soldering_sketch.png&quot; alt=&quot;Excel sketches of the soldered circuit board&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;I&#x27;m extremely shaky, so soldering took its time. It&#x27;s somewhat of a Zen excercise I&#x27;ve never quite mastered. I also realized way too late (of course) that I&#x27;d been better off stretching a few more wires, but hey - it&#x27;s 10 years since last time I did anything like this.&lt;/p&gt;&#xA;&lt;p&gt;In any case, the first test with the multimeter and pedal showed a semi-constant 5.4V so I had to go back to the soldering board. A few connection tests with the trusty meter showed a lacking connection to ground from the pedal. Even with my new &amp;quot;computer glasses&amp;quot; &lt;em&gt;and&lt;/em&gt; a magnifyer on my little helper I couldn&#x27;t see that the amputated resistor leg I&#x27;d connected to ground wasn&#x27;t connected. But I could find the &lt;em&gt;spot&lt;/em&gt; where the connection ended, so I added kind of a highway of tin all the way. Success!&lt;/p&gt;&#xA;&lt;p&gt;Here&#x27;s how the circuitboard ended up.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://blog.aabech.no/media/1078/larsingerlogue-soldered-circuit.png&quot; alt=&quot;Picture showing of a soldered circuit board&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;The final stretch was to have the board rest well within the box. I was lucky to find some double sided tape in the kitchen, and since one side of the board already rested slighly on the USB and jack cables I chuckled as I cut off another 2.5cm piece of the now 4cm long USB mini cord. It fit perfectly. Tape on the case, tape on the board, and a short piece of USB mini cord as a pillow.&lt;/p&gt;&#xA;&lt;p&gt;Here&#x27;s the final box.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://blog.aabech.no/media/1076/larsingerlogue-final-box.png&quot; alt=&quot;Picture of a box connected to the FCV100&quot; /&gt;&lt;/p&gt;&#xA;&lt;h2&gt;Final fun&lt;/h2&gt;&#xA;&lt;p&gt;Of course my box needed a name and a logo. It didn&#x27;t take many brain-iterations until I landed on Larsingerlogue CV-5000. It&#x27;s &lt;em&gt;my&lt;/em&gt; [Behr]&lt;strong&gt;inger&lt;/strong&gt; [FCV100 to Mini]&lt;strong&gt;logue&lt;/strong&gt;[ XD] &lt;strong&gt;CV-5&lt;strong&gt;[V * 1]&lt;/strong&gt;000&lt;/strong&gt;[mA adapter]. I turned to my age old friend &amp;quot;Impact&amp;quot; and quickly found a fitting gradient in Photoshop.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://blog.aabech.no/media/1075/larsingerlogue-cv-5000.png&quot; alt=&quot;Larsingerlogue CV-5000 logo in fat lettering with a retro colored gradient.&quot; /&gt;&lt;/p&gt;&#xA;&lt;h3&gt;Video montage&lt;/h3&gt;&#xA;&lt;p&gt;I&#x27;d also shot a couple of videos and pictures during the process, so I amused myself by throwing together a short video of the whole process. It features the first built in patch of Minilogue XD and it&#x27;s sample sequence with me &amp;quot;playing&amp;quot; the filter cutoff on the now functioning pedal, and the &amp;quot;riser&amp;quot; delay time and depth using my free hand. Farily cool. And then a quite off-beat attempt at the Stranger Things theme as an RL demo of the final product. Check it out.&lt;/p&gt;&#xA;&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/nTTtX-T8_dE?si=M1ZUYMwnrk0mNLtL&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen&gt;&lt;/iframe&gt;&#xA;&lt;p&gt;I hope you&#x27;ve anjoyed following my little story of dipping my toes in electronics for music. There&#x27;s high potential for a V2 with better polarity support, and who knows what other ideas one might come up with for 100% &amp;quot;DIY&amp;quot; effects to shove into those CV inputs. There&#x27;s still one unused. &#x1F601;&lt;/p&gt;&#xA;&lt;h3&gt;Grief&lt;/h3&gt;&#xA;&lt;p&gt;My only grief, and that&#x27;s kind of connected to the single polarity of my adapter, is that &lt;em&gt;all&lt;/em&gt; of the built-in patches in the Minilogue XD are set to having CV 1 modulating the shape of VCO 1 from 0 to 100%, and CV 2 is set to filter cutoff from 0 to -100%. That means I open the filter by &amp;quot;closing&amp;quot; the pedal and close the filter by &amp;quot;opening&amp;quot; the pedal. Pedal to the floor means almost no audible sound.&lt;/p&gt;&#xA;&lt;h3&gt;Learning while blogging&lt;/h3&gt;&#xA;&lt;p&gt;In hindsight I think I just realized with writing this that 5V on the multimeter means (almost) &lt;em&gt;no&lt;/em&gt; power moves through the resistor, which is measured as 0V - while I&#x27;ve been reading 5V (loss) on the multimeter. That would explain the &amp;quot;weird&amp;quot; direction of the pot meter in the simulation that&#x27;d been bugging me. &#x1F923;&lt;/p&gt;&#xA;&lt;p&gt;But hey - adds to a fun story about learning and just jumping into the water.&lt;/p&gt;&#xA;&lt;p&gt;If you got this far I hope you had a chuckle, nodded or otherwise found this interesting.&lt;br /&gt;&#xA;Thanks a lot for reading, and have fun whatever endeavor led you to this post.&lt;/p&gt;]]></description>
                    <pubDate>Sun, 14 Jun 2026 21:24:09 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/esatto.umbraco.backoffice.dictionaryfiltervalues</guid>
                    <title>Esatto.Umbraco.Backoffice.DictionaryFilterValues</title>
                    <link>https://marketplace.umbraco.com/package/esatto.umbraco.backoffice.dictionaryfiltervalues</link>
                    <description><![CDATA[Extends the Umbraco 17 backoffice Dictionary section filter to also match translation VALUES, not just dictionary-item names. Useful for editors who remember a translated string but not the dictionary key. Adds one authenticated Management API endpoint and a backoffice entry point that re-points the built-in Dictionary collection&#x27;s data source at it &#x2014; no window.fetch patching, no anonymous endpoints.]]></description>
                    <pubDate>Sat, 13 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/esatto.umbraco.backoffice.customeditors</guid>
                    <title>Esatto.Umbraco.Backoffice.CustomEditors</title>
                    <link>https://marketplace.umbraco.com/package/esatto.umbraco.backoffice.customeditors</link>
                    <description><![CDATA[A library of reusable property editor UIs for the Umbraco backoffice. Ships an Encrypted Textbox editor (encrypts sensitive values at rest via ASP.NET Core Data Protection, masked on screen) and a Date Range editor (two inline calendars with start/end constraint, optional time and min/max bounds).]]></description>
                    <pubDate>Sat, 13 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://www.dynamicdave.nl/blog/my-first-umbraco-codegarden/</guid>
                    <title>My First Umbraco Codegarden: More Than Stickers and T-Shirts</title>
                    <link>https://www.dynamicdave.nl/blog/my-first-umbraco-codegarden/</link>
                    <description><![CDATA[After my blog was recently featured on umb.fyi &#x2014; thanks to Matt Brailsford for that &#x2014; I felt like I also owed the community a proper write-up about my very first Codegarden experience.Because honestly, after finally attending for the first time, I completely understand why people keep talking about it long after the event is over.I&#x2019;ve been building with Umbraco since version 4&#x2014;that takes me back to 2012 or maybe 2013. After all those years, I finally made the pilgrimage: my first Codegarden. And wow, I get it now. I see why people talk about this thing like it&#x2019;s some annual family reunion you can&#x2019;t miss, not just a conference. All the stories you hear&#x2014;about the talks, the people, those late nights that blur into early mornings&#x2014;they&#x27;re all real. Still, the heart of it isn&#x2019;t just scavenging for stickers or filling your suitcase with t-shirts. It&#x2019;s something deeper.What really struck me&#x2014;and it hit pretty much as soon as I walked through the doors&#x2014;is that sense of belonging. Suddenly you realize you&#x2019;re a piece of something much bigger than just a CMS, a project, or a logo. You&#x2019;re dropped right into the Umbraco community, and it&#x2019;s almost impossible not to get swept up in that feeling.]]></description>
                    <pubDate>Fri, 12 Jun 2026 22:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=bmfrLgNfQ_g</guid>
                    <title>umbraCoffee - LIVE at #Codegarden 2026!</title>
                    <link>https://www.youtube.com/watch?v=bmfrLgNfQ_g</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Fri, 12 Jun 2026 02:29:10 Z</pubDate>
                        <category>community</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://www.wearediagram.com/blog/diagram-wins-2026-umbraco-award-best-enterprise-solution</guid>
                    <title>Diagram and NATP Win Best Enterprise Solution at the 2026 Umbraco Awards</title>
                    <link>https://www.wearediagram.com/blog/diagram-wins-2026-umbraco-award-best-enterprise-solution</link>
                    <description><![CDATA[We&#x2019;re excited to share that the National Association of Tax Professionals (NATP) website, designed and developed by Diagram, has been named Best Enterprise Solution at the &#xA; 2026 Umbraco Awards.&amp;nbsp;]]></description>
                    <pubDate>Thu, 11 Jun 2026 20:46:10 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/ripplepreview</guid>
                    <title>RipplePreview</title>
                    <link>https://marketplace.umbraco.com/package/ripplepreview</link>
                    <description><![CDATA[See your actual pages while you edit them. Blocks render through your site&#x27;s own views, styles and scripts &#x2014; sections render whole with their children, carousels and animations run, and everything stays editable: hover to highlight a block inside the preview and click to open it.]]></description>
                    <pubDate>Thu, 11 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.aiagentmemory</guid>
                    <title>Umbraco.Community.AiAgentMemory</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.aiagentmemory</link>
                    <description><![CDATA[AI Agent Memory for Umbraco &#x2014; persistent memory &#x2B; learning layer for Umbraco&#x27;s AI agent stack. Editors give thumbs-up / thumbs-down feedback on agent runs via the AI Agent Feedback widget; the package indexes that feedback as searchable memory and injects it into subsequent runs so agents suppress false positives and reuse validated patterns. Composes on Umbraco.AI 1.8&#x2B; (vector store via Umbraco.AI.Search). Memory is off by default; per-agent opt-in via appsettings.json. Built for Umbraco v17&#x2B;.]]></description>
                    <pubDate>Thu, 11 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/im.umbraco.ai.local</guid>
                    <title>IM.Umbraco.AI.Local</title>
                    <link>https://marketplace.umbraco.com/package/im.umbraco.ai.local</link>
                    <description><![CDATA[Local LLM provider for Umbraco AI. Connects the Umbraco backoffice AI features (prompts, agents, Copilot, embeddings) to any OpenAI-compatible self-hosted server such as Ollama, LM Studio or vLLM &#x2014; no cloud account required.]]></description>
                    <pubDate>Thu, 11 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/flowcourier.umbraco.cookieconsent</guid>
                    <title>Flowcourier.Umbraco.CookieConsent</title>
                    <link>https://marketplace.umbraco.com/package/flowcourier.umbraco.cookieconsent</link>
                    <description><![CDATA[A comprehensive cookie consent solution for Umbraco CMS with Google Consent Mode v2 support, customizable categories, and statistics tracking.]]></description>
                    <pubDate>Wed, 10 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.forms.automate</guid>
                    <title>Umbraco.Forms.Automate</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.forms.automate</link>
                    <description><![CDATA[Umbraco Forms triggers and actions for Umbraco Automate]]></description>
                    <pubDate>Wed, 10 Jun 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.engage.automate</guid>
                    <title>Umbraco.Engage.Automate</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.engage.automate</link>
                    <description><![CDATA[Umbraco Engage triggers and actions for Umbraco Automate]]></description>
                    <pubDate>Wed, 10 Jun 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.workflow.automate</guid>
                    <title>Umbraco.Workflow.Automate</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.workflow.automate</link>
                    <description><![CDATA[Umbraco Workflow triggers for Umbraco Automate]]></description>
                    <pubDate>Wed, 10 Jun 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.commerce.automate</guid>
                    <title>Umbraco.Commerce.Automate</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.commerce.automate</link>
                    <description><![CDATA[Umbraco Commerce triggers and actions for Umbraco Automate]]></description>
                    <pubDate>Wed, 10 Jun 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.ai.automate</guid>
                    <title>Umbraco.AI.Automate</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.ai.automate</link>
                    <description><![CDATA[Umbraco Automate integration for Umbraco.AI.Agent]]></description>
                    <pubDate>Wed, 10 Jun 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.ai.search</guid>
                    <title>Umbraco.AI.Search</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.ai.search</link>
                    <description><![CDATA[AI-powered vector search provider for Umbraco CMS]]></description>
                    <pubDate>Wed, 10 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/bt.redirectmanager</guid>
                    <title>BT.RedirectManager</title>
                    <link>https://marketplace.umbraco.com/package/bt.redirectmanager</link>
                    <description><![CDATA[Modern URL redirect manager for Umbraco 13 and 17. Manage 301, 302, 404, and 410 redirects from a clean backoffice dashboard with regex support, CSV import/export, and a built&#x2011;in test tool.]]></description>
                    <pubDate>Wed, 10 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.deploy.automate</guid>
                    <title>Umbraco.Deploy.Automate</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.deploy.automate</link>
                    <description><![CDATA[Umbraco Deploy support for Umbraco Automate (artifacts, service connectors, triggers and actions).]]></description>
                    <pubDate>Wed, 10 Jun 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/esatto.umbraco.backoffice.contenttreednd</guid>
                    <title>Esatto.Umbraco.Backoffice.ContentTreeDnd</title>
                    <link>https://marketplace.umbraco.com/package/esatto.umbraco.backoffice.contenttreednd</link>
                    <description><![CDATA[Native HTML5 drag-and-drop for the Umbraco 17 backoffice Content tree. Adds three-zone (above / into / below) drop targets per row with optimistic same-parent reorder and full cross-parent move support. Pure App_Plugins package &#x2014; no C# code.]]></description>
                    <pubDate>Wed, 10 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/crumpled.nostalgid</guid>
                    <title>Crumpled.Nostalgid</title>
                    <link>https://marketplace.umbraco.com/package/crumpled.nostalgid</link>
                    <description><![CDATA[...]]></description>
                    <pubDate>Wed, 10 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://umbraco.com/blog/umbraco-product-updatecodegarden-keynote-highlights-q2-2026/</guid>
                    <title>Umbraco Product Update/Codegarden Keynote Highlights, Q2 2026</title>
                    <link>https://umbraco.com/blog/umbraco-product-updatecodegarden-keynote-highlights-q2-2026/</link>
                    <description><![CDATA[Missed the Codegarden 2026 Keynote? Catch up on Umbraco&#x27;s Q2 product updates, including Umbraco Automate (new product!), CMS Elements, and Load Balancing for Cloud.]]></description>
                    <pubDate>Wed, 10 Jun 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://umbraco.com/blog/the-umbraco-mvps-2026/</guid>
                    <title>The Umbraco MVPs 2026</title>
                    <link>https://umbraco.com/blog/the-umbraco-mvps-2026/</link>
                    <description><![CDATA[Meet our Umbraco MVPs for 2026. These are our Most Valuable People, people who have a passion for contributing to Umbraco and the Umbraco Community.]]></description>
                    <pubDate>Wed, 10 Jun 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://umbraco.com/blog/umbraco-awards-winners-2026/</guid>
                    <title>Umbraco Awards Winners 2026 &#x1F3C6;</title>
                    <link>https://umbraco.com/blog/umbraco-awards-winners-2026/</link>
                    <description><![CDATA[Umbraco Awards 2026 winners are announced! Discover the outstanding projects and celebrate the amazing work within the Umbraco ecosystem.]]></description>
                    <pubDate>Wed, 10 Jun 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.automate</guid>
                    <title>Umbraco.Automate</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.automate</link>
                    <description><![CDATA[Umbraco Automate]]></description>
                    <pubDate>Wed, 10 Jun 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://www.dynamicdave.nl/blog/nominated-for-an-umbraco-solution-award/</guid>
                    <title>Nominated for an Umbraco Solution Award</title>
                    <link>https://www.dynamicdave.nl/blog/nominated-for-an-umbraco-solution-award/</link>
                    <description><![CDATA[Feeling incredibly proud to have been nominated for an Umbraco Solution Award this year!]]></description>
                    <pubDate>Tue, 09 Jun 2026 22:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://codeshare.co.uk/blog/how-to-add-giscus-comments-to-an-umbraco-site/</guid>
                    <title>How to add Giscus Comments to an Umbraco Site</title>
                    <link>https://codeshare.co.uk/blog/how-to-add-giscus-comments-to-an-umbraco-site/</link>
                    <description><![CDATA[Add Giscus comments to your Umbraco site with GitHub Discussions. Free, open-source comment system with no backend, privacy-friendly, and developer-native.]]></description>
                    <pubDate>Mon, 08 Jun 2026 01:18:50 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.cms.search.core</guid>
                    <title>Umbraco.Cms.Search.Core</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.cms.search.core</link>
                    <description><![CDATA[Umbraco Search provides an abstraction for search services in Umbraco, allowing for implementations using search providers such as Examine.]]></description>
                    <pubDate>Mon, 08 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://www.enkelmedia.se/blogg/2026/6/7/codegarden-talk-hybrid-cache-changes-everything?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss</guid>
                    <title>CodeGarden-talk: Hybrid Cache changes everything</title>
                    <link>https://www.enkelmedia.se/blogg/2026/6/7/codegarden-talk-hybrid-cache-changes-everything?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss</link>
                    <description><![CDATA[I recently spent some time looking closer at the new HybridCache implementation in Umbraco to prepare for my presentation at CodeGarden 2026, and the short version is this: it changes more than just the cache layer.&#xA;&#xA;Historically, Umbraco has been very good at keeping published content available in memory. That has made many common developer patterns feel cheap and convenient. Things like traversing content trees, using `.Children()`, `.Descendants()` and resolving references have often just worked without us thinking too much about the cost.&#xA;With HybridCache, that mental model changes. The cache is still there, but not everything necessarily lives in memory all the time.&#xA;The big win is scalability&#xA;The reason for this change is very easy to understand when looking at large Umbraco installations.&#xA;Keeping everything in memory can work beautifully for small and medium-sized sites, but it becomes painful when a site has hundreds of thousands of pages, many languages, or very large content structures. Startup time, memory usage and hosting constraints can become real problems.&#xA;HybridCache helps by reducing the memory footprint and making startup faster. Instead of loading everything into memory, Umbraco can seed important content and load other content when needed. That is a big architectural improvement.&#xA;The cost did not disappear&#xA;The interesting part, at least for me as a developer, is that the cost did not vanish. It moved.&#xA;Some operations that used to feel almost free can now become more expensive, especially on larger sites. Traversing a large tree, filtering over many children, or resolving many references may trigger more cache lookups or database access than before.&#xA;That does not mean HybridCache is bad. Quite the opposite. But it does mean we need to be more intentional about how we build things like menus, listings, sitemaps and search-driven pages.&#xA;&#xA;Use the right tool for the job&#xA;One of my main takeaways is that we should stop treating the published content cache as the answer to everything.&#xA;For search and filtering, Examine is often a much better fit. For menus, footers and repeated structures, runtime cache or prebuilt DTOs can be a good option. For sitemaps, adding the right data to the index (e.g. URLs) can be much more scalable than traversing the whole content tree.&#xA;So the practical message is simple: measure, observe, and choose the right approach based on what the page actually needs to do.&#xA;HybridCache gives Umbraco a better foundation for large sites, but it also makes performance patterns more visible. And honestly, that is probably a good thing.&#xA;Download the slides&#xA;I&#x2019;ve shared the full slide deck from the presentation if you want to dig into the examples, benchmarks and diagrams in more detail.&#xA;Download the slides]]></description>
                    <pubDate>Sun, 07 Jun 2026 05:31:32 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/knowit.umbraco.translationmanager</guid>
                    <title>Knowit.Umbraco.TranslationManager</title>
                    <link>https://marketplace.umbraco.com/package/knowit.umbraco.translationmanager</link>
                    <description><![CDATA[Backoffice dashboard for auditing Umbraco translation dictionary keys against actual code usage. Surfaces unused keys, missing translations, and language coverage gaps across Razor, React, Vue, or any custom pattern. Includes a setup wizard, multi-source scanning, and bulk dictionary management.]]></description>
                    <pubDate>Fri, 05 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/knowit.umbraco.svgpicker</guid>
                    <title>Knowit.Umbraco.SvgPicker</title>
                    <link>https://marketplace.umbraco.com/package/knowit.umbraco.svgpicker</link>
                    <description><![CDATA[Property editor for Umbraco 17 that adds a visual SVG icon picker to the backoffice. Editors browse and search symbols from any configured SVG spritesheet. Stores the symbol ID as a plain string and renders as svg/use in Razor via a built-in Html.SvgIcon() helper.]]></description>
                    <pubDate>Fri, 05 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://joe.gl/ombek/blog/codegarden-packing-list/</guid>
                    <title>Codegarden: What to bring (2026 edition!)</title>
                    <link>https://joe.gl/ombek/blog/codegarden-packing-list/</link>
                    <description><![CDATA[Wow, hasn&#x27;t time flown?! This weekend I&#x27;ll be boarding my plane to Denmark ahead of Codegarden 2026 so it&#x27;s about time we thought about packing our bags! But what to bring? If you&#x27;ve not been before, or if you&#x27;re forgetful like I am, I&#x27;ve written you a packing list...]]></description>
                    <pubDate>Thu, 04 Jun 2026 10:14:30 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://umbraco.com/blog/security-advisory-june-4-2026-security-patch-for-umbracoai-is-now-available/</guid>
                    <title>Umbraco.AI Security Advisory, June 4, 2026</title>
                    <link>https://umbraco.com/blog/security-advisory-june-4-2026-security-patch-for-umbracoai-is-now-available/</link>
                    <description><![CDATA[Security patches are available for Umbraco.AI core package, versions 1.0.0 through 1.13.x versions fix a moderate vulnerability. Find the fix here]]></description>
                    <pubDate>Thu, 04 Jun 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://uskinned.net/blog/all-starter-kit-and-theme-add-ons-are-now-available-for-umbraco-17/</guid>
                    <title>All uSkinned Starter Kit and Themes Add-ons Out for Umbraco 17</title>
                    <link>https://uskinned.net/blog/all-starter-kit-and-theme-add-ons-are-now-available-for-umbraco-17/</link>
                    <description><![CDATA[All Starter Kit and Themes Add-ons Out for Umbraco 17&#xA;Every uSkinned Starter Kit and Theme add-on is now ready for Umbraco 17 and uSkinned Site Builder 7.]]></description>
                    <pubDate>Wed, 03 Jun 2026 09:42:08 Z</pubDate>
                        <category>blog</category>
                        <category>community</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.markup</guid>
                    <title>SplatDev.Umbraco.Markup</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.markup</link>
                    <description><![CDATA[HTML/markup helpers and extensions for Umbraco 13 (net8.0) and Umbraco 17 (net10.0)]]></description>
                    <pubDate>Wed, 03 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.charlimit</guid>
                    <title>SplatDev.Umbraco.Plugins.CharLimit</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.charlimit</link>
                    <description><![CDATA[Character limit property editor for Umbraco &#x2014; enforces max length on text properties with live counter display.]]></description>
                    <pubDate>Wed, 03 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.rdpmanager</guid>
                    <title>SplatDev.Umbraco.Plugins.RdpManager</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.rdpmanager</link>
                    <description><![CDATA[Umbraco Remote Desktop connection manager plugin &#x2014; store RDP configs and generate .rdp file downloads. Supports Umbraco 13 (net8.0) and Umbraco 17 (net10.0)]]></description>
                    <pubDate>Wed, 03 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.countries</guid>
                    <title>SplatDev.Umbraco.Plugins.Countries</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.countries</link>
                    <description><![CDATA[Umbraco countries data plugin supporting Umbraco 13 (net8.0) and Umbraco 17 (net10.0)]]></description>
                    <pubDate>Wed, 03 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/blendinteractive.umbraco.securitydashboard</guid>
                    <title>BlendInteractive.Umbraco.SecurityDashboard</title>
                    <link>https://marketplace.umbraco.com/package/blendinteractive.umbraco.securitydashboard</link>
                    <description><![CDATA[The Umbraco Security Dashboard is a package that provides a dashboard within the Umbraco backoffice to help identify potential security vulnerabilities in installed packages. It scans installed packages against known vulnerabilities and can report vulnerabilities to a central location via webhook.]]></description>
                    <pubDate>Wed, 03 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.customlogin</guid>
                    <title>SplatDev.Umbraco.Plugins.CustomLogin</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.customlogin</link>
                    <description><![CDATA[Umbraco custom login page plugin with branding support, SSO integration hooks and 2FA readiness. Supports Umbraco 13 (net8.0) and Umbraco 17 (net10.0).]]></description>
                    <pubDate>Wed, 03 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.examineextensions</guid>
                    <title>SplatDev.Umbraco.Plugins.ExamineExtensions</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.examineextensions</link>
                    <description><![CDATA[Examine search extensions for Umbraco &#x2014; additional query helpers, result transformers, and index utilities.]]></description>
                    <pubDate>Wed, 03 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.seo</guid>
                    <title>SplatDev.Umbraco.Plugins.SEO</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.seo</link>
                    <description><![CDATA[Umbraco SEO plugin supporting Umbraco 13 (net8.0) and Umbraco 17 (net10.0)]]></description>
                    <pubDate>Wed, 03 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.slider</guid>
                    <title>SplatDev.Umbraco.Plugins.Slider</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.slider</link>
                    <description><![CDATA[Image slider plugin for Umbraco &#x2014; stores slide data with EF Core, renders via configurable view component.]]></description>
                    <pubDate>Wed, 03 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.memberlogin</guid>
                    <title>SplatDev.Umbraco.Plugins.MemberLogin</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.memberlogin</link>
                    <description><![CDATA[Custom member login for Umbraco: login form, remember me, forgot password, lockout handling. Supports Umbraco 13 (net8.0) and Umbraco 17 (net10.0).]]></description>
                    <pubDate>Wed, 03 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.membertypes</guid>
                    <title>SplatDev.Umbraco.Plugins.MemberTypes</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.membertypes</link>
                    <description><![CDATA[Umbraco Member Type management plugin: create/edit custom member types with profile fields, custom properties and type templates. Supports Umbraco 13 (net8.0) and Umbraco 17 (net10.0).]]></description>
                    <pubDate>Wed, 03 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.socialmedia.share</guid>
                    <title>SplatDev.Umbraco.Plugins.SocialMedia.Share</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.socialmedia.share</link>
                    <description><![CDATA[Umbraco social sharing buttons plugin &#x2014; configurable platforms and share links. Supports Umbraco 13 (net8.0) and Umbraco 17 (net10.0)]]></description>
                    <pubDate>Wed, 03 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.tweets</guid>
                    <title>SplatDev.Umbraco.Plugins.Tweets</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.tweets</link>
                    <description><![CDATA[Twitter/X feed display plugin for Umbraco 13 (net8.0) and Umbraco 17 (net10.0). Caches tweets locally and refreshes on a configurable schedule.]]></description>
                    <pubDate>Wed, 03 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.visitorcounter</guid>
                    <title>SplatDev.Umbraco.Plugins.VisitorCounter</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.visitorcounter</link>
                    <description><![CDATA[Umbraco visitor counter plugin: tracks unique and total site visitors, provides daily counts and a display widget. Supports Umbraco 13 (net8.0) and Umbraco 17 (net10.0).]]></description>
                    <pubDate>Wed, 03 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.surveys</guid>
                    <title>SplatDev.Umbraco.Plugins.Surveys</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.surveys</link>
                    <description><![CDATA[Umbraco survey builder plugin with questions, multiple choice, free text, rating, and results dashboard. Supports Umbraco 13 (net8.0) and Umbraco 17 (net10.0).]]></description>
                    <pubDate>Wed, 03 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.wordsapi</guid>
                    <title>SplatDev.Umbraco.Plugins.WordsApi</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.wordsapi</link>
                    <description><![CDATA[Umbraco Words API plugin supporting Umbraco 13 (net8.0) and Umbraco 17 (net10.0)]]></description>
                    <pubDate>Wed, 03 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.newsticker</guid>
                    <title>SplatDev.Umbraco.Plugins.NewsTicker</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.newsticker</link>
                    <description><![CDATA[Scrolling news ticker plugin for Umbraco 13 (net8.0) and Umbraco 17 (net10.0). Configurable items, speed, and direction stored in the database.]]></description>
                    <pubDate>Wed, 03 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.exceptionmanager</guid>
                    <title>SplatDev.Umbraco.Plugins.ExceptionManager</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.exceptionmanager</link>
                    <description><![CDATA[Umbraco exception handling middleware plugin supporting Umbraco 13 (net8.0) and Umbraco 17 (net10.0)]]></description>
                    <pubDate>Wed, 03 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.newsletters</guid>
                    <title>SplatDev.Umbraco.Plugins.Newsletters</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.newsletters</link>
                    <description><![CDATA[Newsletter subscriber management, campaigns, and send tracking for Umbraco 13 (net8.0) and Umbraco 17 (net10.0).]]></description>
                    <pubDate>Wed, 03 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.rsvp</guid>
                    <title>SplatDev.Umbraco.Plugins.Rsvp</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.rsvp</link>
                    <description><![CDATA[Umbraco RSVP event registration plugin with attendee management, capacity limits, waitlisting, and cancellation support. Supports Umbraco 13 (net8.0) and Umbraco 17 (net10.0).]]></description>
                    <pubDate>Wed, 03 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.ispservices</guid>
                    <title>SplatDev.Umbraco.Plugins.IspServices</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.ispservices</link>
                    <description><![CDATA[Umbraco ISP/IP services utilities plugin supporting Umbraco 13 (net8.0) and Umbraco 17 (net10.0)]]></description>
                    <pubDate>Wed, 03 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://www.jeroenbreuer.nl/blog/umbraco-openid-connect-example-with-lightweight-external-members/</guid>
                    <title>Umbraco OpenID Connect example with lightweight external members</title>
                    <link>https://www.jeroenbreuer.nl/blog/umbraco-openid-connect-example-with-lightweight-external-members/</link>
                    <description><![CDATA[The Umbraco OpenID Connect example has been updated to Umbraco 17.4.2 with support for lightweight external members . This stores members from an external provider as a minimal record instead of a full content entity.]]></description>
                    <pubDate>Tue, 02 Jun 2026 17:37:28 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://owain.codes/blog/2026/june/speed-up-slow-deployments-to-umbraco-cloud/</guid>
                    <title>Speed up slow deployments to Umbraco Cloud</title>
                    <link>https://owain.codes/blog/2026/june/speed-up-slow-deployments-to-umbraco-cloud/</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Tue, 02 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.payments.mercadopago</guid>
                    <title>SplatDev.Umbraco.Plugins.Payments.MercadoPago</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.payments.mercadopago</link>
                    <description><![CDATA[MercadoPago payment integration for Umbraco. Supports preference creation, payment status lookup, and webhook handling. Supports Umbraco 13 (net8.0) and Umbraco 17 (net10.0).]]></description>
                    <pubDate>Tue, 02 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.d4sign</guid>
                    <title>SplatDev.Umbraco.Plugins.D4Sign</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.d4sign</link>
                    <description><![CDATA[D4Sign digital signature integration for Umbraco. Supports document upload, signer management, webhook processing, and a Lit 3 backoffice dashboard. Supports Umbraco 13 (net8.0) and Umbraco 17 (net10.0).]]></description>
                    <pubDate>Tue, 02 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.videopreview</guid>
                    <title>SplatDev.Umbraco.Plugins.VideoPreview</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.videopreview</link>
                    <description><![CDATA[Video thumbnail preview for Umbraco &#x2014; auto-generate thumbnail URLs from YouTube, Vimeo, and Dailymotion video URLs. Supports Umbraco 13 (net8.0) and Umbraco 17 (net10.0).]]></description>
                    <pubDate>Tue, 02 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.adminbar</guid>
                    <title>SplatDev.Umbraco.Plugins.AdminBar</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.adminbar</link>
                    <description><![CDATA[Fixed admin bar injected at the top of the page for logged-in backoffice users. Provides Edit Page, Preview and Publish shortcuts. Supports Umbraco 13 (net8.0) and Umbraco 17 (net10.0).]]></description>
                    <pubDate>Tue, 02 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.newsletter</guid>
                    <title>SplatDev.Umbraco.Plugins.Newsletter</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.newsletter</link>
                    <description><![CDATA[Newsletter subscriber lists, campaigns, Mailgun bulk send, and stats tracking for Umbraco 17 (net10.0). Depends on SplatDev.Umbraco.Plugins.EmailTemplates for rendering.]]></description>
                    <pubDate>Tue, 02 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.livevideo</guid>
                    <title>SplatDev.Umbraco.Plugins.LiveVideo</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.livevideo</link>
                    <description><![CDATA[Live video embed for Umbraco &#x2014; YouTube Live, Twitch, and Vimeo live stream integration. Supports Umbraco 13 (net8.0) and Umbraco 17 (net10.0).]]></description>
                    <pubDate>Tue, 02 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/uskinnedsitebuilder.starterkit.thefoundry</guid>
                    <title>uSkinnedSiteBuilder.StarterKit.TheFoundry</title>
                    <link>https://marketplace.umbraco.com/package/uskinnedsitebuilder.starterkit.thefoundry</link>
                    <description><![CDATA[The Foundry Starter Kit for uSkinned Site Builder for Umbraco CMS]]></description>
                    <pubDate>Tue, 02 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.payments.pagseguro</guid>
                    <title>SplatDev.Umbraco.Plugins.Payments.PagSeguro</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.payments.pagseguro</link>
                    <description><![CDATA[PagSeguro payment integration for Umbraco. Supports checkout session creation, transaction status lookup. Supports Umbraco 13 (net8.0) and Umbraco 17 (net10.0).]]></description>
                    <pubDate>Tue, 02 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.gdrp</guid>
                    <title>SplatDev.Umbraco.Plugins.Gdrp</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.gdrp</link>
                    <description><![CDATA[GDPR compliance plugin for Umbraco &#x2014; cookie consent banner, data export, and right to erasure requests. Supports Umbraco 13 (net8.0) and Umbraco 17 (net10.0).]]></description>
                    <pubDate>Tue, 02 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.enotassina</guid>
                    <title>SplatDev.Umbraco.Plugins.ENotAssina</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.enotassina</link>
                    <description><![CDATA[e-Not Assina electronic signature integration for Umbraco. Supports document creation, sequential signing, webhook processing, PDF download, and a Lit 3 backoffice dashboard. Supports Umbraco 13 (net8.0) and Umbraco 17 (net10.0).]]></description>
                    <pubDate>Tue, 02 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.payments.bancointer</guid>
                    <title>SplatDev.Umbraco.Plugins.Payments.BancoInter</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.payments.bancointer</link>
                    <description><![CDATA[Banco Inter payment integration for Umbraco. Supports Pix (immediate and due charges), Boleto com Pix, Banking (outbound Pix, boleto payments, balance/statement), and webhook handling. Supports Umbraco 13 (net8.0) and Umbraco 17 (net10.0).]]></description>
                    <pubDate>Tue, 02 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://33b6c16b-3387-4d68-9090-4cb1f20ea7b3.azurewebsites.nethttps://owain.codes/blog/2026/june/speed-up-slow-deployments-to-umbraco-cloud/</guid>
                    <title>Speed up slow deployments to Umbraco Cloud</title>
                    <link>https://33b6c16b-3387-4d68-9090-4cb1f20ea7b3.azurewebsites.nethttps://owain.codes/blog/2026/june/speed-up-slow-deployments-to-umbraco-cloud/</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Tue, 02 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.dictionarymanager</guid>
                    <title>SplatDev.Umbraco.Plugins.DictionaryManager</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.dictionarymanager</link>
                    <description><![CDATA[Dictionary import/export/CRUD manager for Umbraco &#x2014; full rewrite of the Umbraco 8 plugin using ILocalizationService. Supports Umbraco 13 (net8.0) and Umbraco 17 (net10.0).]]></description>
                    <pubDate>Tue, 02 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://skrift.io/issues/#128</guid>
                    <title>Skrift Issue #128</title>
                    <link>https://skrift.io/issues/#128</link>
                    <description><![CDATA[Featuring guest posts by Pasang Tamang on &quot;From Umbraco 8 to Umbraco 17 in One Leap: uSync, Cursor, and the Umbraco MCP&quot; and Aaron Sawyer on &quot;Using Local LLMs wth Umbraco MCP&quot;]]></description>
                    <pubDate>Tue, 02 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                        <category>skrift</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.hiddencontent</guid>
                    <title>SplatDev.Umbraco.Plugins.HiddenContent</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.hiddencontent</link>
                    <description><![CDATA[Umbraco Hidden Content plugin: hide nodes from navigation and sitemaps while keeping them accessible by URL via the umbracoNaviHide property. Supports Umbraco 13 (net8.0) and Umbraco 17 (net10.0).]]></description>
                    <pubDate>Tue, 02 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.mailer</guid>
                    <title>SplatDev.Umbraco.Plugins.Mailer</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.mailer</link>
                    <description><![CDATA[Umbraco mailer plugin supporting Umbraco 13 (net8.0) and Umbraco 17 (net10.0)]]></description>
                    <pubDate>Tue, 02 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://owaincodes.uksouth01.umbraco.io/blog/2026/june/speed-up-slow-deployments-to-umbraco-cloud/</guid>
                    <title>Speed up slow deployments to Umbraco Cloud</title>
                    <link>https://owaincodes.uksouth01.umbraco.io/blog/2026/june/speed-up-slow-deployments-to-umbraco-cloud/</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Tue, 02 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.passwordsettings</guid>
                    <title>SplatDev.Umbraco.Plugins.PasswordSettings</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.passwordsettings</link>
                    <description><![CDATA[Umbraco Password Settings plugin: complexity rules, expiration, history (prevent reuse), strength meter. Supports Umbraco 13 (net8.0) and Umbraco 17 (net10.0).]]></description>
                    <pubDate>Tue, 02 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.emailnotifications</guid>
                    <title>SplatDev.Umbraco.Plugins.EmailNotifications</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.emailnotifications</link>
                    <description><![CDATA[Email template engine, Mailgun mail provider, newsletter campaigns, and member notifications for Umbraco 13 (net8.0) and Umbraco 17 (net10.0).]]></description>
                    <pubDate>Tue, 02 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.restricted</guid>
                    <title>SplatDev.Umbraco.Plugins.Restricted</title>
                    <link>https://marketplace.umbraco.com/package/splatdev.umbraco.plugins.restricted</link>
                    <description><![CDATA[Umbraco Restricted Content plugin: member-only content gates, role-based access and paywall support using IPublicAccessService. Supports Umbraco 13 (net8.0) and Umbraco 17 (net10.0).]]></description>
                    <pubDate>Tue, 02 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://www.dynamicdave.nl/blog/why-2026-is-finally-the-year-i-m-going-to-codegarden/</guid>
                    <title>Why 2026 Is Finally the Year I&#x27;m Going to Codegarden</title>
                    <link>https://www.dynamicdave.nl/blog/why-2026-is-finally-the-year-i-m-going-to-codegarden/</link>
                    <description><![CDATA[Some things just hang around on your bucket list forever. You tell yourself, &#x201C;maybe next year,&#x201D; but you never actually get around to it. For me, that&#x2019;s always been Codegarden.I&#x2019;ve been working with Umbraco since version 4&#x2014;so, we&#x2019;re talking 2012 or 2013. That&#x2019;s over a decade of projects, bug fixes, and late-night &#x201C;why is this still broken?&#x201D; moments. But I&#x2019;ve never packed a bag and headed to Copenhagen for the biggest Umbraco event on the planet. Not once. Until now.]]></description>
                    <pubDate>Mon, 01 Jun 2026 22:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://umbraco.com/blog/more-visibility-more-control-whats-new-in-umbraco-cloud/</guid>
                    <title>More Visibility, More Control. What&#x27;s New in Umbraco Cloud</title>
                    <link>https://umbraco.com/blog/more-visibility-more-control-whats-new-in-umbraco-cloud/</link>
                    <description><![CDATA[Discover what&#x2019;s new and coming next in Umbraco Cloud. Explore new features like performance insights, security updates, and dedicated scaling for agencies.]]></description>
                    <pubDate>Mon, 01 Jun 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://kjac.dev/posts/in-memory-umbraco-search/</guid>
                    <title>In-memory Umbraco Search</title>
                    <link>https://kjac.dev/posts/in-memory-umbraco-search/</link>
                    <description><![CDATA[How to run Umbraco Search purely in-memory.]]></description>
                    <pubDate>Mon, 01 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://33b6c16b-3387-4d68-9090-4cb1f20ea7b3.azurewebsites.nethttps://owain.codes/blog/2026/june/fixing-the-sort-order-in-content-pickers-in-umbraco/</guid>
                    <title>Fixing the sort order in Content Pickers in Umbraco</title>
                    <link>https://33b6c16b-3387-4d68-9090-4cb1f20ea7b3.azurewebsites.nethttps://owain.codes/blog/2026/june/fixing-the-sort-order-in-content-pickers-in-umbraco/</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Mon, 01 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/fastgooey.umbracoforms</guid>
                    <title>FastGooey.UmbracoForms</title>
                    <link>https://marketplace.umbraco.com/package/fastgooey.umbracoforms</link>
                    <description><![CDATA[Render Umbraco Forms into native iOS, macOS and Flutter viewing surfaces directly from your Umbraco projects.]]></description>
                    <pubDate>Mon, 01 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://owaincodes.uksouth01.umbraco.io/blog/2026/june/fixing-the-sort-order-in-content-pickers-in-umbraco/</guid>
                    <title>Fixing the sort order in Content Pickers in Umbraco</title>
                    <link>https://owaincodes.uksouth01.umbraco.io/blog/2026/june/fixing-the-sort-order-in-content-pickers-in-umbraco/</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Mon, 01 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://owain.codes/blog/2026/june/fixing-the-sort-order-in-content-pickers-in-umbraco/</guid>
                    <title>Fixing the sort order in Content Pickers in Umbraco</title>
                    <link>https://owain.codes/blog/2026/june/fixing-the-sort-order-in-content-pickers-in-umbraco/</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Mon, 01 Jun 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=cCqq76ItuB4</guid>
                    <title>umbraCoffee - Agents, Codegarden, Tees</title>
                    <link>https://www.youtube.com/watch?v=cCqq76ItuB4</link>
                    <description><![CDATA[Welcome to your monthly dose of #umbraCoffee&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;&#x200B;! Your hosts - Marcin and Callum - together with their guest(s) will drive through all of the community news and happenings in the Umbraco world. So... grab a cuppa, join us LIVE and enjoy!&#xA;&#xA;Today we&#x27;re joined by Adam Shallcross, CEO &amp; Founder of Cogworks &#x2013; and curator oft the Human Vibe Loop newsletter.&#xA;&#xA;See ya?!&#xA;&#xA;---&#xA;&#x2615; Wanna buy us a coffee/pizza/donuts?&#xA;https://www.buymeacoffee.com/umbracoffee&#xA;---&#xA;&#xA;Notes:&#xA;&#xA;- Skrift: https://skrift.io/issues/?utm_source=umbfyi&amp;utm_medium=web#127&#xA;- https://umbraad.com/&#xA;- Bootstrap 3 bye bye from Forms: https://github.com/umbraco/Announcements/issues/35&#xA;- AI Agents everywhere&#x2026;&#xA;- https://codeshare.co.uk/blog/designing-an-ai-agent-skill-for-adding-a-page-type-to-umbraco/&#xA;- Adam&#x2019;s demo? https://marketplace.umbraco.com/package/agentrun.umbraco&#xA;- AI search: https://examinex.online/2026/04/16/ai-semantic-ranking-for-azure-search&#xA;- Logs in Kudu: https://skttl.dev/blog/browsing-umbraco-logs-in-kudu/&#xA;- Personalisation: https://kjac.dev/posts/personalisation-groups-as-segments/&#xA;- Search future: https://www.youtube.com/watch?v=wwQBvBDGhPE&#xA;- Events: https://umbraco.com/events/]]></description>
                    <pubDate>Sat, 30 May 2026 00:06:57 Z</pubDate>
                        <category>community</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.ai.reframe</guid>
                    <title>Umbraco.Community.AI.Reframe</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.ai.reframe</link>
                    <description><![CDATA[Reframe image media to a new aspect ratio without leaving the Umbraco backoffice. A Reframe view on every Image media item lets editors retarget a picture either by Crop (instant, free, geometric) or by AI Outpaint (OpenAI gpt-image-2 invents the new edges so no content is lost). Preview before/after, then Accept to save the result as a new media item &#x2014; the original is never changed. Outpaint requires your own OpenAI API key and incurs OpenAI usage cost; Crop is free.]]></description>
                    <pubDate>Sat, 30 May 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://medium.com/@nomansiddiquins1/sso-in-umbraco-17-azure-ad-back-office-login-with-openid-connect-549a0e5f91e5?source=rss------umbraco-5</guid>
                    <title>SSO in Umbraco 17: Azure AD Back Office Login with OpenID Connect</title>
                    <link>https://medium.com/@nomansiddiquins1/sso-in-umbraco-17-azure-ad-back-office-login-with-openid-connect-549a0e5f91e5?source=rss------umbraco-5</link>
                    <description><![CDATA[&lt;div class=&quot;medium-feed-item&quot;&gt;&lt;p class=&quot;medium-feed-image&quot;&gt;&lt;a href=&quot;https://medium.com/@nomansiddiquins1/sso-in-umbraco-17-azure-ad-back-office-login-with-openid-connect-549a0e5f91e5?source=rss------umbraco-5&quot;&gt;&lt;img src=&quot;https://cdn-images-1.medium.com/max/672/1*WGXVMKwKTrCDMQum52uvww.png&quot; width=&quot;672&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;medium-feed-snippet&quot;&gt;A step-by-step guide to wiring up Azure Active Directory as an external login provider for the Umbraco back office &amp;#x2014; with auto-linking&amp;#x2026;&lt;/p&gt;&lt;p class=&quot;medium-feed-link&quot;&gt;&lt;a href=&quot;https://medium.com/@nomansiddiquins1/sso-in-umbraco-17-azure-ad-back-office-login-with-openid-connect-549a0e5f91e5?source=rss------umbraco-5&quot;&gt;Continue reading on Medium &#xBB;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;]]></description>
                    <pubDate>Fri, 29 May 2026 18:47:06 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://medium.com/@nomansiddiquins1/sso-in-umbraco-17-azure-ad-back-office-login-with-openid-connect-549a0e5f91e5?source=rss-419ff102baa5------2</guid>
                    <title>SSO in Umbraco 17: Azure AD Back Office Login with OpenID Connect</title>
                    <link>https://medium.com/@nomansiddiquins1/sso-in-umbraco-17-azure-ad-back-office-login-with-openid-connect-549a0e5f91e5?source=rss-419ff102baa5------2</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Fri, 29 May 2026 18:47:06 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://medium.com/@nomansiddiquins1/integrating-amazon-s3-media-storage-hashicorp-vault-secrets-into-umbraco-v17-c2a36410b0a2?source=rss-419ff102baa5------2</guid>
                    <title>Integrating Amazon S3 Media Storage &amp; HashiCorp Vault Secrets into Umbraco v17</title>
                    <link>https://medium.com/@nomansiddiquins1/integrating-amazon-s3-media-storage-hashicorp-vault-secrets-into-umbraco-v17-c2a36410b0a2?source=rss-419ff102baa5------2</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Fri, 29 May 2026 13:45:02 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.jeroenbreuer.nl/blog/umbraco-mvp-2026/</guid>
                    <title>Umbraco MVP 2026!</title>
                    <link>https://www.jeroenbreuer.nl/blog/umbraco-mvp-2026/</link>
                    <description><![CDATA[Woohoo! Proud to receive my seventh Umbraco MVP award in 2026, marking another year of sharing, building, and community-driven progress.]]></description>
                    <pubDate>Fri, 29 May 2026 11:41:10 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://umbracocommunity.social/@lee/116654381716004252</guid>
                    <title>Contentment 7.0.0-alpha001 for Umbraco 18 RC out now</title>
                    <link>https://umbracocommunity.social/@lee/116654381716004252</link>
                    <description><![CDATA[#umbraco #Contentment 7.0.0-alpha001https://github.com/leekelleher/umbraco-contentment/releases/tag/7.0.0-alpha001TL;DR, want to try out Umbraco 18 with Contentment this weekend?Is it stable? Probably!Does it have bugs? Nah!How can you help? Test it out and feedback!]]></description>
                    <pubDate>Fri, 29 May 2026 06:23:49 Z</pubDate>
                        <category>community</category>
                        <category>social</category>
                        <category>mastodon</category>
                </item>
                <item>
                    <guid>https://medium.com/@ravimotha/codegarden26-a-guide-1ad134dad6b1?source=rss-8e76be83b03f------2</guid>
                    <title>CodeGarden26 : a guide</title>
                    <link>https://medium.com/@ravimotha/codegarden26-a-guide-1ad134dad6b1?source=rss-8e76be83b03f------2</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Thu, 28 May 2026 16:53:23 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://umbracocommunity.social/@owaincodes/116652325620551265</guid>
                    <title>Umbraco Forums #h5yr now display on HFYR.com</title>
                    <link>https://umbracocommunity.social/@owaincodes/116652325620551265</link>
                    <description><![CDATA[Pleased to announce that now, if you give a #h5yr on the Umbraco Forum, that post will be displayed on H5YR.com Thanks @sebastiaan for helping get this setup. #umbraco]]></description>
                    <pubDate>Thu, 28 May 2026 13:00:42 Z</pubDate>
                        <category>community</category>
                        <category>social</category>
                        <category>mastodon</category>
                </item>
                <item>
                    <guid>https://umbracocommunity.social/@UmbHost/116651510454937905</guid>
                    <title>UmbHost launches automated Umbraco upgrades</title>
                    <link>https://umbracocommunity.social/@UmbHost/116651510454937905</link>
                    <description><![CDATA[Automated Umbraco upgrades, sorted. GitHub Dependabot handles the dependency PRs, GreenStack handles the deploy. Here&#x27;s how you can do it &#x1F447;https://umbhost.net/blog/2026/05/building-your-own-umbraco-cloud-style-auto-upgrades-with-github-dependabot#Umbraco #dotnet #DevOps #GreenStack]]></description>
                    <pubDate>Thu, 28 May 2026 09:35:45 Z</pubDate>
                        <category>community</category>
                        <category>social</category>
                        <category>mastodon</category>
                </item>
                <item>
                    <guid>https://umbraco.com/blog/umbraco-18-release-candidate/</guid>
                    <title>Umbraco 18 Release Candidate</title>
                    <link>https://umbraco.com/blog/umbraco-18-release-candidate/</link>
                    <description><![CDATA[Discover and test the Umbraco 18 Release Candidate, featuring Elements for reusable content, typed OpenAPI schemas,]]></description>
                    <pubDate>Thu, 28 May 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.nevitech.co.uk/blog/noisy-imagesharp-logs-in-umbraco/</guid>
                    <title>Noisy ImageSharp Logs in Umbraco</title>
                    <link>https://www.nevitech.co.uk/blog/noisy-imagesharp-logs-in-umbraco/</link>
                    <description><![CDATA[ImageSharp logs every image request at INFO level, quietly filling your Umbraco logs until the backoffice viewer hits its 100 MB limit and refuses to open them. Here&#x27;s the one line Serilog fix, plus why a CDN helps.]]></description>
                    <pubDate>Wed, 27 May 2026 23:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.jeroenbreuer.nl/blog/how-i-let-cursor-build-an-azure-search-provider-for-umbraco-search/</guid>
                    <title>How I let Cursor build an Azure Search provider for Umbraco Search</title>
                    <link>https://www.jeroenbreuer.nl/blog/how-i-let-cursor-build-an-azure-search-provider-for-umbraco-search/</link>
                    <description><![CDATA[I wanted to build an Azure Search provider for Umbraco and let Cursor do the heavy lifting. This is what that looked like from the first prompt to the final commit.]]></description>
                    <pubDate>Wed, 27 May 2026 09:21:27 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://owain.codes/blog/2026/may/codegarden-2026-not-long-now/</guid>
                    <title>Codegarden 2026 - not long now!</title>
                    <link>https://owain.codes/blog/2026/may/codegarden-2026-not-long-now/</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Wed, 27 May 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://owaincodes.uksouth01.umbraco.io/blog/2026/may/codegarden-2026-not-long-now/</guid>
                    <title>Codegarden 2026 - not long now!</title>
                    <link>https://owaincodes.uksouth01.umbraco.io/blog/2026/may/codegarden-2026-not-long-now/</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Wed, 27 May 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://33b6c16b-3387-4d68-9090-4cb1f20ea7b3.azurewebsites.nethttps://owain.codes/blog/2026/may/codegarden-2026-not-long-now/</guid>
                    <title>Codegarden 2026 - not long now!</title>
                    <link>https://33b6c16b-3387-4d68-9090-4cb1f20ea7b3.azurewebsites.nethttps://owain.codes/blog/2026/may/codegarden-2026-not-long-now/</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Wed, 27 May 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/lantern.umbraco</guid>
                    <title>Lantern.Umbraco</title>
                    <link>https://marketplace.umbraco.com/package/lantern.umbraco</link>
                    <description><![CDATA[Add the Lantern bug-tracking widget to every page of your Umbraco site in seconds. Configure your embed key from the backoffice &#x2014; no template changes needed.]]></description>
                    <pubDate>Wed, 27 May 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://medium.com/@contacts_81271/umbraco-vs-wordpress-b180bf6af576?source=rss------umbraco-5</guid>
                    <title>Umbraco vs WordPress</title>
                    <link>https://medium.com/@contacts_81271/umbraco-vs-wordpress-b180bf6af576?source=rss------umbraco-5</link>
                    <description><![CDATA[&lt;div class=&quot;medium-feed-item&quot;&gt;&lt;p class=&quot;medium-feed-image&quot;&gt;&lt;a href=&quot;https://medium.com/@contacts_81271/umbraco-vs-wordpress-b180bf6af576?source=rss------umbraco-5&quot;&gt;&lt;img src=&quot;https://cdn-images-1.medium.com/max/1672/1*rTkBaNhm67woupfcRsK7FA.png&quot; width=&quot;1672&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;medium-feed-snippet&quot;&gt;Die Wahl des richtigen Web-Content-Management-Systems gleicht heute einer strategischen Richtungsentscheidung, die ma&amp;#xDF;geblichen Einfluss&amp;#x2026;&lt;/p&gt;&lt;p class=&quot;medium-feed-link&quot;&gt;&lt;a href=&quot;https://medium.com/@contacts_81271/umbraco-vs-wordpress-b180bf6af576?source=rss------umbraco-5&quot;&gt;Continue reading on Medium &#xBB;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;]]></description>
                    <pubDate>Tue, 26 May 2026 10:17:32 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://skttl.dev/blog/browsing-umbraco-logs-in-kudu/</guid>
                    <title>Browsing Umbraco Logs in Kudu</title>
                    <link>https://skttl.dev/blog/browsing-umbraco-logs-in-kudu/</link>
                    <description><![CDATA[A new userscript that brings a proper Serilog log viewer into the Kudu interface: file picker, expression search, saved queries, and a momentum graph, all with no build step required.]]></description>
                    <pubDate>Tue, 26 May 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/upreviewshare</guid>
                    <title>uPreviewShare</title>
                    <link>https://marketplace.umbraco.com/package/upreviewshare</link>
                    <description><![CDATA[Securely share unpublished draft content with external stakeholders via time-limited, view-capped, and PIN-protected preview links. Renders through actual Umbraco templates.]]></description>
                    <pubDate>Tue, 26 May 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://github.com/skybrud/Skybrud.Umbraco.Redirects.Automate/releases/tag/v17.0.0-alpha001</guid>
                    <title>Skybrud.Umbraco.Redirects.Automate 17.0.0-alpha001</title>
                    <link>https://github.com/skybrud/Skybrud.Umbraco.Redirects.Automate/releases/tag/v17.0.0-alpha001</link>
                    <description><![CDATA[Automate addon for Skybrud Redirects.]]></description>
                    <pubDate>Mon, 25 May 2026 20:37:50 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://github.com/skybrud/Skybrud.Umbraco.Redirects/releases/tag/v17.0.5</guid>
                    <title>Skybrud.Umbraco.Redirects 17.0.5</title>
                    <link>https://github.com/skybrud/Skybrud.Umbraco.Redirects/releases/tag/v17.0.5</link>
                    <description><![CDATA[Award winning redirects manager for Umbraco.]]></description>
                    <pubDate>Mon, 25 May 2026 20:08:42 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://anju-dev-notes.hashnode.dev/azure-key-vault-configuration-using-rbac-in-azure-app-service</guid>
                    <title>Azure Key Vault Configuration Using RBAC in Azure App Service</title>
                    <link>https://anju-dev-notes.hashnode.dev/azure-key-vault-configuration-using-rbac-in-azure-app-service</link>
                    <description><![CDATA[Managing secrets securely is one of the most important aspects of modern cloud applications. Instead of storing sensitive values like connection strings, API keys, or passwords directly inside applica]]></description>
                    <pubDate>Mon, 25 May 2026 11:51:18 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=wwQBvBDGhPE</guid>
                    <title>Umbraco Search Explained | Kenn Jacobsen | Umbraco India Meetup</title>
                    <link>https://www.youtube.com/watch?v=wwQBvBDGhPE</link>
                    <description><![CDATA[Featuring Kenn Jacobsen&#xA;Kenn is a 4x Umbraco MVP and a long-time contributor to the Umbraco community, with more than 10 years of experience building solutions with Umbraco and .NET.&#xA;&#xA;&#x1F4FA; Watch the full session recording and learn what&#x2019;s coming next for search in the Umbraco ecosystem.&#xA;&#xA;&#x1F30D; Join us for upcoming Umbraco India User Group events and community updates.&#xA;&#x1F517;https://www.meetup.com/umbraco-india-user-group&#xA;&#x1F517;https://www.linkedin.com/groups/14558029]]></description>
                    <pubDate>Thu, 21 May 2026 09:52:54 Z</pubDate>
                        <category>community</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://skttl.dev/blog/smarter-redirects-when-editors-trash-content-in-umbraco/</guid>
                    <title>Smarter redirects when editors trash content in Umbraco</title>
                    <link>https://skttl.dev/blog/smarter-redirects-when-editors-trash-content-in-umbraco/</link>
                    <description><![CDATA[A new Umbraco package that replaces the default trash action. It captures the URLs of doomed content first, then suggests redirect targets using Umbraco.AI.Search, with a non-AI fallback for bulk trashes.]]></description>
                    <pubDate>Thu, 21 May 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/m1sterpl0w.umbraco.accessrestriction</guid>
                    <title>M1sterPl0w.Umbraco.AccessRestriction</title>
                    <link>https://marketplace.umbraco.com/package/m1sterpl0w.umbraco.accessrestriction</link>
                    <description><![CDATA[An Umbraco package that restricts access to your site (or specific paths) by IP address whitelist. Manage whitelisted IPs and restricted paths from a dashboard in the Umbraco backoffice, with optional hardcoded entries via appsettings.json.]]></description>
                    <pubDate>Thu, 21 May 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://umbracocommunity.social/@UmbHost/116606538139138040</guid>
                    <title>UmbHost.Tables for Umbraco has had an update</title>
                    <link>https://umbracocommunity.social/@UmbHost/116606538139138040</link>
                    <description><![CDATA[UmbHost.Tables for #Umbraco has had an update courtesy of Mike Masey!This replaces the custom RTE with the fully featured tiptap RTE with all the configuration options you would expect.View source now opens in a modal windowThere is also a range of accessibility and UX improvementsMany thanks and a huge #h5yr for this PR!Grab it here:https://www.nuget.org/packages/UmbHost.Tables/17.1.0]]></description>
                    <pubDate>Wed, 20 May 2026 10:56:20 Z</pubDate>
                        <category>community</category>
                        <category>social</category>
                        <category>mastodon</category>
                </item>
                <item>
                    <guid>https://github.com/prjseal/Start-With-Markdown/</guid>
                    <title>Start With Markdown</title>
                    <link>https://github.com/prjseal/Start-With-Markdown/</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Wed, 20 May 2026 06:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://discord.com/channels/869656431308189746/882981290662580264/1506219000525225994</guid>
                    <title> Clean starter kit for Umbraco 18 out in Beta</title>
                    <link>https://discord.com/channels/869656431308189746/882981290662580264/1506219000525225994</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Wed, 20 May 2026 06:00:00 Z</pubDate>
                        <category>community</category>
                        <category>social</category>
                        <category>discord</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/pragmaticit.umbraco.virtualmembers</guid>
                    <title>PragmaticIT.Umbraco.VirtualMembers</title>
                    <link>https://marketplace.umbraco.com/package/pragmaticit.umbraco.virtualmembers</link>
                    <description><![CDATA[Passwordless, database-free member authentication for Umbraco CMS. Protect content nodes with email-only, OTP, or MFA login &#x2014; members loaded from plain CSV files, no Umbraco Members database records required.]]></description>
                    <pubDate>Wed, 20 May 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://umbracocommunity.social/@owaincodes/116601888665115697</guid>
                    <title>UmbracoTees day May 29th</title>
                    <link>https://umbracocommunity.social/@owaincodes/116601888665115697</link>
                    <description><![CDATA[Can you believe we haven&#x27;t had an #UmbracoTees day this year yet? Well, let&#x27;s change that!! Get your Umbraco Swag on, share your photos with #umbracoTees and let&#x27;s see you all celebrate all things #umbraco May 29th 2026!https://isitumbracoteesday.today/]]></description>
                    <pubDate>Tue, 19 May 2026 15:13:52 Z</pubDate>
                        <category>community</category>
                        <category>social</category>
                        <category>mastodon</category>
                </item>
                <item>
                    <guid>https://www.youtube.com/watch?v=DcxmRjoFZwc</guid>
                    <title>Start With Markdown</title>
                    <link>https://www.youtube.com/watch?v=DcxmRjoFZwc</link>
                    <description><![CDATA[Learn about my new open source content publishing workflow called Start With Markdown&#xA;&#xA;It&#x27;s a simple workflow which triggers when you create or modify a markdown file in the posts folder of your github repo.&#xA;&#xA;When it triggers it calls some endpoints on your CMS to create the content and it returns the edit, preview and publish URLs for you.&#xA;&#xA;Here is the link to the main project that you fork and setup to call your CMS endpoints&#xA;https://github.com/prjseal/Start-With-Markdown/&#xA;&#xA;And here is the link to the demo Umbraco project and supporting libraries with the custom resolvers for unsplash and things like that to get it working with the Clean starter kit&#xA;https://github.com/prjseal/Start-With-Markdown-Umbraco-Libraries]]></description>
                    <pubDate>Tue, 19 May 2026 14:17:30 Z</pubDate>
                        <category>community</category>
                        <category>youtube</category>
                </item>
                <item>
                    <guid>https://dev.to/lauraneto/umbraco-18-and-openapi-a-heads-up-for-extension-developers-1k7</guid>
                    <title>Umbraco 18 and OpenAPI: a heads-up for extension developers</title>
                    <link>https://dev.to/lauraneto/umbraco-18-and-openapi-a-heads-up-for-extension-developers-1k7</link>
                    <description><![CDATA[&lt;p&gt;Time to upgrade your extension to Umbraco 18?&lt;br&gt;&#xA;A friendly heads up, the OpenAPI generation got an overhaul.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;Microsoft.AspNetCore.OpenApi&lt;/code&gt; is Umbraco&#x27;s new library of choice for OpenAPI document generation, replacing &lt;code&gt;Swashbuckle.AspNetCore&lt;/code&gt;. It ships with ASP.NET Core and is maintained by Microsoft alongside the framework, which means one fewer third-party dependency to worry about.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The trade-off: if your extension wired up its own OpenAPI document on v17, it won&#x27;t compile against v18. The Swashbuckle types it relied on are gone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Two paths forward:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;strong&gt;Migrate to Microsoft OpenAPI&lt;/strong&gt;. Two options:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;strong&gt;Use the &lt;code&gt;AddBackOfficeOpenApiDocument&lt;/code&gt; extension method&lt;/strong&gt;: Umbraco&#x27;s new helper. What the v18 template uses. Covers most extensions.&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;strong&gt;Use Microsoft&#x27;s &lt;code&gt;AddOpenApi&lt;/code&gt; method directly&lt;/strong&gt;: call &lt;code&gt;Microsoft.AspNetCore.OpenApi&lt;/code&gt; yourself. For full control.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;strong&gt;Keep using Swashbuckle&lt;/strong&gt; &lt;em&gt;(not recommended)&lt;/em&gt;. Install &lt;code&gt;Swashbuckle.AspNetCore&lt;/code&gt; in your own extension, wire it up, then plug your document into Umbraco&#x27;s Swagger UI via &lt;code&gt;AddOpenApiDocumentToUi(...)&lt;/code&gt;. When rewriting isn&#x27;t an option right now.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&#x2139;&#xFE0F; &lt;strong&gt;Note:&lt;/strong&gt; the OpenAPI spec URL also changed from &lt;code&gt;/umbraco/swagger/{documentName}/swagger.json&lt;/code&gt; to &lt;code&gt;/umbraco/openapi/{documentName}.json&lt;/code&gt;. If you generate a client from the spec (e.g. via the v17 extension template&#x27;s &lt;code&gt;package.json&lt;/code&gt; &lt;code&gt;generate-client&lt;/code&gt; script), update the URL before regenerating.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  Use the AddBackOfficeOpenApiDocument extension method&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;We added &lt;code&gt;AddBackOfficeOpenApiDocument()&lt;/code&gt; in v18 to take the boilerplate out of registering an OpenAPI document. It&#x27;s an extension method on &lt;code&gt;IUmbracoBuilder&lt;/code&gt; that wires up Umbraco&#x27;s sensible defaults so you don&#x27;t have to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Out of the box, the helper registers your document, scopes it to endpoints decorated with &lt;code&gt;[MapToApi(documentName)]&lt;/code&gt;, applies Umbraco&#x27;s naming conventions for schemas and operation IDs, and adds the document to the Swagger UI dropdown at &lt;code&gt;/umbraco/openapi/&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&#x26A0;&#xFE0F; &lt;strong&gt;Watch out:&lt;/strong&gt; the first time you call &lt;code&gt;AddBackOfficeOpenApiDocument&lt;/code&gt; (or &lt;code&gt;AddOpenApi&lt;/code&gt; directly) and build, you&#x27;ll hit &lt;code&gt;error CS9137: The &#x27;interceptors&#x27; feature is not enabled in this namespace&lt;/code&gt;. The &lt;code&gt;Microsoft.AspNetCore.OpenApi&lt;/code&gt; source generator (which surfaces your XML doc comments as descriptions in the OpenAPI document, among other compile-time enrichments) propagates through Umbraco&#x27;s project reference, but the property that enables it ships only with the Web SDK. Class-library projects don&#x27;t get it automatically, so add it to your &lt;code&gt;.csproj&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&#xA;&lt;pre class=&quot;highlight xml&quot;&gt;&lt;code&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;PropertyGroup&amp;gt;&lt;/span&gt;&#xA;  &lt;span class=&quot;nt&quot;&gt;&amp;lt;InterceptorsNamespaces&amp;gt;&lt;/span&gt;$(InterceptorsNamespaces);Microsoft.AspNetCore.OpenApi.Generated&lt;span class=&quot;nt&quot;&gt;&amp;lt;/InterceptorsNamespaces&amp;gt;&lt;/span&gt;&#xA;&lt;span class=&quot;nt&quot;&gt;&amp;lt;/PropertyGroup&amp;gt;&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3&gt;&#xA;  &#xA;  &#xA;  Minimal usage&#xA;&lt;/h3&gt;&#xA;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight csharp&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;UmbracoExtensionApiComposer&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;IComposer&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;Compose&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;IUmbracoBuilder&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;builder&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;        &lt;span class=&quot;n&quot;&gt;builder&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;AddBackOfficeOpenApiDocument&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;my-api&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&lt;p&gt;This will add and configure a &quot;my-api&quot; OpenAPI document that will display the controllers/endpoints that have the attribute &lt;code&gt;[MapToApi(&quot;my-api&quot;)]&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h3&gt;&#xA;  &#xA;  &#xA;  Typical usage&#xA;&lt;/h3&gt;&#xA;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight csharp&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;UmbracoExtensionApiComposer&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;IComposer&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;Compose&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;IUmbracoBuilder&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;builder&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;        &lt;span class=&quot;n&quot;&gt;builder&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;AddBackOfficeOpenApiDocument&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;my-api&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;document&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;document&lt;/span&gt;&#xA;            &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;WithTitle&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;My API&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&#xA;            &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;WithBackOfficeAuthentication&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;());&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&lt;p&gt;Besides adding a &quot;my-api&quot; OpenAPI document, this will set the document title to &quot;My API&quot; and declare that the document&#x27;s operations require backoffice authentication (which is what enables the &quot;Authorize&quot; flow in the Swagger UI).&lt;/p&gt;&#xA;&lt;h3&gt;&#xA;  &#xA;  &#xA;  Builder method reference&#xA;&lt;/h3&gt;&#xA;&#xA;&lt;div class=&quot;table-wrapper-paragraph&quot;&gt;&lt;table&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr&gt;&#xA;&lt;th&gt;Method&lt;/th&gt;&#xA;&lt;th&gt;What it does&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;WithTitle(string)&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;Sets the document&#x27;s &lt;code&gt;Info.Title&lt;/code&gt;. Also used as the UI dropdown label unless &lt;code&gt;WithUiTitle&lt;/code&gt; is set.&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;WithUiTitle(string)&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;Overrides only the UI dropdown label, leaving &lt;code&gt;Info.Title&lt;/code&gt; untouched.&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;ExcludeFromUi()&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;Suppresses registration in the Swagger UI document dropdown. Document is still reachable at its JSON URL.&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;WithBackOfficeAuthentication()&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;Registers the backoffice OAuth2 security scheme on the document and marks operations as requiring authentication. Swagger UI uses this to prompt for login; generated clients use it to send the token.&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;ConfigureOpenApiOptions(Action&amp;lt;OpenApiOptions&amp;gt;)&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;Adds a configuration callback for the underlying &lt;code&gt;OpenApiOptions&lt;/code&gt;. Multiple calls will run in order after Umbraco&#x27;s defaults.&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;WithJsonOptions(...)&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;Sets the &lt;code&gt;JsonOptions&lt;/code&gt; used when generating the document&#x27;s schema. See Aligning schema serialization below.&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&lt;/div&gt;&#xA;&lt;h3&gt;&#xA;  &#xA;  &#xA;  Aligning schema serialization&#xA;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Schema generation needs to use the same &lt;code&gt;JsonOptions&lt;/code&gt; your API uses at runtime, otherwise the generated SDKs and the actual payloads will not match. By default, &lt;code&gt;Microsoft.AspNetCore.OpenApi&lt;/code&gt; generates schemas using the global HTTP &lt;code&gt;JsonOptions&lt;/code&gt;, which means whoever hosts your extension can change them and that affects your schema.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For most backoffice extensions you want the BackOffice named &lt;code&gt;JsonOptions&lt;/code&gt; (the same ones Umbraco&#x27;s Management API uses). Point the document at them with &lt;code&gt;WithJsonOptions&lt;/code&gt;:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight csharp&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;UmbracoExtensionApiComposer&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;IComposer&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;Compose&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;IUmbracoBuilder&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;builder&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;        &lt;span class=&quot;n&quot;&gt;builder&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;AddBackOfficeOpenApiDocument&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;my-api&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;document&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;document&lt;/span&gt;&#xA;            &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;WithJsonOptions&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Constants&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;JsonOptionsNames&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BackOffice&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;For this to be meaningful at runtime, your controllers also need to serialize with those same options. The v17 extension template inherits from a plain &lt;code&gt;ControllerBase&lt;/code&gt;, which uses the default options instead. Fix that by adding &lt;code&gt;[JsonOptionsName(Constants.JsonOptionsNames.BackOffice)]&lt;/code&gt; to your own base controller or to each controller directly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Without it, the schema reflects backoffice serialization but the actual responses are serialized with the default options, and you&#x27;re back to the schema-vs-runtime mismatch.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;&#xA;  &#xA;  &#xA;  Going beyond the defaults&#xA;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The helper is not a closed box. Anything you&#x27;d normally do on &lt;code&gt;OpenApiOptions&lt;/code&gt; (custom operation/schema/document transformers, your own &lt;code&gt;CreateSchemaReferenceId&lt;/code&gt;, a replacement operation ID transformer, etc.) is still available through &lt;code&gt;ConfigureOpenApiOptions&lt;/code&gt;. It just runs after Umbraco&#x27;s defaults, so you compose on top of them rather than starting from scratch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, registering your own schema transformer:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight csharp&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;UmbracoExtensionApiComposer&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;IComposer&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;Compose&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;IUmbracoBuilder&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;builder&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;        &lt;span class=&quot;n&quot;&gt;builder&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;AddBackOfficeOpenApiDocument&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;my-api&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;document&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;document&lt;/span&gt;&#xA;            &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;WithTitle&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;My API&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&#xA;            &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;ConfigureOpenApiOptions&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;options&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&amp;gt;&lt;/span&gt;&#xA;                &lt;span class=&quot;n&quot;&gt;options&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;AddSchemaTransformer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MyExtensionSchemaTransformer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;()));&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;h3&gt;&#xA;  &#xA;  &#xA;  Migrating an existing composer&#xA;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;If your extension followed the shape of the v17 dotnet template, the migration is: delete the old composer body and write the &lt;code&gt;AddBackOfficeOpenApiDocument(...)&lt;/code&gt; call. Below is the same extension&#x27;s composer before and after.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;v17 (Swashbuckle)&lt;/strong&gt;&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight csharp&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;UmbracoExtensionApiComposer&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;IComposer&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;Compose&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;IUmbracoBuilder&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;builder&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;        &lt;span class=&quot;n&quot;&gt;builder&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Services&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;AddSingleton&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;IOperationIdHandler&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;CustomOperationHandler&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;();&lt;/span&gt;&#xA;&#xA;        &lt;span class=&quot;n&quot;&gt;builder&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Services&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Configure&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SwaggerGenOptions&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;opt&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&amp;gt;&lt;/span&gt;&#xA;        &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;            &lt;span class=&quot;n&quot;&gt;opt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;SwaggerDoc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Constants&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ApiName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;OpenApiInfo&lt;/span&gt;&#xA;            &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;                &lt;span class=&quot;n&quot;&gt;Title&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;My Test Extension Backoffice API&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&#xA;            &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;&#xA;&#xA;            &lt;span class=&quot;n&quot;&gt;opt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;OperationFilter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;UmbracoExtensionOperationSecurityFilter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;();&lt;/span&gt;&#xA;        &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&#xA;    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;UmbracoExtensionOperationSecurityFilter&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BackOfficeSecurityRequirementsOperationFilterBase&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;        &lt;span class=&quot;k&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ApiName&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Constants&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ApiName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&#xA;    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;CustomOperationHandler&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;OperationIdHandler&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;        &lt;span class=&quot;c1&quot;&gt;// ...&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;v18 (Microsoft OpenAPI &#x2B; new builder)&lt;/strong&gt;&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight csharp&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;UmbracoExtensionApiComposer&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;IComposer&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;Compose&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;IUmbracoBuilder&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;builder&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&amp;gt;&lt;/span&gt;&#xA;        &lt;span class=&quot;n&quot;&gt;builder&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;AddBackOfficeOpenApiDocument&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&#xA;            &lt;span class=&quot;n&quot;&gt;Constants&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ApiName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&#xA;            &lt;span class=&quot;n&quot;&gt;document&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;document&lt;/span&gt;&#xA;                &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;WithTitle&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;My Test Extension Backoffice API&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&#xA;                &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;WithBackOfficeAuthentication&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;());&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;The helper registers &lt;code&gt;UmbracoOperationIdTransformer&lt;/code&gt; by default, so the old &lt;code&gt;IOperationIdHandler&lt;/code&gt; is no longer needed. If you want custom operation ID logic, register your own through &lt;code&gt;ConfigureOpenApiOptions&lt;/code&gt;:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight csharp&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;UmbracoExtensionApiComposer&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;IComposer&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;Compose&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;IUmbracoBuilder&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;builder&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;        &lt;span class=&quot;n&quot;&gt;builder&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;AddBackOfficeOpenApiDocument&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;my-api&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;document&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;document&lt;/span&gt;&#xA;            &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;ConfigureOpenApiOptions&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;options&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&amp;gt;&lt;/span&gt;&#xA;                &lt;span class=&quot;n&quot;&gt;options&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;AddOperationTransformer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;operation&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;context&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&amp;gt;&lt;/span&gt;&#xA;                &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;                    &lt;span class=&quot;n&quot;&gt;operation&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;OperationId&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;$&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;context&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Description&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ActionDescriptor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;RouteValues&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;action&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]}&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&#xA;                    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Task&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;CompletedTask&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&#xA;                &lt;span class=&quot;p&quot;&gt;})));&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  Use Microsoft&#x27;s AddOpenApi method directly&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;If you want to register a document that isn&#x27;t a backoffice document, or you want to start from a clean slate without Umbraco&#x27;s defaults, call &lt;code&gt;AddOpenApi&lt;/code&gt; yourself. The helper is just a thin wrapper around that method. Umbraco already wires the OpenAPI routing and Swagger UI hosting, so you don&#x27;t need to call &lt;code&gt;MapOpenApi&lt;/code&gt; or configure endpoints. You only need to register your documents.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the transformer model itself (how operation/schema/document transformers work), see Microsoft&#x27;s &lt;a href=&quot;https://learn.microsoft.com/en-us/aspnet/core/fundamentals/openapi/customize-openapi&quot; rel=&quot;noopener noreferrer&quot;&gt;Customize OpenAPI documents&lt;/a&gt; docs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For Umbraco&#x27;s specifics (&lt;code&gt;[MapToApi]&lt;/code&gt; filtering via &lt;code&gt;options.ShouldInclude&lt;/code&gt;, schema/operation ID conventions, the public &lt;code&gt;UmbracoSchemaIdGenerator.Generate(type)&lt;/code&gt; helper), see the &lt;a href=&quot;https://docs.umbraco.com/umbraco-cms/18.latest/extend-your-project/server-side-extensions/api-versioning-and-openapi&quot; rel=&quot;noopener noreferrer&quot;&gt;API versioning and OpenAPI&lt;/a&gt; docs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A few things worth remembering:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;strong&gt;Backoffice authentication&lt;/strong&gt;: call &lt;code&gt;options.AddBackofficeSecurityRequirements()&lt;/code&gt; (from &lt;code&gt;Umbraco.Cms.Api.Management.OpenApi&lt;/code&gt;) instead of subclassing &lt;code&gt;BackOfficeSecurityRequirementsOperationFilterBase&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;strong&gt;Swagger UI registration&lt;/strong&gt;: documents are no longer auto-listed. Call &lt;code&gt;services.AddOpenApiDocumentToUi(documentName, uiTitle)&lt;/code&gt; to surface yours in the dropdown.&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;strong&gt;&lt;code&gt;InterceptorsNamespaces&lt;/code&gt; opt-in&lt;/strong&gt;: same as the helper path. See the Watch out callout at the top of the helper section.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  Keep using Swashbuckle&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Not recommended.&lt;/strong&gt; Consider this only if rewriting a complex Swashbuckle setup isn&#x27;t feasible right now. Trade-offs:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Extra dependency on &lt;code&gt;Swashbuckle.AspNetCore&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;OpenAPI 3.0 output, whereas the rest of Umbraco&#x27;s documents emit 3.1.&lt;/li&gt;&#xA;&lt;li&gt;Extra wiring you maintain yourself.&lt;/li&gt;&#xA;&lt;li&gt;Both libraries depend on &lt;code&gt;Microsoft.OpenApi&lt;/code&gt;. A breaking change there that Swashbuckle doesn&#x27;t follow leaves your extension incompatible with the rest of the stack.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If you still want to go this route, see the &lt;a href=&quot;https://github.com/domaindrivendev/Swashbuckle.AspNetCore#getting-started&quot; rel=&quot;noopener noreferrer&quot;&gt;Swashbuckle.AspNetCore README&lt;/a&gt; for general setup. The rest of this section is the Umbraco-specific wiring.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;1. Install the NuGet package&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Add a &lt;code&gt;PackageReference&lt;/code&gt; to &lt;code&gt;Swashbuckle.AspNetCore&lt;/code&gt; in your extension&#x27;s &lt;code&gt;.csproj&lt;/code&gt; (or &lt;code&gt;dotnet add package Swashbuckle.AspNetCore&lt;/code&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;2. Register Swashbuckle and your document in a composer&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In v17, Umbraco called &lt;code&gt;AddSwaggerGen&lt;/code&gt; for you and your extension only configured &lt;code&gt;SwaggerGenOptions&lt;/code&gt;. In v18 you have to call it yourself:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight csharp&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;UmbracoExtensionApiComposer&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;IComposer&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;Compose&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;IUmbracoBuilder&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;builder&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;        &lt;span class=&quot;n&quot;&gt;builder&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Services&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;AddSwaggerGen&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;opt&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&amp;gt;&lt;/span&gt;&#xA;        &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;            &lt;span class=&quot;n&quot;&gt;opt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;SwaggerDoc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Constants&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ApiName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;OpenApiInfo&lt;/span&gt;&#xA;            &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;                &lt;span class=&quot;n&quot;&gt;Title&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;My Test Extension Backoffice API&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&#xA;                &lt;span class=&quot;n&quot;&gt;Version&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;1.0&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&#xA;            &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;&#xA;&#xA;            &lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;previousDocInclusion&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;opt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SwaggerGeneratorOptions&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DocInclusionPredicate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&#xA;            &lt;span class=&quot;n&quot;&gt;opt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;DocInclusionPredicate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;docName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;apiDesc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&amp;gt;&lt;/span&gt;&#xA;                &lt;span class=&quot;n&quot;&gt;docName&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Constants&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ApiName&lt;/span&gt;&#xA;                    &lt;span class=&quot;p&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;apiDesc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ActionDescriptor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;HasMapToApiAttribute&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;docName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&#xA;                    &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;previousDocInclusion&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;?.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Invoke&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;docName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;apiDesc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;??&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&#xA;&#xA;            &lt;span class=&quot;c1&quot;&gt;// any operation filters, schema filters, or other v17 setup you had...&lt;/span&gt;&#xA;        &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;3. Host the Swagger JSON middleware via an &lt;code&gt;IUmbracoPipelineFilter&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Umbraco no longer calls &lt;code&gt;app.UseSwagger()&lt;/code&gt;, so the middleware that serves the Swagger JSON isn&#x27;t running. Add it through Umbraco&#x27;s pipeline filter, and set the &lt;code&gt;RouteTemplate&lt;/code&gt; to match &lt;code&gt;UmbracoOpenApiOptions.RouteTemplate&lt;/code&gt; (default &lt;code&gt;umbraco/openapi/{documentName}.json&lt;/code&gt;) so the dropdown link resolves.&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight csharp&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;UmbracoExtensionApiComposer&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;IComposer&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;Compose&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;IUmbracoBuilder&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;builder&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;        &lt;span class=&quot;n&quot;&gt;builder&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Services&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Configure&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;UmbracoPipelineOptions&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;options&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&amp;gt;&lt;/span&gt;&#xA;        &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;            &lt;span class=&quot;n&quot;&gt;options&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;AddFilter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;UmbracoPipelineFilter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Swashbuckle&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&#xA;            &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;                &lt;span class=&quot;n&quot;&gt;PostPipeline&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;app&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&amp;gt;&lt;/span&gt;&#xA;                &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;                    &lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;openApiOptions&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;app&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ApplicationServices&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;GetRequiredService&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;IOptions&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;UmbracoOpenApiOptions&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&amp;gt;().&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&#xA;                    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(!&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;openApiOptions&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Enabled&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&#xA;                    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;                        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&#xA;                    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&#xA;                    &lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;routeTemplate&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;openApiOptions&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;RouteTemplate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&#xA;                    &lt;span class=&quot;n&quot;&gt;app&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;UseWhen&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&#xA;                        &lt;span class=&quot;n&quot;&gt;ctx&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ctx&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Path&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;routeTemplate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Replace&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{documentName}&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Constants&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ApiName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;EnsureStartsWith&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;sc&quot;&gt;&#x27;/&#x27;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;&#xA;                        &lt;span class=&quot;n&quot;&gt;branch&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;branch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;UseSwagger&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;c&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;RouteTemplate&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;routeTemplate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;&#xA;                &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&#xA;            &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;&#xA;        &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;Scope the middleware to your own document&#x27;s URL. Otherwise Swashbuckle intercepts requests for Umbraco&#x27;s own documents (Management, Delivery) and returns 404 because they aren&#x27;t registered with &lt;code&gt;AddSwaggerGen&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;4. Register the document in the Swagger UI dropdown&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Register the document in Umbraco&#x27;s Swagger UI dropdown:&lt;br&gt;&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;highlight js-code-highlight&quot;&gt;&#xA;&lt;pre class=&quot;highlight csharp&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;UmbracoExtensionApiComposer&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;IComposer&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;Compose&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;IUmbracoBuilder&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;builder&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&#xA;        &lt;span class=&quot;n&quot;&gt;builder&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Services&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;AddOpenApiDocumentToUi&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Constants&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ApiName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;My API&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&#xA;    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  TL;DR&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The helper is the simplest option for most extensions. &lt;code&gt;AddBackOfficeOpenApiDocument()&lt;/code&gt; is what the v18 template uses, gives you Umbraco&#x27;s sensible defaults out of the box (naming conventions, Swagger UI registration, JsonOptions alignment), and lets you register an OpenAPI document in a single call.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Calling &lt;code&gt;AddOpenApi&lt;/code&gt; yourself is the standard ASP.NET Core approach and works fine. It means more wiring and code to maintain, so reach for it when you need full control (non-backoffice documents, or skipping the Umbraco defaults).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If rewriting really isn&#x27;t an option right now, keeping Swashbuckle as your own dependency and plugging into the dropdown via &lt;code&gt;AddOpenApiDocumentToUi(...)&lt;/code&gt; will get you through, but plan to revisit when you can.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&#xA;  &#xA;  &#xA;  Further reading&#xA;&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;a href=&quot;https://github.com/umbraco/Announcements/issues/32&quot; rel=&quot;noopener noreferrer&quot;&gt;Announcements #32&lt;/a&gt;: the official announcement, with the full set of changes and reasoning&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;a href=&quot;https://docs.umbraco.com/umbraco-cms/18.latest/extend-your-project/server-side-extensions/custom-backoffice-api&quot; rel=&quot;noopener noreferrer&quot;&gt;Custom Backoffice API&lt;/a&gt;: end-to-end backoffice API setup&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;a href=&quot;https://docs.umbraco.com/umbraco-cms/18.latest/extend-your-project/server-side-extensions/api-versioning-and-openapi&quot; rel=&quot;noopener noreferrer&quot;&gt;API versioning and OpenAPI&lt;/a&gt;: schema IDs, operation IDs, route configuration, endpoint filtering&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;a href=&quot;https://docs.umbraco.com/umbraco-cms/18.latest/get-started/upgrading-and-migrating/version-specific#umbraco-18&quot; rel=&quot;noopener noreferrer&quot;&gt;Umbraco 18 version-specific upgrade docs&lt;/a&gt;: official migration reference&lt;/li&gt;&#xA;&lt;/ul&gt;]]></description>
                    <pubDate>Tue, 19 May 2026 13:37:37 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.justnik.me/blog/why-i-built-a-passwordless-library-for-umbraco</guid>
                    <title>Building a Passwordless Authentication Library for Umbraco - Part 1: Why?</title>
                    <link>https://www.justnik.me/blog/why-i-built-a-passwordless-library-for-umbraco</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Tue, 19 May 2026 12:36:58 Z</pubDate>
                        <category>blog</category>
                        <category>community</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.FilterList/releases/tag/v13.0.0-alpha004</guid>
                    <title>Limbo.Umbraco.FilterList 13.0.0-alpha004</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.FilterList/releases/tag/v13.0.0-alpha004</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Tue, 19 May 2026 10:55:08 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://github.com/limbo-works/Limbo.Umbraco.FilterList/releases/tag/v13.0.0-alpha003</guid>
                    <title>Limbo.Umbraco.FilterList 13.0.0-alpha003</title>
                    <link>https://github.com/limbo-works/Limbo.Umbraco.FilterList/releases/tag/v13.0.0-alpha003</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Tue, 19 May 2026 10:33:05 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://umbraco.com/blog/ai-on-your-terms-how-umbraco-reimagines-ai/</guid>
                    <title>AI on Your Terms: How Umbraco Reimagines AI</title>
                    <link>https://umbraco.com/blog/ai-on-your-terms-how-umbraco-reimagines-ai/</link>
                    <description><![CDATA[AI is often introduced as a shortcut: more content, more insights, more efficiency. But for many organizations, especially those responsible for digital platforms, the initial excitement is quickly followed by unease. Who is in control of the output? What happens to sensitive data? And how do you ensure that automation doesn&#x2019;t quietly erode quality, tone, or accountability?]]></description>
                    <pubDate>Tue, 19 May 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://umbraco.com/blog/uprofile-may-2026-bernadet-goey/</guid>
                    <title>uProfile May 2026 - Bernadet Goey</title>
                    <link>https://umbraco.com/blog/uprofile-may-2026-bernadet-goey/</link>
                    <description><![CDATA[Meet Bernadet: Former PHP-specialist, now a confident Umbraco Developer, looking to give back to the community that supported her journey]]></description>
                    <pubDate>Mon, 18 May 2026 00:00:00 Z</pubDate>
                        <category>hq</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://skttl.dev/blog/releasing-image-hotspot-17/</guid>
                    <title>Releasing Image Hotspot 17.0.0</title>
                    <link>https://skttl.dev/blog/releasing-image-hotspot-17/</link>
                    <description><![CDATA[What&#x27;s new in version 17.0.0 of the Image Hotspot property editor: Umbraco 17 support, block editor fixes, localization in 29 languages, and a new versioning scheme.]]></description>
                    <pubDate>Mon, 18 May 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/hcs.passwordless.magiclink</guid>
                    <title>HCS.Passwordless.MagicLink</title>
                    <link>https://marketplace.umbraco.com/package/hcs.passwordless.magiclink</link>
                    <description><![CDATA[Magic link passwordless authentication for Umbraco 17 members. Send a one-click sign-in link by email &#x2014; no passwords required. Includes built-in rate limiting, single-use tokens, and customisable branded emails.]]></description>
                    <pubDate>Mon, 18 May 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/hcs.passwordless.webauthn</guid>
                    <title>HCS.Passwordless.WebAuthn</title>
                    <link>https://marketplace.umbraco.com/package/hcs.passwordless.webauthn</link>
                    <description><![CDATA[WebAuthn/FIDO2 passkey add-on for Umbraco 17 passwordless member authentication. Enable hardware-backed biometric or security-key sign-in via the browser&#x27;s Credential Management API. No passwords required.]]></description>
                    <pubDate>Mon, 18 May 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/hcs.passwordless.otp</guid>
                    <title>HCS.Passwordless.Otp</title>
                    <link>https://marketplace.umbraco.com/package/hcs.passwordless.otp</link>
                    <description><![CDATA[One-time password (OTP) email add-on for Umbraco 17 passwordless member authentication. Delivers a short numeric code by email that the member enters to sign in. No passwords required.]]></description>
                    <pubDate>Mon, 18 May 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://jcdc.dev/blog/share-the-love-bringing-h5yr-to-jcdcdev</guid>
                    <title>Share the Love - Bringing #H5YR to jcdc.dev</title>
                    <link>https://jcdc.dev/blog/share-the-love-bringing-h5yr-to-jcdcdev</link>
                    <description><![CDATA[I&#x27;ve added the new #H5YR widget to my sites. Send a virtual High Five!]]></description>
                    <pubDate>Sat, 16 May 2026 09:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://uskinned.net/blog/uskinned-site-builder-for-umbraco-17/</guid>
                    <title>uSkinned Site Builder for Umbraco 17</title>
                    <link>https://uskinned.net/blog/uskinned-site-builder-for-umbraco-17/</link>
                    <description><![CDATA[&#x1F4E3; Introducing &#x1F941;&#xA;&#xA;uSkinned Site Builder for Umbraco 17 &#x1F929;&#xA;&#xA;Full support for Umbraco 17 is now available for uSkinned Site Builder. Install or upgrade today.]]></description>
                    <pubDate>Fri, 15 May 2026 14:03:31 Z</pubDate>
                        <category>blog</category>
                        <category>community</category>
                </item>
                <item>
                    <guid>https://www.linkedin.com/pulse/from-zero-working-product-two-hours-adam-shallcross-7zeme/</guid>
                    <title>From zero to working product in two hours</title>
                    <link>https://www.linkedin.com/pulse/from-zero-working-product-two-hours-adam-shallcross-7zeme/</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Fri, 15 May 2026 07:58:10 Z</pubDate>
                        <category>social</category>
                        <category>linkedin</category>
                        <category>community</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.ai.agent.ui</guid>
                    <title>Umbraco.AI.Agent.UI</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.ai.agent.ui</link>
                    <description><![CDATA[Shared chat UI components for Umbraco AI Agent surfaces]]></description>
                    <pubDate>Fri, 15 May 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.ai.agent.copilot</guid>
                    <title>Umbraco.AI.Agent.Copilot</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.ai.agent.copilot</link>
                    <description><![CDATA[Copilot chat UI for Umbraco AI Agent]]></description>
                    <pubDate>Fri, 15 May 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/modgift.umbraco.breakable</guid>
                    <title>Modgift.Umbraco.Breakable</title>
                    <link>https://marketplace.umbraco.com/package/modgift.umbraco.breakable</link>
                    <description><![CDATA[A Breakable property editor for Umbraco CMS that lets editors mark soft-hyphen break points inside text values using | as a delimiter.]]></description>
                    <pubDate>Fri, 15 May 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/our.umbraco.propertytooltip</guid>
                    <title>Our.Umbraco.PropertyToolTip</title>
                    <link>https://marketplace.umbraco.com/package/our.umbraco.propertytooltip</link>
                    <description><![CDATA[Property ToolTip keeps Umbraco property descriptions available, but shows them as small tooltip help text beside each property label.]]></description>
                    <pubDate>Fri, 15 May 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://medium.com/@ben_46907/swiftui-is-a-disaster-9706ffe6016c?source=rss------umbraco-5</guid>
                    <title>SwiftUI is a Disaster</title>
                    <link>https://medium.com/@ben_46907/swiftui-is-a-disaster-9706ffe6016c?source=rss------umbraco-5</link>
                    <description><![CDATA[&lt;div class=&quot;medium-feed-item&quot;&gt;&lt;p class=&quot;medium-feed-image&quot;&gt;&lt;a href=&quot;https://medium.com/@ben_46907/swiftui-is-a-disaster-9706ffe6016c?source=rss------umbraco-5&quot;&gt;&lt;img src=&quot;https://cdn-images-1.medium.com/max/800/0*yYaREfb1AnLyqkU5.png&quot; width=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;medium-feed-snippet&quot;&gt;I&amp;#x2019;ll admit it. I&amp;#x2019;m still programming for Apple platforms using Objective-C, AppKit and UIKit.&lt;/p&gt;&lt;p class=&quot;medium-feed-link&quot;&gt;&lt;a href=&quot;https://medium.com/@ben_46907/swiftui-is-a-disaster-9706ffe6016c?source=rss------umbraco-5&quot;&gt;Continue reading on Medium &#xBB;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;]]></description>
                    <pubDate>Thu, 14 May 2026 17:24:48 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://joe.gl/ombek/blog/umbicosaurus-deextinction/</guid>
                    <title>The Umbicosaurus De-Extinction: The Community Effort that Brought a Better Icon Picker to Umbraco 17.4</title>
                    <link>https://joe.gl/ombek/blog/umbicosaurus-deextinction/</link>
                    <description><![CDATA[In 2021, I dreamed of improving the icon picker in the Umbraco backoffice and today, in Umbraco 17.4, the package I started is making a splash as part of Core!&#xA;&#xA;This is the story of Umbicosaurus.]]></description>
                    <pubDate>Thu, 14 May 2026 09:58:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.nuget.org/packages/Articulate/6.0.0-rc.2</guid>
                    <title>Articulate v6 RC 2</title>
                    <link>https://www.nuget.org/packages/Articulate/6.0.0-rc.2</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Thu, 14 May 2026 08:29:22 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://uskinned.net/blog/umbraco-scotland-meetup-glasgow-edition/</guid>
                    <title>Umbraco Scotland: Glasgow Edition, May 2026</title>
                    <link>https://uskinned.net/blog/umbraco-scotland-meetup-glasgow-edition/</link>
                    <description><![CDATA[Umbraco Scotland: Glasgow Edition, May 2026&#xA;&#xA;A great evening, bringing the Umbraco Scotland community together to share ideas and insights.]]></description>
                    <pubDate>Wed, 13 May 2026 09:00:58 Z</pubDate>
                        <category>blog</category>
                        <category>community</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.smartredirectsuggester</guid>
                    <title>Umbraco.Community.SmartRedirectSuggester</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.smartredirectsuggester</link>
                    <description><![CDATA[Improve the Umbraco trash flow by suggesting redirect targets for published content before it is moved to the recycle bin.]]></description>
                    <pubDate>Wed, 13 May 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.holdyourhorses</guid>
                    <title>Umbraco.Community.HoldYourHorses</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.holdyourhorses</link>
                    <description><![CDATA[Replaces the Save and Publish button in the Umbraco backoffice with a configurable, cancellable countdown &#x2014; gives editors a short window to catch mistakes before content goes live.]]></description>
                    <pubDate>Wed, 13 May 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/doctypedoctor</guid>
                    <title>DocTypeDoctor</title>
                    <link>https://marketplace.umbraco.com/package/doctypedoctor</link>
                    <description><![CDATA[...]]></description>
                    <pubDate>Wed, 13 May 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://docs.umbraco.com/umbraco-cloud/release-notes/overview-2026/2026-05-releasenotes</guid>
                    <title>May 2026 Cloud Release Notes</title>
                    <link>https://docs.umbraco.com/umbraco-cloud/release-notes/overview-2026/2026-05-releasenotes</link>
                    <description><![CDATA[May 2026 | Cloud | Umbraco Documentation]]></description>
                    <pubDate>Tue, 12 May 2026 15:21:19 Z</pubDate>
                        <category>hq</category>
                </item>
                <item>
                    <guid>https://www.etive-mor.com/blog/carlini-style-vulnerability-hunting-on-a-budget/</guid>
                    <title>Carlini-style software vulnerability hunting, on a budget</title>
                    <link>https://www.etive-mor.com/blog/carlini-style-vulnerability-hunting-on-a-budget/</link>
                    <description><![CDATA[https://www.etive-mor.com/blog/carlini-style-vulnerability-hunting-on-a-budget/Nicholas Carlini did a great talk at [un]prompted a few weeks ago, where he detailed how Anthropic were using LLMs to automate software vulnerability discovery. In this post, I take a look at replicating his process in the Umbraco-CMS repository, for less than 1% the cost.#umbraco #security #llm #ai]]></description>
                    <pubDate>Tue, 12 May 2026 13:31:23 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://umbracocommunity.social/@owaincodes/116561041760397682</guid>
                    <title>The new H5YR.com widget is now LIVE!</title>
                    <link>https://umbracocommunity.social/@owaincodes/116561041760397682</link>
                    <description><![CDATA[The new H5YR.com widget is now LIVE! https://h5yr.com/h5yr-widget/ #umbraco]]></description>
                    <pubDate>Tue, 12 May 2026 13:01:00 Z</pubDate>
                        <category>community</category>
                        <category>social</category>
                        <category>mastodon</category>
                </item>
                <item>
                    <guid>https://umbracocommunity.social/@owaincodes/116560322535140460</guid>
                    <title>H5YR.com is now on Umbraco 17</title>
                    <link>https://umbracocommunity.social/@owaincodes/116560322535140460</link>
                    <description><![CDATA[H5YR.com is now on #Umbraco 17 &#x1F389; Thanks @UmbHost for the help with the deployment yesterday. #h5yr]]></description>
                    <pubDate>Tue, 12 May 2026 07:08:15 Z</pubDate>
                        <category>community</category>
                        <category>social</category>
                        <category>mastodon</category>
                </item>
                <item>
                    <guid>https://www.linkedin.com/posts/owainwilliams_h5yr-community-umbraco-share-7459538862323924992-iV5D/</guid>
                    <title>H5YR embeddable widget progress</title>
                    <link>https://www.linkedin.com/posts/owainwilliams_h5yr-community-umbraco-share-7459538862323924992-iV5D/</link>
                    <description><![CDATA[H5YR update: https://www.linkedin.com/posts/owainwilliams_h5yr-community-umbraco-share-7459538862323924992-iV5D?utm_source=share&amp;utm_medium=member_ios&amp;rcm=ACoAAABj9KwBjr581HKBv-M3TbQu69Ia79rmfPw&#xA;&#xA;Sent from my iPhone]]></description>
                    <pubDate>Mon, 11 May 2026 16:52:10 Z</pubDate>
                        <category>linkedin</category>
                        <category>community</category>
                        <category>social</category>
                </item>
                <item>
                    <guid>https://codeshare.co.uk/blog/designing-an-ai-agent-skill-for-adding-a-page-type-to-umbraco/</guid>
                    <title>Designing an AI Agent skill for adding a page type to Umbraco</title>
                    <link>https://codeshare.co.uk/blog/designing-an-ai-agent-skill-for-adding-a-page-type-to-umbraco/</link>
                    <description><![CDATA[Explore how experienced developers are building AI skills to scaffold Umbraco features. See the conventions and decisions that make page type creation effortless.]]></description>
                    <pubDate>Mon, 11 May 2026 11:00:00 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://www.linkedin.com/posts/adamshallcross_quick-update-on-the-ai-search-package-im-ugcPost-7457449420633042944-t2zb</guid>
                    <title>Adam Shallcross AI based search package progress</title>
                    <link>https://www.linkedin.com/posts/adamshallcross_quick-update-on-the-ai-search-package-im-ugcPost-7457449420633042944-t2zb</link>
                    <description><![CDATA[Untitled: https://www.linkedin.com/posts/adamshallcross_quick-update-on-the-ai-search-package-im-ugcPost-7457449420633042944-t2zb?utm_source=share&amp;utm_medium=member_ios&amp;rcm=ACoAAABj9KwBjr581HKBv-M3TbQu69Ia79rmfPw&#xA;&#xA;Sent from my iPhone]]></description>
                    <pubDate>Mon, 11 May 2026 06:41:24 Z</pubDate>
                        <category>community</category>
                        <category>social</category>
                        <category>linkedin</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/diplo.translator</guid>
                    <title>Diplo Translator</title>
                    <link>https://marketplace.umbraco.com/package/diplo.translator</link>
                    <description><![CDATA[Diplo Translator | Umbraco Marketplace]]></description>
                    <pubDate>Fri, 08 May 2026 08:28:41 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.ai.chatbot</guid>
                    <title>Umbraco.Community.AI.Chatbot</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.ai.chatbot</link>
                    <description><![CDATA[Drops a public-facing, AI-powered chat widget on a website&#x27;s frontend. End users on the public site type a question; the package runs a semantic search over the site&#x27;s Umbraco content (Umbraco.AI.Search), feeds the matched pages into an Umbraco.AI.Agent, and streams a grounded answer back with cited source pages and follow-up suggestions.&#xA;&#xA;The official Umbraco.AI.* packages expose chat only inside the backoffice. There is no path for an anonymous site visitor to ask questions of the site&#x27;s content. This community package fills that gap.&#xA;&#xA;Key features:&#xA;- Public-facing widget (drop in one &lt;script&gt; tag)&#xA;- Grounded answers with cited source pages&#xA;- Suggested follow-up questions&#xA;- Streaming responses (SSE)&#xA;- Per-IP rate limiting and request size caps&#xA;- Per-instance configuration in the backoffice (welcome message, agent, fallback)&#xA;&#xA;Requires Umbraco CMS 17.3&#x2B;, Umbraco.AI 1.10&#x2B;, Umbraco.AI.Agent 1.9&#x2B;, and a populated Umbraco.AI.Search index.]]></description>
                    <pubDate>Fri, 08 May 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://dev.to/cultiv/bootstrapping-umbraco-modelsbuilder-on-an-empty-site-age</guid>
                    <title>Bootstrapping Umbraco ModelsBuilder on an empty site</title>
                    <link>https://dev.to/cultiv/bootstrapping-umbraco-modelsbuilder-on-an-empty-site-age</link>
                    <description><![CDATA[The rest of this post was written with Claude AI. Here&#x27;s the simple problem I seem to get myself into often: &#xA;&#xA;I have views that need a strongly typed model, but modelsbuilder hasn&#x27;t put the models on disk so Umbraco completely fails to start. dotnet run just fails &#x1F631; But I need to get into the backoffice to generate the models; difficult when Umbraco doesn&#x27;t even run.&#xA;&#xA;After I encountered this today, I finally took some time to figure out what the easiest way is to get this fixed. What follows is the summary of what Claude did for me:&#xA;&#xA;&#xA;&#xA;&#xA;Dropped a set of strongly-typed views (home.cshtml, Author.cshtml, etc.) into a fresh Umbraco site and ran straight into the chicken-and-egg problem every Umbraco developer eventually meets:&#xA;&#xA;&#xA;The views reference Umbraco.Cms.Web.Common.PublishedModels.Home (and friends).&#xA;Those classes are generated by ModelsBuilder from document types that live in the database.&#xA;The database is empty until the site has run at least once.&#xA;The site won&#x27;t build because the views don&#x27;t compile, so it can&#x27;t run.&#xA;&#xA;&#xA;Here&#x27;s the little dance to break the cycle.&#xA;&#xA;&#xA;  &#xA;  &#xA;  1. Turn off Razor compile-on-build&#xA;&#xA;&#xA;In the .csproj:&#xA;&#xA;&#xA;&#xA;&lt;RazorCompileOnBuild&gt;false&lt;/RazorCompileOnBuild&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;The build now skips the views entirely instead of failing on the missing PublishedModels.* types.&#xA;&#xA;&#xA;  &#xA;  &#xA;  2. Switch ModelsBuilder to manual mode&#xA;&#xA;&#xA;In appsettings.json:&#xA;&#xA;&#xA;&#xA;&quot;ModelsBuilder&quot;: {&#xA;  &quot;ModelsMode&quot;: &quot;SourceCodeManual&quot;&#xA;}&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;SourceCodeManual is the only mode that gives you a Generate models button in the backoffice. The other three:&#xA;&#xA;&#xA;&#xA;&#xA;Mode&#xA;Files?&#xA;Trigger&#xA;&#xA;&#xA;&#xA;&#xA;Nothing&#xA;none&#xA;&#x2014;&#xA;&#xA;&#xA;InMemoryAuto&#xA;in-memory only&#xA;auto&#xA;&#xA;&#xA;SourceCodeManual&#xA;~/umbraco/models/*.cs&#xA;button&#xA;&#xA;&#xA;SourceCodeAuto&#xA;~/umbraco/models/*.cs&#xA;auto on schema change&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;  &#xA;  &#xA;  3. Start the site&#xA;&#xA;&#xA;dotnet run. The build succeeds (views aren&#x27;t compiled), the app starts, and the backoffice comes up. Frontend pages will 404 or 500 right now &#x2014; that&#x27;s expected and we don&#x27;t care yet.&#xA;&#xA;&#xA;  &#xA;  &#xA;  4. Click the button&#xA;&#xA;&#xA;Backoffice &#x2192; Settings &#x2192; Models Builder &#x2192; Generate models.&#xA;&#xA;.cs files appear in umbraco/models/ &#x2014; one per document type. These are the classes the views were waiting on.&#xA;&#xA;&#xA;  &#xA;  &#xA;  5. Stop the site&#xA;&#xA;&#xA;Ctrl&#x2B;C.&#xA;&#xA;&#xA;  &#xA;  &#xA;  6. Re-enable Razor compile-on-build&#xA;&#xA;&#xA;Remove the line we added in step 1:&#xA;&#xA;&#xA;&#xA;&lt;!-- &lt;RazorCompileOnBuild&gt;false&lt;/RazorCompileOnBuild&gt;  &#x2190; delete this --&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;  &#xA;  &#xA;  7. Start the site again&#xA;&#xA;&#xA;dotnet run. Build picks up the generated models, compiles the views against them, the home page renders.&#xA;&#xA;&#xA;  &#xA;  &#xA;  Why the dance is needed&#xA;&#xA;&#xA;RazorCompileOnBuild=false alone isn&#x27;t a real fix &#x2014; it just moves the compile error from build time to the moment a frontend page is hit. Without runtime compilation registered, Umbraco&#x27;s view-engine lookup returns &quot;no physical template file found&quot; and serves a 404. You&#x27;ll see this in the logs:&#xA;&#xA;&#xA;&#xA;&quot;No physical template file was found for template home&quot;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;The actual fix is to get the models on disk. The flag just buys you the brief window between &quot;build doesn&#x27;t run&quot; and &quot;models exist&quot; so you can boot the backoffice and press the button.&#xA;&#xA;Once the models are committed to source control, none of this matters &#x2014; the next clone builds clean from the start.]]></description>
                    <pubDate>Thu, 07 May 2026 15:24:58 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://examinex.online/2026/04/16/ai-semantic-ranking-for-azure-search</guid>
                    <title>AI Semantic Ranking with ExamineX and Azure Search</title>
                    <link>https://examinex.online/2026/04/16/ai-semantic-ranking-for-azure-search</link>
                    <description><![CDATA[AI Semantic Ranking with ExamineX and Azure Search]]></description>
                    <pubDate>Thu, 07 May 2026 14:36:09 Z</pubDate>
                        <category>blog</category>
                        <category>community</category>
                </item>
                <item>
                    <guid>https://samsolutions.medium.com/umbraco-vs-wordpress-which-cms-platform-is-best-for-your-business-43863d7710c9?source=rss------umbraco-5</guid>
                    <title>Umbraco vs WordPress: Which CMS Platform Is Best for Your Business?</title>
                    <link>https://samsolutions.medium.com/umbraco-vs-wordpress-which-cms-platform-is-best-for-your-business-43863d7710c9?source=rss------umbraco-5</link>
                    <description><![CDATA[&lt;div class=&quot;medium-feed-item&quot;&gt;&lt;p class=&quot;medium-feed-image&quot;&gt;&lt;a href=&quot;https://samsolutions.medium.com/umbraco-vs-wordpress-which-cms-platform-is-best-for-your-business-43863d7710c9?source=rss------umbraco-5&quot;&gt;&lt;img src=&quot;https://cdn-images-1.medium.com/max/1536/1*dxgdjM-1uAleskWDzfMX1Q.png&quot; width=&quot;1536&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;medium-feed-snippet&quot;&gt;Choosing the right Content Management System (CMS) is a foundational decision for any digital strategy. The market offers a wide spectrum&amp;#x2026;&lt;/p&gt;&lt;p class=&quot;medium-feed-link&quot;&gt;&lt;a href=&quot;https://samsolutions.medium.com/umbraco-vs-wordpress-which-cms-platform-is-best-for-your-business-43863d7710c9?source=rss------umbraco-5&quot;&gt;Continue reading on Medium &#xBB;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;]]></description>
                    <pubDate>Thu, 07 May 2026 14:31:51 Z</pubDate>
                        <category>community</category>
                        <category>blog</category>
                </item>
                <item>
                    <guid>https://github.com/umbraco/Announcements/issues/35</guid>
                    <title>[Breaking change]: Remove the built-in Bootstrap 3 horizontal forms theme from Umbraco Forms</title>
                    <link>https://github.com/umbraco/Announcements/issues/35</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Thu, 07 May 2026 14:02:35 Z</pubDate>
                        <category>hq</category>
                        <category>announcement</category>
                </item>
                <item>
                    <guid>https://github.com/umbraco/Announcements/issues/34</guid>
                    <title>[Breaking change]: Replace Pikaday with native HTML date input in the Umbraco Forms default theme</title>
                    <link>https://github.com/umbraco/Announcements/issues/34</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Thu, 07 May 2026 14:00:29 Z</pubDate>
                        <category>hq</category>
                        <category>announcement</category>
                </item>
                <item>
                    <guid>https://github.com/umbraco/Announcements/issues/33</guid>
                    <title>[Breaking change]: Remove jQuery Validation support from Umbraco Forms client-side scripts</title>
                    <link>https://github.com/umbraco/Announcements/issues/33</link>
                    <description><![CDATA[]]></description>
                    <pubDate>Thu, 07 May 2026 13:58:03 Z</pubDate>
                        <category>hq</category>
                        <category>announcement</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/webwonders.umbraco.blockpicker</guid>
                    <title>Webwonders.Umbraco.BlockPicker</title>
                    <link>https://marketplace.umbraco.com/package/webwonders.umbraco.blockpicker</link>
                    <description><![CDATA[A block picker property editor for Umbraco.]]></description>
                    <pubDate>Thu, 07 May 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.ai.mistral</guid>
                    <title>Umbraco.AI.Mistral</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.ai.mistral</link>
                    <description><![CDATA[Mistral provider for Umbraco AI]]></description>
                    <pubDate>Thu, 07 May 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.ai.togetherai</guid>
                    <title>Umbraco.AI.TogetherAI</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.ai.togetherai</link>
                    <description><![CDATA[Together AI provider for Umbraco AI]]></description>
                    <pubDate>Thu, 07 May 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.ai.fireworksai</guid>
                    <title>Umbraco.AI.FireworksAI</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.ai.fireworksai</link>
                    <description><![CDATA[Fireworks AI provider for Umbraco AI]]></description>
                    <pubDate>Thu, 07 May 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.ai.huggingface</guid>
                    <title>Umbraco.AI.HuggingFace</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.ai.huggingface</link>
                    <description><![CDATA[Hugging Face Inference Providers integration for Umbraco AI]]></description>
                    <pubDate>Thu, 07 May 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.ai.deepseek</guid>
                    <title>Umbraco.AI.DeepSeek</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.ai.deepseek</link>
                    <description><![CDATA[DeepSeek provider for Umbraco AI]]></description>
                    <pubDate>Thu, 07 May 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://marketplace.umbraco.com/package/umbraco.community.aivisibility</guid>
                    <title>Umbraco.Community.AiVisibility</title>
                    <link>https://marketplace.umbraco.com/package/umbraco.community.aivisibility</link>
                    <description><![CDATA[Make your Umbraco site visible to AI search engines (ChatGPT, Claude, Perplexity, Gemini, Bing Copilot) and give editors visibility into who&#x27;s reading the site. Drop-in for Umbraco v17&#x2B; with zero configuration on a typical site.&#xA;&#xA;At install time, every published page becomes reachable as Markdown via /{path}.md or via the standard Accept: text/markdown content negotiation header. Two more public routes ship: /llms.txt (an RFC-style index of every published page) and /llms-full.txt (the concatenated full-Markdown export, hard-capped at a configurable byte limit). All three surfaces are publish-driven cache invalidated and hot-path-protected (If-None-Match &#x2192; 304 &#x2192; single-flight on cache miss).&#xA;&#xA;Two Backoffice dashboards appear under Settings: AI Visibility (site name, summary, per-doctype exclusion, per-page opt-out) and AI Traffic (read-only dashboard showing every AI / human / crawler hit by classification, with date filtering). A Health Check warns when /robots.txt blocks AI crawlers you might not want to block.&#xA;&#xA;Architectural principle: the Umbraco template is the canonical visual form of content. The package renders pages through Umbraco&#x27;s normal Razor pipeline and converts the resulting HTML to Markdown &#x2014; it does NOT walk content properties or template-fork. Whatever your Razor templates produce (Block List, Block Grid, view components, third-party renderers) is what the AI gets, in clean Markdown form.&#xA;&#xA;Six DI extension points let you override extraction, request logging, robots auditing, settings resolution, and UA classification without forking. Apache 2.0 licensed.]]></description>
                    <pubDate>Thu, 07 May 2026 00:00:00 Z</pubDate>
                        <category>community</category>
                        <category>package</category>
                        <category>marketplace</category>
                </item>
                <item>
                    <guid>https://forum.umbraco.com/t/god-mode-v17-finally/7983</guid>
                    <title>God Mode v17 now available</title>
                    <link>https://forum.umbraco.com/t/god-mode-v17-finally/7983</link>
                    <description><![CDATA[God Mode v17 - finally! - Umbraco community forum]]></description>
                    <pubDate>Wed, 06 May 2026 12:37:11 Z</pubDate>
                        <category>community</category>
                        <category>forum</category>
                </item>
    </channel>
</rss>