Rivlo.ContentMigrationManager
13.0.0-beta3
dotnet add package Rivlo.ContentMigrationManager --version 13.0.0-beta3
NuGet\Install-Package Rivlo.ContentMigrationManager -Version 13.0.0-beta3
<PackageReference Include="Rivlo.ContentMigrationManager" Version="13.0.0-beta3" />
<PackageVersion Include="Rivlo.ContentMigrationManager" Version="13.0.0-beta3" />
<PackageReference Include="Rivlo.ContentMigrationManager" />
paket add Rivlo.ContentMigrationManager --version 13.0.0-beta3
#r "nuget: Rivlo.ContentMigrationManager, 13.0.0-beta3"
#:package Rivlo.ContentMigrationManager@13.0.0-beta3
#addin nuget:?package=Rivlo.ContentMigrationManager&version=13.0.0-beta3&prerelease
#tool nuget:?package=Rivlo.ContentMigrationManager&version=13.0.0-beta3&prerelease
📦 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
© CS Software Ltd
Product | Versions 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. |
-
net8.0
- Rivlo.Licensing (>= 13.0.0-beta2)
- Umbraco.Cms.Web.BackOffice (>= 13.0.0 && < 14.0.0)
- Umbraco.Cms.Web.Website (>= 13.0.0 && < 14.0.0)
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.