No description
  • Python 98.9%
  • Shell 0.6%
  • Meson 0.5%
Find a file
2026-06-03 13:08:31 +01:00
.forgejo/workflows ci: set -euo pipefail; release: concurrency, digest-pinned ci-base-gtk, shared composites; build-deb: assert tag==meson version + SOURCE_DATE_EPOCH 2026-06-03 13:08:31 +01:00
data Initial import: BitCrafts Vigil v0.4.0 (migrated from bit-crafts monorepo) 2026-06-03 09:19:40 +01:00
packaging ci: set -euo pipefail; release: concurrency, digest-pinned ci-base-gtk, shared composites; build-deb: assert tag==meson version + SOURCE_DATE_EPOCH 2026-06-03 13:08:31 +01:00
po Initial import: BitCrafts Vigil v0.4.0 (migrated from bit-crafts monorepo) 2026-06-03 09:19:40 +01:00
screenshots Initial import: BitCrafts Vigil v0.4.0 (migrated from bit-crafts monorepo) 2026-06-03 09:19:40 +01:00
src Initial import: BitCrafts Vigil v0.4.0 (migrated from bit-crafts monorepo) 2026-06-03 09:19:40 +01:00
tests Initial import: BitCrafts Vigil v0.4.0 (migrated from bit-crafts monorepo) 2026-06-03 09:19:40 +01:00
tools Initial import: BitCrafts Vigil v0.4.0 (migrated from bit-crafts monorepo) 2026-06-03 09:19:40 +01:00
.gitignore Initial import: BitCrafts Vigil v0.4.0 (migrated from bit-crafts monorepo) 2026-06-03 09:19:40 +01:00
LICENSE Initial import: BitCrafts Vigil v0.4.0 (migrated from bit-crafts monorepo) 2026-06-03 09:19:40 +01:00
meson.build Initial import: BitCrafts Vigil v0.4.0 (migrated from bit-crafts monorepo) 2026-06-03 09:19:40 +01:00
meson.options Initial import: BitCrafts Vigil v0.4.0 (migrated from bit-crafts monorepo) 2026-06-03 09:19:40 +01:00
pyproject.toml Initial import: BitCrafts Vigil v0.4.0 (migrated from bit-crafts monorepo) 2026-06-03 09:19:40 +01:00
README.md Initial import: BitCrafts Vigil v0.4.0 (migrated from bit-crafts monorepo) 2026-06-03 09:19:40 +01:00
vigil.sh Initial import: BitCrafts Vigil v0.4.0 (migrated from bit-crafts monorepo) 2026-06-03 09:19:40 +01:00

BitCrafts Vigil

Spot every file change, find every duplicate, catch every tampered byte.

GTK4 + libadwaita desktop frontend for bit-crafts. Vigil brings three offline file tools together in one window:

  • Hashing — snapshot a folder, then verify later exactly what was added, removed, or modified against that baseline, file by file.
  • Duplicate detection — find duplicate files across your folders and see how much space they waste.
  • Integrity verification — detect tampering and corruption by checking files against a saved manifest, down to content, metadata, and permissions.

No daemon, no cloud, no telemetry.

Vigil main window — empty state

Features

  • Three tools, one window — hashing, duplicate detection, and file integrity verification, each with its own run history.
  • Friendly algorithm picker — choose by intent (Secure, Standard, Fast) instead of jargon, from blake3, sha256, xxh3, xxh128.
  • Automatic threading — Vigil detects whether a folder lives on an SSD, hard disk, or network share and picks the fastest read mode, with a manual override per target.
  • Track folders over time as named targets, with a sidebar listing everything you've registered.
  • Queue runs through a job queue page that surfaces in-flight, pending, and completed runs.
  • Browse per-folder history of every run, with relative timestamps and per-run duration + file count.
  • Compare any two snapshots side-by-side — added / removed / modified files in a single pane, with hash before → after.
  • Inspect duplicate groups and integrity changes with severity badges (added / removed / content / metadata) and reveal-in-files.
  • Export the findings as a self-contained ZIP bundle (manifest + diff NDJSON + per-target preferences).
  • English + French shipped. Drop-in de.po or es.po for new locales.

Screenshots

Watch a folder History view
Watch a folder dialog with BLAKE3 + threading Per-target history of snapshots
Pick a folder, choose the algorithm, snapshot. Every snapshot you took, with timestamps and run duration.
Verify diff detail
File-by-file diff: added / removed / modified, with hash before → after
Exact file-by-file diff: added (2), removed (4), modified (1) with the hash before → after.
Tracked folders New watch
Sidebar listing every tracked folder New-watch dialog
Sidebar of every folder Vigil is tracking. Register a new folder as a tracked watch.
Runs view Job queue
Per-watch list of runs Job queue showing pending / in-flight runs
Every run executed for a given watch. Pending, in-flight, and completed runs.
Per-watch history
Per-watch history of snapshots and verifications
Full audit trail per tracked folder.

Install

Download bitcrafts-vigil_<version>_amd64.deb from the GitHub Releases page (x86-v3 for any Haswell-or-later CPU, x86-v4 only if your CPU supports AVX-512), then:

sudo apt install ./bitcrafts-vigil_<version>_amd64.deb

Releases are GPG-signed; verify via SHA256SUMS.asc and GPG-KEY-bitcrafts.asc shipped alongside each release.

Or build from source per the root CONTRIBUTING.md.

The .deb installs Vigil under /usr/bin/vigil and its Python modules under /usr/lib/python3/dist-packages/vigil/. It declares bitcrafts-tools as a dependency, so apt pulls in the matching CLI package automatically (which provides /usr/bin/bchash, /usr/bin/bcduplicate, /usr/bin/bcintegrity, statically linked — no runtime need for liburing, libblake3, libxxhash). Direct filesystem access (no sandbox) so io_uring and the multi-threaded worker pool run at full speed.

Override the binary lookup with BITCRAFTS_TOOLS_DIR=/custom/bin vigil for development or out-of-tree builds.

Architecture

applications/vigil/
├── src/vigil/
│   ├── backend/   # SQLite, XDG paths, argv contracts, parsers
│   ├── ui/        # GTK4 widgets, Blueprint templates, runners
│   ├── resources/ # vigil.gresource.xml + .blp source
│   └── _i18n.py   # gettext binding (domain: bitcrafts-vigil)
├── data/          # AppStream metainfo, .desktop, hicolor icons
├── packaging/
│   └── debian/    # control.in, postinst/postrm/prerm, copyright
└── po/            # bitcrafts-vigil.pot + fr.po

Vigil never links against the C libraries directly. It launches bchash via Gio.Subprocess with explicit argv and parses the JSONL output. This is a deliberate isolation: the GUI never crashes if a C tool segfaults, and the same backend code can be reused by any other frontend.

Runtime data

User state lives at $XDG_DATA_HOME/bitcrafts-vigil/ (default ~/.local/share/bitcrafts-vigil/). The .deb install reads and writes the real path directly — no sandbox redirection.

The CLI tools come from the bitcrafts-tools package and live at /usr/bin/. Override the lookup with BITCRAFTS_TOOLS_DIR=/custom/bin for development or out-of-tree builds.

License

GPL-3.0-or-later. Vigil is part of the bit-crafts toolkit.