Skip to content
CAI
Software that uses CAICheck a score

gitui-org/gitui

70.2

Strong · 27 September 2026

43.6k

lines of production code

Rust

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Features

Add invalidstring library to create strings with invalid UTF-8 data

A new \invalidstring\ crate is introduced, providing an \invalid\_utf8\ function that uses unsafe code to append invalid UTF-8 bytes to a string. The implementation relies on \std::str::from\_utf8\_unchecked\ and suppresses the \invalid\_from\_utf8\_unchecked\ lint, while enforcing the \mismatched\_lifetime\_syntaxes\ lint.

invalidstring/src · high confidence

Add project configuration and documentation files

This change introduces several new configuration and documentation files to the repository. It adds a \.clippy.toml\ to set the MSRV to 1.88 and cognitive complexity threshold to 18, and a \tombi.toml\ to configure TOML formatting. It also adds an \.editorconfig\ for Rust indentation, a \rustfmt.toml\ for code formatting, and a \deny.toml\ for dependency auditing. Additionally, it updates \.gitignore\ to exclude release artifacts and IDE files, and adds \build.rs\ to embed build metadata into the binary. Documentation files such as \README.md\, \CHANGELOG.md\, \THEMES.md\, \KEY\_CONFIG.md\, \FAQ.md\, \CONTRIBUTING.md\, \NIGHTLIES.md\, and \vim\_style\_key\_config.ron\ are also added or updated to reflect the project's structure and usage.

(repo-wide) · high confidence

Add utility modules for scrolling, file tree, and log items

The src/components/utils directory now contains new modules: scroll\_horizontal.rs and scroll\_vertical.rs, which provide state management for horizontal and vertical scrolling in the UI. A new filetree.rs module introduces a hierarchical file tree structure with collapse/expand state management. A new logitems.rs module defines the LogEntry struct and ItemBatch for managing commit log data, including optional GitHub emoji conversion. A new emoji.rs module implements markdown-to-Unicode emoji replacement, gated by the 'ghemoji' feature. The mod.rs file exports these new modules and includes helper functions for time formatting and string width alignment.

src/components/utils · high confidence

Added scopetime timing macro for performance logging

A new \scopetime\ crate has been introduced, providing a \scope\_time!\ macro that measures and logs the execution time of code blocks. When the \enabled\ feature is active, the macro instruments the code to log the elapsed time in milliseconds along with the module path, title, file, and line number. If the feature is disabled, the macro expands to nothing, allowing for zero-cost performance instrumentation in production builds.

scopetime/src · high confidence

Customize keybinding and symbol display via config files

Users can now customize the visual symbols used for key hints (e.g., arrows, modifiers) and define custom keybindings through external configuration files (key\_bindings.ron and key\_symbols.ron). This allows for personalized navigation and control schemes, with the application falling back to default symbols and bindings if the files are missing or invalid.

src/keys · high confidence

