PPDS.Migration
1.0.0-beta.5
See the version list below for details.
dotnet add package PPDS.Migration --version 1.0.0-beta.5
NuGet\Install-Package PPDS.Migration -Version 1.0.0-beta.5
<PackageReference Include="PPDS.Migration" Version="1.0.0-beta.5" />
<PackageVersion Include="PPDS.Migration" Version="1.0.0-beta.5" />
<PackageReference Include="PPDS.Migration" />
paket add PPDS.Migration --version 1.0.0-beta.5
#r "nuget: PPDS.Migration, 1.0.0-beta.5"
#:package PPDS.Migration@1.0.0-beta.5
#addin nuget:?package=PPDS.Migration&version=1.0.0-beta.5&prerelease
#tool nuget:?package=PPDS.Migration&version=1.0.0-beta.5&prerelease
PPDS SDK
NuGet packages for Microsoft Dataverse development. Part of the Power Platform Developer Suite ecosystem.
Packages
Compatibility
| Package | Target Frameworks |
|---|---|
| PPDS.Plugins | net462 |
| PPDS.Dataverse | net8.0, net9.0, net10.0 |
| PPDS.Migration | net8.0, net9.0, net10.0 |
| PPDS.Auth | net8.0, net9.0, net10.0 |
| PPDS.Cli | net8.0, net9.0, net10.0 |
PPDS.Plugins
Declarative attributes for configuring Dataverse plugin registrations directly in code.
dotnet add package PPDS.Plugins
[PluginStep(
Message = "Create",
EntityLogicalName = "account",
Stage = PluginStage.PostOperation)]
[PluginImage(
ImageType = PluginImageType.PreImage,
Name = "PreImage",
Attributes = "name,telephone1")]
public class AccountCreatePlugin : IPlugin
{
public void Execute(IServiceProvider serviceProvider) { }
}
See PPDS.Plugins on NuGet for details.
PPDS.Dataverse
High-performance Dataverse connectivity with connection pooling, throttle-aware routing, and bulk operations.
dotnet add package PPDS.Dataverse
// Setup with typed configuration
services.AddDataverseConnectionPool(options =>
{
options.Connections.Add(new DataverseConnection("Primary")
{
Url = "https://org.crm.dynamics.com",
ClientId = "your-client-id",
ClientSecret = Environment.GetEnvironmentVariable("DATAVERSE_SECRET")
});
options.Pool.DisableAffinityCookie = true; // 10x+ throughput improvement
});
// Usage
await using var client = await pool.GetClientAsync();
var account = await client.RetrieveAsync("account", id, new ColumnSet(true));
See PPDS.Dataverse documentation for details.
PPDS.Migration
High-performance data migration engine for Dataverse. Replaces CMT for automated pipeline scenarios with 3-8x performance improvement.
dotnet add package PPDS.Migration
// Setup
services.AddDataverseConnectionPool(options =>
{
options.Connections.Add(new DataverseConnection("Target")
{
Url = "https://org.crm.dynamics.com",
ClientId = "your-client-id",
ClientSecret = Environment.GetEnvironmentVariable("DATAVERSE_SECRET")
});
});
services.AddDataverseMigration();
// Export
var exporter = serviceProvider.GetRequiredService<IExporter>();
await exporter.ExportAsync("schema.xml", "data.zip");
// Import with dependency resolution
var importer = serviceProvider.GetRequiredService<IImporter>();
await importer.ImportAsync("data.zip");
Key Features:
- Parallel export (all entities exported concurrently)
- Tiered import with automatic dependency resolution
- Circular reference detection with deferred field processing
- CMT format compatibility (drop-in replacement)
- Security-first: no PII in logs, connection string redaction
See PPDS.Migration documentation for details.
PPDS.Cli
Unified CLI tool for Dataverse operations. Install as a .NET global tool:
dotnet tool install -g PPDS.Cli
# Create an auth profile (opens browser for login)
ppds auth create --name dev
# Select your environment
ppds env select --environment "My Environment"
# Export data
ppds data export --schema schema.xml --output data.zip
# Import data
ppds data import --data data.zip --mode Upsert
Commands:
ppds auth- Authentication profiles (create, list, select, delete, update, who)ppds env- Environment discovery and selection (list, select, who)ppds data- Data operations (export, import, copy, schema, users, load)ppds plugins- Plugin registration (extract, deploy, diff, list, clean)ppds metadata- Entity browsing (entities, attributes, relationships, keys, optionsets)ppds query- Execute queries (fetch, sql)
See PPDS.Cli documentation for details.
Architecture Decisions
Key design decisions are documented as ADRs:
- ADR-0001: Disable Affinity Cookie by Default
- ADR-0002: Multi-Connection Pooling
- ADR-0003: Throttle-Aware Connection Selection
- ADR-0004: Throttle Recovery Strategy
- ADR-0005: DOP-Based Parallelism
- ADR-0006: Connection Source Abstraction
- ADR-0007: Unified CLI and Shared Authentication
- ADR-0008: CLI Output Architecture
- ADR-0009: CLI Command Taxonomy
- ADR-0010: Published vs Unpublished Default
- ADR-0011: Deployment Settings Format
- ADR-0012: Hybrid Filter Design
- ADR-0013: CLI Dry-Run Convention
- ADR-0014: CSV Mapping Schema
Patterns
- Connection Pooling - When and how to use connection pooling
- Bulk Operations - High-throughput data operations
Claude Code Integration
PPDS provides templates for Claude Code users developing Power Platform solutions:
- Consumer Guide - Best practices for PPDS development
- Recommended Settings - Permission configuration for PPDS commands
- Slash Commands - Quick reference commands
See templates/claude/INSTALL.md for installation instructions.
Related Projects
| Project | Description |
|---|---|
| power-platform-developer-suite | VS Code extension |
| ppds-tools | PowerShell deployment module |
| ppds-alm | CI/CD pipeline templates |
| ppds-demo | Reference implementation |
License
MIT License - see LICENSE for details.
| 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 is compatible. 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 is compatible. 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. |
-
net10.0
- Microsoft.Extensions.DependencyInjection (>= 10.0.1)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.1)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.1)
- Microsoft.Extensions.Options (>= 10.0.1)
- Microsoft.Identity.Client.Extensions.Msal (>= 4.79.2)
- PPDS.Dataverse (>= 1.0.0-beta.4)
-
net8.0
- Microsoft.Extensions.DependencyInjection (>= 10.0.1)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.1)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.1)
- Microsoft.Extensions.Options (>= 10.0.1)
- Microsoft.Identity.Client.Extensions.Msal (>= 4.79.2)
- PPDS.Dataverse (>= 1.0.0-beta.4)
-
net9.0
- Microsoft.Extensions.DependencyInjection (>= 10.0.1)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.1)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.1)
- Microsoft.Extensions.Options (>= 10.0.1)
- Microsoft.Identity.Client.Extensions.Msal (>= 4.79.2)
- PPDS.Dataverse (>= 1.0.0-beta.4)
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 |
|---|---|---|
| 1.0.0-beta.7 | 52 | 3/2/2026 |
| 1.0.0-beta.6 | 68 | 1/17/2026 |
| 1.0.0-beta.5 | 202 | 1/6/2026 |
| 1.0.0-beta.4 | 64 | 1/5/2026 |
| 1.0.0-beta.3 | 104 | 1/5/2026 |
| 1.0.0-beta.2 | 62 | 1/2/2026 |
| 1.0.0-beta.1 | 207 | 12/29/2025 |
| 1.0.0-alpha1 | 118 | 12/20/2025 |
| 1.0.0-alpha.1 | 115 | 12/20/2025 |