fujiapple852/trippy
66.7
Adequate · 29 September 2026
28.8k
lines of production code
Rust
primary language
2
measurements over time
What this system is
Trippy is a network traceroute tool that provides both a terminal user interface and a reusable core library for tracing network paths. It supports ICMP, UDP, and TCP protocols across IPv4 and IPv6, offering detailed metrics such as loss, latency, and NAT detection. The system includes a customizable TUI for visualization and report generation, alongside a modular architecture that allows developers to integrate tracing capabilities into other applications.
Features
Add hello-world example using Trippy public API
A new hello-world example has been added to demonstrate the public API of the Trippy library. The example shows how to build and run a traceroute to a specified IP address (1.1.1.1) using the Builder pattern and print the results.
examples/hello-world · high confidence
Added toy-traceroute example
A new example application named 'toy-traceroute' has been added to demonstrate a basic traceroute implementation using the trippy core library. This example provides a simplified, BSD4.3-style traceroute tool for educational purposes, allowing users to trace network paths with configurable parameters such as TTL range, port, and interface.
examples/toy-traceroute · high confidence
New TUI frontend crate with customizable key bindings, columns, and theming
The \trippy-tui\ crate introduces a new terminal user interface that allows users to customize the application's appearance and interaction. Users can now configure a comprehensive set of keyboard shortcuts for navigation, settings, and privacy controls (such as \expand-privacy\ and \contract-privacy\), toggle the visibility and order of hops table columns (including new columns like ASN, DSCP, ECN, and NAT status), and apply detailed color themes to various UI components like the hops table, charts, and dialogs.
crates/trippy-tui/src/frontend · high confidence
New Trippy TUI application with comprehensive layout and visualization
This change introduces the \trippy-tui\ crate, providing a complete terminal user interface for the Trippy traceroute tool. The new TUI features a structured layout with a header (showing target, status, and clock), a body area that dynamically switches between a hops table, a ping history chart, a frequency histogram, and a geographic world map, and a footer for additional charts. It includes support for multiple trace targets via tabs, a navigable flow bar chart for visualizing individual trace flows, and an information bar displaying runtime configuration status (protocol, privacy, ASN lookup, etc.). The interface also features a blue screen of death for errors, a help dialog, and a detailed settings dialog with tabs for TUI, trace, DNS, GeoIP, bindings, theme, and column configuration.
crates/trippy-tui/src/frontend/render · high confidence
New report output formats in trippy-tui
The trippy-tui crate now includes a comprehensive set of report generators, allowing users to export trace data in multiple formats. New capabilities include CSV, JSON, DOT (graphviz), Markdown table, pretty table, flow listing, and silent (no-output) reports. The JSON report specifically includes start and end timestamps, NAT detection status, and TOS values for each hop, while the DOT report visualizes the network topology as a directed graph.
crates/trippy-tui/src/report · high confidence
New trippy-packet crate for network packet parsing and building
The \trippy-packet\ crate has been introduced to handle network packet wire format parsing and building. It provides structs and accessor methods for IP, ICMPv4, ICMPv6, IPv4, IPv6, UDP, TCP, and ICMP extension packets, along with checksum calculation functions for IPv4/IPv6 ICMP, UDP, and TCP. The implementation uses a \Buffer\ abstraction to manage mutable and immutable byte slices, ensuring network byte order (big-endian) is handled correctly while exposing host-byte-order accessors.
crates/trippy-packet · high confidence
New trippy-privilege crate for cross-platform privilege management
A new \trippy-privilege\ crate has been introduced to handle platform-specific privilege discovery and management for sending ICMP packets. It provides a \Privilege\ struct with methods to discover current privileges (\discover\), acquire necessary permissions (\acquire\_privileges\), and drop privileges (\drop\_privileges\). The implementation is cross-platform: on Linux, it manages \CAP\_NET\_RAW\ capabilities; on other Unix systems, it checks for root access; and on Windows, it verifies elevated process tokens. This change also includes updates to support \windows-sys@0.61.2\ and bumps the Minimum Supported Rust Version (MSRV) to 1.85 with an edition upgrade to 2024.
crates/trippy-privilege · high confidence
Trippy core library restructured with new public API and tracing capabilities
The \trippy-core\ crate has been refactored into a modular library with a new public API, introducing a \Builder\ for configuring tracers and exposing core types like \Tracer\, \State\, and \Round\. This update adds support for capturing DSCP and ECN values from probe responses, implements NAT detection for IPv4/UDP/Dublin strategy traces, and calculates forward and backward loss heuristics. The default initial sequence number for traces has changed to 33434, and the library now handles socket errors more gracefully to prevent crashes. Configuration options have been renamed, such as \tui-max-samples\ and \tui-max-flows\ becoming \max-samples\ and \max-flows\.
crates/trippy-core/src · high confidence
Removals
Removed placeholder main.rs entry point
The placeholder \src/main.rs\ file containing the default "Hello, world!" print statement has been removed from the source tree.
src · high confidence
Architecture
Trippy TUI application restructured into a dedicated crate
The Trippy TUI application has been reorganized into a new \crates/trippy-tui\ crate, consolidating the core application logic, configuration, and frontend rendering into a single, cohesive module. This change introduces a new entry point (\lib.rs\) that manages argument parsing, privilege handling, and action dispatching (such as printing themes, bindings, or shell completions). The \app.rs\ module now orchestrates the tracing lifecycle, including DNS resolution, GeoIP lookup initialization, and tracer spawning, while \frontend.rs\ handles the interactive terminal interface using \ratatui\. Additionally, the new structure includes dedicated modules for internationalization (\locale.rs\), GeoIP database parsing (\geoip.rs\), and report generation (\report.rs\), providing a cleaner separation of concerns for the TUI experience.
crates/trippy-tui/src · high confidence
Trippy restructured into a multi-crate workspace with a unified public API
The Trippy codebase has been split into multiple crates, introducing a new \trippy-tui\ crate for the terminal UI and a \trippy\ crate that serves as the main entry point and public API facade. The \trippy\ crate now re-exports core functionality (core, dns, privilege, packet) from their respective sub-crates, allowing users to depend on a single crate to access all features. The main binary simply delegates to \trippy\_tui::trippy()\, and a symlinked README ensures documentation consistency across the workspace.
crates/trippy · high confidence
Behavioural changes
DNS resolver configuration and resolution strategy overhaul
The DNS resolver now uses a dedicated \Config\ struct and \Builder\ to manage resolution settings, introducing a new \IpAddrFamily::System\ option that defaults to IPv4-then-IPv6 for non-system resolvers. The resolver supports multiple resolution methods (System, Resolv, Google, Cloudflare) and enforces a configurable time-to-live (TTL) for cached DNS entries. Additionally, the \DnsEntry\ type now exposes an iterator for resolved hostnames, and the underlying \dns-lookup\ dependency has been upgraded to version 3.0.1.
crates/trippy-dns · high confidence
New Ubuntu PPA build infrastructure targeting Resolute
The project now includes a dedicated \ubuntu-ppa\ directory containing the complete build system for Ubuntu Personal Package Archives. This replaces the previous Debian packaging setup and shifts the target distribution from Ubuntu Jammy/Noble to Resolute, utilizing Rust 1.88 for compilation. The new infrastructure includes a Dockerfile for reproducible builds, a \release.sh\ script that vendors dependencies to ensure offline builds, and standard Debian packaging files (control, rules, changelog) configured for the Resolute series.
ubuntu-ppa · high confidence
New localization infrastructure and sample config symlink
The TUI now uses a new in-tree localization system managed via a \locales.toml\ file and a \build.rs\ script, replacing the previous \rust-i18n\ dependency. This change introduces translation support for Traditional Chinese (zh-TW) and Japanese (ja) alongside existing languages, and adds a symlink for \trippy-config-sample.toml\ to simplify configuration distribution.
crates/trippy-tui · high confidence
Refactored network layer with new Channel abstraction and improved error handling
The network implementation in \crates/trippy-core/src/net\ has been restructured to replace the previous \TracerChannel\ with a new \Channel\ struct that manages probe dispatch and response reception for ICMP, UDP, and TCP protocols across IPv4 and IPv6. This change introduces dedicated configuration structs for IPv4 and IPv6, separating address and socket setup logic. Error handling has been refined to distinguish between \AddressInUse\ and \AddrNotAvailable\ conditions, and to prevent crashes on certain socket errors (such as double-close on Windows) by using a custom \ErrorKind\ and \ErrorMapper\ utility. Additionally, the code now supports setting TOS/TClass for IPv6 UDP probes and captures ICMP extensions (like MPLS labels) from probe responses.
crates/trippy-core/src/net · high confidence
Refactored network platform abstraction with cross-platform byte-order handling
The network platform implementation has been restructured into a modular, cross-platform abstraction. A new \byte\_order.rs\ module introduces runtime detection of IPv4 header byte-order requirements (host vs. network) for non-Linux Unix systems, ensuring correct packet construction across different OS versions. Platform-specific logic is now cleanly separated into \unix.rs\ and \windows.rs\, with the Windows implementation updated to use \socket2\ 0.6.0 and \windows-sys\ 0.61.2, including fixes for \WSARecvFrom\ flag handling and buffer safety. This refactoring improves reliability on Windows and ensures compatibility with diverse Unix-like systems by dynamically adapting to OS-specific socket behaviors.
crates/trippy-core/src/net/platform · high confidence
Trippy TUI configuration system restructured with expanded customization
The Trippy TUI configuration has been reorganized into a modular system within the \trippy-tui\ crate, introducing dedicated modules for bindings, columns, themes, and file parsing. Users can now customize keyboard shortcuts via the new \bindings\ configuration section, define the hops table columns using the \tui-custom-columns\ setting (which now supports additional columns like ASN, DSCP, ECN, and loss heuristics), and apply detailed color theming through the \theme\_colors\ section. Configuration files are read from standard locations including the XDG config directory (\$XDG\_CONFIG\_HOME/trippy/trippy.toml\), and all CLI options are now supported via environment variables.
crates/trippy-tui/src/config · high confidence
Test coverage
Added IPinfo sample database resources for testing; Added simulation-based integration tests for IPv4 and IPv6 tracing; Updated snapshot tests for CLI help, completions, and man page.
Dependencies
Trippy is restructured into a multi-crate workspace with optional feature flags
The project has been split from a single crate into a workspace containing \trippy-core\, \trippy-tui\, \trippy-dns\, \trippy-packet\, and \trippy-privilege\. The main \trippy\ binary crate now exposes optional features (\tui\, \core\, \privilege\, \dns\, \packet\) to allow users to build only the components they need, such as a headless library or a minimal TUI. The workspace also sets the Rust edition to 2024 and the MSRV to 1.88, and the binary is now explicitly named \trip\.
(dependencies) · high confidence
Housekeeping
Added spell-checking configuration and dictionary
A new spell-checking configuration file (.config/spellcheck.toml) and a custom dictionary (.config/trippy.dic) have been added to the project. This enables automated spelling checks for source code and documentation, ensuring consistency in technical terms and proper nouns specific to the Trippy application.
.config · 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 65 → 67 (+1.2)
- Rubric changed (rubric-2026.09.9 → rubric-2026.09.17) — scores are not directly comparable.
Lenses
- Code Health 89 → 89 (+0.0)
- Architecture 95 → 90 (-5.9)
- Maturity 56 → 56 (+0.0)
- Readiness 76 → 72 (-4.2)
- Security 61 → 72 (+11.2)
Resolved (2)
- Documentation: no usage examples (docs/src/content/docs/start/installation.md)
- Documentation: written for insiders
New (8)
- Dependency hygiene PARTLY measured — Cargo dependencies read, dependency currency not (crates.io unreachable)
- Documentation: no architecture or design documentation (docs/src/content/docs/guides/recommendation.md)
- Inconsistent construction patterns for configuration objects. The Builder types use a fluent build() method to produce a result, while the Config structs themselves expose public constructors (new) directly. This creates two ways to create the same immutable configuration objects, potentially leading to confusion about whether to use the builder or the direct constructor.
- Inconsistent naming and return types for DNS resolution operations. lookup returns a Result (implying potential failure), while reverse_lookup variants return DnsEntry directly (implying they never fail or handle errors internally). Additionally, the lazy_ prefix is used for some reverse lookups but not others, and the distinction between reverse_lookup and reverse_lookup_with_asinfo is not mirrored in the lazy variants' naming clarity (though they do exist). The primary issue is the inconsistent error handling contract between forward and reverse lookups.
- Low cohesion: TuiApp (LCOM4 4) (crates/trippy-tui/src/frontend/tui_app.rs)
- Off the main sequence: trippy-dns
- Off the main sequence: trippy-packet
- Off the main sequence: trippy-privilege
Changes since last survey
- 3 commits — 3 feature/other, 0 fixes
By area
- (root) — 2 commits
- .github/workflows — 1 commit
Notable commits
- change: chore: bump serde_with from 3.22.0 to 3.23.0
- change: chore: bump toml from 1.1.4+spec-1.1.0 to 1.1.6+spec-1.1.0
- change: ci: bump GitLab Windows runner to windows-2025
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
fujiapple852/trippy 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 12aca1478bb2d9c4b8e25aaf47616d9d0b3949ef — 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-705631bb727e.