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.1.tar.gz (267.7 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.1-py3-none-any.whl (100.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: treadmark-0.12.1.tar.gz
  • Upload date:
  • Size: 267.7 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.1.tar.gz
Algorithm Hash digest
SHA256 c5ef78794507044fedb3b0bc3b566d00aac89a58a8061a134ffe688f78c47426
MD5 5ff301e7b11961f5901234693010dccd
BLAKE2b-256 0726b18afdbe0966ec7554ae20bf209c1dbfd67f0b8cc55ea8a771d579f365dd

See more details on using hashes here.

Provenance

The following attestation bundles were made for treadmark-0.12.1.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.1-py3-none-any.whl.

File metadata

  • Download URL: treadmark-0.12.1-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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f6a990239067b480ae152903247d3f62ffc94807b2496ef4bff1b8fdfb3e319a
MD5 150e8499d0b9c4d24a998136415e103c
BLAKE2b-256 53276347f7a16dbf5717ac728b474e52eff3aa6cff88088774483be886dde44c

See more details on using hashes here.

Provenance

The following attestation bundles were made for treadmark-0.12.1-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

This release

0.12.1 This release

2 files

0.12.0

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