Features

Single Click

With a single click your Back Office will be organised!

Sensible (and Opinionated)

A "one size fits all" organiser for

  • Data Types
  • Document Types
  • Media Types
  • Member Types

Extensible

All "Organise Actions" can be extended and replaced.

Organise your Back Office just how you want it.

Versions

Umbraco icon
Umbraco CMS

13.1.8

Version Support Policy

Feature updates until 14/12/2025
Security updates until 14/12/2026
This is a Long Term Support (LTS) version
Umbraco icon
Umbraco CMS

16.0.4

Version Support Policy

Feature updates until 12/03/2026
Security updates until 12/06/2026
Umbraco icon
Umbraco CMS

17.0.0alpha0001

Version Support Policy

Pre-release - not recommended for production use.
Umbraco will be released on 27/11/2025
This is a Long Term Support (LTS) version

Readme

Quick Start

  • Go to the backoffice
  • Click Settings
  • Click Organise
  • Select the types you wish to organise
  • Click submit and confirm
  • Refresh your page and enjoy a cleaner backoffice ✨

Configuration

Add the following to your appsettings.json file

appsettings.json
"BackOfficeOrganiser": {
"DataTypes": {
"InternalFolderName": "Internal",
"ThirdPartyFolderName": "Third Party",
"CustomFolderName": "Custom"
}
}

Extending

You can implement your own Organise Action, a method that determines where a type should be moved to. Implement the following interfaces:

  • Document Types => IContentTypeOrganiseAction
  • Media Types => IMediaTypeOrganiseAction
  • Member Types => IMemberTypeOrganiseAction
  • Data Types => IDataTypeOrganiseAction

Example

ExampleContentTypeOrganiseAction.cs
using jcdcdev.Umbraco.Core.Extensions;
using Umbraco.Cms.Core.Models;
using Umbraco.Cms.Core.Services;
namespace Umbraco.Community.BackOfficeOrganiser.Organisers.ContentTypes;
public class ExampleContentTypeOrganiseAction : IContentTypeOrganiseAction
{
// Handle all but container types (Folders)
public bool CanMove(IContentType contentType, IContentTypeService contentTypeService) => !contentType.IsContainer;
public void Move(IContentType contentType, IContentTypeService contentTypeService)
{
var folderId = -1;
var folderName = string.Empty;
var isComposition = contentTypeService.GetComposedOf(contentType.Id).Any();
if (contentType.AllowedTemplates?.Any() ?? false)
{
folderName = "Pages";
}
else if (isComposition)
{
folderName = "Compositions";
}
else if (contentType.IsElement)
{
folderName = "Element Types";
}
if (!folderName.IsNullOrWhiteSpace())
{
folderId = contentTypeService.GetOrCreateFolder(folderName).Id;
}
contentTypeService.Move(contentType, folderId);
}
}
public class Composer : IComposer
{
public void Compose(IUmbracoBuilder builder)
{
// Make sure you register your action BEFORE the default!
builder.ContentTypeOrganiseActions().Insert<ExampleContentTypeOrganiseAction>();
}
}

Contributing

Contributions to this package are most welcome! Please visit the Contributing page.

Acknowledgements (Thanks)