DoubleSync.Core 0.2.0

DoubleSync

Umbraco environment synchronization tool. Sync schema (data types, document types) and content between Umbraco instances using the Management API.

Installation

# Add the private NuGet source
dotnet nuget add source https://nuget.double.pt/nuget --name DoubleDigital

# Install the CLI tool globally
dotnet tool install --global DoubleSync.Cli --add-source https://nuget.double.pt/nuget

Quick Start

1. Configure API User in Umbraco

In your Umbraco project's appsettings.json, add an API user:

{
  "Umbraco": {
    "CMS": {
      "Security": {
        "BackOfficeApiClients": {
          "doublesync": {
            "ClientId": "umbraco-back-office-doublesync",
            "ClientSecret": "your-secret-here",
            "AllowedGrantTypes": ["client_credentials"],
            "AllowedScopes": ["All"]
          }
        }
      }
    }
  }
}

2. Test Connection

doublesync test-connection \
  --url https://your-umbraco-site.com \
  --client-id umbraco-back-office-doublesync \
  --client-secret your-secret-here

3. Export Schema

doublesync schema-export \
  --url https://dev.example.com \
  --client-id umbraco-back-office-doublesync \
  --client-secret your-secret-here \
  --output .doublesync

4. Import Schema to Another Instance

doublesync schema-import \
  --url https://uat.example.com \
  --client-id umbraco-back-office-doublesync \
  --client-secret your-secret-here \
  --input .doublesync

5. Preview Changes (Dry Run)

doublesync schema-import \
  --url https://uat.example.com \
  --client-id umbraco-back-office-doublesync \
  --client-secret your-secret-here \
  --input .doublesync \
  --dry-run

Available Commands

Command Description
test-connection Test connection to an Umbraco instance
schema-export Export schema (data types + document types) to disk
schema-import Import schema from disk (supports --dry-run)
schema-diff Compare schema snapshot against target instance
content-export Export content (documents) to disk
content-import Import content from disk (supports --dry-run)
content-diff Compare content snapshot against target instance
push Push schema + content from source → target
pull Pull schema + content from target → local snapshot
status Show what's changed since last sync

Content Sync

# Export content
doublesync content-export --url https://dev.example.com --client-id ... --client-secret ...

# Import content
doublesync content-import --url https://uat.example.com --client-id ... --client-secret ...

# Diff content
doublesync content-diff --url https://uat.example.com --client-id ... --client-secret ...

Push / Pull (Bidirectional Sync)

# Pull from DEV into local snapshot
doublesync pull \
  --url https://dev.example.com \
  --client-id umbraco-back-office-doublesync \
  --client-secret your-secret-here

# Push local snapshot to UAT
doublesync push \
  --url https://uat.example.com \
  --client-id umbraco-back-office-doublesync \
  --client-secret your-secret-here

# Push schema only (no content)
doublesync push \
  --url https://uat.example.com \
  --client-id umbraco-back-office-doublesync \
  --client-secret your-secret-here \
  --schema-only

# Preview push changes before applying
doublesync push \
  --url https://uat.example.com \
  --client-id umbraco-back-office-doublesync \
  --client-secret your-secret-here \
  --dry-run

# Check what's changed since last sync
doublesync status \
  --url https://uat.example.com \
  --client-id umbraco-back-office-doublesync \
  --client-secret your-secret-here

Requirements

  • .NET 10.0 SDK
  • Umbraco v17+ with Management API enabled
  • API User configured with client_credentials grant type

License

MIT

Showing the top 20 packages that depend on DoubleSync.Core.

Packages Downloads
DoubleSync.Storage.Azure
Azure Blob Storage provider for DoubleSync. Stores snapshots, media blobs, and SyncPacks in Azure Blob Storage. Requires DoubleSync.Umbraco Agency license.
0

.NET 10.0

  • No dependencies.

Version Downloads Last updated
17.0.1-alpha.0.25 0 02/09/2026
17.0.1-alpha.0.22 0 02/09/2026
17.0.1-alpha.0.21 0 02/09/2026
17.0.1-alpha.0.20 0 02/09/2026
17.0.1-alpha.0.19 0 02/09/2026
17.0.1-alpha.0.18 0 02/09/2026
17.0.1-alpha.0.16 0 02/09/2026
17.0.1-alpha.0.15 0 02/09/2026
17.0.1-alpha.0.14 0 02/09/2026
17.0.1-alpha.0.13 0 02/09/2026
17.0.1-alpha.0.12 0 02/09/2026
17.0.1-alpha.0.11 0 02/09/2026
17.0.1-alpha.0.10 0 02/09/2026
17.0.1-alpha.0.9 0 02/09/2026
17.0.1-alpha.0.8 0 02/09/2026
17.0.1-alpha.0.7 0 02/09/2026
17.0.1-alpha.0.6 0 02/09/2026
17.0.1-alpha.0.5 0 02/09/2026
17.0.1-alpha.0.4 0 02/09/2026
17.0.1-alpha.0.3 0 02/09/2026
17.0.0 0 02/09/2026
17.0.0-alpha.0 0 02/09/2026
1.0.0 0 02/09/2026
0.4.0 0 02/09/2026
0.3.0 0 02/09/2026
0.2.0 0 02/09/2026
0.1.0 0 02/09/2026