Skip to content

joshsmithxrm/power-platform-developer-suite

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

599 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Power Platform Developer Suite

Build codecov Docs License: MIT .NET PRs Welcome

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

Package NuGet Description
PPDS.Plugins NuGet Declarative plugin registration attributes
PPDS.Dataverse NuGet High-performance connection pooling and bulk operations
PPDS.Migration NuGet High-performance data migration engine
PPDS.Auth NuGet Authentication profiles and credential management
PPDS.Query NuGet SQL query engine with FetchXML transpilation and ADO.NET provider
PPDS.Cli NuGet CLI tool with TUI (.NET tool)
PPDS.Mcp NuGet MCP server for AI assistants (.NET tool)

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


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.

About

Pro-grade tooling for Power Platform developers

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Sponsor this project

 

Packages

 
 
 

Contributors