o2sh/onefetch
64.9
Adequate · 29 September 2026
5.2k
lines of production code
Rust
primary language
2
measurements over time
What this system is
Onefetch is a command-line utility that generates and displays ASCII art representations of repository statistics, including language breakdowns, commit history, and dependency information. It supports multiple output formats such as plain text, JSON, and YAML, and can render inline images in compatible terminal emulators. The system parses project manifests for both Rust and Node.js projects to provide comprehensive metadata and visual summaries.
How it got here
2018–2021 — Initial scaffolding and modular refactoring
6 changes.
The project established its foundational structure and released the initial version of the onefetch CLI tool, featuring customizable repository statistics and terminal output. Subsequent work focused on modernizing the Rust toolchain and refactoring the internal architecture into modular, trait-based components to improve flexibility and maintainability.
2022 — Manifest parsing and image rendering
6 changes.
The project introduced a new manifest parsing library to support Cargo and Npm projects, alongside a comprehensive suite of integration and snapshot tests for repository states and manifest detection. Additionally, terminal image rendering capabilities were added, enabling inline image display via Sixel, Kitty, and iTerm2 protocols.
2023–2026 — modularization and metrics expansion
9 changes.
The project refactored its architecture by extracting ASCII rendering into a standalone crate and restructuring the printer module with a factory pattern. Concurrently, it expanded core functionality by introducing a new git metrics module for detailed commit and churn analysis, alongside a web preview site for visualizing language icons.
Features
Add onefetch web preview site
A new SvelteKit-based website has been added to display ASCII previews for all programming languages supported by onefetch. The site allows users to browse language logos, filter them by type, toggle between dark and true-color modes, and copy the ASCII art to their clipboard. It also fetches and displays the latest release information from GitHub.
site · high confidence
Add script to preview and validate Nerd Fonts icons
A new Ruby script (scripts/nf-preview.rb) has been added to preview and validate Nerd Fonts icons. The script reads a YAML file (defaulting to languages.yaml) containing language attributes, extracts the icon field, validates that it is in the correct Unicode escape format (e.g., \\u{XXXX}), and prints the corresponding glyph for each language. This allows users to quickly verify that their icon definitions are correctly formatted and render as expected.
scripts · high confidence
Add terminal image rendering support for Sixel, Kitty, and iTerm2
The application now supports displaying inline images in compatible terminal emulators. This change introduces a new image backend module that implements rendering for three protocols: Sixel (with color reduction and dithering), Kitty (using the Kitty Graphics Protocol with chunked transmission), and iTerm2 (using inline file protocol). The system automatically detects the best available backend at runtime, falling back to none if no supported terminal is detected, and allows users to explicitly select a protocol via configuration.
image/src · high confidence
Extract ASCII art rendering to a standalone crate
The ASCII art display logic has been extracted from the main application into a new, standalone crate named \onefetch-ascii\. This change provides a public API for rendering ASCII templates with color support and automatic width truncation, allowing the core functionality to be reused or tested independently of the main binary.
ascii · high confidence
Initial project scaffolding and configuration
The repository has been initialized with essential configuration files to standardize development and build processes. This includes an \.editorconfig\ for consistent code formatting (indentation, line endings), a \.rustfmt.toml\ setting the Rust edition to 2024, and a \Makefile\ with targets for building, installing, and releasing the application. Additionally, a \build.rs\ script is introduced to generate language definitions from \languages.yaml\ using the Tera templating engine, and a \renovate.json\ file is added to automate dependency updates for Cargo, GitHub Actions, and the site's npm dependencies.
(repo-wide) · high confidence
Initial release of onefetch CLI tool
This entry introduces the onefetch command-line utility, which displays repository statistics including language breakdown, commit history, authors, and license information. The tool features customizable ASCII art logos, image support via various terminal protocols, and flexible output formatting (including JSON and YAML). Users can control displayed information via flags such as --disable, --no-merges, and --exclude, and can generate shell completions for their preferred shell.
src · high confidence
Introduce git metrics module for commit and churn analysis
A new \src/info/git\ module has been added to compute repository statistics, including commit counts by author and file path, total author and commit counts, and churn metrics. The implementation uses the \gix\ library to traverse the commit graph and calculates churn in a separate thread, allowing it to run concurrently with traversal and stop early if a configured pool size is reached. It also supports filtering out bot commits via a regex pattern and excludes merge commits when requested.
src/info/git · high confidence
New manifest parsing library for Cargo and Npm projects
A new \manifest\ crate has been added to provide structured parsing of project manifests. It supports both Cargo (\Cargo.toml\) and Npm (\package.json\) formats, extracting key metadata such as name, version, description, license, and the number of dependencies. The library uses \cargo\_toml\ for Rust projects and \serde\_json\ for Node.js projects, exposing a unified \Manifest\ struct and a \get\_manifests\ function to discover and parse manifests from a given directory.
manifest/src · high confidence
Behavioural changes
2 commits (0 fixes) modifying resources
A change to existing behaviour in resources — 2 commits, 1 file.
resources · medium confidence · unverified
Default to terminal foreground color for tilde, underline, colon, and info text
The UI now uses the terminal's default foreground color for decorative elements (tilde, underline, colon) and informational text when no custom color is specified, instead of a hardcoded color. This change is implemented in the new \src/ui/text\_colors.rs\ module, which defines the \TextColors\ struct and its \new\ method to handle color fallbacks, and is supported by unit tests in \src/ui/mod.rs\ that verify the correct color assignment for these specific UI components.
src/ui · high confidence
New info field styling and future date handling
The \src/info/utils\ module now includes a new \InfoField\ trait that standardizes how info items are styled and written, supporting specific types like Churn and LinesOfCode. Additionally, time formatting logic has been updated to gracefully handle future commit dates (displaying them as 'in X time') without panicking, and number formatting now supports configurable separators.
src/info/utils · high confidence
Refactor info module into modular, trait-based components
The \src/info\ module has been restructured to replace the previous monolithic implementation with a modular architecture where each information field (such as Authors, Churn, Commits, Contributors, Created, Dependencies, Description, Head, Last Change, License, Lines of Code, Pending, Project, Size, Title, URL, and Version) is now a distinct, serializable struct implementing the \InfoField\ trait. This change introduces a builder pattern for constructing the \Info\ object, allowing for more flexible composition and easier testing of individual fields, while maintaining the same user-facing output.
src/info · high confidence
Refactored language detection and info display into a modular, trait-based system
The language information module has been restructured to use a new \InfoField\ trait, allowing for more flexible composition of repository statistics. This change introduces a dedicated \LanguagesInfo\ struct that handles the calculation of language percentages, the rendering of colored language bars, and the display of language-specific icons (including Nerd Font support). The underlying language definitions are now generated from a Tera template, enabling easier addition of new languages and customization of colors and ASCII art. Additionally, the module now supports filtering languages by type (Programming, Markup, Prose, Data) and allows users to limit the number of languages displayed in the summary.
src/info/langs · high confidence
Refactored printer into a factory pattern with explicit output type selection
The printer module has been restructured to use a \PrinterFactory\ that constructs specific \Printer\ instances (Plain, JSON, YAML, ASCII, or Image) based on CLI options. This change centralizes the logic for selecting the output format and handling image/ASCII rendering backends, ensuring that the correct printer type is instantiated for the user's requested output style.
src/ui/printer · high confidence
Test coverage
Add fixture scripts for specialized Git repository scenarios; Added benchmark for repository information retrieval; Added integration tests for various repository states; Added snapshot tests for author info alignment; Added snapshot tests for repository info output; Added tests for Cargo and NPM manifest detection.
Dependencies
Updated Rust dependencies and toolchain to 2024 edition
The project has updated its Rust dependencies to their latest versions, including gix (0.87.1), clap (4.6.7), and serde (1.0.229), and migrated the Rust edition to 2024 with a minimum supported Rust version (MSRV) of 1.88.0. This also includes updates to the site's npm dependencies for the web interface.
(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
This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.
Score
- CAI 70 → 65 (-5.2)
- Rubric changed (rubric-2026.09.8 → rubric-2026.09.17) — scores are not directly comparable.
Lenses
- Code Health 99 → 99 (+0.0)
- Architecture 100 → 94 (-6.2)
- Maturity 63 → 63 (+0.0)
- Readiness 80 → 58 (-22.6)
- Security 70 → 74 (+4.6)
- Accessibility 73 → 73 (+0.0)
Resolved (3)
- Documentation: no installation or build instructions (README.md)
- Documentation: written for insiders
- Off-boarding risk: anonymized user #1
New (27)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- …and 7 more
Changes since last survey
- 14 commits — 14 feature/other, 0 fixes
By area
- (root) — 11 commits
- site/package-lock.json — 2 commits
- .github/workflows — 1 commit
Notable commits
- change: Update Elixir colors to the official brand color (#1868)
- change: chore(deps): Update Rust crate anyhow to 1.0.104 (#1820)
- change: chore(deps): Update Rust crate byte-unit to 5.2.6 (#1860)
- change: chore(deps): Update Rust crate cargo_toml to 1.0.1 (#1857)
- change: chore(deps): Update Rust crate rstest to 0.27.0 (#1858)
- change: chore(deps): Update Rust crate rustix to 1.1.5 (#1865)
- change: chore(deps): Update Rust crate serde to 1.0.229 (#1833)
- change: chore(deps): Update Rust crate tera to 2.4.0 (#1861)
- change: chore(deps): Update actions-rust-lang/setup-rust-toolchain action to v2 (#1867)
- change: chore(deps): Update clap (#1864)
- change: chore(deps): Update site (#1866)
- change: chore(deps): Update site (#1869)
- change: chore(deps): Update tokei to version 15 (#1862)
- change: update email
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
o2sh/onefetch 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 29 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit bafc87a5c5389afcec654f107bdad7895ce125be — the exact code this score is about.
- Scored under rubric-2026.09.17 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-70910855e4b4.