Skip to content

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:

  1. scripts/docs-make-demo-hars.py writes 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 its log.comment.
  2. docs/user-guide/_meta/captures.txt lists 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 in docs/user-guide/_meta/outputs/.
  3. A page marks a block with <!-- output: name.txt -->, and scripts/docs-embed.py writes the block from the capture.
  4. scripts/docs-check.py verifies 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, wiretrail only 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.