ultimateanu/hashdir
62.6
Adequate · 3 October 2026
1.9k
lines of production code
F#
with C#
2
measurements over time
What this system is
HashDir is a command-line utility for computing and verifying cryptographic and non-cryptographic hashes of directories. It supports multiple algorithms including XXHASH3, BLAKE3, and SHA variants, and allows users to ignore specific files using glob patterns. The tool provides real-time progress feedback and structured output, packaged as multi-platform binaries for Windows, macOS, and Linux.
Features
Added directory hashing utility with progress observation and glob-based ignore patterns
A new HashUtil module has been introduced to compute recursive hashes for directories. This feature supports ignoring files and folders using glob patterns, includes options to handle hidden files and empty directories, and provides real-time progress updates via an observer interface for file and directory hashing events.
HashUtil · high confidence
Automated release script for multi-platform binaries and NuGet packages
A new F\# script (make\_release.fsx) has been added to automate the build and packaging process for the application. It supports publishing single-file binaries for Windows (x86, x64, ARM64), macOS (x64, ARM64), and Linux (x64, ARM, ARM64), compressing them into ZIP or TAR.GZ archives. The script also handles creating NuGet packages and .NET publish archives, targeting the .NET 8 framework.
src · high confidence
Initial project scaffolding and documentation
This change establishes the foundational structure for the HashDir project, introducing the solution file with distinct App, HashUtil, and test projects, alongside a Makefile for build and test automation. It adds configuration files including .editorconfig for consistent code formatting (LF line endings, 80-char limit for F\#), .gitignore for standard .NET/F\# artifacts, and a Containerfile for a Podman-based development environment. The README is significantly expanded to include installation instructions (Homebrew, Scoop, AUR, NuGet), usage examples, and CI badges, while AGENTS.md provides an overview of the project's architecture and supported hashing algorithms.
(repo-wide) · high confidence
New HashUtil library with expanded algorithm support and verification capabilities
The src/HashUtil directory introduces a new library module that provides core hashing and verification logic for the tool. It adds support for additional hash algorithms, specifically RIPEMD160 (implemented in src/Checksums/ripemd160.cs), BLAKE3, XXHASH3, and CRC32, alongside existing SHA and MD5 variants. The library includes a verification engine (src/HashUtil/Verification.fs) that can validate file and directory hashes against expected values, supporting features like ignoring patterns, including hidden files or empty directories, and guessing the hash algorithm based on hash length or file extension. It also handles saving hash structures to versioned text files (src/HashUtil/Library.fs) and provides utilities for printing structured hash trees with optional colorization and line-ending normalization.
src/HashUtil · high confidence
Behavioural changes
Introduces interactive progress feedback and structured command-line interface
The application now provides real-time visual feedback during hashing and verification operations, displaying a spinning progress indicator, the count of processed files, and the name of the currently active file or directory on the error stream. This is supported by a new command-line interface built on System.CommandLine, which introduces distinct 'root' and 'check' verbs with options for saving hashes, printing tree structures, selecting hash algorithms, and controlling output verbosity and color. The default hashing algorithm has been changed to XXHASH3, and the tool now supports non-cryptographic hash types alongside standard cryptographic ones.
src/App · high confidence
New .NET 8 publish profiles for single-file and framework-dependent builds
Two new publish profiles have been added to configure release builds for the .NET 8 runtime. The 'binary' profile publishes a self-contained, single-file executable with ReadyToRun optimization, while the 'dotnet' profile publishes a framework-dependent deployment. Both profiles target the net8.0 framework.
src/App/Properties/PublishProfiles · high confidence
Test coverage
Added comprehensive test suite for HashUtil; Initial test suite for App.
Dependencies
Initial project structure and dependency setup for HashDir
The project is initialized with a new multi-project structure targeting .NET 8.0, including the main \App\ executable, the \HashUtil\ library, and a \Checksums\ library, along with corresponding test projects (\App.Tests\, \HashUtil.Tests\). Key dependencies introduced include \System.CommandLine\ for command-line parsing, \Blake3\ and \System.IO.Hashing\ for hashing operations, and \Glob\ for file pattern matching. The build configuration enables trimming and ready-to-run publishing for the main app, while test projects are set up with xUnit, Microsoft.NET.Test.Sdk, and Coverlet for code coverage.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 63 → 63 (+0.1)
- Rubric changed (rubric-2026.09.13 → rubric-2026.10.1) — scores are not directly comparable.
Lenses
- Code Health 99 → 99 (+0.0)
- Architecture 95 → 98 (+3.0)
- Maturity 66 → 66 (+0.0)
- Readiness 51 → 51 (+0.0)
- Security 80 → 80 (+0.0)
- Performance 70 → 70 (+0.0)
Resolved (5)
- Documentation: no licence statement (README.md)
- Documentation: no usage examples (README.md)
- redundant comment (src/Checksums/ripemd160.cs)
- redundant comment (src/Checksums/ripemd160.cs)
- redundant comment (src/Checksums/ripemd160.cs)
New (3)
- No test project references Checksums (src/Checksums/Checksums.csproj)
- redundant comment (src/Checksums/ripemd160.cs)
- redundant comment (src/Checksums/ripemd160.cs)
Architecture
- Unchanged — 0 containers · 1 contexts · 0 edges
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
ultimateanu/hashdir was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 3 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit b6497fdcb3e89693151977ddbd8eb23720616b7f — the exact code this score is about.
- Scored under rubric-2026.10.1 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-4f4226d619ea.