Extracted git hooks functionality into a separate \`git2-hooks\` crate

The git hooks implementation has been extracted from the main codebase into a new, standalone \git2-hooks\ crate. This new module provides utilities for locating, validating, and executing git hooks (such as pre-commit, commit-msg, and pre-push) by resolving paths according to \core.hooksPath\ and standard git conventions. Users interacting with this library will now find the hook-related logic isolated in this dedicated crate, which exposes functions to check for hook availability and run them with proper environment handling.

git2-hooks · high confidence

Introduce AsyncJob abstraction for background tasks

The \asyncgit\ crate now includes a new \AsyncJob\ trait and \AsyncSingleJob\ struct, providing a framework for running asynchronous tasks on a thread pool. This addition allows background jobs to report intermediate progress updates and send arbitrary notifications, enabling more responsive and observable async operations within the application.

asyncgit/src/asyncjob · high confidence

Introduce dedicated components for commit details and commit comparison views

The commit details panel has been refactored into separate, dedicated components: \DetailsComponent\ for single-commit information and \CompareDetailsComponent\ for side-by-side commit comparisons. This structural change enables the UI to display a split view showing the differences between two commits, while also improving the rendering of individual commit metadata such as author, date, and message. The \CommitDetailsComponent\ now manages the layout to switch between these two states, providing a clearer separation of concerns for viewing commit history and comparing changes.

_src/components/commit\details · high confidence

Introduce filetreelist crate for file tree management

The filetreelist crate has been added to the repository, providing a new Rust library for managing file tree structures. This includes modules for error handling, file tree items, and tree iteration, enabling features like selection movement, collapsing/expanding directories, and visual selection tracking.

filetreelist/src · high confidence

Introduce new UI modules for scrolling, layout, and syntax highlighting

The \src/ui\ module has been restructured with new files to support advanced UI features. \stateful\_paragraph.rs\ and \scrollbar.rs\ add stateful text rendering and custom scrollbars. \scrolllist.rs\ provides a reusable list widget. \reflow.rs\ implements text wrapping and truncation logic. \syntax\_text.rs\ integrates \syntect\ for asynchronous syntax highlighting, allowing the UI to display colored code. \style.rs\ defines the \Theme\ struct and \SharedTheme\ type, centralizing color and style definitions for the application.

src/ui · high confidence

Introduction of the \`asyncgit\` crate for non-blocking Git operations

The \asyncgit\ crate has been introduced to provide non-blocking access to Git operations, allowing the GitUI to perform potentially slow Git operations in the background while keeping the user interface responsive. This new module includes asynchronous implementations for various Git operations such as blame, branches, commit files, diff, fetch, commit filtering, pull, push, push tags, remote tags, revision log, status, tags, and tree files. Each of these operations is now handled asynchronously, improving the overall responsiveness of the application.

asyncgit/src · high confidence

New branch merge strategies: fast-forward, merge-commit, and rebase

Users can now choose how to merge upstream changes into their local branch. The system supports three distinct merge strategies: a fast-forward merge that simply moves the branch pointer, a merge-commit that creates a new commit preserving history, and a conflict-free rebase that rewrites local commits on top of the upstream. These new capabilities are implemented in the \asyncgit/src/sync/branch\ module, with specific logic for each strategy in \merge\_ff.rs\, \merge\_commit.rs\, and \merge\_rebase.rs\ respectively.

asyncgit/src/sync/branch · high confidence

New git2-testing crate for test repository utilities

A new \git2-testing\ crate has been added to the repository, providing convenience functions for generating test repositories. It exposes utilities such as \repo\_init\, \repo\_init\_bare\, and \repo\_init\_suffix\ to create temporary Git repositories with configurable settings, along with a \sandbox\_config\_files\ function to isolate test environments from global Git configurations.

git2-testing · high confidence

New popups for blame, branch management, and file history

The application introduces several new interactive popups to enhance version control workflows. Users can now view file blame information in a dedicated BlameFilePopup, manage branches with a new BranchListPopup supporting checkout, merge, rebase, and delete operations, and inspect file history via the FileRevlogPopup. Additionally, a GotoLinePopup allows direct navigation to specific lines, while the FuzzyFindPopup provides a unified search interface for repositories. These components are implemented in src/popups/blame\_file.rs, src/popups/branchlist.rs, src/popups/file\_revlog.rs, src/popups/goto\_line.rs, and src/popups/fuzzy\_find.rs.

src/popups · high confidence

Support staging and discarding individual lines in tracked files

Users can now stage or discard specific lines from tracked files. This change introduces new functionality to interact with the Git index at a finer granularity, allowing users to selectively stage or unstage changes on a per-line basis, as well as discard specific lines from the working directory. The implementation includes dedicated modules for staging and discarding tracked files, along with comprehensive tests to ensure correct behavior.

asyncgit/src/sync/staging · high confidence

Architecture

Refactor components into dedicated modules

The component implementations have been reorganized into separate modules (e.g., changes.rs, commitlist.rs, diff.rs, status\_tree.rs, syntax\_text.rs, textinput.rs, and others), each containing the logic for that specific UI element. This change improves code organization and maintainability by grouping related functionality together.

src/components · high confidence

Refactor remote operations into a dedicated module

The remote synchronization logic has been reorganized into a new \asyncgit/src/sync/remotes\ module, splitting the previous flat structure into focused files: \callbacks.rs\ for handling Git callbacks and progress notifications, \push.rs\ for branch and tag push operations, and \tags.rs\ for tag-specific remote interactions. This refactoring improves code maintainability and separates concerns within the async Git client.

asyncgit/src/sync/remotes · high confidence

Refactor sync module into dedicated files and introduce caching for branch names

The \asyncgit/src/sync\ module has been restructured into separate, dedicated files for each Git operation, including commits, commit details, commit files, commit filtering, commit reverting, commit info, configuration, credentials, diffing, hooks, hunks, ignore rules, and log walking. Additionally, a new \BranchName\ struct has been added to cache the current branch name, improving performance for repeated lookups.

asyncgit/src/sync · high confidence

Restructure application entry point and core logic into modular components

The application's main entry point and core logic have been refactored into separate modules (app, args, input, queue, etc.) to improve code organization. This change introduces a more modular architecture where the \App\ struct, command-line argument processing, input handling, and event queue management are each isolated in their own files, making the codebase easier to maintain and extend.

src · high confidence

Behavioural changes

Restructure tab components into dedicated modules

The codebase for the \src/tabs\ directory has been refactored to improve modularity and maintainability. Each tab (Status, Revlog, Files, Stashing, StashList) is now encapsulated in its own file (e.g., \status.rs\, \revlog.rs\) with a corresponding module declaration in \mod.rs\. This change separates concerns, making it easier to manage the logic for each specific view and command set within the application.

src/tabs · high confidence

Windows installer now includes Visual C++ Redistributable

The Windows installer (wix/main.wxs) has been updated to automatically install the Visual C++ 2019 (v142) runtime. This ensures that users have the required runtime libraries installed on their system, preventing potential missing DLL errors when running the application.

wix · high confidence

Dependencies

Update git2-rs to 0.21 and migrate to Rust 2021 edition

The project has upgraded the git2-rs dependency to version 0.21, which includes support for SSH and HTTPS features. This update is accompanied by a migration to the Rust 2021 edition and an MSRV (Minimum Supported Rust Version) bump to 1.88. Additionally, the project has reorganized its workspace structure, introducing new internal crates such as \asyncgit\, \filetreelist\, \git2-hooks\, \git2-testing\, and \scopetime\ to better separate concerns and improve modularity.

(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 41 → 70 (+28.8)
  • Rubric changed (rubric-2026.08.15 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 100 → 87 (-12.6)
  • Architecture 99 (new)
  • Maturity 55 → 71 (+15.5)
  • Readiness 32 → 77 (+45.4)
  • Security 33 → 61 (+27.3)
  • Event Sourcing 100 (new)

Resolved (43)

  • Dimension evaluation failed
  • 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 23 more

New (327)

  • Ambiguous duplication: It is unclear if get_items and extract_items perform different operations (e.g., one returns a copy, the other moves/consumes) or if they are redundant aliases. In a consistent API, one should be removed or clearly distinguished by naming (e.g., get_items vs take_items).
  • App::event (cognitive 26) (src/app.rs)
  • App::event (cyclomatic 16) (src/app.rs)
  • App::process_internal_event (cognitive 16) (src/app.rs)
  • App::process_internal_event (cyclomatic 47) (src/app.rs)
  • BlameFilePopup::event (cognitive 29) (src/popups/blame_file.rs)
  • BlameFilePopup::event (cyclomatic 18) (src/popups/blame_file.rs)
  • BlameFilePopup::update_syntax (cognitive 16) (src/popups/blame_file.rs)
  • BranchListPopup::event (cognitive 32) (src/popups/branchlist.rs)
  • BranchListPopup::event (cyclomatic 27) (src/popups/branchlist.rs)
  • CI installs an unverified third-party binary (.github/workflows/cd.yml)
  • Change coupling: queue.rs ↔ strings.rs (src/queue.rs)
  • ChangesComponent::event (cognitive 19) (src/components/changes.rs)
  • ClassTooLong: App (src/app.rs)
  • ClassTooLong: BlameFilePopup (src/popups/blame_file.rs)
  • ClassTooLong: BranchListPopup (src/popups/branchlist.rs)
  • ClassTooLong: CommitList (src/components/commitlist.rs)
  • ClassTooLong: DiffComponent (src/components/diff.rs)
  • ClassTooLong: Revlog (src/tabs/revlog.rs)
  • ClassTooLong: Status (src/tabs/status.rs)
  • …and 307 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

gitui-org/gitui 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 27 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 2fa693cb6ed431b21ebc300dd02e83c2476699ce — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-7c1cb6328e11.