XrmToolSuite.TechnicalDebtAnalyzer
1.2026.7.12
dotnet add package XrmToolSuite.TechnicalDebtAnalyzer --version 1.2026.7.12
NuGet\Install-Package XrmToolSuite.TechnicalDebtAnalyzer -Version 1.2026.7.12
<PackageReference Include="XrmToolSuite.TechnicalDebtAnalyzer" Version="1.2026.7.12" />
<PackageVersion Include="XrmToolSuite.TechnicalDebtAnalyzer" Version="1.2026.7.12" />
<PackageReference Include="XrmToolSuite.TechnicalDebtAnalyzer" />
paket add XrmToolSuite.TechnicalDebtAnalyzer --version 1.2026.7.12
#r "nuget: XrmToolSuite.TechnicalDebtAnalyzer, 1.2026.7.12"
#:package XrmToolSuite.TechnicalDebtAnalyzer@1.2026.7.12
#addin nuget:?package=XrmToolSuite.TechnicalDebtAnalyzer&version=1.2026.7.12
#tool nuget:?package=XrmToolSuite.TechnicalDebtAnalyzer&version=1.2026.7.12
๐งน Technical Debt Analyzer
An XrmToolBox plugin that scans a connected Dataverse environment with eight UI-free analyzers, scores the accumulated technical debt on a 0โ100 scale with a Low/Medium/High band, and lists prioritized cleanup findings in a severity-coloured grid. Read-only โ it queries metadata, plugin registration, web resources, processes and roles, and never modifies anything.
Features
The eight analyzers cover the main debt sources; each degrades a failed query or permission gap to an informational finding rather than aborting the scan.
| Analyzer | What it flags |
|---|---|
| Unused metadata | Custom tables with 0 rows (Medium); very wide custom tables (โฅ 200 custom columns, Low) |
| Duplicate artifacts | Web resources that share a display name (Low) |
| Deprecated API | JS web resources referencing Xrm.Page, crmForm, the 2011 /Organization.svc endpoint, getServerUrl or XMLHttpRequest (Medium) |
| Orphaned components | Draft processes never activated (Low) |
| Dead plugins | Disabled steps (Low), plugin types with no steps (Low), assemblies with no stepped type (Medium) |
| Performance | Active steps on RetrieveMultiple (High); synchronous Update steps with no filtering attributes (Medium) |
| Naming violations | Default new_ publisher prefixes on tables/columns (Low); undocumented custom tables (Info) |
| Security | "Copy of โฆ" roles (Low); secured-column sprawl (Info) |
- Debt score: severities are weighted (Critical=25 / High=12 / Medium=5 / Low=2 / Info=0), summed and capped at 100, and banded at 15 (Medium) / 40 (High). Debt accumulates โ a single Critical does not force the High band.
- Dashboard: a score + band header, a headline metric strip (total findings plus a per-category breakdown), and a detail pane per finding (component, description, recommendation, docs link).
- Trends tab: charts the debt score run-over-run per environment from local per-machine JSON snapshots (a dependency-free GDI line chart, a "since last run" delta banner, and a confirmation-gated Clear history action). Trend history is local only โ the tool never writes to the org.
Exports
- Excel workbook
- PDF report (native, MigraDoc/PdfSharp-GDI)
- HTML dashboard
- JSON
- Markdown cleanup checklist
- An executive summary โ offline-templated by default, with an auditable, opt-in AI path
- The Trends tab additionally exports the snapshot series to CSV/JSON
Help & Support
A right-aligned Help button on the toolbar opens a Help & Support dialog (Documentation, Report an
issue, and a support link, each opened in the browser). The tool implements IHelpPlugin and
IGitHubPlugin pointing at repository kkora/XrmToolSuite, so
XrmToolBox's own tool-menu links resolve to the same project.
Build & install
This tool is not single-DLL โ it ships the Excel/PDF export dependency chain (ClosedXML + PdfSharp/MigraDoc-GDI) into the Plugins root next to the tool DLL. The one-step build copies the whole chain automatically:
dotnet build src\Tools\XrmToolSuite.TechnicalDebtAnalyzer\XrmToolSuite.TechnicalDebtAnalyzer.csproj -c Release -p:DeployToXTB=true
Restart XrmToolBox and open Technical Debt Analyzer. For a manual copy to another machine, copy
every DLL from the tool's bin\Release\net48\ folder โ flat in the Plugins root, never a subfolder,
or XrmToolBox silently drops the tool. See ./DEPLOYMENT.md and the suite guide
Deployment_Guide_XrmToolBox.md.
Usage
- Connect to your Dataverse environment.
- Open Technical Debt Analyzer; tick which analyzers to run (the unchecked set persists).
- Run the scan โ analysis runs on a background worker with progress and cancellation.
- Review the severity-coloured findings grid and the dashboard; click a finding for its detail pane.
- Export to Excel / PDF / HTML / JSON / Markdown, and open the Trends tab to see the score over time.
Notes & limitations
- Read-only โ never modifies the environment. Trend history is stored as local per-machine JSON under the XrmToolBox Settings folder (capped to the most recent 100 runs per environment); Clear history is confirmation-gated.
- Per-entity row probing is capped (400 by default); the cap is reported as an Info finding when hit.
- The optional AI executive summary is opt-in behind a session-only API key that is never persisted, and a payload-preview consent dialog shows the anonymized JSON before anything is sent. Component names in the payload are toggleable.
- Local models (Ollama): run the summary against a local model โ no API key, nothing leaves the machine.
- Install:
winget install Ollama.Ollama(or ollama.com/download). Ollama serveshttp://localhost:11434automatically; start it manually withollama serveif needed. - Pull a model:
ollama pull qwen2.5:7b(alsogemma3:4b,llama3.2:3b,qwen2.5-coder:7b).ollama listshows installed models,ollama psshows loaded ones,ollama run <model> "hi"warms one up. - AI settings โธ Provider =
Ollama (local), Model =qwen2.5:7b, leave API key blank. The first request loads the model (waits up to 5 min); if Ollama isn't running it falls back to the offline summary.nomic-embed-textis an embedding model โ use a chat model (qwen2.5/gemma3/llama3.2).
- Install:
- System Customizer or higher is recommended for full results.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET Framework | net48 is compatible. net481 was computed. |
-
- XrmToolBox (>= 1.2025.10.74)
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.2026.7.12 | 128 | 7/11/2026 |
| 1.2026.7.11 | 95 | 7/11/2026 |
| 1.2026.7.10 | 100 | 7/11/2026 |
| 1.2026.7.9 | 105 | 7/11/2026 |
| 1.2026.7.8 | 111 | 7/11/2026 |
| 1.2026.7.7 | 99 | 7/11/2026 |
| 1.2026.7.6 | 107 | 7/10/2026 |
| 1.2026.7.5 | 103 | 7/9/2026 |
| 1.2026.7.3 | 103 | 7/7/2026 |
| 1.2026.7.2 | 105 | 7/5/2026 |
1.2026.7.12: The executive summary now renders with proper line breaks.