Skip to main content

treadmark — File Integrity Forensics for Linux & Windows

A treadmark is a stack of stones placed by trail-walkers to mark "I was here, and the ground was solid." This tool does the same thing for your filesystem: capture a known-good baseline of file hashes, metadata, and (optionally) text content. Later, when something happens, run a scan to see exactly what changed.

treadmark is a forensic tool, not a continuous monitor. You reach for it when:

  • The EDR fired and you need to know what touched the system
  • A user reports "the binary feels different"
  • An auditor needs proof /etc/sudoers matches the approved version
  • You're inheriting a server and want to see what the previous owner left behind
  • Something is wrong and you need a list of facts about what's different from last week

If you want continuous monitoring with real-time alerting, who-data attribution, and a SIEM dashboard, run Wazuh or a commercial HIDS. treadmark fits in the gap where you want a single binary, no agent, no central server, and human-readable answers.

Single binary. No agent. No daemon. Same idea as AIDE / Tripwire with a saner package story and unified diffs of changed config files.

Install

Pick one — they all give you the same treadmark command.

Target Artifact Install
Debian / Ubuntu .deb sudo apt install ./treadmark_X.Y.Z_amd64.deb
RHEL / Rocky / Fedora .rpm sudo dnf install ./treadmark-X.Y.Z-1.x86_64.rpm
Locked-down Linux server single binary drop treadmark-linux-x86_64 on the host
Windows .msi msiexec /i treadmark-X.Y.Z.msi /qb
Dev / pipx wheel pipx install ./treadmark-X.Y.Z-py3-none-any.whl

Artifacts come from the GitHub Releases page, signed with SHA256SUMS.

Folder layout

The installers create FHS-compliant locations:

Purpose Linux Windows
Binary /usr/bin/treadmark C:\Program Files\Treadmark\treadmark.exe
Config /etc/treadmark/treadmark.yaml C:\ProgramData\Treadmark\treadmark.yaml
Baseline DB /var/lib/treadmark/baseline.db C:\ProgramData\Treadmark\baseline.db

The config and baseline are preserved on uninstall and upgrade — operators have tuned them, the package manager doesn't get to clobber them.

The two-step workflow

treadmark has exactly one operating model:

1. Capture baseline → 2. Run scan when investigating → (optional) update baseline
# On a known-good system, capture the baseline:
sudo $EDITOR /etc/treadmark/treadmark.yaml          # decide what to monitor
sudo treadmark files init --config /etc/treadmark/treadmark.yaml

# Save the baseline's provenance to your runbook (chain-of-custody):
sudo treadmark baseline info --config /etc/treadmark/treadmark.yaml > runbook/baseline-$(hostname).txt

# Later, when investigating: run a scan to see what changed:
sudo treadmark files scan --config /etc/treadmark/treadmark.yaml --report drift.md

That's it. No daemon, no scheduling, no reconciliation loop. See docs/forensic-workflow.md for the full investigation guide.

Unified diffs of changed configs

The default config enables store_content: true, which gzip-stores the contents of small text files in the baseline. When a config file changes, the scan shows you the actual diff:

~ /etc/ssh/sshd_config
    · content sha256 2f09c298cbfd…→f5ae63c1f343…
    --- baseline:/etc/ssh/sshd_config
    +++ current:/etc/ssh/sshd_config
    @@ -1,4 +1,5 @@
    -PermitRootLogin no
    -PasswordAuthentication no
    +PermitRootLogin yes
    +PasswordAuthentication yes
     PubkeyAuthentication yes
    -Port 22
    +Port 2222
    +PermitEmptyPasswords yes

That's the difference between something changed and the server was hardened backwards.

There's a privacy tradeoff (the baseline now contains snapshots of your config files) — see docs/forensic-workflow.md for the full discussion. Set store_content: false to disable.

Subcommands

treadmark files       init|scan|update|verify       Filesystem snapshot + drift detection
treadmark registry    init|scan|update|verify       Windows registry baseline (Win only)
treadmark all         init|scan|update|verify       files + registry sequentially
treadmark baseline    info                          Provenance dump for chain-of-custody
treadmark compare     against <golden.db>           Compare host to a reference baseline
treadmark compare     baselines <a.db> <b.db>       Compare two baselines, no FS walk

scan exits 0 if the host matches the baseline, 1 if anything changed, 2 on error. Useful in scripts but not the point — the report content matters more.

Output formats

treadmark files scan writes seven formats:

Flag Format When
(default) colorized terminal reading on a TTY
--report drift.json JSON document jq, scripts, ad-hoc analysis
--report drift.ndjson newline-delimited JSON Splunk / Datadog / Elastic ingest
--report drift.csv CSV (one row per change) Excel, ServiceNow, audit packs
--report drift.sarif SARIF GitHub Code Scanning
--report drift.md Markdown tickets, postmortems, Slack pastes
--report drift.html self-contained HTML email, audit packets
--report drift.txt plain text grep, archive, copy anywhere

See docs/output-formats.md for the full guide and automation recipes.

Building from source

CI is the source of truth (.github/workflows/release.yml); local builds are best-effort. Releases are automated via Conventional Commits — see CONTRIBUTING.md. Every merge to main with a feat: or fix: commit cuts a release with all artifacts attached.

To reproduce locally:

# Linux (needs python3, dpkg-deb, rpmbuild)
bash scripts/build-linux.sh
# → dist/{*.whl, treadmark-linux-*, *.deb, *.rpm}

# Windows (needs Python 3.9+ and .NET SDK 6+)
.\scripts\build-windows.ps1
# → dist/{treadmark-windows-x86_64.exe, treadmark-*.msi}

See windows/README.md for the WiX-specific build details.

Documentation

License

Apache License 2.0 — see LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

treadmark-0.12.0.tar.gz (267.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

treadmark-0.12.0-py3-none-any.whl (100.1 kB view details)

Uploaded Python 3

File details

Details for the file treadmark-0.12.0.tar.gz.

File metadata

  • Download URL: treadmark-0.12.0.tar.gz
  • Upload date:
  • Size: 267.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for treadmark-0.12.0.tar.gz
Algorithm Hash digest
SHA256 36ffbcfe545ccd6e2cbcbd060919f1f3e606af67ca4b354951b56ff9139accd5
MD5 af3280ce036e4457ac96a9ff1f3822c2
BLAKE2b-256 13d0fe5af1624399cc7ba9567addf369a01268f5ae18ede18f4e43a451bf20b0

See more details on using hashes here.

Provenance

The following attestation bundles were made for treadmark-0.12.0.tar.gz:

Publisher: release.yml on mcowser-p/treadmark

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file treadmark-0.12.0-py3-none-any.whl.

File metadata

  • Download URL: treadmark-0.12.0-py3-none-any.whl
  • Upload date:
  • Size: 100.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for treadmark-0.12.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c70a5fb488cf8bc58f556dae34c686d112309225d58339e535ba5fd57d26a6e2
MD5 e50e4943faf0afe660d4f26d77e2fff3
BLAKE2b-256 f141c3edef2bae496846ed56321793eab24da0de55d22ceb0176a3ab8a65e6ba

See more details on using hashes here.

Provenance

The following attestation bundles were made for treadmark-0.12.0-py3-none-any.whl:

Publisher: release.yml on mcowser-p/treadmark

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.12.1

2 files

This release

0.12.0 This release

2 files

0.11.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page