PPDS.Dataverse
1.0.0-beta.6
dotnet add package PPDS.Dataverse --version 1.0.0-beta.6
NuGet\Install-Package PPDS.Dataverse -Version 1.0.0-beta.6
<PackageReference Include="PPDS.Dataverse" Version="1.0.0-beta.6" />
<PackageVersion Include="PPDS.Dataverse" Version="1.0.0-beta.6" />
<PackageReference Include="PPDS.Dataverse" />
paket add PPDS.Dataverse --version 1.0.0-beta.6
#r "nuget: PPDS.Dataverse, 1.0.0-beta.6"
#:package PPDS.Dataverse@1.0.0-beta.6
#addin nuget:?package=PPDS.Dataverse&version=1.0.0-beta.6&prerelease
#tool nuget:?package=PPDS.Dataverse&version=1.0.0-beta.6&prerelease
Power Platform Developer Suite
Pro-grade tooling for Power Platform developers. CLI, TUI, MCP server, VS Code extension, and NuGet libraries.
Quick Start
# Install the CLI tool
dotnet tool install -g PPDS.Cli
# Launch interactive TUI
ppds
# Or run commands directly
ppds auth create --name dev
ppds env select --environment "My Environment"
ppds data export --schema schema.xml --output data.zip
Platform Overview
| Component | Type | Install |
|---|---|---|
| ppds | CLI + TUI | dotnet tool install -g PPDS.Cli |
| ppds-mcp-server | MCP Server | dotnet tool install -g PPDS.Mcp |
| VS Code Extension | IDE Extension | Marketplace |
NuGet Libraries
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.Query | net8.0, net9.0, net10.0 |
| PPDS.Cli | net8.0, net9.0, net10.0 |
| PPDS.Mcp | net8.0, net9.0, net10.0 |
Interactive TUI
Running ppds without arguments launches the interactive Terminal User Interface:
ppds # Launches interactive TUI with guided workflows
The TUI provides a menu-driven interface for all PPDS operations, ideal for exploration and one-off tasks.
MCP Server
The MCP server enables AI assistants like Claude Code to interact with Dataverse:
# Install the MCP server
dotnet tool install -g PPDS.Mcp
# Add to Claude Code MCP settings
ppds-mcp-server
Capabilities:
- Query Dataverse using natural language
- Explore entity metadata
- Analyze plugin registrations
- Execute FetchXML and SQL queries
VS Code Extension
The VS Code extension provides IDE integration via JSON-RPC with the PPDS daemon:
- Environment and profile management
- Query execution with results view
- Plugin deployment workflows
Install from the VS Code Marketplace.
CLI Commands
| Command | Purpose |
|---|---|
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, truncate) |
ppds plugins |
Plugin registration (extract, deploy, diff, list, clean) |
ppds metadata |
Entity browsing (entities, attributes, relationships, keys, optionsets) |
ppds query |
Execute queries (fetch, sql, explain, history) |
ppds serve |
Run RPC daemon for VS Code extension |
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.Query
SQL query engine for Dataverse with FetchXML transpilation and an ADO.NET provider.
dotnet add package PPDS.Query
// ADO.NET provider — standard .NET data access for Dataverse
using var connection = new PpdsDbConnection(pool);
await connection.OpenAsync();
using var command = connection.CreateCommand();
command.CommandText = "SELECT name, revenue FROM account WHERE revenue > @threshold";
command.Parameters.AddWithValue("@threshold", 1_000_000m);
using var reader = await command.ExecuteReaderAsync();
while (await reader.ReadAsync())
{
Console.WriteLine($"{reader["name"]}: {reader["revenue"]:C}");
}
Key Features:
- Full T-SQL support (SELECT, JOIN, WHERE, GROUP BY, subqueries, CTEs, window functions)
- FetchXML transpilation with automatic pushdown optimization
- DML support (INSERT, UPDATE, DELETE) with safety guards
- Cross-environment queries with bracket syntax
- Streaming Volcano-model execution engine
See PPDS.Query documentation for details.
Development
Prerequisites
- .NET SDK 10.0+ (8.0 and 9.0 also supported)
- Node.js 20+ (for extension development)
- PowerShell 7+ (for scripts)
Opening the Project
Recommended: Open ppds.code-workspace in VS Code for full-stack development.
This provides:
- .NET solution navigation with C# Dev Kit
- Extension F5 debugging with correct path resolution
- Unified build/test tasks for both .NET and TypeScript
- Compound debugging for CLI + Extension integration testing
Alternatives:
- Open root folder for .NET-only development
- Open
extension/folder for extension-only development
Building
# Build .NET solution
dotnet build PPDS.sln
# Build extension
cd extension && npm run compile
# Or use VS Code tasks: Ctrl+Shift+B
Testing
# Unit tests (fast, no external dependencies)
dotnet test --filter Category!=Integration
# Integration tests (requires Dataverse connection)
dotnet test --filter Category=Integration
# TUI tests
dotnet test --filter Category=TuiUnit
Debugging (F5)
| Configuration | Purpose |
|---|---|
.NET: Debug TUI |
Launch interactive TUI |
.NET: Debug CLI |
Debug CLI with custom args |
.NET: Debug Daemon |
Run RPC daemon for extension |
Extension: Run |
Launch extension dev host |
Full-Stack: Daemon + Extension |
Debug both sides of RPC |
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 |
|---|---|
| ppds-docs | Documentation site (source) |
| ppds-tools | PowerShell deployment module |
| ppds-alm | CI/CD pipeline templates |
| ppds-demo | Reference implementation |
Contributing
See CONTRIBUTING.md for guidelines on contributing to PPDS.
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.Data.SqlClient (>= 6.1.4)
- Microsoft.Extensions.DependencyInjection (>= 10.0.3)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.3)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.3)
- Microsoft.Extensions.Options (>= 10.0.3)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 10.0.3)
- Microsoft.Identity.Client (>= 4.82.1)
- Microsoft.Identity.Client.Extensions.Msal (>= 4.82.1)
- Microsoft.PowerPlatform.Dataverse.Client (>= 1.2.10)
- System.IdentityModel.Tokens.Jwt (>= 8.15.0)
- System.Security.Cryptography.Pkcs (>= 10.0.2)
-
net8.0
- Microsoft.Data.SqlClient (>= 6.1.4)
- Microsoft.Extensions.DependencyInjection (>= 10.0.3)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.3)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.3)
- Microsoft.Extensions.Options (>= 10.0.3)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 10.0.3)
- Microsoft.Identity.Client (>= 4.82.1)
- Microsoft.Identity.Client.Extensions.Msal (>= 4.82.1)
- Microsoft.PowerPlatform.Dataverse.Client (>= 1.2.10)
- System.IdentityModel.Tokens.Jwt (>= 8.15.0)
- System.Security.Cryptography.Pkcs (>= 10.0.2)
-
net9.0
- Microsoft.Data.SqlClient (>= 6.1.4)
- Microsoft.Extensions.DependencyInjection (>= 10.0.3)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.3)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.3)
- Microsoft.Extensions.Options (>= 10.0.3)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 10.0.3)
- Microsoft.Identity.Client (>= 4.82.1)
- Microsoft.Identity.Client.Extensions.Msal (>= 4.82.1)
- Microsoft.PowerPlatform.Dataverse.Client (>= 1.2.10)
- System.IdentityModel.Tokens.Jwt (>= 8.15.0)
- System.Security.Cryptography.Pkcs (>= 10.0.2)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on PPDS.Dataverse:
| Package | Downloads |
|---|---|
|
PPDS.Migration
High-performance Dataverse data migration engine. Provides parallel export, dependency-aware tiered import, and CMT format compatibility for automated pipeline scenarios. |
|
|
PPDS.Query
Production-grade SQL query engine for Dataverse. Provides full T-SQL parsing via ScriptDom, FetchXML transpilation, streaming execution with cost-based optimization, and an ADO.NET provider (PpdsDbConnection) for any .NET application. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.0-beta.6 | 54 | 3/2/2026 |
| 1.0.0-beta.5 | 75 | 1/17/2026 |
| 1.0.0-beta.4 | 203 | 1/6/2026 |
| 1.0.0-beta.3 | 107 | 1/5/2026 |
| 1.0.0-beta.2 | 75 | 1/2/2026 |
| 1.0.0-beta.1 | 375 | 12/29/2025 |
| 1.0.0-alpha1 | 114 | 12/20/2025 |
| 1.0.0-alpha.1 | 111 | 12/20/2025 |