Not every Umbraco project needs to follow the traditional MVC pattern. Sometimes you need Umbraco purely for content management while your React, Vue, or Angular frontend handles the presentation layer. This article walks through two practical approaches: using Umbraco's built-in Content Delivery API versus building a custom solution with route hijacking.
Both approaches work well—the key is knowing which fits your project.
What Does "Headless" Even Mean?
A headless setup separates content management from presentation. Umbraco stores and manages your content, exposing it as JSON through APIs. Your frontend application then consumes that JSON and renders it however you need. This gives you flexibility in technology choices and enables multi-channel content delivery across web, mobile, and other platforms.
Option 1: Umbraco's Content Delivery API
Since Umbraco 12, the CMS ships with a built-in Content Delivery API that turns your content into JSON without writing a single line of code. It's like ordering pizza instead of making it yourself—sometimes the convenience is worth it.
For this article, I'm using V17 pre-release
Getting Started with the Content Delivery API
Install Umbraco Templates:
dotnet new install Umbraco.Templates
Create Your Project:
dotnet new umbraco --name MyProject
Enable Content Delivery API:
- For Umbraco 15+:
dotnet new umbraco -n MyProject -da
- For Umbraco 13 and 14, add this to your appsettings.json: