nildiff 1.20.0
dotnet tool install --global nildiff --version 1.20.0
dotnet new tool-manifest
dotnet tool install --local nildiff --version 1.20.0
#tool dotnet:?package=nildiff&version=1.20.0
nuke :add-package nildiff --version 1.20.0
nildiff
.NET Global Tool for folder diff and release validation. Compares two folders and generates structured diff reports.
Install
dotnet tool install -g nildiff
Usage
# Compare two folders
nildiff "/path/to/old-folder" "/path/to/new-folder" "my-comparison" --no-pause
# Or omit the label to auto-generate a high-resolution timestamp
nildiff "/path/to/old-folder" "/path/to/new-folder" --no-pause
# Interactive wizard mode
nildiff --wizard
# Show help
nildiff --help
# Check IL disassembler detection
nildiff --doctor
Output
| File | Description |
|---|---|
diff_report.md |
Markdown report for archiving and text-based review |
diff_report.html |
Interactive single-file HTML report with sign-off workflow |
audit_log.json |
Structured audit log with SHA256 hashes |
Key Feature: IL-Level Comparison
For .NET assemblies (.dll, .exe), nildiff compares at the IL level rather than binary level, filtering out build-specific noise (MVID, timestamps). Functionally identical assemblies are reported as "unchanged" even when binary hashes differ due to non-deterministic builds.
Configuration
The tool works out of the box with default settings. To customize behavior, either create a user-local config.json in the default app-data location below or pass it via --config:
nildiff "/old" "/new" "label" --config /path/to/config.json
When the report label is omitted, nildiff auto-generates a high-resolution timestamp label. Tokens beginning with -- are treated as options, not report labels.
Individual settings can also be overridden via FOLDERDIFF_* environment variables (e.g. FOLDERDIFF_MAXPARALLELISM=8). For maintainer-only IL noise suppression, --creator applies the predefined buildserver-winforms ILIgnoreLineContainingStrings profile. See the annotated sample config for all available settings.
The default user-local config.json location varies by OS:
| OS | Path |
|---|---|
| Windows | %LOCALAPPDATA%\FolderDiffIL4DotNet\config.json |
| macOS | ~/Library/Application Support/FolderDiffIL4DotNet/config.json |
| Linux | ~/.local/share/FolderDiffIL4DotNet/config.json |
Note: This user-local config survives global-tool updates. If it does not exist, the tool falls back to the bundled
config.jsonnext to the executable.
By default, reports and logs are also written under the same user-local app-data root resolved from Environment.SpecialFolder.LocalApplicationData (Reports/ and Logs/).
Optional: IL Disassembler
For IL-level comparison, install an IL disassembler:
dotnet tool install -g dotnet-ildasm
Without an IL disassembler, .NET assemblies are compared by SHA256 hash only.
Run nildiff --doctor to verify whether dotnet-ildasm or ilspycmd is visible on PATH.
Requirements
- .NET SDK 8.0 or later
License
| 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 was computed. 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 was computed. 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. |
This package has no dependencies.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.20.0 | 99 | 5/10/2026 |
| 1.19.0 | 92 | 5/1/2026 |
| 1.18.3 | 102 | 4/29/2026 |
| 1.18.2 | 101 | 4/26/2026 |
| 1.18.1 | 105 | 4/20/2026 |
| 1.18.0 | 102 | 4/18/2026 |
| 1.17.2 | 101 | 4/17/2026 |
| 1.16.10 | 102 | 4/13/2026 |
| 1.16.9 | 103 | 4/12/2026 |
| 1.16.8 | 105 | 4/11/2026 |
| 1.16.7 | 100 | 4/11/2026 |
| 1.16.6 | 103 | 4/11/2026 |
| 1.16.5 | 102 | 4/11/2026 |
| 1.16.4 | 112 | 4/10/2026 |
| 1.16.3 | 111 | 4/9/2026 |
| 1.16.2 | 97 | 4/9/2026 |
| 1.16.1 | 108 | 4/8/2026 |
| 1.16.0 | 111 | 4/8/2026 |
| 1.15.0 | 96 | 4/8/2026 |