A modern, browser-based developer toolkit for Microsoft Dataverse — built to replace the legacy desktop Plugin Registration Tool with a lightweight web-first experience that runs directly inside your Power Platform environment.
The official Plugin Registration Tool is a Windows-only desktop app that requires installation, SDK binaries, and separate authentication. Dataverse Web DevTools brings the same capabilities to the browser — zero install, runs inside your Dynamics 365 / Power Platform environment using existing session auth, no app registrations needed.
- Browse all registered plugin assemblies, plugin types, and steps
- Upload new assemblies (
.dllfiles parsed in-browser) - Update existing assemblies with new versions
- View assembly metadata: version, isolation mode, source type, public key token
- Register new plugin steps with full configuration
- Smart message search — exact matches shown first, then prefix, then partial
- Entity/message/stage/mode selection with live lookups from your environment
- Filtering attributes with searchable attribute picker
- Execution order (rank), deployment scope, impersonation (Run in User's Context)
- Enable/disable steps with one click
- Unsecure configuration editing
- Async auto-delete toggle
- Register pre-images, post-images, or both on any step
- Configure entity alias, message property, and attribute selection
- Attribute picker pulls available columns from your environment
- Register, edit, and delete service endpoints and webhooks
- Full Service Bus support: Namespace Address, Queue/Topic/Event Hub, SAS Key & SAS Token auth
- Webhook support: HTTP Header, Webhook Key, HTTP Query String auth
- Message format (JSON / XML / .NET Binary) and User Information Sent configuration
- Register steps directly against service endpoints and webhooks
- Filter tree by type: Plugins / Webhooks / Endpoints
- Full trace log viewer with real-time filtering and sortable columns
- Filter by: time range, plugin type, message, entity, mode, errors only
- Cursor-based pagination (handles Dataverse's
plugintracelogsentity natively) - Click any row to see full details: execution times, trace output, exception details, correlation IDs
- Copy trace output to clipboard
- Delete individual trace logs
- At-a-glance stats: total logs, error rate, avg duration, P95/max duration
- Success/Error donut chart
- Duration distribution histogram
- Top plugins by execution count (with error overlay)
- Execution timeline with adaptive time bucketing
- Interactive tooltips on all chart elements
- View and change the org-level trace log setting (Off / Exception / All) directly from the trace log viewer
- By Assembly — traditional hierarchy: Assembly → Plugin Type → Step → Image
- By Entity — grouped by primary entity across all registered steps
- By Message — grouped by SDK message (Create, Update, Delete, etc.)
- Keyboard-navigable with expand/collapse all
- Real-time search filter across the tree
- Context menus with quick actions
The easiest way to get started — no build tools needed.
-
Download the latest managed solution from Releases
-
Go to your Power Platform environment → Settings → Solutions
-
Click Import and select the downloaded
.zipfile -
After import, access the tool using one of these methods:
Direct URL — open in your browser:
https://<your-org>.crm.dynamics.com/WebResources/nirmeron_/devtools/devtools.htmlEmbed in a Model-Driven App (recommended) — for the best experience, add the web resource to your app's sitemap or embed it as an iframe in any model-driven app page:
<iframe src="/WebResources/nirmeron_/devtools/devtools.html" style="width:100%;height:100%;border:none;"></iframe> ``` 2a34184 (Remove release folder from repo, add iframe embedding docs)
If you want to customize or contribute:
# Clone the repo
git clone https://github.com/nickmeron/Dataverse-Web-Devtools.git
cd Dataverse-Web-Devtools
# Install dependencies
npm install
# Build for production
npm run buildThe dist/ folder will contain three files to upload as Dataverse web resources:
| Build Output | Web Resource Name | Type |
|---|---|---|
dist/index.html |
nirmeron_devtools/devtools.html |
HTML |
dist/dataverse-devtools.js |
nirmeron_devtools/dataverse-devtools.js |
Script (JS) |
dist/dataverse-devtools.css |
nirmeron_devtools/dataverse-devtools.css |
Stylesheet (CSS) |
Note: The HTML file references
ClientGlobalContext.js.aspxfor session authentication. All three web resources must be at the same directory level in Dataverse for this to work.
Browser (Dynamics 365 / Power Platform)
└── Web Resource (devtools.html)
├── Same-origin session auth via ClientGlobalContext.js.aspx
├── Dataverse Web API (OData v4) — /api/data/v9.2/
│ ├── pluginassemblies
│ ├── plugintypes
│ ├── sdkmessageprocessingsteps
│ ├── sdkmessageprocessingstepimages
│ ├── serviceendpoints
│ ├── plugintracelogs
│ └── organizations
└── No external APIs or app registrations
Key design decisions:
- Zero-config auth — runs as a web resource inside Dynamics, inheriting the user's active session
- No backend — pure client-side SPA communicating directly with the Dataverse Web API
- No charting libraries — monitoring dashboard uses pure SVG for minimal bundle size
- Cursor-based pagination — Dataverse's
plugintracelogsentity doesn't support$skip, so we use@odata.nextLinkfor paging
| Layer | Technology |
|---|---|
| Framework | React 19 |
| Language | TypeScript 5.7 |
| Build Tool | Vite 6 |
| Styling | Tailwind CSS v4 |
| State Management | Zustand 5 |
| Data Fetching | TanStack React Query 5 |
| UI Primitives | Radix UI |
| Icons | Lucide React |
| Animations | Framer Motion |
| Notifications | React Hot Toast |
| Charts | Pure SVG (no library) |
src/
├── app/ # App shell, providers
│ ├── App.tsx # Main layout + routing
│ ├── AuthProvider.tsx # Xrm context initialization
│ └── QueryProvider.tsx # React Query setup
├── config/
│ └── constants.ts # Dataverse enums, labels, mappings
├── features/
│ ├── assemblies/ # Assembly upload/update
│ ├── auth/ # Xrm context service
│ ├── images/ # Pre/Post image management
│ ├── steps/ # Step registration, lookups
│ ├── trace-logs/ # Trace log viewer + monitoring
│ │ ├── components/
│ │ │ ├── TraceLogViewer.tsx
│ │ │ └── TraceMonitoringPanel.tsx
│ │ ├── hooks/
│ │ │ └── useTraceLogs.ts
│ │ └── stores/
│ │ └── traceLogStore.ts
│ └── tree-view/ # Registration tree + node rendering
├── shared/
│ ├── api/ # Dataverse client, endpoints, query keys
│ ├── components/ # Layout, DetailPanel, Dialogs, etc.
│ ├── stores/ # UI store (persist selected view, etc.)
│ └── types/ # TypeScript interfaces for Dataverse entities
└── styles/
└── globals.css # Tailwind base + custom theme
# Start dev server with hot reload
npm run dev
# Type-check and build
npm run build
# Lint
npm run lintLocal development note: The app requires
ClientGlobalContext.js.aspxfrom a live Dataverse environment. For local dev, you'll need to run it as a web resource in your environment or mock the Xrm context.
After building from source:
- Go to your Dataverse environment → Settings → Customizations → Web Resources
- Update each web resource with the corresponding file from
dist/ - Publish all customizations
- Hard-refresh the browser to clear cached scripts
Or if using the managed solution approach, export/import a new solution version.
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch (
git checkout -b feature/my-feature) - Commit your changes
- Push to the branch (
git push origin feature/my-feature) - Open a Pull Request
This project is licensed under the MIT License — see the LICENSE file for details.




