Do these 3 things before closing this tab:
1Scan for outdated or missing drivers - takes under a minute2Repair Windows errors before they cause bigger problems3Fix the driver behind crashes, sound loss and screen glitchesiTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more
Short answer: Pillaro can take over plugin-focused work such as step registration, deployment, and testing, but it is not a one-for-one replacement for everything spkl does. Keep spkl if it is stable and solving your needs; consider migrating when you have a concrete problem such as registration drift, difficult-to-maintain plugin classes, or missing integration tests.
Can Pillaro replace spkl?
Only for part of the workflow. Ján, the Pillaro maintainer, describes spkl as a broader Dataverse development task runner and Pillaro as focused on plugin structure, registration, deployment, and testing. That distinction matters: moving plugin registration does not automatically replace solution, model-generation, or web-resource tasks. The comparison is based primarily on the maintainer’s guide, which discloses his relationship to Pillaro; project documentation supports the runtime and testing details below.
| Responsibility | spkl | Pillaro | Migration implication |
|---|---|---|---|
| Assembly deployment | Included in the guide’s description of spkl’s scope. | Plugin deployment is within Pillaro’s focus. | Recreate and verify the deployment path rather than assuming existing commands transfer. |
| Plugin step registration | Attributes such as [CrmPluginRegistration] and configuration in spkl.json. |
Fluent registration through Register(IPluginRegistration registration). |
Translate each step and preserve its identity and metadata. |
| Filtering attributes and images | Supported through spkl registration attributes/configuration. | Supports filtering attributes and pre-/post-images. | Compare metadata in the target environment, not just source code. |
| Stale registration cleanup | The guide describes registration configuration but does not establish an equivalent desired-state cleanup behavior. | Can detect and remove obsolete registrations previously deployed by Pillaro when they are no longer declared. | Test cleanup in a non-production environment and do not assume Pillaro owns registrations created elsewhere. |
| Runtime organization | The cited guide does not describe an equivalent task-based runtime model. | Organizes plugin work into registered tasks with validation, execution, and recorded outcomes. | Expect code-structure and diagnostic changes, not just a registration rewrite. |
| Integration testing | No equivalent testing workflow is established in the cited guide. | Documents xUnit integration tests against a real Dataverse environment with deployed plugins. | Plan for environment, data setup, and cleanup as part of the test design. |
| Solutions, early-bound models, and web resources | The guide lists solution packing/unpacking, early-bound generation, and web-resource deployment among spkl’s tasks. | These are outside Pillaro’s stated plugin-centered focus. | Keep existing tooling or move suitable solution/model work to PAC CLI; handle web resources separately. |
What changes in plugin registration?
From attributes and configuration to declared desired state
With spkl, registration may be represented with [CrmPluginRegistration] attributes and settings in spkl.json. Pillaro uses a fluent Register(IPluginRegistration registration) API to declare the intended steps. Its registration model includes message, entity, pipeline stage, execution mode, filtering attributes, pre- and post-images, and execution rank. The Pillaro guide also describes the step ID as required: treat it as part of the registration contract and keep it stable across deployments.
An illustrative shape from the guide is:
Register(registration => registration
.For<MyPlugin>()
.WhenChanged("name")
.AtStage(PluginStage.PreOperation)
.Synchronous());
This is illustrative, not a promise that these exact method names or overloads match every version. Check the API for the template and package version you select. The guide describes WithFilteringAttributes(...) and WhenChanged(...) as filtering-attribute forms; verify which form is current for your chosen version. Record each step’s message, entity, stage, mode, filtering attributes, images, order, ID, and configuration before translating it.
#1 Best Overall
What happens to spkl.json?
Do not treat spkl.json as a file that Pillaro imports or converts. It belongs to the spkl workflow. Identify every task and setting that your project or CI/CD pipeline reads from it, then decide whether each is replaced by Pillaro, remains with spkl, or moves to another tool. Registration metadata must be recreated in Pillaro’s registration code; unrelated solution or web-resource configuration needs its own destination.
Will Pillaro remove old plugin steps?
Pillaro models its own declared registrations as desired state and can detect and remove obsolete registrations that Pillaro previously deployed when they are no longer declared. That is not a guarantee that it safely cleans up every registration in an environment. Establish which tool or process created each existing step, deploy to a test environment first, and inspect the result before enabling cleanup against production.
Rank #2
How does Pillaro change runtime behavior and diagnostics?
Pillaro’s documented execution flow resolves registered tasks that match the plugin context, instantiates them, validates them, executes valid tasks, and records outcomes. This makes the task boundary and validation result visible in the framework’s runtime model.
The Tool Desk
Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →- Validation fails before execution: the task is marked
NotValid, skipped, and later tasks continue. - Technical exception: the task is marked as an error and further task execution stops.
DataverseValidationException: documented as an expected, user-facing business outcome in the task log and surfaced through Dataverse exception handling.
When migrating a plugin class, identify which work belongs in separate tasks and which validations should prevent only one task from running. Add tests for both expected validation outcomes and technical failures; otherwise a structural migration can change how a failure affects later work.
Rank #3
What does Pillaro not replace?
Pillaro’s stated focus is plugins, not every Dataverse development operation. The maintainer guide identifies PAC CLI as a first-party alternative for solution management and model generation, while spkl’s scope also includes web-resource deployment and solution packing/unpacking. Split your pipeline by responsibility rather than removing spkl wholesale:
- Move plugin registration and deployment only after the Pillaro path is verified.
- Retain or replace solution and model-generation tasks separately; evaluate PAC CLI where it fits.
- Keep a deliberate path for web-resource deployment if your project uses it.
- Audit every spkl command in local scripts and CI/CD before removing the dependency.
How to migrate plugin registration from spkl to Pillaro
- Inventory the current state. List plugin assemblies and export or document existing steps. Capture message, entity, filtering attributes, pre-/post-images, execution stage and mode, execution order, IDs, and configuration values.
- Map each spkl responsibility. Find every
spklcommand in developer scripts and CI/CD. Separate plugin deployment and registration from solution, model-generation, and web-resource work; assign each remaining operation a clear owner. - Set up the Pillaro project and environment. The Visual Studio Marketplace template listing describes Logic, Plugins, and Tests projects, and says to import the Pillaro framework solution into the Dataverse environment for runtime features, configure the connection setting, and deploy with
pillaro-dv. Its listing states requirements of Visual Studio 2022 or 2026 and the .NET Framework 4.6.2 developer pack for the plugin assembly. NuGet lists Pillaro.Dataverse.PluginFramework 1.2.2 targeting .NET Framework 4.6.2 and notes single merged-assembly packaging. These requirements are version-sensitive: confirm them against the exact template and package versions selected. - Recreate registrations. Translate each step into Pillaro’s registration API. Keep stable step IDs and reproduce all relevant metadata, including images and filtering attributes. Review the current API documentation for exact syntax.
- Deploy to a non-production Dataverse environment. Deploy the framework and plugin changes there first. Compare the resulting registrations against your inventory, including steps that were not created by spkl or Pillaro.
- Exercise cleanup and critical behavior. Confirm which obsolete Pillaro-managed registrations are removed and that unrelated steps remain intact. Run representative plugin flows and inspect recorded outcomes for validation skips and technical failures.
- Add integration tests. Pillaro’s testing documentation describes xUnit tests against a real Dataverse environment with deployed plugins, test-data repositories, and cleanup. It specifies a test project targeting .NET 8 or later and references to the Logic project rather than the merged Plugins assembly. Use user secrets for local connection configuration; do not commit credentials.
- Update the pipeline and retire old deployment deliberately. Change CI/CD only after the test deployment and behavior comparison pass. Remove the spkl plugin-deployment path after verification, while retaining or replacing any spkl tasks that still serve solution, model, or web-resource work.
Do you still need PAC CLI?
Possibly. Pillaro is not presented as a replacement for solution management or model generation. The maintainer guide points to PAC CLI for first-party alternatives in those areas. If your current spkl setup handles those operations, evaluate them independently and preserve a working path until the replacement is tested. The right outcome may be Pillaro for plugin responsibilities and another tool for the rest, rather than a single-tool swap.
Rank #4
Should you migrate a stable spkl project?
Not by default. Ján’s maintainer-authored guide identifies active plugin development, dependency-upgrade blockers, registration drift, reliance on the Plugin Registration Tool to understand deployed state, a desire for automated stale-registration cleanup, hard-to-reason-about plugin classes, and a need for integration tests as reasons to evaluate Pillaro. These are decision signals from a Pillaro maintainer, not independently measured outcomes.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
The same guide says a mature project with pinned dependencies, reliable deployments, little ongoing plugin work, and no registration drift may be better left on spkl. Ján states: “The goal should be to remove a real problem, not to modernise code for appearance’s sake.” The guide’s comparison is maintainer-authored, and no comparative benchmark, migration success rate, or independently measured return on investment is established. Tie the migration to a specific problem and account for the code, pipeline, environment, and verification work it adds.
Quick Recap
Best Value
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

