About WireTrail¶
The project¶
WireTrail is a free, open-source command-line analyzer for HAR network captures. It is licensed under the MIT License.
| Source | github.com/johnneerdael/wiretrail |
| Releases and binaries | GitHub releases |
| Crate | crates.io/crates/wiretrail |
| Issues | GitHub issues |
| Author | John Neerdael |
Where it comes from¶
WireTrail began as a fork of har-rs, a Rust crate whose HAR 1.2 and 1.3 type definitions it still ships in its library crate. The command-line program does not use them. WireTrail replaced the parse path with a memory-mapped, single-pass loader and added the analysis commands on top. What's new lists the releases.
It is the sibling of HeapTrail, the author's analyzer for heap dumps, and shares its design: one command per question, deterministic output, JSON for machines and agents, and no window to click through.
WireTrail is an independent project. It is not affiliated with Chrome DevTools, Charles, Proxyman, HTTP Toolkit or mitmproxy, which this guide names so that you can find your way to an export.
What it is built with¶
WireTrail is written in Rust. It uses clap for the command line, serde and serde_json for reading and writing JSON, memmap2 to map the capture, chrono for dates, url for URLs, regex for search --regex,
ahash for fast hash maps, and a YAML library for the configuration file.
Brand and typefaces¶
The WireTrail name, mark and colors come from the WireTrail brand kit. This guide is set in Space Grotesk for headings, Inter for text and IBM Plex Mono for commands and output. The site serves them itself, under the SIL Open Font License, and the license notices are published with them: Space Grotesk, Inter and IBM Plex Mono.
Test files¶
The repository's tests use two small captures from Charles in tests/fixtures/, and a hand-written one in tests/redaction_fixtures/. The guide's own examples use three demo captures and eleven small ones, all generated by
scripts/docs-make-demo-hars.py. See Follow along with the demo captures.
Contributing¶
Issues and pull requests are welcome. Before you open a pull request:
cargo fmt --all -- --check
cargo test
cargo clippy --workspace --all-targets --all-features -- -D warnings
CI runs the same three.
Working on this guide¶
The guide is built with MkDocs and the Material theme. Its sources are in docs/user-guide/, and the configuration is mkdocs.yml.
python3 -m venv .venv
.venv/bin/pip install -r docs/site-requirements.txt
.venv/bin/mkdocs serve # live preview at http://127.0.0.1:8000
.venv/bin/mkdocs build --strict # what CI runs; must pass
python3 scripts/docs-check.py # checks the pages against the tool
Every block of command output in the guide is generated from a real run, so it cannot drift from what WireTrail prints:
scripts/docs-make-demo-hars.pywrites the demo captures. It draws no random numbers, so it writes the same bytes every time. The captures are synthetic, and each says so in itslog.comment.docs/user-guide/_meta/captures.txtlists the commands.scripts/docs-workdir.sh <workdir>builds a folder where the files have the short names the guide uses,scripts/docs-capture.sh <workdir>runs the commands in it, and the output lands indocs/user-guide/_meta/outputs/.- A page marks a block with
<!-- output: name.txt -->, andscripts/docs-embed.pywrites the block from the capture. scripts/docs-check.pyverifies that every quoted line exists in a capture, that every flag is a real flag, that the command shown is the one that produced the output, that the home page terminal is real output, and that the navigation and the files agree. It also enforces the naming rule: WireTrail in prose,wiretrailonly as the command.
Everything the captures need is committed, so a fresh clone can regenerate them. scripts/docs-measure.py re-measures the figures on Performance. docs/user-guide/_meta/ holds the style guide, the brand notes
and the release-notes format. It is not published.
Related¶
- FAQ answers common questions.
- What's new lists the releases.
- Limitations lists what WireTrail does not do.