<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="https://www.proworks.com/blog/rss/xslt"?>
<rss xmlns:a10="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <title>ProWorks Web Design, Development, and Umbraco Blog</title>
    <link>https://www.proworks.com/blog/</link>
    <description>ProWorks</description>
    <generator>Articulate, blogging built on Umbraco</generator>
    <item>
      <guid isPermaLink="false">4858</guid>
      <link>https://www.proworks.com/blog/archive/upgrading-from-umbraco-13-to-17-lts-lessons-from-the-trenches/</link>
      <category>umbraco</category>
      <category>upgrade</category>
      <title>Upgrading from Umbraco 13 to 17 LTS: Lessons from the Trenches</title>
      <description>&lt;p&gt;Upgrades, upgrades, upgrades!  Upgrades are a hot topic in the Umbraco community ever since version 17 was released last November. There are a lot of great reasons to upgrade to this major version besides simply moving to the latest Long-Term Supported (LTS) version. Our team here at ProWorks has a ton of Umbraco upgrade experience and are here to help you make your upgrade a success. This article will update as we learn about new challenges and find solutions. Ready? Let's do this!&lt;/p&gt;
&lt;p&gt;&lt;a type="external" href="#final-thoughts" title="See the changelog at the bottom if you're coming back to this after a while" data-anchor="#final-thoughts"&gt;See the changelog at the bottom if you're coming back to this after a while&lt;/a&gt; - &lt;em&gt;Updated: January 22, 2026&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Why Upgrade?&lt;/h2&gt;
&lt;p&gt;Let's look at why you would upgrade to the latest v17 version:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Timely Security Updates&lt;/strong&gt;&lt;/em&gt; - As a LTS version, your site can stay up to date with security patches and easiest to keep up to date in the future. Umbraco 17 is supported through November 27, 2028.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Better Site Performance &lt;/strong&gt;&lt;/em&gt;- The rebuilt HybridCache speeds up startups especially on large sites. This means less down time after deploys to live. The latest .NET version 10 framework also improves performance which helps with your page speeds.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Better Back-Office Performance&lt;/strong&gt;&lt;/em&gt; - The rebuilt back-office is faster and allows for standards-based extensions and future-proofed architecture that no longer relies on Angular or other external large frameworks that could no longer be supported.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Deep AI Chat Integrations&lt;/strong&gt;&lt;/em&gt; - The official Umbraco MCP Server only works on version 17 and allows AI to "talk" to your specific Umbraco back-office to report on, add, or modify content.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Better &lt;/strong&gt;&lt;/em&gt;&lt;em&gt;&lt;strong&gt;Automation and I&lt;/strong&gt;&lt;/em&gt;&lt;em&gt;&lt;strong&gt;ntegration Support &lt;/strong&gt;&lt;/em&gt;- The new Management API allows for automation of everything that can be done by a content editor or developer in the back-office. This is important for deep integrations with external tools, marketing automations, and AI Agent connections.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Scalable Back-office&lt;/strong&gt;&lt;/em&gt; - Version 17 supports load-balancing the back-office. This allows the back-office to scale out like the front-end for performance and simplifies hosting load-balanced Umbraco websites.&lt;/li&gt;
&lt;li&gt;Read even more on the official v17 release article: &lt;a rel="noopener" type="external" href="https://umbraco.com/blog/umbraco-17-lts-release/" target="_blank" title="Umbraco 17 LTS: Final Release"&gt;Umbraco 17 LTS: Final Release&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;There is really a lot of truly great features available in version 17 and many more on the horizon in 18 and 19. It's a perfect time to get this upgrade done so those other upgrades are less painful later.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The sections below dive into the technical details of upgrading. If you'd rather have a conversation about what an upgrade means for your organization (timeline, budget, and business impact) we're happy to help.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a style="color: #fff; background-image: none;" type="external" href="#section-footer" title="Request an Initial Consultation" class="pw-button" data-anchor="#section-footer"&gt;Schedule a Consultation&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Prepare for Your Upgrade&lt;/h2&gt;
&lt;p&gt;A good result always starts with a good plan, right?&lt;/p&gt;
&lt;h4&gt;Current Umbraco Version?&lt;/h4&gt;
&lt;p&gt;First, you should assess where your site currently is. Are you on version 13? Or something older?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Version 8-9:&lt;/strong&gt; You will need to upgrade to v10, then v13, then v17 - in fact, in general it is recommended to upgrade to each LTS version on your path to the latest. There may need to be custom migrations if the site uses Grid or other unsupported editors. Content migration may be preferable is some cases. v8 has API changes that could mean major code refactoring.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Version 10-12:&lt;/strong&gt; Upgrade to the latest v13, then to v17. Getting to v13 should be relatively straight-forward, but an assessment is always helpful for planning.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Version 13:&lt;/strong&gt; Upgrade to the latest version of v13, currently 13.13.0.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Learn more about each version here: &lt;a rel="noopener" type="external" href="https://releases.umbraco.com/all-releases" target="_blank" title="https://releases.umbraco.com/all-releases"&gt;https://releases.umbraco.com/all-releases&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;(Please feel free to &lt;a type="external" href="#section-footer" title="contact ProWorks" data-anchor="#section-footer"&gt;contact ProWorks&lt;/a&gt; and get our recommendations)&lt;/p&gt;
&lt;h4&gt;Using Outdated Property Editors?&lt;/h4&gt;
&lt;p&gt;If you are using any deprecated or legacy property editors, its best to update them to use the latest version in v13 before upgrading.&lt;/p&gt;
&lt;p&gt;Property editors to migrate to in v13:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MediaPicker -&amp;gt; MediaPicker3&lt;/li&gt;
&lt;li&gt;Nested Content -&amp;gt; Block List&lt;/li&gt;
&lt;li&gt;Stacked Content -&amp;gt; Block List&lt;/li&gt;
&lt;li&gt;Grid -&amp;gt; Block Grid&lt;/li&gt;
&lt;li&gt;Macros -&amp;gt; Blocks (Or remove if unused)&lt;/li&gt;
&lt;li&gt;XPath in pickers -&amp;gt; Plan for a change to use the new dynamic root setup&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By addressing these structural elements first, the content will migrate much easier to v17.&lt;/p&gt;
&lt;h4&gt;v17 Package Support?&lt;/h4&gt;
&lt;p&gt;Do you have Umbraco Packages installed (it's likely)? Go to the Umbraco Marketplace (&lt;a rel="noopener" type="external" href="https://marketplace.umbraco.com/" target="_blank" title="https://marketplace.umbraco.com/"&gt;https://marketplace.umbraco.com/&lt;/a&gt;) or the package Repository and verify that each package supports v17. Many of the most used packages are ready for v17 now. Some are working on it and may have a beta version that likely works well. Some may not have any v17 support.&lt;/p&gt;
&lt;p&gt;If you're unsure and its not clear from the repo, then asking on the Umbraco Forums (&lt;a rel="noopener" type="external" href="https://forum.umbraco.com/" target="_blank" title="https://forum.umbraco.com/"&gt;https://forum.umbraco.com/&lt;/a&gt;) would be a good way to see how others are dealing with this package. Is there a new version coming soon? Is there a new package that effectively replaces this one?&lt;/p&gt;
&lt;p&gt;As always, we can help give you a recommendation to move forward on. We have been doing this a long time and would love to help! &lt;a type="external" href="#section-footer" title="Contact Us" data-anchor="#section-footer"&gt;Connect with us below&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Custom/Bespoke Back-Office Extensions?&lt;/h4&gt;
&lt;p&gt;If your site has custom Angular.js extensions, then those will need to be re-written in the new Typescript/Lit/Web Components extension model. For the initial upgrade you can simply disable or remove them and address them after the main upgrade is complete.&lt;/p&gt;
&lt;h4&gt;Using Smidge?&lt;/h4&gt;
&lt;p&gt;Smidge was removed in v17 and you will need to reinstall it if used by any custom code or by the site in general. It is straight-forward to re-add to your site and you can learn more on the Github repo: &lt;a href="https://github.com/Shazwazza/Smidge"&gt;https://github.com/Shazwazza/Smidge&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;There is also an Umbraco-specific package that you can install here: &lt;a rel="noopener" type="external" href="https://marketplace.umbraco.com/package/umbraco.community.smidge" target="_blank" title="https://marketplace.umbraco.com/package/umbraco.community.smidge"&gt;https://marketplace.umbraco.com/package/umbraco.community.smidge&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;TipTap or TinyMCE?&lt;/h4&gt;
&lt;p&gt;Umbraco has migrated to a new RTE component called TipTap. It will migrate all of your RTEs to this new editor by default unless you install a community package, &lt;a rel="noopener" type="external" href="https://github.com/ProWorksCorporation/TinyMCE-Umbraco" target="_blank" title="TinyMCE.Umbraco Github Repository"&gt;TinyMCE.Umbraco&lt;/a&gt;. This package will prevent the migration and keep the TinyMCE editor installed and used as in previous versions. &lt;a href="/blog/archive/tinymceumbraco-v17-released-and-ready-for-umbraco-17/" title="TinyMCE.Umbraco v17 Released and Ready for Umbraco 17"&gt;Read more about TinyMCE.Umbraco v17 in this post&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You will need to decide if you want to keep using TinyMCE or move to TipTap. If you have TinyMCE customizations or complex RTE setups, you may want to keep TinyMCE. The package also gives you the option of easily adding premium features like AI tools. TipTap is based on ProseMirror and is more lightweight so may be preferred in some use cases.&lt;/p&gt;
&lt;h4&gt;Use Umbraco Forms?&lt;/h4&gt;
&lt;p&gt;If you use Umbraco Forms, then you may need to migrate to the new licensing structure. It is now licensed annually instead of a one-time cost. Umbraco Forms is included with Umbraco Cloud so this is less of a concern if you are hosted on Umbraco Cloud. Your choice is to license Umbraco Forms going forward or remove it in favor of a different solution.&lt;/p&gt;
&lt;h4&gt;Review Official Documentation:&lt;/h4&gt;
&lt;p&gt;Take a look at the Version Specific Upgrades documentation guide in the Official Umbraco Documentation: &lt;a rel="noopener" type="external" href="https://docs.umbraco.com/umbraco-cms/fundamentals/setup/upgrading/version-specific" target="_blank" title="https://docs.umbraco.com/umbraco-cms/fundamentals/setup/upgrading/version-specific"&gt;Version Specific Upgrades&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There may be other key breaking changes highlighted there that will be important for your site.&lt;/p&gt;
&lt;p&gt;Also, the Upgrade Details document has information on some edge cases and older versions as well: &lt;a rel="noopener" type="external" href="https://docs.umbraco.com/umbraco-cms/fundamentals/setup/upgrading/upgrade-details" target="_blank" title="https://docs.umbraco.com/umbraco-cms/fundamentals/setup/upgrading/upgrade-details"&gt;Upgrade Details&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Pre-Upgrade Process&lt;/h2&gt;
&lt;p&gt;I'll assume you have solutions for all the above issues and are ready to try out an upgrade! Great! Now, take a step to make sure you have all of this in place:&lt;/p&gt;
&lt;h4&gt;Backup Your Database / Media&lt;/h4&gt;
&lt;p&gt;Always backup your database before starting. You will miss something and may need to iterate a few times to get the migrations just right.&lt;/p&gt;
&lt;p&gt;Also, now is a good time to get a backup of the latest media and pull it locally.&lt;/p&gt;
&lt;h4&gt;Side-by-Side Setup&lt;/h4&gt;
&lt;p&gt;Ideally, you have a v13 site for reference running locally and your future v17 site ready to upgrade. These should be using separate databases and be able to run completely side-by-side. This lets you quickly iterate with v13 changes and re-run the v17 upgrade as needed. In addition, this allows you to quickly verify that the site looks and works as expected.&lt;/p&gt;
&lt;p&gt;If you're using Git, make sure you have each version on separate feature branches.&lt;/p&gt;
&lt;h4&gt;Verify Dev Setup&lt;/h4&gt;
&lt;p&gt;Get your development setup ready for .NET 10 and Umbraco v17:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Install .NET 10 SDK&lt;/li&gt;
&lt;li&gt;Update Visual Studio (2022 v17.12+ or 2026)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Verify Latest v13&lt;/h4&gt;
&lt;p&gt;One last check to make sure you're on the latest Umbraco v13 release. If not, do this first.&lt;/p&gt;
&lt;h2&gt;Upgrade Time!&lt;/h2&gt;
&lt;p&gt;Let's do this.&lt;/p&gt;
&lt;h4&gt;1. Update Project Target Frameworks&lt;/h4&gt;
&lt;p&gt;This can be done directly in the .csproj files through the TargetFramework element:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    &amp;lt;!-- Change target framework --&amp;gt;
    &amp;lt;TargetFramework&amp;gt;net10.0&amp;lt;/TargetFramework&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2. Update Nuget Packages&lt;/h4&gt;
&lt;p&gt;Update all Umbraco packages to version 17.latest:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Umbraco.Cms&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Umbraco.Cms.Web.Website&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If using Umbraco Cloud update these as well:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Umbraco.Cloud.Cms&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Umbraco.Cloud.StorageProviders.AzureBlob&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Umbraco.Deploy.Cloud&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Umbraco.Deploy.Contrib&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Remove these packages as they aren't needed for v17:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Umbraco.Cloud.Cms.PublicAccess&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Umbraco.Cloud.Identity.Cms&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Umbraco.Cms.Web.BackOffice&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Update all other packages used including Umbraco Extensions like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Umbraco.Community.Contentment&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Umbraco.Forms&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Any other packages used that support v17&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;3. Delete Build Artifacts&lt;/h4&gt;
&lt;p&gt;Delete all of the &lt;code&gt;bin&lt;/code&gt; and &lt;code&gt;obj&lt;/code&gt; directories in each of the projects of your solution. Umbraco has reported that Visual Studio's "Clean Solution" option is sometimes not enough.&lt;/p&gt;
&lt;h4&gt;4. Code Changes&lt;/h4&gt;
&lt;p&gt;There are a few code changes needed to get the Solution compiling.&lt;/p&gt;
&lt;h5&gt;Program.cs:&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Remove &lt;code&gt;UseInstallerEndpoints()&lt;/code&gt; as this is now automatically setup in v17&lt;/li&gt;
&lt;li&gt;Consider comparing a fresh installed Umbraco v17 &lt;strong&gt;Program.cs&lt;/strong&gt; with your current code and verify that you have the latest patterns in place. I have found other areas that were missing and easy to miss.&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;_ViewImports.cshtml:&lt;/h5&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Remove Smidge references:&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;@* REMOVE these lines: *@
@addTagHelper *, Smidge
@inject Smidge.SmidgeHelper SmidgeHelper
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;Generated Models&lt;/h5&gt;
&lt;p&gt;If you used strongly typed models and have Umbraco generate them to code files in your project/solution, then the solution likely won't compile.&lt;/p&gt;
&lt;p&gt;You have two options:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Delete all generated models from the directory in your project and set the &lt;code&gt;Umbraco.Cms.ModelsBuilder.ModelsMode&lt;/code&gt; to "InMemoryAuto" from "SourceCodeAuto" or "SourceCodeManual". This will allow you to run the upgrade then switch it back and regenerate them after the v17 back-office is working. If you do this, you will need to install the &lt;code&gt;Umbraco.Cms.DevelopmentMode.Backoffice&lt;/code&gt; to allow the "InMemoryAuto" mode to work in v17.&lt;/li&gt;
&lt;li&gt;Tweak the v13 generated models so they compile and regenerate them after the v17 back-office is working. This involves:&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Changing &lt;code&gt;IPublishedContent&lt;/code&gt; from:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;global::Umbraco.Cms.Core.Models.PublishedContent.IPublishedContent Image { get; }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To &lt;code&gt;MediaWithCrops&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
global::Umbraco.Cms.Core.Models.MediaWithCrops Image { get; }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Watch for &lt;code&gt;IEnumerable&lt;/code&gt; references as well as they need to be changed to use &lt;code&gt;MediaWithCrops&lt;/code&gt; as well. Then fix any other build errors that you see.&lt;/p&gt;
&lt;p&gt;Ultimately you want to run the back-office so you can regenerate them. So editing them manually is a temporary solution if you're having trouble compiling the solution.&lt;/p&gt;
&lt;h4&gt;5. Configure Razor Files for .NET v10&lt;/h4&gt;
&lt;h5&gt;Verify Runtime Modes&lt;/h5&gt;
&lt;p&gt;.NET 10 deprecated runtime Razor compilation. Views are now compiled at build time by default.&lt;/p&gt;
&lt;p&gt;Verify your .csproj has the following:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;   &amp;lt;PropertyGroup&amp;gt;
      &amp;lt;CopyRazorGenerateFilesToPublishDirectory&amp;gt;true&amp;lt;/CopyRazorGenerateFilesToPublishDirectory&amp;gt;
   &amp;lt;/PropertyGroup&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I recommend compiling your Razor files to find any issues at build time instead of at runtime. Remove these lines from your .csproj:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;      &amp;lt;RazorCompileOnBuild&amp;gt;false&amp;lt;/RazorCompileOnBuild&amp;gt;
      &amp;lt;RazorCompileOnPublish&amp;gt;false&amp;lt;/RazorCompileOnPublish&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;More on Runtime modes from the Umbraco Documentation: &lt;a rel="noopener" type="external" href="https://docs.umbraco.com/umbraco-cms/fundamentals/setup/server-setup/runtime-modes" target="_blank" title="https://docs.umbraco.com/umbraco-cms/fundamentals/setup/server-setup/runtime-modes"&gt;https://docs.umbraco.com/umbraco-cms/fundamentals/setup/server-setup/runtime-modes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you need to restore the runtime Razor view compilation or want to use &lt;code&gt;InMemoryAuto&lt;/code&gt; model building, then you will need to install this package:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;dotnet add package Umbraco.Cms.DevelopmentMode.Backoffice
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Read more in the Version Specific Guide to determine if you need this package: &lt;a rel="noopener" type="external" href="https://docs.umbraco.com/umbraco-cms/fundamentals/setup/upgrading/version-specific#umbraco-17" target="_blank" title="https://docs.umbraco.com/umbraco-cms/fundamentals/setup/upgrading/version-specific#umbraco-17" data-anchor="#umbraco-17"&gt;https://docs.umbraco.com/umbraco-cms/fundamentals/setup/upgrading/version-specific#umbraco-17&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;6. Optional: Disable Custom Packages&lt;/h4&gt;
&lt;p&gt;If you are planning to migrate custom back-office packages after the initial upgrade is complete, then you could simply disable any custom code and exclude it from the project.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Rename folders in &lt;code&gt;App_Plugins&lt;/code&gt; with custom extensions to have ".disabled" at the end of the folder name.&lt;/li&gt;
&lt;li&gt;Update the &lt;code&gt;App_Plugins&lt;/code&gt; content include entry in the .csproj to exclude any folders with ".disabled" at the end:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;      &amp;lt;Content Include="App_Plugins\**" Exclude="App_Plugins\*.disabled\**"&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you have extensions added via Razor Class Library, you may need to remove the reference or delete the .dll from the &lt;code&gt;bin&lt;/code&gt; folder.  &lt;/p&gt;
&lt;h4&gt;7. Optional: Explicitly Set LocalTimeZone&lt;/h4&gt;
&lt;p&gt;The change to use UTC by default for System Dates may have implications for your site. Read more in the Version Specific Guide on whether you want to explicitly set a server time zone in appsettings.json.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener" type="external" href="https://docs.umbraco.com/umbraco-cms/fundamentals/setup/upgrading/version-specific#umbraco-17" target="_blank" title="https://docs.umbraco.com/umbraco-cms/fundamentals/setup/upgrading/version-specific#umbraco-17" data-anchor="#umbraco-17"&gt;https://docs.umbraco.com/umbraco-cms/fundamentals/setup/upgrading/version-specific#umbraco-17&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
   "Umbraco": {
      "CMS": {
         "SystemDateMigration": {
            "LocalServerTimeZone": "Eastern Standard Time"
         }
      }
   }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;8. Licensing Changes&lt;/h4&gt;
&lt;p&gt;If you are using Umbraco Deploy or Umbraco Forms, then you will need to migrate the licensing from the file-based .lic to the configuration settings in appsettings.json&lt;/p&gt;
&lt;h5&gt;Remove .lic Files&lt;/h5&gt;
&lt;p&gt;Remove the &lt;code&gt;.lic&lt;/code&gt; files inside of the &lt;code&gt;umbraco/Licenses&lt;/code&gt; folder for Umbraco Deploy and Umbraco Forms.&lt;/p&gt;
&lt;h5&gt;Add Licensing Configuration&lt;/h5&gt;
&lt;p&gt;For Umbraco Cloud sites, you can add these settings to your appsettings.json file. If you have a different hosting setup, you will need to replace "UMBRACO-CLOUD" with your license key.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  "Umbraco": {
    "Licenses": {
      "Products": {
        "Umbraco.Forms": "UMBRACO-CLOUD",
        "Umbraco.Deploy": "UMBRACO-CLOUD"
      }
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Build, Run, and Test!&lt;/h2&gt;
&lt;p&gt;Is the site rendering as expected? Does the back-office load and you are able to login? If yes, you're on your way to v17.&lt;/p&gt;
&lt;p&gt;Now its time to perform your detailed regression testing by verifying all the packages migrated as expected, all property editors are working as expected, and you can make changes as you would expect.&lt;/p&gt;
&lt;p&gt;Here are some items you may want to focus on to verify the upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The site builds without errors&lt;/li&gt;
&lt;li&gt;All pages render correctly&lt;/li&gt;
&lt;li&gt;Backoffice login works&lt;/li&gt;
&lt;li&gt;Content editing works&lt;/li&gt;
&lt;li&gt;No console errors/warnings&lt;/li&gt;
&lt;li&gt;Block List editors function&lt;/li&gt;
&lt;li&gt;Rich text editors function&lt;/li&gt;
&lt;li&gt;Media uploads work&lt;/li&gt;
&lt;li&gt;Search returns results&lt;/li&gt;
&lt;li&gt;Licenses show as valid&lt;/li&gt;
&lt;li&gt;Forms submit and save entries&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Migrating Custom Extensions to v17&lt;/h2&gt;
&lt;div&gt;Once the back-office and site appear to be working, it's time to migrate those custom extensions to v17. That process is out of scope for this article, but here are some resources to get you started:&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel="noopener" type="external" href="https://docs.umbraco.com/umbraco-cms/extending/property-editors" target="_blank" title="Building Property Editors in v17"&gt;Building Property Editors in v17&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel="noopener" type="external" href="https://docs.umbraco.com/umbraco-cms/customizing/ui-library" target="_blank" title="Umbraco UI Library"&gt;Umbraco UI Library&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel="noopener" type="external" href="https://kjac.dev/posts/migrating-extensions-from-umbraco-13-to-17/" target="_blank" title="Migrating Extensions from v13 to v17"&gt;Migrating Extensions from v13 to v17&lt;/a&gt; by Kenn Jacobsen&lt;/li&gt;
&lt;li&gt;&lt;a rel="noopener" type="external" href="https://24days.in/umbraco-cms/2024/switching-to-web-components/)" target="_blank" title="From AngularJS to Web Components"&gt;From AngularJS to Web Components&lt;/a&gt; by Jesper Mayntzhusen&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="final-thoughts"&gt;Final Thoughts&lt;/h2&gt;
&lt;p&gt;Upgrading to v17 is worth the effort as it is the Umbraco version to take the community into the future. AI, modern web frameworks, enterprise features, and so much more make this an upgrade to prioritize. With v13 support ending December 14th, 2026 the time to start planning an upgrade is now.&lt;/p&gt;
&lt;h2&gt;Need help with your Umbraco upgrade?&lt;/h2&gt;
&lt;p&gt;Reach out to us for an initial consultation so we can help make your upgrade a success!&lt;/p&gt;
&lt;p&gt;&lt;a style="color: #fff; background-image: none;" type="external" href="#section-footer" title="Schedule a Consultation" class="pw-button" data-anchor="#section-footer"&gt;Schedule a Consultation&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="change-log"&gt;Change Log&lt;/h2&gt;
&lt;div&gt;2026-01-22: Initial Version&lt;/div&gt;</description>
      <pubDate>Thu, 22 Jan 2026 10:20:17 Z</pubDate>
      <a10:updated>2026-01-22T10:20:17Z</a10:updated>
    </item>
    <item>
      <guid isPermaLink="false">4810</guid>
      <link>https://www.proworks.com/blog/archive/if-burnout-is-an-injury-passion-is-the-sport/</link>
      <title>If Burnout is an Injury, Passion is the Sport</title>
      <description>&lt;p&gt;It's been a while since I wrote any kind of lifestyle post, but this one has been sitting in my brain for some time. After joining the organizers team for &lt;a href="https://codecab.in"&gt;CODECABIN 2026&lt;/a&gt; - which is happening in gorgeous Gleneagle, Colorado in March - and then reading &lt;a href="https://24days.in/umbraco-cms/2025/passion-isnt-enough/"&gt;Owain's blog post for 24 Days in Umbraco&lt;/a&gt;, I've been thinking a lot more about something that I know I have suffered strongly in the past year: burnout.&lt;/p&gt;
&lt;p&gt;If you haven't read Owain's post yet, it is also a look back on this last year and a reflection on perfection, dream jobs, and change. It's both thoughtful, and thought-provoking, and is the strong impetus behind my own reflection on this phrase that I have been saying in my home the entirety of this last year:&lt;/p&gt;
&lt;p&gt;Burnout is an injury. It takes time to heal, and it may never heal.&lt;/p&gt;
&lt;h2&gt;Looking Back at 2025&lt;/h2&gt;
&lt;p&gt;This year was a big year for me - after all, it's the 10 year anniversary of &lt;a href="https://skrift.io"&gt;Skrift&lt;/a&gt;. A year of hype, a year of promotion, a year of improvement! Haha, just kidding. It was in fact Skrift's 10 year anniversary, but if we're being perfectly honest when the anniversary popped up on my radar in March (we started in April), I wasn't ready.&lt;/p&gt;
&lt;p&gt;Kyle, my husband, was recovering from a long bout of pneumonia and a muscle tear that had landed him in the emergency room. He got diagnosed with that the same day our 17 year old kitty passed away (the first of two pets that we had to say goodbye to this year). Work was incredibly busy and I had a lot on my shoulders at the time - new builds, significant site upgrades/rebuilds, and some big new features for existing clients.&lt;/p&gt;
&lt;p&gt;When I sat down to think about Skrift, a labor of love for over a decade, I wasn't even sure what to say. I couldn't focus on it. I had no interest in it. If we're being honest? I couldn't have cared less about the anniversary.&lt;/p&gt;
&lt;p&gt;Move forward to planning my travel for Codegarden less than a month before the event, struggling through planning a (rather excellent, if I'm patting myself on the back) keynote presentation for the US Festival, writing blog posts and articles both for ProWorks, Skrift, and 24 Days...&lt;/p&gt;
&lt;p&gt;They say it's not a sprint, it's a marathon, and boy howdy did this year feel like a marathon.&lt;/p&gt;
&lt;p&gt;I love my job. I love Skrift. I love Umbraco. But I'm tired.&lt;/p&gt;
&lt;h2&gt;The Correlation Between Passion and Burnout&lt;/h2&gt;
&lt;p&gt;And that's the crux of my philosophizing in this post. The truth, for me, is you can't burn out on something if you weren't passionate about it. You cannot suffer burnout if you didn't first fall in love.&lt;/p&gt;
&lt;p&gt;Pacing, thoughtfulness, giving yourself time and space to reflect and ponder doesn't happen when you're in the middle of a passionate affair with your career, your code, your writing, your art. Being all in, without limits and without boundaries, is how we make amazing progress and also how we break a leg. Or in this case, perhaps break our own hearts a little when we open our laptops, stare at the screen for one, five, fifteen, fourty-five minutes, and then close it again. Because there's nothing there to give when the day is over.&lt;/p&gt;
&lt;h2&gt;It's Time to Balance Your Passion with Routine&lt;/h2&gt;
&lt;p&gt;I have been in my current relationship for over fifteen years now, and the last five of them we've been married. If you asked me who my best friend is, I would immediately tell you that it's Kyle. And, while this is obviously very personal for an article about burnout in tech, I'm going to say that if I had tried to make the last fifteen years a wildly passionate fling, I would have absolutely burned out on my relationship as much as I would have any job.&lt;/p&gt;
&lt;p&gt;But, especially when we have that shiny MVP badge next to our name, there's personal pressure that we put on ourselves to constantly maintain that passionate love affair with our work and our code - and it's as unrealistic as it is to maintain that level of energy in any interpersonal relationship.&lt;/p&gt;
&lt;p&gt;What has made my last 15 years successful? Routine - full of easy, comfortable daily moments in each other's company, where we have our schedules laid out, our chores separated (I hate the dishes, Kyle hates scooping the litter boxes), and a healthy dose of laughter. And I think this is exactly what makes us successful at careers.&lt;/p&gt;
&lt;p&gt;I'm not saying don't go above and beyond - obviously there are special moments - or not to push yourself when an opportunity presents itself that sparks your interest. I'm saying it's important to balance your passion with time to relax and let go. Embrace the moments where you aren't passionate, where you don't want to open the laptop, where the routine is good enough. Let passion be the sprint, not a marathon.&lt;/p&gt;
&lt;h2&gt;Step Away and Refresh&lt;/h2&gt;
&lt;p&gt;I am proud to say that ProWorks is a strong proponent of work life balance. I can count on one hand the amount of overtime I've worked after starting here three years ago. I also only work four days a week, something that they have supported me in, because I found that when the work week was over, I had no energy for the creative endeavors I love. Having my Mondays free means I actually draw, and I have grown so much as an artist.&lt;/p&gt;
&lt;p&gt;It's important to give ourselves those moments, whether it's a randomly taken day off, a shorter work week, or stepping away to spend time with like-minded people in a quiet scenario. I remember being in Pete Duncanson's garden in England, talking with a few Umbracians in a personal setting, and feeling so refreshed and genuine.&lt;/p&gt;
&lt;p&gt;If you get an opportunity - yep, there is a plug, but I honestly mean it - I recommend attending CODECABIN. I went to my first (and only) CODECABIN in 2022 after it had taken a break for COVID. While some people hacked - and yay that passion sprint - I spent most of my time in quiet conversations with people like me, about Umbraco, about life, about retirement (that was one of our big talking points that year), and yeah a little bit about code. It was refreshing, and I wouldn't say I came away passionate, I came away thoughtful and feeling like I had bonded with people who could accept me for who I am at this moment. If you get the chance, &lt;a href="https://codecab.in/#apply2"&gt;you should absolutely go&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Burnout is an injury brought on most often by an overabundance of passion. When you feel it, step back and allow yourself to heal. Remember that you don't have to push yourself every day. Routine is absolutely okay - in fact, it's healthy. It's a sprint, not a marathon.&lt;/p&gt;
</description>
      <pubDate>Thu, 11 Dec 2025 12:00:00 Z</pubDate>
      <a10:updated>2025-12-11T12:00:00Z</a10:updated>
    </item>
    <item>
      <guid isPermaLink="false">4809</guid>
      <link>https://www.proworks.com/blog/archive/tinymceumbraco-v17-released-and-ready-for-umbraco-17/</link>
      <category>umbraco</category>
      <title>TinyMCE.Umbraco v17 Released and Ready for Umbraco 17</title>
      <description>&lt;p&gt;The ProWorks team is excited to announce the release of TinyMCE.Umbraco v17, our latest update to the &lt;a rel="noopener" href="https://github.com/ProWorksCorporation/TinyMCE-Umbraco" target="_blank"&gt;TinyMCE.Umbraco package&lt;/a&gt; for Umbraco CMS. If you're using or upgrading to Umbraco 17 and want to continue using TinyMCE, this update ensures full compatibility with the new Web Components-based back-office and adds in some other great features as well:&lt;/p&gt;
&lt;p&gt;Additional features include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Streamlined configuration for RTE Data Types in Umbraco&lt;/li&gt;
&lt;li&gt;Enhanced settings that support direct JSON-based configuration via .NET (&lt;code&gt;appsettings.json&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Support for updating TinyMCE to versions 7 or 8&lt;/li&gt;
&lt;li&gt;Simple configuration-based TinyMCE Premium setup&lt;/li&gt;
&lt;li&gt;OpenAI and ChatGPT integrations out-of-the-box&lt;/li&gt;
&lt;li&gt;Migrations from v15 that keep TinyMCE in Umbraco as an RTE option by default&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;More information and documentation about TinyMCE.Umbraco here: &lt;a rel="noopener" href="https://github.com/ProWorksCorporation/TinyMCE-Umbraco" target="_blank"&gt;https://github.com/ProWorksCorporation/TinyMCE-Umbraco&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Highlights from the Umbraco 17 Release&lt;/h2&gt;
&lt;p&gt;Umbraco version 17 includes several major improvements that make it a compelling upgrade for most teams:&lt;/p&gt;
&lt;h3&gt;Umbraco MCP Server&lt;/h3&gt;
&lt;p&gt;A new integration layer to enable content editors to report on, manage, create, and update content and media through AI chat interfaces like ChatGPT and Claude. This allows for bulk operations and reporting where AI can reason and help editors understand their content at a new level.&lt;/p&gt;
&lt;h3&gt;Enhanced caching configuration&lt;/h3&gt;
&lt;p&gt;The new caching layer allows for more fine-grained configuration. Instead of simply caching all the content, now it can cache only the most used content for faster startup times and better performance for sites with lots of content.&lt;/p&gt;
&lt;h3&gt;A fully rebuilt back-office&lt;/h3&gt;
&lt;p&gt;The new back-office UI is powered by standard JavaScript Web Components, delivering better performance, faster load times, and a more modern foundation for custom extensions.&lt;/p&gt;
&lt;p&gt;Read the official announcement from Umbraco here: &lt;a rel="noopener" href="https://umbraco.com/blog/umbraco-17-lts-release/" target="_blank"&gt;https://umbraco.com/blog/umbraco-17-lts-release/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Thinking about upgrading?&lt;/h2&gt;
&lt;p&gt;We’d be happy to help with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Upgrading from Umbraco versions 8 - 16 to the latest LTS&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Back-office extension development&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Custom TinyMCE plugins or editor integrations&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Modernizing workflows using MCP Server and AI-enabled tooling&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;Custom MCP implementations for Umbraco websites&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you’d like to discuss your upgrade strategy or schedule a brief consultation, &lt;a href="#section-footer" data-anchor="#section-footer"&gt;contact us below&lt;/a&gt; and we would be happy to help!&lt;/p&gt;</description>
      <pubDate>Wed, 03 Dec 2025 19:28:36 Z</pubDate>
      <a10:updated>2025-12-03T19:28:36Z</a10:updated>
    </item>
    <item>
      <guid isPermaLink="false">4724</guid>
      <link>https://www.proworks.com/blog/archive/gnarly-times-at-the-2025-us-umbraco-festival/</link>
      <category>umbraco</category>
      <title>Gnarly Times at the 2025 US Umbraco Festival</title>
      <description>&lt;p&gt;Last week’s&amp;nbsp;&lt;strong&gt;&lt;a rel="noopener" href="https://umbracofestival.us/" target="_blank"&gt;US Umbraco Festival&lt;/a&gt;&amp;nbsp;&lt;/strong&gt;brought the Umbraco community together in Chicago, and what a fantastic couple of days it was! Between inspiring talks, new product announcements, creative surprises, and a whole lot of friendly faces, this year’s event captured what makes the Umbraco community so special.&lt;/p&gt;
&lt;p&gt;ProWorks was proud to attend with&amp;nbsp;&lt;strong&gt;Jen Wolke&lt;/strong&gt;,&amp;nbsp;&lt;strong&gt;Janae Cram&lt;/strong&gt;, and&amp;nbsp;&lt;strong&gt;Jason Prothero,&amp;nbsp;&lt;/strong&gt;and to have both Jen and Janae take the stage as speakers!&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.proworks.com/media/ptid1cjy/img_5725.jpg?rmode=max&amp;amp;width=640&amp;amp;height=480" alt="" width="640" height="480"&gt;&lt;/p&gt;
&lt;h2&gt;Highlights &amp;amp; Announcements&lt;/h2&gt;
&lt;p&gt;The first day included the&lt;strong&gt; &lt;/strong&gt;Umbraco Partner Summit, where partners got a sneak peek at what’s next:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Umbraco MCP is now in beta and set to release when v17 is released&lt;/li&gt;
&lt;li&gt;A new&amp;nbsp;Western U.S. Partner Manager&amp;nbsp;role is on the way&lt;/li&gt;
&lt;li&gt;A new&amp;nbsp;Enterprise product bundle&amp;nbsp;is coming soon&lt;/li&gt;
&lt;li&gt;Umbraco Compose, a hosted solution, is planned for 2026&lt;/li&gt;
&lt;li&gt;Expanded&amp;nbsp;U.S. support hours and team&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://www.proworks.com/media/zb4iwx2z/img_5670.jpg?rmode=max&amp;amp;width=639&amp;amp;height=480" alt="Filip and Mats at the US Partner Summit 2025" width="639" height="480"&gt;&lt;/p&gt;
&lt;h2&gt;Community &amp;amp; Creativity&lt;/h2&gt;
&lt;p&gt;&lt;img style="margin-left: 20px; float: right;" src="https://www.proworks.com/media/q1wiso3j/img_5693.jpg?rmode=max&amp;amp;width=199&amp;amp;height=265" alt="US Festival Puzzle" width="199" height="265"&gt;As you can imagine, there was plenty of fun and craziness (it is an Umbraco event after all). There was a fortune-telling narwhal, mood rings, great swag, giveaways, fun AI speaker intros, and the evening arcade fun (complete with a few epic pinball attempts from Janae ...and Jen destroying Jason at the hoops game #h5yr), the good vibes were everywhere.&lt;/p&gt;
&lt;p&gt;As always, the organizers and volunteers deserve huge thanks for creating such a welcoming, high-energy, and informative event that embodies the Umbraco community spirit!&lt;/p&gt;
&lt;h2&gt;Talks That Inspired Us&lt;/h2&gt;
&lt;p&gt;Our team came away with notes and ideas from the talks, and here are a few of our favorites:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Let’s Be More Than Friends: How Designers Can Shape an Awesome Editing Experience&lt;/strong&gt;&amp;nbsp;by&amp;nbsp;&lt;em&gt;Angela Wolak&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Content Debt: The Quiet Killer of CMS Projects&lt;/strong&gt;&amp;nbsp;by&amp;nbsp;&lt;em&gt;Nora Lahl&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automate All the Things: Building &amp;amp; Evolving Umbraco Sites with YOLO-Mode AI Agents&lt;/strong&gt; by&amp;nbsp;&lt;em&gt;Shannon Thompson&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Beyond the Build: How Umbraco Powers a Unified Digital Ecosystem&lt;/strong&gt;&amp;nbsp;by&amp;nbsp;&lt;em&gt;Chris Osterhout&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Beyond the Cart: Custom Fulfillment and Reporting with Umbraco Commerce&lt;/strong&gt;&amp;nbsp;by&amp;nbsp;&lt;em&gt;Scott Clevenger and Aaron Sawyer&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Embracing AI as a Collaborative Design Partner: Ethical Integration in UX&lt;/strong&gt;&amp;nbsp;by&amp;nbsp;&lt;em&gt;Kassandra Gibbons&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Friendly by Design&lt;/strong&gt;&amp;nbsp;by&amp;nbsp;&lt;em&gt;Erica Quessenberry&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kickstarting your digital optimization process&lt;/strong&gt;&amp;nbsp;by&amp;nbsp;&lt;em&gt;Joe Kepley&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There were lots of great ideas and interesting ways to think about Umbraco configuration, AI, design, UX, and useful Umbraco packages.&lt;/p&gt;
&lt;blockquote&gt;Kassandra Gibbons' Embracing AI as a Collaborative Design Partner: Ethical Integration in UX was probably my favorite talk of the day. There were definitely actionable practices I think ProWorks can implement in relation to AI right now.&lt;/blockquote&gt;
&lt;p style="margin-left: 50px;"&gt;&lt;em&gt;Janae Cram&lt;/em&gt;&lt;br&gt;&lt;em&gt;ProWorks Senior Developer and Umbraco MVP&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;ProWorks on Stage&lt;/h2&gt;
&lt;p&gt;We couldn’t be prouder of our own team members who spoke at the festival! Really, an amazing job to both and a huge High Five You Rock! #h5yr&lt;/p&gt;
&lt;h3&gt;&lt;img style="float: right; margin-left: 20px;" src="https://www.proworks.com/media/io5ljkql/img_5633.jpg?rmode=max&amp;amp;width=222&amp;amp;height=296" alt="Jen Wolke presenting at Umbraco US Festival 2025" width="222" height="296"&gt;Jen Wolke: “Into the Umbazon!”&lt;/h3&gt;
&lt;p&gt;Jen took the audience on an adventure and explored some of the most popular Umbraco packages, as well as a few off the beaten path.&lt;/p&gt;
&lt;p&gt;Want to learn more about her talk? She has a great way to explore the Umbazon on her website with videos talking about each package here: &lt;a rel="noopener" href="https://jtw.blog/umbazon/" target="_blank"&gt;Into the Umbrazon!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Also, there is a recorded version from the Codegarden 2025 version of it here:&amp;nbsp;&lt;a rel="noopener" href="https://youtu.be/Vfdu6dm18Ow?si=BEojF-LcRj7Q__z_" target="_blank" data-anchor="?si=BEojF-LcRj7Q__z_"&gt;https://youtu.be/Vfdu6dm18Ow?si=BEojF-LcRj7Q__z_&lt;/a&gt;&lt;/p&gt;
&lt;div class="mceNonEditable embeditem" data-embed-url="https://www.youtube.com/watch?v=Vfdu6dm18Ow" data-embed-height="1111" data-embed-width="500" data-embed-constrain="true"&gt;&lt;iframe width="500" height="281" src="https://www.youtube.com/embed/Vfdu6dm18Ow?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="allowfullscreen" title="Jen Wolke | Into the Umbazon | Codegarden 2025"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;&lt;img style="float: right; margin-left: 20px;" src="https://www.proworks.com/media/2vvmszma/img_5706.jpg?rmode=max&amp;amp;width=227&amp;amp;height=170" alt="Janae Cram presenting at Umbraco US Festival 2025" width="227" height="170"&gt;Janae Cram: “TinyMCE is Here to Stay - You Can Still Use it in Umbraco 16!”&lt;/h3&gt;
&lt;p&gt;Janae showed how to implement TinyMCE in Umbraco 16, how to upgrade from v15 without data loss, how to change core settings you may be used to since this is now a package, and how to customize the editor and implement complex plugin functionality!&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Videos and more resources to come on this! (watch this space)&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Our Takeaways&lt;/h2&gt;
&lt;p&gt;This year’s festival was great and showed us:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The community is growing and thriving in the U.S.&lt;/li&gt;
&lt;li&gt;Umbraco is positioned for the future and is a great platform for all sized organizations (including Enterprises!)&lt;/li&gt;
&lt;li&gt;AI and automation are giving content editors, designers, and developers ways to be more productive and focus on the important things&lt;/li&gt;
&lt;li&gt;Great editor experiences are worth spending the time to get right and there are a ton or great packages to help&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Huge thanks to the organizers, speakers, and everyone who made the 2025 Umbraco US Festival such a success. We left inspired, energized, and ready to bring new ideas into our work and community involvement.&lt;/p&gt;
&lt;p&gt;See you all next year (and maybe at &lt;a rel="noopener" href="https://codecab.in/" target="_blank"&gt;&lt;strong&gt;CodeCabin US 2026&lt;/strong&gt;&lt;/a&gt;)!&lt;/p&gt;
&lt;h2&gt;Connect With Us!&lt;/h2&gt;
&lt;p&gt;Interested in learning more about the takeaways? &lt;a href="#section-footer" data-anchor="#section-footer"&gt;Contact us below&lt;/a&gt; and we are happy to demo some of the new AI features and packages that have been released.&lt;/p&gt;</description>
      <pubDate>Thu, 09 Oct 2025 08:00:00 Z</pubDate>
      <a10:updated>2025-10-09T08:00:00Z</a10:updated>
    </item>
    <item>
      <guid isPermaLink="false">4717</guid>
      <link>https://www.proworks.com/blog/archive/what-is-umbraco-training-like-what-will-you-learn/</link>
      <category>umbraco</category>
      <title>What is Umbraco Training like? What will you learn?</title>
      <description>&lt;p&gt;When I first signed up for Umbraco training, I wasn’t sure what to expect. Would it just be a run-through of documentation? A series of demos I’d forget a week later?&lt;/p&gt;
&lt;p&gt;What I found instead was hands-on, practical, and directly tied to the kinds of problems developers actually face. From extending the back-office with custom tools, to structuring clean MVC templates, to integrating external systems and locking things down with security best practices. Each step made me not just know Umbraco better, but use it better.&lt;/p&gt;
&lt;p&gt;If you’ve ever wondered what Umbraco training is really like and what you’ll actually learn, here’s a look at the key lessons that stood out to me on the path to Expert Certification.&amp;nbsp;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 data-start="278" data-end="305"&gt;Extending the Backoffice&lt;/h2&gt;
&lt;p data-start="306" data-end="528"&gt;I already had a basic understanding of the back office and what could be done with it, but in this section I was able to expand that knowledge by working with extensions like Lit, Vite, and TypeScript to achieve even more.&lt;/p&gt;
&lt;p data-start="530" data-end="752"&gt;I’ve always appreciated how clean and editor-friendly the interface is, but creating my own property editors, customizing the UI, and integrating the Umbraco UI Library gave me a whole new appreciation for its flexibility.&lt;/p&gt;
&lt;p data-start="754" data-end="1090"&gt;The challenge? Figuring out how to structure larger back-office extensions so they stay maintainable over time. I had to find the balance between “this is cool” and “this will still make sense six months from now.” My lightbulb moment was realizing how much you can streamline content workflows with just a few well-placed custom tools.&lt;/p&gt;
&lt;p data-start="1092" data-end="1272"&gt;&lt;strong data-start="1092" data-end="1110"&gt;Quick example:&lt;/strong&gt; a small Lit-based property editor for an “Alert banner” (toggle + text + theme) that editors can reuse anywhere, instead of hand-coding alerts in multiple views.&lt;/p&gt;
&lt;p data-start="1274" data-end="1297"&gt;&lt;strong data-start="1274" data-end="1297"&gt;When to choose what&lt;/strong&gt;&lt;/p&gt;
&lt;ul data-start="1298" data-end="1641"&gt;
&lt;li data-start="1298" data-end="1409"&gt;
&lt;p data-start="1300" data-end="1409"&gt;&lt;strong data-start="1300" data-end="1327"&gt;Custom property editor:&lt;/strong&gt; when editors repeat the same pattern across pages and need a single, reusable UI.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="1410" data-end="1532"&gt;
&lt;p data-start="1412" data-end="1532"&gt;&lt;strong data-start="1412" data-end="1472"&gt;Compose built-ins (e.g., Textbox/Dropdown/Media Picker):&lt;/strong&gt; when requirements are simple and you want zero custom code.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="1533" data-end="1641"&gt;
&lt;p data-start="1535" data-end="1641"&gt;&lt;strong data-start="1535" data-end="1565"&gt;Dashboard/panel extension:&lt;/strong&gt; when the tool spans multiple doctypes (e.g., content audits, bulk actions).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="1643" data-end="1657"&gt;&lt;strong data-start="1643" data-end="1657"&gt;Trade-offs&lt;/strong&gt;&lt;/p&gt;
&lt;ul data-start="1658" data-end="1801"&gt;
&lt;li data-start="1658" data-end="1723"&gt;
&lt;p data-start="1660" data-end="1723"&gt;More power = more maintenance (bundle size, upgrades, testing).&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="1724" data-end="1801"&gt;
&lt;p data-start="1726" data-end="1801"&gt;Document your folder structure and naming early; future you will thank you.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-start="1803" data-end="1806"&gt;
&lt;h2 data-start="1808" data-end="1826"&gt;Umbraco and MVC&lt;/h2&gt;
&lt;p data-start="1827" data-end="1998"&gt;I’ve worked with MVC before, so this part felt familiar, but doing it in Umbraco with strongly typed models and clean controllers made me look at consistency in a new way.&lt;/p&gt;
&lt;p data-start="2000" data-end="2289"&gt;What stood out to me was having so much control over rendering while still keeping things easy for editors. The tricky part was keeping templates flexible without overcomplicating them. Once I found that balance, it was really satisfying to see how clean and reusable the setup turned out.&lt;/p&gt;
&lt;p data-start="2291" data-end="2435"&gt;&lt;strong data-start="2291" data-end="2309"&gt;Quick example:&lt;/strong&gt; moving repeatable UI into a View Component and passing a typed model trimmed the Razor views and kept logic out of templates.&lt;/p&gt;
&lt;p data-start="2437" data-end="2460"&gt;&lt;strong data-start="2437" data-end="2460"&gt;When to choose what&lt;/strong&gt;&lt;/p&gt;
&lt;ul data-start="2461" data-end="2710"&gt;
&lt;li data-start="2461" data-end="2550"&gt;
&lt;p data-start="2463" data-end="2550"&gt;&lt;strong data-start="2463" data-end="2508"&gt;RenderController + strongly typed models:&lt;/strong&gt; page rendering with editor-owned content.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="2551" data-end="2642"&gt;
&lt;p data-start="2553" data-end="2642"&gt;&lt;strong data-start="2553" data-end="2575"&gt;SurfaceController:&lt;/strong&gt; form posts or actions initiated from views (validation, feedback).&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="2643" data-end="2710"&gt;
&lt;p data-start="2645" data-end="2710"&gt;&lt;strong data-start="2645" data-end="2664"&gt;API Controller:&lt;/strong&gt; JSON endpoints for front-end apps/components.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="2712" data-end="2726"&gt;&lt;strong data-start="2712" data-end="2726"&gt;Trade-offs&lt;/strong&gt;&lt;/p&gt;
&lt;ul data-start="2727" data-end="2894"&gt;
&lt;li data-start="2727" data-end="2824"&gt;
&lt;p data-start="2729" data-end="2824"&gt;Too many partials/components can fragment the mental model; group by feature, not by file type.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="2825" data-end="2894"&gt;
&lt;p data-start="2827" data-end="2894"&gt;Keep view models lean; map once in the controller, not in the view.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-start="2896" data-end="2899"&gt;
&lt;h2 data-start="2901" data-end="2927"&gt;Application Integration&lt;/h2&gt;
&lt;p data-start="2928" data-end="3206"&gt;This part was really exciting because it showed how Umbraco can connect with other systems instead of just standing alone. I got hands-on with things like Algolia, HubSpot Forms, and Shopify, and it made me realize how easily Umbraco can become the main hub for almost anything.&lt;/p&gt;
&lt;p data-start="3208" data-end="3438"&gt;The coolest moment was seeing Umbraco data show up in another service in real time. The hardest part was deciding how much data to actually send, it’s not just about connecting everything, it’s about knowing where to draw the line.&lt;/p&gt;
&lt;p data-start="3440" data-end="3458"&gt;&lt;strong data-start="3440" data-end="3458"&gt;Quick examples&lt;/strong&gt;&lt;/p&gt;
&lt;ul data-start="3459" data-end="3763"&gt;
&lt;li data-start="3459" data-end="3563"&gt;
&lt;p data-start="3461" data-end="3563"&gt;&lt;strong data-start="3461" data-end="3473"&gt;Algolia:&lt;/strong&gt; as-you-type results and typo tolerance (e.g., “Hary Poter” still returns &lt;em data-start="3547" data-end="3561"&gt;Harry Potter&lt;/em&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="3564" data-end="3681"&gt;
&lt;p data-start="3566" data-end="3681"&gt;&lt;strong data-start="3566" data-end="3584"&gt;HubSpot Forms:&lt;/strong&gt; a dropped-in form creates/updates a contact, triggers a welcome email, and assigns a sales task.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="3682" data-end="3763"&gt;
&lt;p data-start="3684" data-end="3763"&gt;&lt;strong data-start="3684" data-end="3696"&gt;Shopify:&lt;/strong&gt; pulling product data into content pages without duplicating truth.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="3765" data-end="3788"&gt;&lt;strong data-start="3765" data-end="3788"&gt;When to choose what&lt;/strong&gt;&lt;/p&gt;
&lt;ul data-start="3789" data-end="4102"&gt;
&lt;li data-start="3789" data-end="3875"&gt;
&lt;p data-start="3791" data-end="3875"&gt;&lt;strong data-start="3791" data-end="3815"&gt;Stay inside Umbraco:&lt;/strong&gt; simple needs, low traffic, no external automation required.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="3876" data-end="4000"&gt;
&lt;p data-start="3878" data-end="4000"&gt;&lt;strong data-start="3878" data-end="3917"&gt;Use SaaS (Algolia/HubSpot/Shopify):&lt;/strong&gt; when you need instant search, marketing automation, analytics, or robust commerce.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="4001" data-end="4102"&gt;
&lt;p data-start="4003" data-end="4102"&gt;&lt;strong data-start="4003" data-end="4014"&gt;Hybrid:&lt;/strong&gt; store canonical content in Umbraco, push essentials out via webhooks or scheduled jobs.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="4104" data-end="4118"&gt;&lt;strong data-start="4104" data-end="4118"&gt;Trade-offs&lt;/strong&gt;&lt;/p&gt;
&lt;ul data-start="4119" data-end="4291"&gt;
&lt;li data-start="4119" data-end="4173"&gt;
&lt;p data-start="4121" data-end="4173"&gt;External dependencies (uptime, APIs, pricing tiers).&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="4174" data-end="4224"&gt;
&lt;p data-start="4176" data-end="4224"&gt;Privacy/compliance and field mapping discipline.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="4225" data-end="4291"&gt;
&lt;p data-start="4227" data-end="4291"&gt;Extra scripts/assets, watch page weight and defer where possible.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-start="4293" data-end="4296"&gt;
&lt;h2 data-start="4298" data-end="4309"&gt;Security&lt;/h2&gt;
&lt;p data-start="4310" data-end="4655"&gt;Security has always felt a little overwhelming, but breaking it into smaller steps made it much more approachable. I learned how HTTPS, TLS, and certificates build the foundation for secure communication, and how easy it can be for threats like man-in-the-middle attacks or cookie misuse to expose vulnerabilities if protections aren’t in place.&lt;/p&gt;
&lt;p data-start="4657" data-end="5175"&gt;Along the way, I configured HTTPS enforcement, explored security headers like HSTS, and dove deeper into protections against clickjacking, MIME sniffing, and different types of XSS. One of the biggest takeaways was implementing Content Security Policy (CSP) and Subresource Integrity (SRI). While working with multiple headers and CSP rules without breaking the site was challenging, it taught me that security isn’t just about turning on defenses, it’s about testing and adjusting to make sure everything works safely.&lt;/p&gt;
&lt;p data-start="5177" data-end="5454"&gt;I also practiced hiding the Umbraco login page, setting up two-factor authentication, and applying least privilege with custom user groups. Each of these reinforced the idea that security is layered, no single step is enough, but together they make a site much harder to breach.&lt;/p&gt;
&lt;p data-start="5456" data-end="5659"&gt;&lt;strong data-start="5456" data-end="5474"&gt;Quick example:&lt;/strong&gt; starting with a conservative CSP (&lt;code data-start="5509" data-end="5529"&gt;default-src 'self'&lt;/code&gt;) and then explicitly allowing only the domains needed for images, scripts (with nonces), and fonts; adding SRI to any CDN assets.&lt;/p&gt;
&lt;p data-start="5661" data-end="5684"&gt;&lt;strong data-start="5661" data-end="5684"&gt;When to choose what&lt;/strong&gt;&lt;/p&gt;
&lt;ul data-start="5685" data-end="5907"&gt;
&lt;li data-start="5685" data-end="5759"&gt;
&lt;p data-start="5687" data-end="5759"&gt;&lt;strong data-start="5687" data-end="5715"&gt;HSTS + HTTPS Everywhere:&lt;/strong&gt; always; enable preload once you’re certain.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="5760" data-end="5844"&gt;
&lt;p data-start="5762" data-end="5844"&gt;&lt;strong data-start="5762" data-end="5811"&gt;&lt;code data-start="5764" data-end="5781"&gt;frame-ancestors&lt;/code&gt; (CSP) vs &lt;code data-start="5791" data-end="5808"&gt;X-Frame-Options&lt;/code&gt;:&lt;/strong&gt; prefer CSP; keep XFO for legacy.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="5845" data-end="5907"&gt;
&lt;p data-start="5847" data-end="5907"&gt;&lt;strong data-start="5847" data-end="5873"&gt;Report-Only CSP first:&lt;/strong&gt; collect violations, then enforce.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="5909" data-end="5923"&gt;&lt;strong data-start="5909" data-end="5923"&gt;Trade-offs&lt;/strong&gt;&lt;/p&gt;
&lt;ul data-start="5924" data-end="6125"&gt;
&lt;li data-start="5924" data-end="5973"&gt;
&lt;p data-start="5926" data-end="5973"&gt;CSP maintenance grows with third-party scripts.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="5974" data-end="6062"&gt;
&lt;p data-start="5976" data-end="6062"&gt;Over-strict rules can break features, iterate in Report-Only and add integration tests.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="6063" data-end="6125"&gt;
&lt;p data-start="6065" data-end="6125"&gt;Usability vs. friction (e.g., 2FA) needs stakeholder buy-in.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 data-start="1136" data-end="1455"&gt;Final Thoughts&lt;/h2&gt;
&lt;p data-start="1136" data-end="1455"&gt;By the end of training, I realized it wasn’t about memorizing features; it was about learning how to think with Umbraco. How to balance flexibility with maintainability. How to give editors more power without overwhelming them. How to connect Umbraco with the wider ecosystem while keeping security front and center.&lt;/p&gt;
&lt;p data-start="1457" data-end="1643"&gt;For me, the biggest takeaway was confidence: knowing that I can approach complex projects with a toolkit of patterns, integrations, and safeguards that actually work in the real world.&lt;/p&gt;
&lt;p data-start="1645" data-end="1870"&gt;So if you’re considering Umbraco training, my advice is simple: go for it. You’ll walk away with more than just certification: you’ll gain the experience and mindset to build cleaner, stronger, and more flexible solutions.&lt;/p&gt;</description>
      <pubDate>Mon, 06 Oct 2025 16:43:00 Z</pubDate>
      <a10:updated>2025-10-06T16:43:00Z</a10:updated>
    </item>
    <item>
      <guid isPermaLink="false">4723</guid>
      <link>https://www.proworks.com/blog/archive/new-video-umbraco-mcp-quickstart-in-5-minutes-with-3-practical-examples/</link>
      <category>ai</category>
      <category>umbraco</category>
      <title>New Video: Umbraco MCP Quickstart in 5 Minutes (with 3 Practical Examples)</title>
      <description>&lt;p&gt;AI is everywhere these days and the newest tool in the AI toolbox is Model Context Protocol (MCP). At Codegarden, &lt;a rel="noopener" href="https://umbraco.com/" target="_blank"&gt;Umbraco&lt;/a&gt; announced the new &lt;a rel="noopener" href="https://github.com/Matthew-Wise/umbraco-mcp" target="_blank"&gt;Umbraco MCP Server&lt;/a&gt; created by Phil Whittaker and Matthew Wise.&lt;/p&gt;
&lt;p&gt;The Umbraco MCP server allows AI to connect to the Umbraco Management API and make changes to content, media, and settings. It's quite powerful and I don't believe I know exactly all the possibilities that this enables. We are at the beginning.&lt;/p&gt;
&lt;p&gt;At Codegarden, Phil was kind enough to help me get the Umbraco MCP server running locally and testing it on the test site included in the repository. So I created a video to walk through the setup, show off a few content and media changes I asked AI to make, and see how it went.&lt;/p&gt;
&lt;p&gt;Check out the video below and let me know what you think!&amp;nbsp; Will you try it out?&amp;nbsp; What would you want to try with Umbraco MCP?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="mceNonEditable embeditem" data-embed-url="https://www.youtube.com/watch?v=eii2ond3_fM" data-embed-height="240" data-embed-width="360" data-embed-constrain="true"&gt;&lt;iframe width="360" height="203" src="https://www.youtube.com/embed/eii2ond3_fM?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="allowfullscreen" title="Umbraco MCP Quickstart: Setup in 5 Minutes (with Real Examples)"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <pubDate>Mon, 18 Aug 2025 23:00:00 Z</pubDate>
      <a10:updated>2025-08-18T23:00:00Z</a10:updated>
    </item>
    <item>
      <guid isPermaLink="false">4716</guid>
      <link>https://www.proworks.com/blog/archive/codegarden-2025-recap-from-the-proworks-team/</link>
      <category>umbraco</category>
      <title>Codegarden 2025 Recap from the ProWorks Team</title>
      <description>&lt;p&gt;Just over a week ago, Jen, Janae, and I returned from &lt;a rel="noopener" href="https://codegarden.umbraco.com/" target="_blank"&gt;Umbraco Codegarden 2025&lt;/a&gt;. We’re catching up on emails and sleep, and we’re still buzzing from the energy, connection, and ideas we brought home. Codegarden is like no other conference we've attended: its fun, welcoming, insightful, and gives us a peek at what's coming in the world of &lt;a rel="noopener" href="https://umbraco.com/" target="_blank"&gt;Umbraco&lt;/a&gt;. This year, Jen gave a fun and super informative talk on her favorite Umbraco Packages / Add-ons and all three were renewed as Umbraco MVPs!&lt;/p&gt;
&lt;h2&gt;MVP Renewals&lt;/h2&gt;
&lt;p&gt;First up: we’re thrilled to share that Jen Wolke, Janae Cram, and I (Jason Prothero) all had our Umbraco MVP status renewed this year! We're honored to continue contributing to the Umbraco community and are grateful to be recognized alongside so many amazing people.&lt;/p&gt;
&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="https://www.proworks.com/media/h1th0dee/img_1764.jpg?rmode=max&amp;amp;width=500&amp;amp;height=375" alt="Umbraco MVP Wall" width="500" height="375"&gt;&lt;/p&gt;
&lt;h2&gt;Jen Presents Her Favorite Umbraco Packages&amp;nbsp;&lt;/h2&gt;
&lt;p&gt;The audience was taken on an adventure as Jen took everyone "Into the Umbazon". She presented and demoed some of her favorite packages in the Umbraco community and had a cool "choose your own adventure"-style theme to have a little fun with it! She also created a section of her site on her personal site to let everyone experience the adventure after Codegarden was finished: &lt;a rel="noopener" href="https://jtw.blog/cg2025/" target="_blank" title="In to the Umbazon!"&gt;Into the Umbazon!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I was able to attend her talk and there were some great recommendations in there that I hadn't had a chance to try.&amp;nbsp; #h5yr Jen!&lt;/p&gt;
&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="https://www.proworks.com/media/zmzf1lu3/img_3583.jpg?rmode=max&amp;amp;height=500" alt="" width="375" height="500"&gt;&lt;/p&gt;
&lt;h2&gt;Jason’s Highlights&lt;/h2&gt;
&lt;p&gt;For me, Codegarden is always a fun time to reconnect with old friends, meet new ones, and get inspired by the incredible things happening across the Umbraco ecosystem.&lt;/p&gt;
&lt;p&gt;This year was especially exciting because we released our &lt;a rel="noopener" href="https://github.com/ProWorksCorporation/TinyMCE-Umbraco" target="_blank"&gt;TinyMCE Umbraco package&lt;/a&gt; just before the conference. It was great to hear feedback from the community and a special moment to see it mentioned in the keynote!&lt;/p&gt;
&lt;p&gt;One of the biggest themes this year was AI. The new Umbraco MCP project (created by Matthew Wise and Phil Whitaker) was one of the most talked-about things at the conference. I was lucky enough to sit down with them during the hackathon and get help getting it set up. Huge thanks to both of them!&lt;/p&gt;
&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="https://www.proworks.com/media/2zshxbxo/img_3617.jpg?rmode=max&amp;amp;width=500&amp;amp;height=375" alt="" width="500" height="375"&gt;&lt;/p&gt;
&lt;h2&gt;Janae’s Reflections&lt;/h2&gt;
&lt;p&gt;If you asked me to define Codegarden, I would tell you "it's a family reunion I get to attend once a year, but with people I like". And if I'm going to be honest, my favorite part of the entire week was the beautifully sunny Thursday afternoon where I sat outside the venue with a glass (or two) of wine, chatted with old friends, and made some new ones. I'm not sure that this is something people say about tech communities very often, but it's one of the things I love the most about this particular community.&lt;/p&gt;
&lt;p&gt;It was a long week for me - I had the MVP summit on Monday/Tuesday, assisted with the Astro &amp;amp; Umbraco workshop Tuesday afternoon, and then jumped into Codegarden itself for the rest of the week. There were so many amazing talks including technical ones that I can't wait to dig into (I highly recommend both Callum and Kenn's talks on search), but my top four were not technical at all. Jason's presentation on Ritual, Joke's talk about managing time, Erica's pointers on privilege, and Matt's confessions about neurodiversity deeply resonated with me, and I'll be taking aspects out of all of them to incorporate into my daily life.&lt;/p&gt;
&lt;p&gt;I miss everyone already and I can't wait for the US Festival (I'm speaking, btw) as well as the chance to see all my "found family" at our next reunion in Copenhagen!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Jen’s Takeaways&lt;/h2&gt;
&lt;p&gt;Jen soaked up insights from across the conference, both as an attendee and a speaker.&lt;/p&gt;
&lt;p&gt;Favorite sessions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The Keynote – lots of exciting updates about what’s next for Umbraco&lt;/li&gt;
&lt;li&gt;Jemima Abu on Accessibility – passionate, practical, and engaging&lt;/li&gt;
&lt;li&gt;Jason Wodicka on Ritual – a masterclass in storytelling and community-building&lt;/li&gt;
&lt;li&gt;Matt Brailsford on Neurodivergence – vulnerable and valuable advice for creating inclusive workplaces&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;She’s especially excited about upcoming Umbraco features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Umbraco Compose – a new orchestration layer for data integrations&lt;/li&gt;
&lt;li&gt;Cloud improvements – hostname monitoring, app settings in the portal, WAF upgrades, and DDoS detection&lt;/li&gt;
&lt;li&gt;Search enhancements – support for additional providers and improved configurability&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Jen also had the honor of serving on the Package Awards jury!&lt;/p&gt;
&lt;h2&gt;Until Next Time&lt;/h2&gt;
&lt;p&gt;At the end of the day, Codegarden is about people. Yes, we love the roadmap reveals, the deep dives into performance and packages, and the spontaneous whiteboard ideas from the hackathon. But it’s the community spirit, the support, and the sense of belonging that makes this event so powerful.&lt;/p&gt;
&lt;p&gt;We already miss everyone and we’re counting down to the next get-together at the Umbraco US Festival.&lt;/p&gt;
&lt;p&gt;Until then, we’ll be back at work, inspired, grateful, and building cool things.&lt;/p&gt;
&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="https://www.proworks.com/media/upqlzszb/img_3639.jpg?rmode=max&amp;amp;width=500&amp;amp;height=375" alt="" width="500" height="375"&gt;&lt;/p&gt;</description>
      <pubDate>Thu, 03 Jul 2025 18:38:11 Z</pubDate>
      <a10:updated>2025-07-03T18:38:11Z</a10:updated>
    </item>
    <item>
      <guid isPermaLink="false">4693</guid>
      <link>https://www.proworks.com/blog/archive/introducing-the-tinymce-umbraco-package-for-umbraco-versions-16plus/</link>
      <category>umbraco</category>
      <title>Introducing the TinyMCE Umbraco Package for Umbraco versions 16+</title>
      <description>&lt;p&gt;As of Umbraco version 16, the built-in Rich Text Editor (RTE) powered by &lt;a rel="noopener" href="https://www.tiny.cloud/" target="_blank"&gt;TinyMCE&lt;/a&gt; has been &lt;a rel="noopener" href="https://umbraco.com/blog/umbraco-16-release-candidate/#rte" target="_blank" data-anchor="#rte"&gt;removed from the CMS&lt;/a&gt;. But for many editors and developers, TinyMCE remains a familiar, powerful, and flexible editing experience.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;That’s why we built this package: to bring TinyMCE back to Umbraco and make it even better.&lt;/p&gt;
&lt;h2&gt;Keep TinyMCE in Umbraco 16&lt;/h2&gt;
&lt;p&gt;This package is open source and MIT licensed and &lt;a rel="noopener" href="https://www.nuget.org/packages/TinyMCE.Umbraco/" target="_blank"&gt;available via Nuget&lt;/a&gt;. It restores the expected TinyMCE functionality from Umbraco v15. In addition, if you install it &lt;em&gt;before &lt;/em&gt;the Umbraco v16 migrations run, your existing RTEs will remain on TinyMCE editor rather than being migrated to TipTap.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.proworks.com/media/t0pha5tk/tinymce-editor.png?rmode=max&amp;amp;width=750&amp;amp;height=426" alt="TinyMCE for Umbraco editor in the Umbraco CMS" width="750" height="426" data-caption="TinyMCE for Umbraco editor in the Umbraco CMS"&gt;&lt;/p&gt;
&lt;h2&gt;Enhanced Configuration and Premium Features&lt;/h2&gt;
&lt;p&gt;In addition to restoring the editor, this package introduces enhanced configuration options, making it easier to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Enable or disable TinyMCE plugins per DataType&lt;/li&gt;
&lt;li&gt;Customize TinyMCE configuration independently for each DataType&lt;/li&gt;
&lt;li&gt;Easily enable TinyMCE Premium features like AI assistant, Advanced Templates, and Merge Tags (with a license key)&lt;/li&gt;
&lt;li&gt;More control over the configuration in the appsettings.json using nested configuration keys&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://www.proworks.com/media/rpiffloe/tinymce-editor-ai1.png?rmode=max&amp;amp;width=750&amp;amp;height=417" alt="TinyMCE Umbraco AI Assistant" width="750" height="417" data-caption="TinyMCE Umbraco AI Assistant"&gt;&lt;/p&gt;
&lt;h2&gt;Download and Try It&lt;/h2&gt;
&lt;p&gt;Head over to &lt;a rel="noopener" href="https://github.com/ProWorksCorporation/TinyMCE-Umbraco" target="_blank"&gt;TinyMCE Umbraco on Github&lt;/a&gt; to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Learn how to install and configure the package&lt;/li&gt;
&lt;li&gt;See tips for upgrading from v15&lt;/li&gt;
&lt;li&gt;Explore ways to extend the package and customize the editor&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Acknowledgments&lt;/h2&gt;
&lt;p&gt;Thanks to &lt;a rel="noopener" href="https://www.tiny.cloud/" target="_blank&amp;quot;"&gt;TinyMCE&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a rel="noopener" href="https://umbraco.com/" target="_blank"&gt;Umbraco&lt;/a&gt;&amp;nbsp;for their support during the package development. Special thanks to&amp;nbsp;&lt;a rel="noopener" href="https://github.com/leekelleher" target="_blank"&gt;Lee Kelleher&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a rel="noopener" href="https://github.com/iOvergaard" target="_blank"&gt;Jacob Overgaard&lt;/a&gt; for their early contributions, guidance, and valuable feedback along the way.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;We’re excited to share this with the Umbraco community and would love your feedback! Please share your ideas, questions, or contributions as we would love to hear from you.&lt;/p&gt;</description>
      <pubDate>Thu, 12 Jun 2025 11:00:00 Z</pubDate>
      <a10:updated>2025-06-12T11:00:00Z</a10:updated>
    </item>
    <item>
      <guid isPermaLink="false">4676</guid>
      <link>https://www.proworks.com/blog/archive/alternate-urls/</link>
      <title>Using Alternate Templates in URLs after Upgrading Umbraco</title>
      <description>&lt;p&gt;It used to be in old versions of Umbraco - and I do mean oooold, like v7 - you could use alternate templates as part of the URL structure. This was particularly convenient when you wanted to have a &amp;quot;virtual node&amp;quot; of a sort for a page, but you didn't want to have it somewhere in the backoffice.&lt;/p&gt;
&lt;p&gt;A great example of this is an RSS feed for a blog. In v7, you could assign an &amp;quot;Rss.cshtml&amp;quot; template to your article listing node and have it not be the default template. Then with no extra effort, you could have a URL such as https://mysite.com/blog/rss/ and it would just yoink the allowed template with the name &amp;quot;Rss&amp;quot; and apply it to the blog page but as a virtual &amp;quot;sub node&amp;quot;.&lt;/p&gt;
&lt;p&gt;At first glance, it looks like this no longer exists in Umbraco v9+ but that's not actually true. You can still do this even in version 15 - it just takes a slight bit of extra set-up to get going.&lt;/p&gt;
&lt;p&gt;First off, you need to apply a content finder to make this happen. You don't need to make a custom one, you just need to apply it, and for that I recommend having a custom &lt;code&gt;UmbracoBuilderExtensions.cs&lt;/code&gt; file. My bare minimum version would look something like this:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-c#"&gt;namespace AltTemplateTest.Extensions
{
    public static class UmbracoBuilderExtensions
    {
        public static IUmbracoBuilder AddAltTemplateSite(this IUmbracoBuilder builder)
        {
            // We are going to add our custom website configuration here.

            return builder;
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And then we need to register it in our &lt;code&gt;Program.cs&lt;/code&gt; file.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;using AltTemplateTest.Extensions;

WebApplicationBuilder builder = WebApplication.CreateBuilder(args);

builder.CreateUmbracoBuilder()
    .AddBackOffice()
    .AddWebsite()
    .AddComposers()
    .AddAltTemplateSite() // This is where we add our custom website configuration.
    .Build();

WebApplication app = builder.Build();

await app.BootUmbracoAsync();
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: If you've read my article for &lt;a href="https://24days.in/umbraco-cms/2024/multi-node-tree-picker-search/"&gt;24 Days&lt;/a&gt; or any of &lt;a href="https://skrift.io/authors/janae-cram/"&gt;my articles for Skrift&lt;/a&gt;, you probably see this is a common pattern I use for registering services, content finders, and other custom code for my site. I really like to break this up with additional methods that I use to group things to make finding where I've registered them easier, but we're going to keep it simpler for this example.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Now the magic! Back in our &lt;code&gt;UmbracoBuilderExtensions&lt;/code&gt;, we need to add one line where I conveniently left that comment, like so:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;public static IUmbracoBuilder AddAltTemplateSite(this IUmbracoBuilder builder)
{
    builder.ContentFinders().Append&amp;lt;ContentFinderByUrlAndTemplate&amp;gt;();

    return builder;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Once you've added that, Umbraco will now find any of those alt templates you want to use and allow them to be used in the URL as if they were an extension of the page - perfect for a custom RSS feed or other secret little easter egg you want to include on your site!&lt;/p&gt;
</description>
      <pubDate>Thu, 05 Jun 2025 12:00:00 Z</pubDate>
      <a10:updated>2025-06-05T12:00:00Z</a10:updated>
    </item>
    <item>
      <guid isPermaLink="false">4675</guid>
      <link>https://www.proworks.com/blog/archive/its-beginning-to-look-a-lot-like-codegarden/</link>
      <category>umbraco</category>
      <title>It's beginning to look a lot like Codegarden</title>
      <description>&lt;p&gt;We're less than a month out from Codegarden and for some of us the anticipation is every bit as exciting as Christmas. I attended my first Codegarden last year and it was everything I hoped it would be and more.  Here are a few tips based on my experience - your mileage may vary.&lt;/p&gt;
&lt;h2&gt;Comfy Shoes!&lt;/h2&gt;
&lt;p&gt;To quote one of my favorite movies - The Shawshank Redemption - &amp;quot;I mean, seriously, how often do you really look at a [person's] shoes?&amp;quot;  No one will remember what your shoes looked like, but you will definitely remember how your feet felt if you wear uncomfortable shoes!  You will do a lot of walking so be nice to your feet.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Quick tip - rent a bike!&lt;/em&gt;
&lt;em&gt;If you are like me and prefer riding to walking (I'm short and can't keep up w my long-legged compatriots), there are lots of places to rent bikes in Odense and the city is very easy to traverse by bike.  I was able to rent one directly from my hotel last year!&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;You don't have to go to every session!&lt;/h2&gt;
&lt;p&gt;I repeat - you don't have to go to every session - or even a session during every time slot.  Some of my favorite experiences from Codegarden were sitting around just talking to people and making new Umbraco friends.  As an introvert, this is saying a lot!  The talks are fabulous, inspiring and educational, but they are also recorded.  So, seriously - don't stress out about attending every single one or packing your day so full that you don't have time to rest or breathe.  Give yourself some space to just take in the experience, connect with people you already know and make some new friends!  Codegarden is an experience like no other; enjoy it!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Quick tip - take time to unplug!&lt;/em&gt;
&lt;em&gt;Meditation sessions are available during Codegarden as well as a quiet area.  Take advantage of them to unwind and reset.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Chargers, adapters and cables oh my!&lt;/h2&gt;
&lt;p&gt;In this digital world, having power is essential so bringing all your cables and chargers goes without saying.  If you are traveling from abroad, an adapter is also a good idea. For those coming from the US, there are links to a couple of adapters I have used below (no, no kick backs if you buy anything!).  The wifi and cell reception at the venue is spotty so I found that my phone battery drained pretty quickly.  One thing I regret not bringing is a portable battery pack as charging outlets were in short supply.&lt;/p&gt;
&lt;p&gt;For a complete packing list, check out Joe Glombek's post - https://joe.gl/ombek/blog/codegarden-packing-list/.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Quick tip - battery packs CANNOT be checked on most airlines, so pack your portable battery packs in your carry on!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Useful Tech:&lt;/p&gt;
&lt;p&gt;Adapter - https://www.amazon.com/dp/B0B27HX6P7?ref_=ppx_hzod_title_dt_b_fed_asin_title_0_0&amp;amp;th=1
Adapter - https://www.amazon.com/dp/B0C2KSTK33?ref=ppx_yo2ov_dt_b_fed_asin_title
Charging Backpack (highly recommended by Janae Cram!) - https://www.amazon.com/Voltaic-Systems-Converter-Backpack-Battery/dp/B00CIYAFJW/ref=ast_sto_dp_puis&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Bonus Tip: Get to the swag table early!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Those are my recommendations for enjoying Codegarden without running yourself ragged. Hope to see you there!&lt;/p&gt;
</description>
      <pubDate>Thu, 22 May 2025 14:28:44 Z</pubDate>
      <a10:updated>2025-05-22T14:28:44Z</a10:updated>
    </item>
    <item>
      <guid isPermaLink="false">4670</guid>
      <link>https://www.proworks.com/blog/archive/proworks-welcomes-jen-wolke-to-the-team/</link>
      <category>umbraco</category>
      <title>ProWorks Welcomes Jen Wolke to the Team</title>
      <description>&lt;p data-start="230" data-end="310"&gt;We’re excited to share some big news: &lt;strong data-start="267" data-end="280"&gt;Jen Wolke&lt;/strong&gt; has joined the ProWorks team!&lt;/p&gt;
&lt;p data-start="312" data-end="601"&gt;Jen is well known in the Umbraco community as a &lt;strong data-start="360" data-end="385"&gt;respected Umbraco MVP&lt;/strong&gt;, active &lt;strong data-start="394" data-end="419"&gt;Community Contributor&lt;/strong&gt;, and&amp;nbsp;&lt;strong data-start="434" data-end="456"&gt;Codegarden speaker&lt;/strong&gt;. She’s also a &lt;strong data-start="471" data-end="504"&gt;published author on Skrift.io&lt;/strong&gt;, where she shares her insights on Umbraco, development practices, and open source collaboration.&lt;/p&gt;
&lt;p data-start="603" data-end="1072"&gt;At ProWorks, we’ve always been driven by our commitment to technical excellence, creativity, and community engagement. As an&amp;nbsp;&lt;strong data-start="740" data-end="768"&gt;Umbraco Platinum Partner&lt;/strong&gt;, these values aren’t just nice to have, they’re essential to how we work and the kinds of partnerships we build with our clients. That’s why we’re especially excited to welcome someone who brings not only deep technical expertise but also a strong track record of community involvement and collaboration.&lt;/p&gt;
&lt;p data-start="1074" data-end="1346"&gt;Jen's enthusiasm for crafting thoughtful, flexible CMS solutions fits perfectly with our mission. With her on board, we’re more energized than ever about the future of Umbraco — and how we can continue to help our clients grow with scalable, user-friendly digital platforms.&lt;/p&gt;
&lt;p data-start="1348" data-end="1404"&gt;Please join us in giving Jen a warm welcome to ProWorks!&lt;/p&gt;</description>
      <pubDate>Wed, 07 May 2025 12:00:00 Z</pubDate>
      <a10:updated>2025-05-07T12:00:00Z</a10:updated>
    </item>
    <item>
      <guid isPermaLink="false">4671</guid>
      <link>https://www.proworks.com/blog/archive/proworks-named-umbraco-platinum-partner-and-contributing-partner/</link>
      <category>umbraco</category>
      <title>ProWorks Named Umbraco Platinum Partner and Contributing Partner</title>
      <description>&lt;p data-start="352" data-end="523"&gt;We’re excited to announce some major news at ProWorks: we’ve been officially recognized as both an &lt;strong data-start="451" data-end="479"&gt;Umbraco Platinum Partner&lt;/strong&gt; and an &lt;strong data-start="487" data-end="519"&gt;Umbraco Contributing Partner&lt;/strong&gt;!&lt;/p&gt;
&lt;p data-start="525" data-end="700"&gt;These designations are more than just badges—they’re a reflection of the dedication, expertise, and heart our team brings to every project, and to the wider Umbraco community.&lt;/p&gt;
&lt;hr data-start="702" data-end="705"&gt;
&lt;h4 data-start="707" data-end="747"&gt;🏆 What Does Platinum Partner Mean?&lt;/h4&gt;
&lt;p data-start="749" data-end="954"&gt;The &lt;strong data-start="753" data-end="773"&gt;Platinum Partner&lt;/strong&gt; status is the highest level of recognition in the Umbraco Partner program. It represents a proven track record of delivering high-quality, customized solutions using Umbraco CMS.&lt;/p&gt;
&lt;p data-start="956" data-end="1265"&gt;At ProWorks, we’ve built and maintained dozens of secure, scalable, and user-friendly websites for organizations across industries including government, finance, travel/hospitality, higher ed, manufacturing, and e-commerce. This recognition validates the trust our clients place in us and the depth of our technical capabilities.&lt;/p&gt;
&lt;hr data-start="1267" data-end="1270"&gt;
&lt;h4 data-start="1272" data-end="1322"&gt;💙 What Makes a Contributing Partner Special?&lt;/h4&gt;
&lt;p data-start="1324" data-end="1493"&gt;Being named a &lt;strong data-start="1338" data-end="1362"&gt;Contributing Partner&lt;/strong&gt; is especially meaningful to us. It celebrates not just what we build—but how we contribute to the open-source Umbraco ecosystem.&lt;/p&gt;
&lt;p data-start="1495" data-end="1627"&gt;ProWorks has long believed in the power of community-driven software. Over the years, our team has contributed in a variety of ways:&lt;/p&gt;
&lt;ul data-start="1629" data-end="1976"&gt;
&lt;li data-start="1629" data-end="1707"&gt;
&lt;p data-start="1631" data-end="1707"&gt;Organizing meetups and virtual events like the &lt;strong data-start="1678" data-end="1707"&gt;Umbraco US Virtual Meetup&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="1708" data-end="1782"&gt;
&lt;p data-start="1710" data-end="1782"&gt;Supporting Umbraco MVPs and fostering collaboration within the community&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="1783" data-end="1842"&gt;
&lt;p data-start="1785" data-end="1842"&gt;Providing feedback that helps shape the future of the CMS&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="1783" data-end="1842"&gt;Adding features and submitting PRs to the Umbraco CMS project&lt;/li&gt;
&lt;li data-start="1843" data-end="1906"&gt;
&lt;p data-start="1845" data-end="1906"&gt;Sharing knowledge through talks, tutorials, and documentation&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="1907" data-end="1976"&gt;
&lt;p data-start="1909" data-end="1976"&gt;Building and maintaining packages that enhance the Umbraco platform&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="1978" data-end="2080"&gt;These contributions help keep Umbraco open, flexible, and community-first—values we believe in deeply.&lt;/p&gt;
&lt;hr data-start="2082" data-end="2085"&gt;
&lt;h4 data-start="2087" data-end="2126"&gt;🚀 What This Means for Our Clients&lt;/h4&gt;
&lt;p data-start="2128" data-end="2235"&gt;For our clients and partners, these recognitions underscore what you can expect when working with ProWorks:&lt;/p&gt;
&lt;ul data-start="2237" data-end="2452"&gt;
&lt;li data-start="2237" data-end="2298"&gt;
&lt;p data-start="2239" data-end="2298"&gt;Deep technical expertise with Umbraco CMS and its ecosystem&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="2299" data-end="2377"&gt;
&lt;p data-start="2301" data-end="2377"&gt;A collaborative, future-focused approach to building and supporting websites&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="2378" data-end="2452"&gt;
&lt;p data-start="2380" data-end="2452"&gt;Active involvement in the evolution of the CMS platform we use every day&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="2454" data-end="2618"&gt;Whether you're starting a new Umbraco project, looking to migrate or upgrade an existing site, or need long-term support—we’re here to help, and we’re here to stay.&lt;/p&gt;</description>
      <pubDate>Thu, 24 Apr 2025 12:00:00 Z</pubDate>
      <a10:updated>2025-04-24T12:00:00Z</a10:updated>
    </item>
    <item>
      <guid isPermaLink="false">4674</guid>
      <link>https://www.proworks.com/blog/archive/watch-now-how-to-choose-the-right-cms-for-your-organization-featuring-jason-prothero-of-proworks/</link>
      <category>umbraco</category>
      <title>Watch Now: “How to Choose the Right CMS for Your Organization” – Featuring Jason Prothero of ProWorks</title>
      <description>&lt;p data-start="294" data-end="530"&gt;Choosing the right CMS can be a daunting decision for any organization. With so many platforms, features, and long-term implications to consider, how do you ensure you’re making the best choice for your team, your goals, and your users?&lt;/p&gt;
&lt;p data-start="532" data-end="663"&gt;That’s exactly the question explored in a recent &lt;strong data-start="581" data-end="603"&gt;Umbraco HQ webinar&lt;/strong&gt;:&lt;br data-start="604" data-end="607"&gt;&lt;strong data-start="607" data-end="663"&gt;“How to Choose the Right CMS for Your Organization?”&lt;/strong&gt;&lt;/p&gt;
&lt;p data-start="665" data-end="889"&gt;We’re proud to share that &lt;strong data-start="691" data-end="709"&gt;Jason Prothero&lt;/strong&gt;, President of ProWorks and Umbraco MVP, joined the expert panel to offer his perspective on how organizations—from government to enterprise—can make smart, future-focused CMS decisions.&lt;/p&gt;
&lt;p data-start="891" data-end="935"&gt;In the webinar, Jason and the panel discuss:&lt;/p&gt;
&lt;ul data-start="937" data-end="1250"&gt;
&lt;li data-start="937" data-end="991"&gt;
&lt;p data-start="939" data-end="991"&gt;Key questions to ask when evaluating CMS platforms&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="992" data-end="1068"&gt;
&lt;p data-start="994" data-end="1068"&gt;The role of open source, flexibility, and community in long-term success&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="1069" data-end="1116"&gt;
&lt;p data-start="1071" data-end="1116"&gt;Common CMS pitfalls (and how to avoid them)&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="1117" data-end="1193"&gt;
&lt;p data-start="1119" data-end="1193"&gt;Why the editorial experience is just as important as the development one&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="1194" data-end="1250"&gt;
&lt;p data-start="1196" data-end="1250"&gt;How Umbraco supports both simplicity and scalability&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="1252" data-end="1468"&gt;Whether you’re considering a CMS migration, building a new site from scratch, or just reassessing your current platform, this is a must-watch conversation for digital teams, marketing leaders, and IT decision-makers.&lt;/p&gt;
&lt;p data-start="1470" data-end="1649"&gt;🎥 &lt;strong data-start="1473" data-end="1514"&gt;Watch the full webinar recording here&lt;/strong&gt;:&lt;br data-start="1515" data-end="1518"&gt;&lt;a href="https://umbraco.com/webinar-how-to-choose-the-right-cms-for-your-organization/" title="On-demand webinar: How to choose the right CMS for your organization?"&gt;How to Choose the Right CMS for Your Organization&lt;/a&gt;&lt;/p&gt;
&lt;p data-start="1651" data-end="1782"&gt;A big thank you to Umbraco HQ for organizing such a thoughtful and valuable discussion—and for including Jason in the conversation!&lt;/p&gt;</description>
      <pubDate>Wed, 12 Mar 2025 12:00:00 Z</pubDate>
      <a10:updated>2025-03-12T12:00:00Z</a10:updated>
    </item>
    <item>
      <guid isPermaLink="false">4668</guid>
      <link>https://www.proworks.com/blog/archive/janae-cram-speaking-at-umbraco-us-festival-unlocking-the-power-of-tinymce-in-umbraco/</link>
      <category>umbraco</category>
      <title>Janae Cram Speaking at Umbraco US Festival: Unlocking the Power of TinyMCE in Umbraco</title>
      <description>&lt;p data-start="310" data-end="449"&gt;We’re excited to share that &lt;strong data-start="338" data-end="352"&gt;Janae Cram&lt;/strong&gt;, Front-End Developer at ProWorks, will be speaking at the &lt;strong data-start="411" data-end="445"&gt;Umbraco US Festival in Chicago&lt;/strong&gt;!&lt;/p&gt;
&lt;p data-start="451" data-end="666"&gt;Janae is passionate about crafting smooth, accessible, and flexible content editing experiences in Umbraco. Her talk dives deep into one of the most used, but often underutilized, tools in the backoffice:&amp;nbsp;&lt;strong data-start="654" data-end="665"&gt;TinyMCE&lt;/strong&gt;.&lt;/p&gt;
&lt;p data-start="668" data-end="870"&gt;If you think TinyMCE in Umbraco is just for bold text and bullet points, think again. Janae will explore advanced features and hidden gems that can transform the way teams manage content, including:&lt;/p&gt;
&lt;ul data-start="872" data-end="1115"&gt;
&lt;li data-start="872" data-end="931"&gt;
&lt;p data-start="874" data-end="931"&gt;Accessibility testing tools built right into the editor&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="932" data-end="984"&gt;
&lt;p data-start="934" data-end="984"&gt;Using templates to streamline content structures&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="985" data-end="1045"&gt;
&lt;p data-start="987" data-end="1045"&gt;Unlocking premium features that many developers overlook like AI integration&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="1046" data-end="1115"&gt;
&lt;p data-start="1048" data-end="1115"&gt;How to configure the editor to match your team’s real-world needs&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="1117" data-end="1281"&gt;Whether you’re new to Umbraco or looking to sharpen your implementation skills, this session is packed with &lt;strong data-start="1225" data-end="1248"&gt;practical takeaways&lt;/strong&gt; you can start using immediately.&lt;/p&gt;
&lt;p data-start="1117" data-end="1281"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-start="1655" data-end="1785"&gt;Join all of the fun in Chicago and and start getting more out of TinyMCE in Umbraco:&lt;br data-start="1742" data-end="1745"&gt;&lt;a href="https://www.eventbrite.com/e/umbraco-us-festival-tickets-886381540047"&gt;Register Now&lt;/a&gt;&lt;/p&gt;
&lt;p data-start="1787" data-end="1945"&gt;We’re proud to see Janae representing ProWorks and sharing her expertise with the Umbraco community—don’t miss this opportunity!&lt;/p&gt;</description>
      <pubDate>Tue, 10 Sep 2024 16:16:00 Z</pubDate>
      <a10:updated>2024-09-10T16:16:00Z</a10:updated>
    </item>
    <item>
      <guid isPermaLink="false">4667</guid>
      <link>https://www.proworks.com/blog/archive/celebrating-umbraco-mvp-honors-for-jason-prothero-and-janae-cram/</link>
      <category>umbraco</category>
      <title>Celebrating Umbraco MVP Honors for Jason Prothero and Janae Cram</title>
      <description>&lt;p data-start="326" data-end="535"&gt;We’re proud to announce that &lt;strong data-start="355" data-end="373"&gt;Jason Prothero&lt;/strong&gt;, President of ProWorks, has been named a&amp;nbsp;&lt;strong data-start="409" data-end="429"&gt;2024 Umbraco MVP&lt;/strong&gt;—and &lt;strong data-start="434" data-end="448"&gt;Janae Cram&lt;/strong&gt;, Senior Developer at ProWorks, has had her MVP status &lt;strong data-start="506" data-end="517"&gt;renewed&lt;/strong&gt; for another year!&lt;/p&gt;
&lt;p data-start="537" data-end="814"&gt;The &lt;strong data-start="541" data-end="579"&gt;Umbraco MVP&amp;nbsp;&lt;/strong&gt;award recognizes individuals who go above and beyond in contributing to the Umbraco community. From sharing knowledge and building packages to mentoring others and driving innovation, MVPs are community leaders who make a real impact.&lt;/p&gt;
&lt;p data-start="816" data-end="1086"&gt;Jason was honored as a new MVP this year, recognized for his leadership in growing the Umbraco community in the U.S., his work on the CMS Community Team, and his ongoing commitment to open source contributions and knowledge sharing. As Umbraco HQ put it:&lt;/p&gt;
&lt;blockquote data-start="1088" data-end="1408"&gt;
&lt;p data-start="1090" data-end="1408"&gt;&lt;em data-start="1090" data-end="1320"&gt;“A strong presence in the Umbraco Community, spearheading the usage of Umbraco in the US, Jason's work in the CMS Community Team, alongside package development and sharing his knowledge, has shaped the Community for the better.”&lt;/em&gt;&lt;br data-start="1320" data-end="1323"&gt;— &lt;a rel="noopener" href="https://twitter.com/umbraco/status/1783471533905137920" target="_new" class="" data-start="1327" data-end="1408"&gt;@umbraco on X (Twitter)&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-start="1410" data-end="1683"&gt;Janae, already an established MVP, received her renewal for 2024 in recognition of her continued work on community education and advocacy, her contributions to Skrift, and contributions the Umbraco Community Advisory Board.&lt;/p&gt;
&lt;p data-start="1685" data-end="1943"&gt;Together, Jason and Janae exemplify the values we hold at ProWorks: collaboration, innovation, and community involvement. We’re thrilled to see their hard work recognized by Umbraco HQ; and proud to have two MVPs helping lead the way for our team and clients.&lt;/p&gt;
&lt;p data-start="1945" data-end="2016"&gt;Congrats to all 100 MVPs announced this year—23 new and 77 renewals!&lt;/p&gt;</description>
      <pubDate>Mon, 17 Jun 2024 12:00:00 Z</pubDate>
      <a10:updated>2024-06-17T12:00:00Z</a10:updated>
    </item>
    <item>
      <guid isPermaLink="false">4669</guid>
      <link>https://www.proworks.com/blog/archive/introducing-tinymce-umbraco-premium-a-new-package-from-proworks/</link>
      <category>umbraco</category>
      <title>Introducing TinyMCE Umbraco Premium: A New Package from ProWorks</title>
      <description>&lt;p data-start="336" data-end="535"&gt;We’re excited to announce the release of &lt;strong data-start="377" data-end="404"&gt;TinyMCE Umbraco Premium&lt;/strong&gt;, a new open-source package from the ProWorks team that brings Premium TinyMCE customization capabilities to&amp;nbsp;Umbraco CMS versions 12 and 13.&lt;/p&gt;
&lt;p data-start="537" data-end="776"&gt;This package unlocks powerful new options for tailoring the TinyMCE rich text editor experience in the Umbraco backoffice—making it easier for developers to fine-tune the editor to fit client needs, editorial workflows, and design systems.&lt;/p&gt;
&lt;p data-start="778" data-end="825"&gt;TinyMCE Umbraco Premium includes features like:&lt;/p&gt;
&lt;ul data-start="827" data-end="980"&gt;
&lt;li data-start="827" data-end="855"&gt;
&lt;p data-start="829" data-end="855"&gt;Access to Premium TinyMCE plugins and advanced configuration for things like AI, Templating, Spell Check, Mentions, and more!&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="856" data-end="896"&gt;
&lt;p data-start="858" data-end="896"&gt;Easier configuration of TinyMCE plugins at a configuration-level and in the Umbraco Data Type&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="897" data-end="935"&gt;
&lt;p data-start="899" data-end="935"&gt;Ability to add Javascript to the configuration for complex plugin configuration&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="936" data-end="980"&gt;
&lt;p data-start="938" data-end="980"&gt;Support for new TinyMCE 6 capabilities&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="982" data-end="1257"&gt;We built this package to help bridge the gap between the powerful TinyMCE editor and the flexibility developers expect from Umbraco. It's especially useful for teams looking to standardize editor experiences across sites or deliver more sophisticated content editing options.&lt;/p&gt;
&lt;p data-start="1259" data-end="1442"&gt;🔗 &lt;strong data-start="1262" data-end="1314"&gt;Learn more in our detailed write-up on Skrift.io&lt;/strong&gt;:&lt;br data-start="1315" data-end="1318"&gt;&lt;a rel="noopener" href="https://skrift.io/issues/introducing-the-tinymce-umbraco-premium-package/" target="_new" class="" data-start="1318" data-end="1442"&gt;Introducing the TinyMCE Umbraco Premium Package&lt;/a&gt;&lt;/p&gt;
&lt;p data-start="1444" data-end="1610"&gt;📦 &lt;strong data-start="1447" data-end="1502"&gt;Explore the source code and documentation on GitHub&lt;/strong&gt;:&lt;br data-start="1503" data-end="1506"&gt;&lt;a rel="noopener" href="https://github.com/ProWorksCorporation/TinyMCE-Umbraco" target="_new" class="" data-start="1506" data-end="1610"&gt;github.com/ProWorksCorporation/TinyMCE-Umbraco&lt;/a&gt;&lt;/p&gt;
&lt;div id="jrogfgqpik" class="shield-container"&gt;
&lt;div data-reactroot=""&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-start="1612" data-end="1807"&gt;This is just the beginning—we’re planning continued improvements based on feedback and use cases from the Umbraco community. If you have thoughts, ideas, or questions, we’d love to hear from you!&lt;/p&gt;</description>
      <pubDate>Tue, 04 Jun 2024 16:18:00 Z</pubDate>
      <a10:updated>2024-06-04T16:18:00Z</a10:updated>
    </item>
    <item>
      <guid isPermaLink="false">4643</guid>
      <link>https://www.proworks.com/blog/archive/proworks-recognized-as-a-contributing-partner-again-in-2023/</link>
      <category>umbraco</category>
      <title>ProWorks Recognized as a Contributing Partner again in 2023</title>
      <description>&lt;p&gt;ProWorks Corporation is honored and excited to be awarded as an Umbraco Contributing Partner again in 2023!&lt;/p&gt;
&lt;p&gt;We have been a contributing partner in 2020, 2021, 2022, and now 2023!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Read more about the Contribution Partner award and the list of key Agency Partners who made the list:&lt;/p&gt;
&lt;h3&gt;&lt;a rel="noopener" href="https://umbraco.com/blog/announcing-umbraco-contributing-partners-2023/" target="_blank"&gt;Announcing: Umbraco Contributing Partners 2023&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Much like an MVP badge for agencies, the Contributing Partner status signifies a commitment beyond the ordinary. These agencies have gone the extra mile, contributing to our open-source project and community in various ways, such as organizing events, creating documentation, and actively working to improve Umbraco. These exceptional contributions span over the past year, and the badge is awarded or renewed annually, displaying the year of recognition.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener" href="https://umbraco.com/partners/become-an-umbraco-solution-partner/gold/contributing-platinum-gold-partners/" target="_blank"&gt;More information on the Contribution Partner Award&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Wed, 31 Jan 2024 12:00:00 Z</pubDate>
      <a10:updated>2024-01-31T12:00:00Z</a10:updated>
    </item>
    <item>
      <guid isPermaLink="false">4644</guid>
      <link>https://www.proworks.com/blog/archive/proworks-collaborates-with-paul-sterling-to-talk-about-component-based-design-at-the-us-summit-2023/</link>
      <category>umbraco</category>
      <title>ProWorks Collaborates With Paul Sterling To Talk About Component-Based Design at the U.S. Summit 2023</title>
      <description>&lt;p&gt;In October 2023, Umbraco HQ brought together enthusiasts, developers, and businesses at the Umbraco U.S. Summit in Charlotte, North Carolina. The multi-day conference featured a diverse lineup of events, including a Community day, Business day, and Partner day. Among the standout sessions was the talk by Jason Prothero and Paul Sterling titled "An Unconventional Alliance: Building a Bespoke Design System with Umbraco and BlockList Components."&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Unfortunately, the Community Day presentations weren't recorded, so Paul and Jason got together and recorded their session for people who were not able to attend:&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener" href="https://youtu.be/MyktoGrB_jM?si=LvYhaBbBq1VpRigu" target="_blank" data-anchor="?si=LvYhaBbBq1VpRigu"&gt;Component-based Design on Umbraco: A Case Study from ProWorks and Mold Inspection Sciences&lt;/a&gt;&lt;/p&gt;
&lt;div class="mceNonEditable embeditem" data-embed-url="https://youtu.be/MyktoGrB_jM?si=uRDh4pFGVWMYvp4j" data-embed-height="315" data-embed-width="689" data-embed-constrain="false"&gt;&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/MyktoGrB_jM?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" title="Component-based Design on Umbraco: A Case Study from ProWorks and Mold Inspection Sciences"&gt;&lt;/iframe&gt;&lt;/div&gt;</description>
      <pubDate>Wed, 15 Nov 2023 10:56:00 Z</pubDate>
      <a10:updated>2023-11-15T10:56:00Z</a10:updated>
    </item>
    <item>
      <guid isPermaLink="false">4641</guid>
      <link>https://www.proworks.com/blog/archive/jason-joins-the-umbraco-cms-community-team/</link>
      <category>umbraco</category>
      <title>Jason Joins the Umbraco CMS Community Team</title>
      <description>&lt;p&gt;ProWorks President, Jason Prothero, has been selected to help guide the Umbraco CMS into the future by contributing to the Umbraco CMS Community Team.&amp;nbsp; He will be a part of a group of community advisors that the Umbraco Core team can bounce ideas off of and get feedback from.&lt;br&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Read more about the Umbraco CMS Community Team here:&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener" href="https://community.umbraco.com/community-teams/the-cms-community-team/" target="_blank"&gt;The CMS Community Team&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;"The CMS Community Team is a group of people who contributes to the development of the Umbraco CMS by acting as a sounding board and a forum for the Umbraco CMS team, where more high-level ideas, roadmap, and strategy can be discussed. We’ll simply discuss Umbraco features, ideas, strategy, and yeah - everything in and around the CMS within a team of people with various backgrounds and roles."&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <pubDate>Wed, 21 Sep 2022 12:00:00 Z</pubDate>
      <a10:updated>2022-09-21T12:00:00Z</a10:updated>
    </item>
    <item>
      <guid isPermaLink="false">4640</guid>
      <link>https://www.proworks.com/blog/archive/were-in-the-list-of-uswds-powered-sites/</link>
      <category>design</category>
      <category>USWDS</category>
      <title>We're in the list of USWDS powered sites!</title>
      <description>&lt;p&gt;Building the &lt;a rel="noopener" href="https://scientificdiscoveries.ars.usda.gov/" target="_blank"&gt;USDA ARS Scientific Discoveries site&lt;/a&gt; using the &lt;a rel="noopener" href="https://designsystem.digital.gov/" target="_blank"&gt;U.S. Web Design System (USWDS)&lt;/a&gt; was a great experience for us, and that work has not gone unnoticed because they've added that site to&lt;a rel="noopener" href="https://designsystem.digital.gov/getting-started/showcase/all/" target="_blank"&gt; the list of USWDS powered sites!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This list is a compilation of the best of the best USWDS sites as examples for others to use, and we could not be more happy to be included! I looked through all of these sites when I was gathering inspiration to design the USDA ARS Scientific Discoveries site, and hopefully now I can pass that inspiration forward to the next designer.&lt;/p&gt;
&lt;p&gt;we learned much about the USWDS and its "tokens" method of utility classes, and found this is a fantastic system for organizing styles across many sites.&lt;/p&gt;
&lt;blockquote&gt;&lt;a href="/blog/archive/design-tokens-support-custom-layouts-and-components-for-us-web-design-system-uswds/" title="Design Tokens  Support Custom Layouts  and Components for  U.S. Web Design System (USWDS)"&gt;Have a read on our introduction to the USWDS Design Tokens here&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;The USWDS has the flexibility to create just about any component you'd like to make, while providing the guidelines necessary to stay on the road to designing something that fits the system. Honestly, with a system that has some strict rules, I never felt constrained in my creativity. I had plenty of freedom to create something unique for the Scientific Discoveries team.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.proworks.com/media/1n4hynfq/disc-tiles.png?width=500&amp;amp;height=317.9297597042514" alt="Region tiles for Scientific Discoveries" width="500" height="317.9297597042514"&gt;&lt;/p&gt;
&lt;p&gt;Here's a couple other sites we made using the USWDS:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ers.usda.gov/"&gt;https://ers.usda.gov/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://tellus.ars.usda.gov/"&gt;https://tellus.ars.usda.gov/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Just thought I'd share this "Proud Papa" moment with you all! Hopefully someday you'll get to dig into the USWDS and work with it or take some ideas from it!&lt;/p&gt;</description>
      <pubDate>Wed, 29 Jun 2022 21:12:38 Z</pubDate>
      <a10:updated>2022-06-29T21:12:38Z</a10:updated>
    </item>
    <item>
      <guid isPermaLink="false">4635</guid>
      <link>https://www.proworks.com/blog/archive/proworks-is-presenting-at-codegarden-headless-on-umbraco-9-and-net-core/</link>
      <category>umbraco</category>
      <title>ProWorks is Presenting at CodeGarden: Headless on Umbraco 9 and .NET Core</title>
      <description>&lt;p&gt;Look forward to more details coming, but here are links to the code and site:&lt;/p&gt;
&lt;p&gt;&lt;br&gt;Front-end Website: &lt;a href="https://cg2021.proworks.com/"&gt;https://cg2021.proworks.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Front-end Code: &lt;a href="https://github.com/ProworksDevTeam/CG2021-HeadlessUnicore-Website/"&gt;https://github.com/ProworksDevTeam/CG2021-HeadlessUnicore-Website/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Back-end Code:&amp;nbsp;&lt;a href="https://github.com/ProworksDevTeam/CG2021-HeadlessUnicore-Backend/"&gt;https://github.com/ProworksDevTeam/CG2021-HeadlessUnicore-Backend/&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Thu, 10 Jun 2021 06:00:00 Z</pubDate>
      <a10:updated>2021-06-10T06:00:00Z</a10:updated>
    </item>
    <item>
      <guid isPermaLink="false">4634</guid>
      <link>https://www.proworks.com/blog/archive/using-components-to-build-sites-that-content-editors-love/</link>
      <category>umbraco</category>
      <title>Using Components To Build Sites That Content Editors Love</title>
      <description>&lt;p&gt;The new Block List Editor from Umbraco is out! It's cool because it enables a component-based editing experience.&lt;/p&gt;
&lt;p&gt;Why should you care?&lt;/p&gt;
&lt;p&gt;It is a win-win for content editors and developers. The Block List Editor allows editors more control over each page to customize the look and feel on a page by page basis. Developers get to focus more time on creating useful building blocks for editors and less time modelling content to create specific Document Types. And designers get to ensure that the content is accessible and adheres to the style guide.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Join us for the &lt;a rel="noopener" href="https://www.umbracousfestival.com/2021/agenda/" target="_blank"&gt;Umbraco US Festival&lt;/a&gt; on April 15th, 2021 at 3pm Eastern / 12pm Pacific to learn more!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Also, watch this space for details on the code and configuration snippets that you can use to make you Content Editors Happy with their Component editing experience.&amp;nbsp;&amp;nbsp;&lt;/p&gt;</description>
      <pubDate>Wed, 14 Apr 2021 09:00:00 Z</pubDate>
      <a10:updated>2021-04-14T09:00:00Z</a10:updated>
    </item>
    <item>
      <guid isPermaLink="false">4632</guid>
      <link>https://www.proworks.com/blog/archive/headless-on-umbraco-net-core-part-4-setup-site-search-using-a-cloud-service/</link>
      <category>how-to</category>
      <title>Headless on Umbraco .NET Core Part 4: Setup Site Search Using A Cloud Service</title>
      <description>&lt;p&gt;Welcome to the fourth part of our series on "&lt;a href="/blog/archive/how-to-setup-an-umbraco-net-core-headless-cms-using-gridsome-and-vuejs-with-automated-deployment/" title="How To Setup An Umbraco .NET Core Headless CMS Using Gridsome and Vue.js With Automated Deployment"&gt;How To Setup An Umbraco .NET Core Headless CMS Using Gridsome and Vue.js With Automated Deployment&lt;/a&gt;"!&lt;/p&gt;
&lt;p&gt;You now have a site that updates all the static content, and displays it on the front-end in near-real-time.  The next step then is to allow for dynamic content, such as searching.  We are going to setup searching using an online search provider called &lt;a rel="noopener" href="https://www.algolia.com/" target="_blank"&gt;Algolia&lt;/a&gt;.  The back-end will push content into Algolia as it is published, and the front-end will query Algolia through JavaScript to get the latest results.&lt;/p&gt;
&lt;h2&gt;Download Required Files&lt;/h2&gt;
&lt;p&gt;This step uses a few files that need to be added to your project.  Rather than try to inline the source in the article, we've bundled them as a ZIP file here.  Please download this ZIP file, extract it locally, and then integrate the files as instructed below.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.proworks.com/blog/media/mkelgumy/part4.zip" title="Part4"&gt;Click Here to Download the Required Files ZIP&lt;br&gt;&lt;img src="https://www.proworks.com/media/zrrjs3uy/128x128.png" alt="ZIP file" width="128" height="128"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Search Setup&lt;/h2&gt;
&lt;p&gt;&lt;img style="float: right; margin-left: 35px; border: none;" src="https://www.proworks.com/media/cfvbvtm0/algolia.png" alt="Algolia Logo" width="70" height="70"&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener" href="https://www.algolia.com/" target="_blank"&gt;Algolia&lt;/a&gt; is an online search provider that can both crawl your site, but can also have search data pushed into it.  It indexes the data as HTML content, and can return highlighted and snippeted results intelligently.&lt;/p&gt;
&lt;h3&gt;Setup Algolia&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a rel="noopener" href="https://www.algolia.com/users/sign_up" target="_blank"&gt;Go to Algolia.com&lt;/a&gt; and create a free account&lt;/li&gt;
&lt;li&gt;After logging in, follow the prompts to create a new index and note down the name you give it&lt;/li&gt;
&lt;li&gt;Go to the API Keys page on the left and capture the Application ID, Search API Key, and Admin API Key for use later&lt;/li&gt;
&lt;li&gt;Go to the Indices page, select your index, and go to the Configuration tab&lt;/li&gt;
&lt;li&gt;Add two searchable fields: &lt;em&gt;&lt;strong&gt;title&lt;/strong&gt;&lt;/em&gt; and &lt;em&gt;&lt;strong&gt;content&lt;br&gt;&lt;br&gt;&lt;img src="https://www.proworks.com/media/xcxp5de4/unicore-gridsome-algolia-searchable.png" alt="Algolia searchable attributes" width="500" height="197.1947194719472"&gt;&lt;br&gt;&lt;br&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Go the Ranking and Sorting section of the Configuration tab&lt;/li&gt;
&lt;li&gt;Click "+ Add sort-by attribute" and enter &lt;em&gt;&lt;strong&gt;updateDate&lt;br&gt;&lt;br&gt;&lt;img src="https://www.proworks.com/media/zfkitwbe/unicore-gridsome-algolia-sorting.png" alt="Algolia ranking and sorting" width="500" height="64.46280991735537"&gt;&lt;br&gt;&lt;br&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Click "Review and Save" in the lower right, and then "Save"&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Update the Frontend&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;In the frontend directory, execute the following command to install the Algolia search components
&lt;pre&gt;npm install algoliasearch&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Copy the &lt;strong&gt;&lt;em&gt;FrontEnd/src/templates/Search.vue&lt;/em&gt;&lt;/strong&gt; file from the Required Files ZIP to your FrontEnd folder.  This file is a simple search page that queries the Algolia search engine and displays results.&lt;br&gt;&lt;br&gt;&lt;/li&gt;
&lt;li&gt;Add the following entries to the .env file.  IMPORTANT: Replace the tokens below with the values obtained in step 3 above, but make sure you use the Search API key here, and not the Admin API key
&lt;pre&gt;GRIDSOME_ALGOLIA_APPLICATION_ID={applicationId}&lt;br&gt;GRIDSOME_ALGOLIA_API_KEY={searchApiKey}&lt;br&gt;GRIDSOME_ALGOLIA_INDEX_NAME={indexName}&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Commit your changes and push them up to your remote repository&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Update the Backend&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;In the backend directory, execute the following command to install the Algolia search components
&lt;pre&gt;dotnet add package Algolia.Search&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Copy the &lt;strong&gt;&lt;em&gt;BackEnd/UnicoreDemo/SearchUpdater.cs&lt;/em&gt;&lt;/strong&gt; file from the Required Files ZIP to your backend folder.  This file pushes search data up to Algolia for use by the frontend.  Review the QueueForSync method to see what data it pushes up, and review the SyncChanges method to see how it actually pushes data up to Algolia.&lt;br&gt;&lt;br&gt;&lt;/li&gt;
&lt;li&gt;Add the following code to the end of the &lt;em&gt;&lt;strong&gt;ConfigureServices&lt;/strong&gt;&lt;/em&gt; method in the &lt;em&gt;&lt;strong&gt;Startup&lt;/strong&gt;&lt;/em&gt; class
&lt;pre&gt;services.AddHostedService&amp;lt;SearchUpdater&amp;gt;();&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Commit your changes and push them up to your remote repository&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;Publish and Review&lt;/h3&gt;
&lt;p&gt;With data being pushed into Algolia, and the search page querying it from Algolia, you are ready to test it out.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open a command prompt in the backend directory, and execute this command:
&lt;pre&gt;dotnet publish -o dist&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;In the Azure Portal for your web app, on the Overview page, click Stop at the top to stop the web app&lt;/li&gt;
&lt;li&gt;Open an FTPS client, such as FileZilla, and connect to the FTPS server from the Azure Web App deployment center (See Part 2 of this Series - "Create AppService on Linux", Step 17)&lt;/li&gt;
&lt;li&gt;Upload any changed files (should be just the UnicoreDemo.* files and the web.config file)&lt;/li&gt;
&lt;li&gt;In Azure, start the web app&lt;/li&gt;
&lt;li&gt;In the Azure Portal, go to the Configuration page for your web app&lt;/li&gt;
&lt;li&gt;Add the following "Application Settings" entries:&lt;br&gt;&lt;br&gt;&lt;img src="https://www.proworks.com/media/2k4lc3kv/unicore-gridsome-webapp-config3.png" alt="Azure webapp configuration" width="500" height="213.78968253968256"&gt;&lt;br&gt;&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Search__Algolia__ApplicationId&lt;/em&gt; = &lt;strong&gt;&lt;em&gt;{applicationId}&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;Replace &lt;em&gt;&lt;strong&gt;{applicationId}&lt;/strong&gt;&lt;/em&gt; with the Algolia application ID noted in step 3 of setting up Algolia above.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Search__Algolia__ApiKey&lt;/em&gt; = &lt;em&gt;&lt;strong&gt;{adminApiKey}&lt;/strong&gt;&lt;br&gt;&lt;/em&gt;Replace &lt;em&gt;&lt;strong&gt;{adminApiKey}&lt;/strong&gt;&lt;/em&gt; with the Admin API Key from Algolia&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Search__Algolia__IndexName&lt;/em&gt; = &lt;em&gt;&lt;strong&gt;{indexName}&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;Replace &lt;em&gt;&lt;strong&gt;{indexName}&lt;/strong&gt;&lt;/em&gt; with the name of the index you setup in Algolia&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Click "Save" once all the entries are added&lt;/li&gt;
&lt;li&gt;Give it a few seconds to restart, then log in to the Umbraco back-office&lt;/li&gt;
&lt;li&gt;In the Settings section, add a new document type call "Search"&lt;/li&gt;
&lt;li&gt;Add a group called "Content"&lt;/li&gt;
&lt;li&gt;Add a single property called "Title" with a property type of "Textstring"&lt;br&gt;&lt;br&gt;&lt;img src="https://www.proworks.com/media/oxagwc1x/unicore-gridsome-doctype-search.png" alt="Search doctype setup" width="500" height="206.5450643776824"&gt;&lt;/li&gt;
&lt;li&gt;Save your document type&lt;/li&gt;
&lt;li&gt;Go to the "Simple Page" document type&lt;/li&gt;
&lt;li&gt;In the Permissions tab, add the "Search" document type as a valid child type&lt;br&gt;&lt;br&gt;&lt;img src="https://www.proworks.com/media/i5bgztx2/unicore-gridsome-doctype-permissions2.png" alt="Simple page permissions" width="500" height="243.63636363636365"&gt;&lt;br&gt;&lt;br&gt;&lt;/li&gt;
&lt;li&gt;Save your document type&lt;/li&gt;
&lt;li&gt;In the Content section, add a single Search page as a child of the top-level home page&lt;/li&gt;
&lt;li&gt;Save and publish all the pages in your site to generate the search data for each page&lt;/li&gt;
&lt;li&gt;Wait for the Frontend Build to complete (it may have been triggered multiple times by the above steps, but we only need to wait for the first one to complete)&lt;/li&gt;
&lt;li&gt;Browse the frontend of the site, and see that you have a search page available new&lt;/li&gt;
&lt;li&gt;On the search page, try entering text and see that you get back highlighted results from Algolia!&lt;br&gt;&lt;br&gt;&lt;img src="https://www.proworks.com/media/ay5dufgg/unicore-gridsome-frontend-searching.png" alt="Searching from Algolia" width="447" height="392"&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Now we have a fully working and hosted Headless Umbraco CMS using .Net Core with content search!  Let us know if there are any other items you would like to see covered.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;And let us know if you have any questions or issues in the comments below!&lt;/p&gt;</description>
      <pubDate>Tue, 23 Mar 2021 09:00:00 Z</pubDate>
      <a10:updated>2021-03-23T09:00:00Z</a10:updated>
    </item>
    <item>
      <guid isPermaLink="false">4633</guid>
      <link>https://www.proworks.com/blog/archive/headless-on-umbraco-net-core-part-3-setup-graphql-api-and-connect-back-end-and-front-end/</link>
      <category>how-to</category>
      <title>Headless on Umbraco .NET Core Part 3: Setup GraphQL API and Connect Back-end and Front-end</title>
      <description>&lt;p&gt;Welcome to the third part of our series on "&lt;a href="/blog/archive/how-to-setup-an-umbraco-net-core-headless-cms-using-gridsome-and-vuejs-with-automated-deployment/" title="How To Setup An Umbraco .NET Core Headless CMS Using Gridsome and Vue.js With Automated Deployment"&gt;How To Setup An Umbraco .NET Core Headless CMS Using Gridsome and Vue.js With Automated Deployment&lt;/a&gt;"!&lt;/p&gt;
&lt;p&gt;Now we tie the Umbraco Back-end to the Gridsome Front-end and make the entire process work from end to end. This includes setting up the Vue.js rendering of Umbraco content and auto-deploying content changes from Umbraco to Azure.&lt;/p&gt;
&lt;h2&gt;Download Required Files&lt;/h2&gt;
&lt;p&gt;This step uses a few files that need to be added to your project.  Rather than try to inline the source in the article, we've bundled them as a ZIP file here.  Please download this ZIP file, extract it locally, and then integrate the files as instructed below.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.proworks.com/blog/media/1l5i0mhh/part3.zip" title="Part 3"&gt;Click Here to Download the Required Files ZIP&lt;/a&gt;&lt;br&gt;&lt;a href="https://www.proworks.com/blog/media/1l5i0mhh/part3.zip" title="Part 3"&gt;&lt;img src="https://www.proworks.com/media/gl1fuy0i/128x128.png?width=128&amp;amp;height=128" alt="" width="128" height="128"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Content Management Setup&lt;/h2&gt;
&lt;p&gt;You now have a working front-end and a working back-end. You also have a media library in Azure. The next step is to make sure there are triggers in place to keep these things in sync. We haven't actually made the front-end use any content from the back-end yet, but once we do we'll want to make sure the front-end rebuilds any time there is a content change. Additionally, since the .NET Core Alpha doesn't have the regular &lt;a rel="noopener" href="https://github.com/umbraco-community/UmbracoFileSystemProviders.Azure" target="_blank"&gt;UmbracoFileSystemProviders.Azure.Media&lt;/a&gt; package, we'll need to wire up a trigger to copy any media changes into our Blob storage.&lt;/p&gt;
&lt;h3&gt;Add Frontend Build Trigger&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Copy the &lt;strong&gt;&lt;em&gt;Backend/UnicoreDemo/FrontEnd.cs&lt;/em&gt;&lt;/strong&gt; file from the Required Files ZIP to your back-end project. This code triggers the front-end AppVeyor build anytime there is a change in the published content. It uses configuration settings that we'll setup below when we publish it.&lt;br&gt;&lt;br&gt;&lt;/li&gt;
&lt;li&gt;Add the following code at the end of the ConfigureServices method in the Startup class
&lt;pre&gt;services.AddHostedService();&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;Add Media Update Trigger&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Add a reference to the Azure.Storage.Blobs NuGet package using the following command:
&lt;pre&gt;dotnet add package Azure.Storage.Blobs&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Copy the &lt;strong&gt;&lt;em&gt;Backend/UnicoreDemo/MediaUpdate.cs&lt;/em&gt;&lt;/strong&gt; file from the Required Files ZIP to your back-end project. This code uploads media images to your Blob storage, using configuration settings we'll setup below in the Publish section. This is needed only because the &lt;a rel="noopener" href="https://github.com/umbraco-community/UmbracoFileSystemProviders.Azure/tree/develop-umbraco-version-8" target="_blank"&gt;UmbracoFileSystemProviders.Azure.Media package&lt;/a&gt; isn't available for the Umbraco .NET Core alpha at the time of writing.&lt;br&gt;&lt;br&gt;&lt;/li&gt;
&lt;li&gt;Add the following code to the end of the ConfigureServices method in the Startup class
&lt;pre&gt;services.AddHostedService&amp;lt;MediaUpdate&amp;gt;();&lt;a href="https://www.proworks.com/blog/media/434fp0a3/mediaupdate.cs" title="Startup.cs"&gt;&lt;/a&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Create Document Type in Backend&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Log into the Umbraco Back-office of your web app&lt;/li&gt;
&lt;li&gt;Go to the Settings section&lt;/li&gt;
&lt;li&gt;Right-click on "Document Types" on the left, and choose "Create...", then "Document Type"&lt;/li&gt;
&lt;li&gt;Give it a name of Simple Page, and make sure the alias is simplePage&lt;/li&gt;
&lt;li&gt;Add a group called Content&lt;/li&gt;
&lt;li&gt;Add a property called Title with an editor of "Textstring"&lt;/li&gt;
&lt;li&gt;Add a property called Content with an editor of "Richtext editor"&lt;br&gt;&lt;img src="https://www.proworks.com/media/r55lpapg/unicore-gridsome-doctype-design.png" alt="umbraco back-office doctype design" width="500" height="228.3362218370884"&gt;&lt;/li&gt;
&lt;li&gt;Click on the Permissions tab in the upper-right&lt;/li&gt;
&lt;li&gt;Enable the "Allow as root" option&lt;/li&gt;
&lt;li&gt;Click on "Add child", and choose the "Simple Page" so that we can nest these pages&lt;/li&gt;
&lt;li&gt;Click "Save" in the lower-right&lt;br&gt;&lt;img src="https://www.proworks.com/media/orib504n/unicore-gridsome-doctype-permissions.png" alt="umbraco back-office doctype permissions" width="500" height="321.8201754385965"&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;Publish and Review&lt;/h3&gt;
&lt;p&gt;With the site up and running locally now, you can publish it up to Azure and see your back-office working there.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open a command prompt in the UnicoreDemo directory, and execute this command:
&lt;pre&gt;dotnet publish -o dist&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;In the Azure Portal for your web app, on the Overview page, click Stop at the top to stop the web app&lt;/li&gt;
&lt;li&gt;Open an FTPS client, such as FileZilla, and connect to the FTPS server from the Azure Web App deployment center (See &lt;a href="/blog/archive/headless-on-umbraco-net-core-part-2-setup-umbraco-net-core-back-end-on-azure/" title="Headless on Umbraco .NET Core Part 2: Setup Umbraco .NET Core Back-end on Azure"&gt;Part 2&lt;/a&gt; of this Series - "Create AppService on Linux", Step 17)&lt;/li&gt;
&lt;li&gt;Upload any changed files (should be just the UnicoreDemo.* files and the web.config file)&lt;/li&gt;
&lt;li&gt;In Azure, start the web app&lt;/li&gt;
&lt;li&gt;Get your AppVeyor API key from &lt;a href="https://ci.appveyor.com/api-keys"&gt;the API keys page under User settings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;In the Azure Portal, go to the Configuration page for your web app&lt;/li&gt;
&lt;li&gt;Add the following "Application Settings" entries: &lt;br&gt;&lt;img src="https://www.proworks.com/media/qsyhwlpf/unicore-gridsome-webapp-config2.png" alt="azure webapp configuration" width="500" height="241.52106885919835"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Gridsome__BuildTrigger__Headers&lt;/em&gt; = &lt;em&gt;{"Authorization":"Bearer &lt;strong&gt;{api-token}&lt;/strong&gt;","Content-Type":"application/json"}&lt;/em&gt;&lt;br&gt;Replace &lt;strong&gt;&lt;em&gt;{api-token}&lt;/em&gt;&lt;/strong&gt; with the token you got in step 1 above&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Gridsome__BuildTrigger__Body&lt;/em&gt; = &lt;em&gt;{"accountName":"&lt;strong&gt;{account-name}&lt;/strong&gt;","projectSlug":"&lt;strong&gt;{project-slug}&lt;/strong&gt;","branch":"master"}&lt;/em&gt;&lt;br&gt;Replace &lt;em&gt;&lt;strong&gt;{account-name}&lt;/strong&gt;&lt;/em&gt; with the AppVeyor account name, and &lt;em&gt;&lt;strong&gt;{project-slug}&lt;/strong&gt;&lt;/em&gt; with the project slug value. You can find both these values by going to the main page for your Frontend project in AppVeyor. The URL will be something like https://ci.appveyor.com/project/ProWorks/unicoregridsomefrontend, in which case ProWorks is the account name and unicoregridsomefrontend is the project slug.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Gridsome__BuildTrigger__Uri&lt;/em&gt; = &lt;em&gt;https://ci.appveyor.com/api/account/&lt;strong&gt;{account-name}&lt;/strong&gt;/builds&lt;br&gt;&lt;/em&gt;Replace &lt;em&gt;&lt;strong&gt;{account-name}&lt;/strong&gt;&lt;/em&gt; with the AppVeyor account name&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Media__AzureStorage__ConnectionString&lt;/em&gt; = &lt;em&gt;&lt;strong&gt;{connection-string}&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;Replace &lt;em&gt;&lt;strong&gt;{connection-string}&lt;/strong&gt;&lt;/em&gt; with the connection string from your Azure storage account, noted in step 8 of "Create BLOB Containers" in Part 1&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Media__AzureStorage__ContainerName&lt;/em&gt; = &lt;em&gt;media&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Click "Save" once all the entries are added&lt;/li&gt;
&lt;li&gt;Give it a few seconds to restart, then log in to the Umbraco back-office (NOTE: If you have odd errors on trying to access the back-office, try FTPing all the files from your local machine instead of just the recently changed ones)&lt;/li&gt;
&lt;li&gt;In the Content section, add a single top-level home page&lt;/li&gt;
&lt;li&gt;Add a few pages beneath that, using some images on some or all of the pages&lt;/li&gt;
&lt;li&gt;After you have Saved and Published the changes, log into AppVeyor, and verify that your front-end build has started&lt;br&gt;&lt;br&gt;&lt;img src="https://www.proworks.com/media/jthlmdtq/unicore-gridsome-backoffice.png" alt="umbraco back-office" width="500" height="358"&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Integrate Front and Back&lt;/h2&gt;
&lt;h3&gt;Create Data Controller in Backend&lt;/h3&gt;
&lt;p&gt;Copy the &lt;strong&gt;&lt;em&gt;Backend/UnicoreDemo/DataController.cs&lt;/em&gt;&lt;/strong&gt; file from the Required Files ZIP to your back-end project. This code exposes an endpoint for getting raw data out of the project. Normally, we would use the &lt;a rel="noopener" href="https://github.com/umbraco-community/umbraco-graphql" target="_blank"&gt;Umbraco GraphQL Package&lt;/a&gt; for something like this, but the package isn't available for the Umbraco .NET Core Alpha yet.&lt;a href="https://www.proworks.com/blog/media/vlyhm3ks/datacontroller.cs" title="DataController.cs"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Publish and Review Backend&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Open a command prompt in the UnicoreDemo directory, and execute this command:
&lt;pre&gt;dotnet publish -o dist&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;In the Azure Portal for your web app, on the Overview page, click Stop at the top to stop the web app&lt;/li&gt;
&lt;li&gt;Open an FTPS client, such as FileZilla, and connect to the FTPS server from the Azure Web App deployment center above&lt;/li&gt;
&lt;li&gt;Upload any changed files (should be just the UnicoreDemo.* files and the web.config file)&lt;/li&gt;
&lt;li&gt;In Azure, start the web app&lt;/li&gt;
&lt;li&gt;Navigate to /api/data/content on the Backend URL and verify that you are getting JSON data showing each of your content nodes&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;Read Data Controller into Frontend&lt;/h3&gt;
&lt;p&gt;&lt;a rel="noopener" href="https://gridsome.org/" target="_blank"&gt;Gridsome&lt;/a&gt; uses a &lt;a rel="noopener" href="https://graphql.org/" target="_blank"&gt;GraphQL&lt;/a&gt; data store to provide data from many external sources to the page building process. All pages are built into static HTML with pre-loading and SPA navigation. To integrate the front-end and back-end, we will need to pull data from our newly created data controller into this GraphQL data store so that it is available to our pages when being built.&lt;/p&gt;
&lt;p&gt;We also want out site structure to be built from the structure of content in Umbraco. Gridsome allows us to easily do this with their Pages API. Once we have the data in the GraphQL data store, we can query that data and dynamically create the page structure for the site.&lt;/p&gt;
&lt;p&gt;References: &lt;a rel="noopener" href="https://gridsome.org/docs/fetching-data/" target="_blank"&gt;https://gridsome.org/docs/fetching-data/&lt;/a&gt; - &lt;a rel="noopener" href="https://gridsome.org/docs/data-store-api/" target="_blank"&gt;https://gridsome.org/docs/data-store-api/&lt;/a&gt; - &lt;a rel="noopener" href="https://gridsome.org/docs/pages-api/" target="_blank"&gt;https://gridsome.org/docs/pages-api/&lt;/a&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open a command prompt in the front-end directory&lt;/li&gt;
&lt;li&gt;Run the following command to install the Axios tool that we will use to retrieve data&lt;br&gt;
&lt;pre&gt;npm install axios&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Copy the &lt;strong&gt;&lt;em&gt;Frontend/gridsome.server.js&lt;/em&gt;&lt;/strong&gt; file from the Required Files ZIP to your Frontend folder. Replace the &lt;em&gt;&lt;strong&gt;{AzureWebAppName}&lt;/strong&gt;&lt;/em&gt; token in the script with the name of your Azure web app. This file reads from the data controller and populates Gridsome's GraphQL database with content from your Umbraco site. It also then reads from that database to generate the menu structure, and create the pages of your site. See the comments inline for details on what each section is doing.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Use Data on Page&lt;/h3&gt;
&lt;p&gt;To actually use the data on our pages, we'll need to replace a few default Gridsome pages, and add our custom template.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Delete all files under &lt;strong&gt;&lt;em&gt;src/pages&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Create a .env file in the root directory with this content, so that we can have a single place for media references. Replace the &lt;em&gt;&lt;strong&gt;{AzureStorageAccountName}&lt;/strong&gt;&lt;/em&gt; token in the file below with the name of your Azure storage account
&lt;pre&gt;GRIDSOME_MEDIA_BASE=https://{AzureStorageAccountName}.blob.core.windows.net&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Copy the &lt;strong&gt;&lt;em&gt;FrontEnd/src/templates/SimplePage.vue&lt;/em&gt;&lt;/strong&gt; file from the Required Files ZIP to your Frontend folder. This template will be used for all Umbraco pages that have the SimplePage template set on the content node.&lt;br&gt;&lt;br&gt;&lt;/li&gt;
&lt;li&gt;Replace the &lt;strong&gt;&lt;em&gt;FrontEnd/src/layouts/Default.vue&lt;/em&gt;&lt;/strong&gt; file with the one in the Required Files ZIP. This will add a navigation header to each page.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Publish and Review Frontend&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Commit and push your front-end code change, and wait for the build to finish&lt;/li&gt;
&lt;li&gt;Navigate to the front-end web site and you should now see your pages with their content displayed&lt;/li&gt;
&lt;li&gt;Make a change in the Umbraco back-end and verify that it triggers a build of your front-end&lt;/li&gt;
&lt;li&gt;Once this front-end build completes, refresh the front-end of your site to verify that the updated content is displayed&lt;br&gt;&lt;br&gt;&lt;img src="https://www.proworks.com/media/ja0bjy22/unicore-gridsome-generatedsite.png" alt="example generated site" width="500" height="250"&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Now we have a fully working and hosted Headless Umbraco CMS using .Net Core!  Now you can build out your content structure in Umbraco and add the rendering to Vue.js templates like you would Razor templates.&lt;/p&gt;
&lt;p&gt;Next up will be:&lt;/p&gt;
&lt;p&gt;&lt;a href="/blog/archive/headless-on-umbraco-net-core-part-4-setup-site-search-using-a-cloud-service/" title="Headless on Umbraco .NET Core Part 4: Setup Site Search Using A Cloud Service"&gt;Headless on Umbraco .NET Core Part 4: Setup Site Search Using A Cloud Service&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Let us know if you have any questions or issues in the comments below!&lt;/p&gt;</description>
      <pubDate>Thu, 18 Mar 2021 09:00:00 Z</pubDate>
      <a10:updated>2021-03-18T09:00:00Z</a10:updated>
    </item>
    <item>
      <guid isPermaLink="false">4630</guid>
      <link>https://www.proworks.com/blog/archive/headless-on-umbraco-net-core-part-2-setup-umbraco-net-core-back-end-on-azure/</link>
      <category>how-to</category>
      <title>Headless on Umbraco .NET Core Part 2: Setup Umbraco .NET Core Back-end on Azure</title>
      <description>&lt;p&gt;Welcome to the second part of our series on "&lt;a href="/blog/archive/how-to-setup-an-umbraco-net-core-headless-cms-using-gridsome-and-vuejs-with-automated-deployment/" title="How To Setup An Umbraco .NET Core Headless CMS Using Gridsome and Vue.js With Automated Deployment"&gt;How To Setup An Umbraco .NET Core Headless CMS Using Gridsome and Vue.js With Automated Deployment&lt;/a&gt;"!&lt;/p&gt;
&lt;p&gt;This post is focused on the back-end of the Headless architecture. The back-end is where the website content is edited using the Umbraco Content Management System (CMS).  We walk through the setup of the Umbraco back-end, the Azure SQL database to store the content, and how to host it on an Azure Web App.&lt;/p&gt;
&lt;h2&gt;Create Azure Resources&lt;/h2&gt;
&lt;p&gt;&lt;img style="float: right; padding: 40px; margin-left: 15px;" src="https://www.proworks.com/media/znblj4y2/microsoft-azure-rgb-hero.png" alt="" width="272" height="49"&gt;&lt;/p&gt;
&lt;p&gt;The steps below assume that you have an Azure Portal account setup and a Resource Group ready that you can add Resources to.  If you don't have an Azure Account, you can sign up for a free 12 month trial here: &lt;a rel="noopener" href="https://azure.microsoft.com/en-us/free/" target="_blank"&gt;Create your Azure free account today&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Create SQL Database&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Add a new Azure resource in your Resource Group created in &lt;a href="/blog/archive/headless-on-umbraco-net-core-part-1-setup-headless-front-end-with-gridsome-and-vuejs/" title="Headless on Umbraco .NET Core Part 1: Setup Headless Front-end with Gridsome and Vue.js"&gt;Part 1 of this series&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Select SQL Database as the resource type&lt;/li&gt;
&lt;li&gt;Give the database a meaningful name&lt;/li&gt;
&lt;li&gt;Create a new database server, if needed, and make sure to remember the username and password you provide here&lt;/li&gt;
&lt;li&gt;Choose the database size (the Compute + storage option), you can use any size, but sizes below Standard with 50 DTUs (S2) will cause the Umbraco back-office to be noticably slow&lt;/li&gt;
&lt;li&gt;Click "Next: Networking &amp;gt;"&lt;/li&gt;
&lt;li&gt;For the "Connectivity method" option under "Network Connectivity", choose the "Public endpoint" option, and then set both options under "Firewall rules" to "Yes".  If the "Firewall rules" section is greyed out, ignore this step and instead setup the firewall in step 12 below.&lt;/li&gt;
&lt;li&gt;Click "Review + create", then click "Create"&lt;/li&gt;
&lt;li&gt;Once the deployment has completed, click on "Go to resource"&lt;/li&gt;
&lt;li&gt;Go to "Connection strings" on the left side, or click on "Show database connection strings" on the right side of the overview screen&lt;/li&gt;
&lt;li&gt;Note down the ADO.NET connection string&lt;br&gt;&lt;img src="https://www.proworks.com/media/4bij1eqf/part-2-umbraco-net-core-headless-tutorial-azuresql-blackout.png" alt="" width="689" height="460"&gt;&lt;/li&gt;
&lt;li&gt;If the "Firewall rules" section was greyed out in step 7 above, you'll need to setup the firewall now.  Otherwise, skip steps 12-17 and continue with step 18 below.&lt;/li&gt;
&lt;li&gt;Go to "Overview" on the left side, then click on the "Server name" value on the right side&lt;/li&gt;
&lt;li&gt;On the right side of the server Overview page, click "Show firewall settings", or click "Firewalls and Virtual Networks" on the left side&lt;/li&gt;
&lt;li&gt;Make sure the "Allow Azure services and resources to access this server" slider is set to Yes&lt;/li&gt;
&lt;li&gt;Add a rule to allow your local IP access to the server&lt;br&gt;&lt;img src="https://www.proworks.com/media/cuxpsu3f/unicore-gridsome-sql-firewall.png" alt="azure sql firewall setup" width="500" height="161.66666666666669"&gt;&lt;/li&gt;
&lt;li&gt;Click Save at the top&lt;/li&gt;
&lt;li&gt;Open SQL Server Management Studio, and connect to your server&lt;/li&gt;
&lt;li&gt;Open a new query window, make sure you are connected to master, then execute the following command (providing your own password):
&lt;pre&gt;CREATE LOGIN umbracoUser WITH password='{YourPasswordHere}';&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Change to your database, and then execute the following commands:
&lt;pre&gt;CREATE USER umbracoUser FROM LOGIN umbracoUser;&lt;br&gt;EXEC sp_addrolemember 'db_owner', 'umbracoUser';&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;Create AppService on Linux&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Log in to the Azure Portal at &lt;a rel="noopener" href="https://portal.azure.com" target="_blank"&gt;https://portal.azure.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Click on the "Create a Resource" button&lt;/li&gt;
&lt;li&gt;Search for and select the Web App resource type&lt;/li&gt;
&lt;li&gt;Set the "Runtime stack" to .NET Core 3.1&lt;/li&gt;
&lt;li&gt;Set the "Operating System" to Linux&lt;/li&gt;
&lt;li&gt;Set the other options as you like, such as changing the App Service size to a smaller Dev/Test size, then click "Review + create", then click "Create"&lt;br&gt;&lt;img src="https://www.proworks.com/media/pnddnikh/unicore-gridsome-webapp-basics.png" alt="azure webapp basics setup" width="500" height="345.5571227080395"&gt;&lt;/li&gt;
&lt;li&gt;Once the resource is created, click on the "Go to resource" button&lt;/li&gt;
&lt;li&gt;Go to Configuration on the left side&lt;/li&gt;
&lt;li&gt;Click on "+ New connection string"&lt;/li&gt;
&lt;li&gt;Set Name to umbracoDbDSN&lt;/li&gt;
&lt;li&gt;Set the Value to the ADO.NET connection string noted above, with a few changes. Specifically, change the User Id= value to umbracoUser, and change the Password= value to the password you chose in step 13 above&lt;/li&gt;
&lt;li&gt;Set the Type to SQLAzure, then click "OK"&lt;/li&gt;
&lt;li&gt;Add two new application settings, one called ASPNETCORE_ENVIRONMENT set to Development and one called Umbraco__CMS__Hosting__Debug set to true&lt;br&gt;&lt;img src="https://www.proworks.com/media/pvcnuhng/unicore-gridsome-webapp-config1.png" alt="azure webapp config setup" width="500" height="273.2758620689655"&gt;&lt;/li&gt;
&lt;li&gt;Click "Save" at the top, and then "Continue" to restart&lt;/li&gt;
&lt;li&gt;Go to "Deployment Center" on the left side&lt;/li&gt;
&lt;li&gt;Select "FTPS credentials" at the top&lt;/li&gt;
&lt;li&gt;Note the "FTPS Endpoint" value, and the "Username" and "Password" values under Application Scope, you will need these later&lt;/li&gt;
&lt;li&gt;Click on "Overview" on the left&lt;/li&gt;
&lt;li&gt;Note the URL value on the right, as you will navigate to this URL multiple times throughout this tutorial. We will refer to this URL throughout the document as the "Backend URL".&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Setup Backend&lt;/h2&gt;
&lt;h3&gt;Create Git Repository&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Add a new Git repository in your service provider of choice (GitHub, Bitbucket, Azure DevOps, etc.)&lt;/li&gt;
&lt;li&gt;Clone the repository locally to a new folder, e.g. &lt;em&gt;C:\src\UnicoreGridsome\Backend&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Create a .gitignore file in the root directory with the following contents:
&lt;pre&gt;.vs/&lt;br&gt;App_Data/&lt;br&gt;bin/&lt;br&gt;dist/&lt;br&gt;node_modules/&lt;br&gt;obj/&lt;br&gt;*.user&lt;br&gt;*.suo&lt;br&gt;umbraco/&lt;br&gt;wwwroot/&lt;br&gt;config/&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Commit that change, and push it up to your remote repository&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;Create Umbraco Project&lt;/h3&gt;
&lt;p&gt;Follow the instructions at &lt;a rel="noopener" href="https://umbraco.com/blog/net-core-alpha-release/" target="_blank"&gt;https://umbraco.com/blog/net-core-alpha-release/&lt;/a&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Install the .NET Core 3.1 SDK - &lt;a rel="noopener" href="https://dotnet.microsoft.com/download/dotnet/3.1" target="_blank"&gt;https://dotnet.microsoft.com/download/dotnet/3.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Open a command prompt in the Backend repository directory, and execute the following:
&lt;pre&gt;dotnet nuget add source "https://www.myget.org/F/umbracoprereleases/api/v3/index.json" -n "Umbraco Prereleases"&lt;br&gt;dotnet new -i Umbraco.Templates::0.5.0-alpha002&lt;br&gt;dotnet new umbraco -n UnicoreDemo&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Commit the changes and push them up to your remote repository&lt;/li&gt;
&lt;li&gt;Open a command prompt in the newly created UnicoreDemo directory, and execute the following:
&lt;pre&gt;dotnet run&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Once it gets to the point that it displays the URLs to connect at, open a browser and navigate to &lt;a href="http://localhost:5000"&gt;http://localhost:5000&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;This should bring up the Install Umbraco wizard&lt;/li&gt;
&lt;li&gt;Fill out your name, email, and a password, then click "Next"&lt;/li&gt;
&lt;li&gt;Choose the database type of "Microsoft SQL Azure" and specify the Azure Database Server name and&lt;/li&gt;
&lt;li&gt;Azure Database name you setup above&lt;/li&gt;
&lt;li&gt;For the Login, set this to &lt;strong&gt;&lt;em&gt;umbracoUser&lt;/em&gt; &lt;/strong&gt;and the password is the one you set in the SQL script you executed above after setting up the database&lt;/li&gt;
&lt;li&gt;Click Continue&lt;/li&gt;
&lt;li&gt;After a minute or two, it should bring you to an error page saying the site cannot be reached. This is normal for the local development and isn't anything to be concerned with. The Umbraco install process has to restart the server at the end, and because we are running from the command line the restart process simply stops the server and is not able to start it again&lt;br&gt;&lt;img src="https://www.proworks.com/media/k1km1nj0/unicore-gridsome-error-after-restart.png" alt="error after restart" width="385" height="455"&gt;&lt;/li&gt;
&lt;li&gt;Repeat step 4 above to start the website, and navigate to &lt;a href="http://localhost:5000/umbraco"&gt;http://localhost:5000/umbraco&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Login using the credentials you setup in step 7 above, and verify that the back-office comes up correctly&lt;/li&gt;
&lt;li&gt;Press Ctrl-C in your command prompt to stop the website&lt;/li&gt;
&lt;li&gt;Commit the changes and push them up to your remote repository&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;Publish and Review&lt;/h3&gt;
&lt;p&gt;With the site up and running locally now, you can publish it up to Azure and see your back-office working there.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open a command prompt in the UnicoreDemo directory, and execute this command:
&lt;pre&gt;dotnet publish -o dist&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Open an FTPS client, such as FileZilla, and connect to the FTPS server from the Azure Web App deployment center above &lt;em&gt;("Create AppService on Linux", Step 17)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Delete the existing hostingstart.html file that is in the &lt;em&gt;/site/wwwroot&lt;/em&gt; directory&lt;/li&gt;
&lt;li&gt;Upload the contents of the &lt;em&gt;UnicoreDemo/dist&lt;/em&gt; directory to the &lt;em&gt;/site/wwwroot&lt;/em&gt; directory&lt;/li&gt;
&lt;li&gt;Create a &lt;em&gt;/site/wwwroot/umbraco&lt;/em&gt; directory on the server&lt;/li&gt;
&lt;li&gt;Upload the contents of the &lt;em&gt;UnicoreDemo/umbraco&lt;/em&gt; directory to the &lt;em&gt;/site/wwwroot/umbraco&lt;/em&gt; directory&lt;/li&gt;
&lt;li&gt;Navigate to your Backend URL in a browser, to the &lt;em&gt;/umbraco&lt;/em&gt; page, and you should be able to log into the back-office&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;With this setup, you have everything you need for the back-end content management and editing of the headless website.  In addition, you have it hosted on Azure and ready to connect to your front-end from &lt;a href="/blog/archive/headless-on-umbraco-net-core-part-1-setup-headless-front-end-with-gridsome-and-vuejs/" title="Headless on Umbraco .NET Core Part 1: Setup Headless Front-end with Gridsome and Vue.js"&gt;Step 1&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;Next up will be:&lt;/p&gt;
&lt;p&gt;&lt;a href="/blog/archive/headless-on-umbraco-net-core-part-3-setup-graphql-api-and-connect-back-end-and-front-end/" title="Headless on Umbraco .NET Core Part 3: Setup GraphQL API and Connect Back-end and Front-end"&gt;Headless on Umbraco .NET Core Part 3: &lt;span&gt;Setup GraphQL API and Connect Back-end and Front-end&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Let us know if you have any questions or issues in the comments below!&lt;/p&gt;</description>
      <pubDate>Tue, 16 Mar 2021 09:00:00 Z</pubDate>
      <a10:updated>2021-03-16T09:00:00Z</a10:updated>
    </item>
  </channel>
</rss>