Rivlo.ContentMigrationManager 13.0.0-beta3

This is a prerelease version of Rivlo.ContentMigrationManager.
dotnet add package Rivlo.ContentMigrationManager --version 13.0.0-beta3
                    
NuGet\Install-Package Rivlo.ContentMigrationManager -Version 13.0.0-beta3
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Rivlo.ContentMigrationManager" Version="13.0.0-beta3" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Rivlo.ContentMigrationManager" Version="13.0.0-beta3" />
                    
Directory.Packages.props
<PackageReference Include="Rivlo.ContentMigrationManager" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Rivlo.ContentMigrationManager --version 13.0.0-beta3
                    
#r "nuget: Rivlo.ContentMigrationManager, 13.0.0-beta3"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Rivlo.ContentMigrationManager@13.0.0-beta3
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Rivlo.ContentMigrationManager&version=13.0.0-beta3&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=Rivlo.ContentMigrationManager&version=13.0.0-beta3&prerelease
                    
Install as a Cake Tool

📦 Rivlo.ContentMigrationManager

Flexible content and member migration toolkit for Umbraco 13

A developer-focused toolset for migrating content and members between Umbraco installations. Includes secure import/export APIs, live dashboard UI for content import and API key management, and full extensibility for custom property and block handling.

✅ Key Features

  • 🔁 Import JSON-formatted content with presets, overwrite protection, and content mappings
  • 📤 Export content via API by content type and properties (dashboard support coming soon!)
  • 👥 Import members including passwords and member groups (export coming soon!)
  • 🛠️ Backoffice dashboard with live validation, import feedback, and key creation
  • 🔐 Secure API key system with permission scoping and expiry
  • ⚙️ Extensible handlers for custom property types (e.g., Block List, Media Picker)
  • 🧩 Handles deeply nested blocks and supports configurable alias/property mapping

📥 Installation

dotnet add package Rivlo.ContentMigrationManager --version 13.0.0-beta1

Or install via NuGet Package Manager.

🧭 Dashboard Location

Once installed, navigate to:

Settings → Content Migration Manager

Here you’ll find:

🔄 Import Tab

  • Paste structured JSON for content import
  • Set Insert, Update, or Insert + Update modes
  • Choose parent node
  • Map old aliases → new aliases (content + properties)
  • Add default preset values
  • Define overwrite skip rules ({all} supported)
  • See live preview of import count
  • Get visual feedback on results or errors

🔐 Security Tab

  • View active API keys
  • Generate new keys (choose allowed actions: import, export)
  • Set optional environment labels
  • Revoke keys at any time
  • See recent key generation tokens (one-time visibility)

📤 Export Tab (UI pending)

Placeholder only – full backoffice export support coming soon

In the meantime, use the export API described below

📤 Export Content (API)

GET /umbraco/api/ContentExporter/ExportContent

Query Params:

Param Required Description
documentTypeAlias Alias of the content type to export
propertyAliases Comma-separated list of property aliases
parentId Root node ID (default = -1 for all roots)
recursive Recurse into all descendants? (default = true)
includeParent Include the parentId node? (default = true)

Example:

GET /umbraco/api/ContentExporter/ExportContent?documentTypeAlias=article&propertyAliases=title,body,mainImage

📥 Import Content (API)

POST /umbraco/api/ContentImport/ImportContent

Query Params: parentId: Target parent node (default -1)

mode: InsertOnly | UpdateOnly | InsertOrUpdate

Request Body:

{
  "data": [ ...exported items... ],
  "config": {
    "contentTypeMappings": {
      "oldAlias": "newAlias"
    },
    "propertyMappings": {
      "oldProp": "newProp"
    },
    "presets": {
      "someProp": "defaultValue"
    },
    "doNotOverwriteIfHasValue": ["heroImage", "{all}"]
  }
}

Returns counts of:

  • Created
  • Updated
  • Skipped (duplicates or missing config)

👤 Member Import

POST /umbraco/api/MemberImport/ImportMembers?onDuplicate=ignore|overwrite

Payload format:

[
  {
    "Username": "john@example.com",
    "Name": "John Smith",
    "Email": "john@example.com",
    "PasswordHash": "...",
    "MemberTypeAlias": "standardMember",
    "MemberGroups": ["VIP", "Newsletter"],
    "Properties": {
      "bio": "Hello!",
      "country": "UK"
    }
  }
]
  • Overwrite strategy controls duplicate behavior
  • Member groups are created if missing
  • Passwords are assigned using Identity API

🔐 API Key Management

API access requires valid keys scoped to allowed actions (import, export, etc).

API Endpoints:

GET /umbraco/backoffice/ContentMigrationManager/ApiKey/GetAll
POST /umbraco/backoffice/ContentMigrationManager/ApiKey/Generate
POST /umbraco/backoffice/ContentMigrationManager/ApiKey/Revoke

Each key contains:

Name

  • Environment label
  • Expiry (optional)
  • Allowed actions
  • Unique token (shown once at generation)

🧩 Extensibility

IPropertyValueHandler

For transforming specific editor types (e.g. BlockList, MediaPicker):

public interface IPropertyValueHandler {
    string EditorAlias { get; }
    bool CanHandle(string propertyAlias, string editorAlias);
    object ExportValue(string propertyAlias, object value, IDataType dataType);
    object TransformValue(string propertyAlias, object value, IDataType dataType, JObject? config = null);
}

Examples included:

  • BlockListPropertyValueHandler
  • MediaPickerPropertyValueHandler

Supports alias remapping, nested transformations, and UDI resolution.

IContentImportHook

For custom pre-processing at content-type or property level:

public interface IContentImportHook {
    bool CanHandle(string contentTypeAlias);                      // Match on type
    IEnumerable<string> HandledPropertyAliases();                 // e.g. ["*", "heroImage"]
    void Transform(ExportedPage source, IContent target, ImportConfig config = null); // Modify target
}

Can handle:

  • Special logic per content type
  • Global handlers (*)
  • Pre-transform block content, images, or multi-property logic

🚧 Limitations (v1 Beta)

  • ✅ Content import and export supported
  • ✅ Member import supported
  • ❌ Member export not yet available (coming soon)
  • ❌ No backoffice UI for export yet (use API only)
  • ❌ No media file export – UDI/media path mapping only
  • ⚠️ Only tested with Umbraco 13.x at present

📄 License

This package requires a valid RivloTools licence file to run in production.

Trial Mode: 14 day trial is automatically enabled on first install

Licensing: Per-site (3 domains included for live, and staging/test) with optional version-lock

For the full End User Licence Agreement see https://www.rivlotools.com/products/content-migration-manager/eula

🌐 Learn More

Explore the full RivloTools suite at

👉 www.rivlotools.com

© CS Software Ltd

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
13.0.0-beta3 197 8/6/2025
13.0.0-beta2 193 8/6/2025
13.0.0-beta1 192 8/6/2025

Initial beta release with content import/export API, member import, dashboard UI, and extensibility hooks.