Pages
Each URL you list gets desktop and mobile screenshots. The page PDF and the rendered HTML go with them. So do the network requests with their headers, and the console messages and redirects.
Page captureSealjar is a free, open-source CLI that captures web pages and a Git repository into one ZIP, sealed with SHA-256 hashes and a timestamp from an independent authority. Anyone can check later whether the files still match. It is for developers and agencies who hand over a website and want a record of the site and the code on that day.
Copy this prompt and replace the URL with your own.
Use Sealjar to capture this repository and https://staging.example.com
for handover. Use https://github.com/vincentsch/sealjar: read its AGENTS.md
and follow the steps. Verify the package and show me the report and any
capture problems. Write the output to the parent directory of this repository.
curl -fsSL https://raw.githubusercontent.com/vincentsch/sealjar/main/install.sh -o /tmp/sealjar-install.sh
bash /tmp/sealjar-install.sh
rm /tmp/sealjar-install.sh
If sealjar is not on PATH, use the absolute path printed after
Installed:
in the installer output. The examples call the executable sealjar.
Then run the bakery demo. It needs Chrome or Chromium and Git.
sealjar demo --out ../bakery-demo
Reports
Capture writes an HTML and a PDF report in English and German. The HTML report needs its reader folder, because the images are linked relatively. The PDF stands on its own.
SEAL.html is a reading aid outside the manifest’s file list
and is not sealed itself. Verify checks the timestamp token directly,
and sealjar report writes a fresh seal page from checked
data.
Capture the staging site and the code on handover day and send the package with the invoice. There is also a German guide to Abnahme.
Record what a page showed, for example a price or the mobile layout, before anyone disputes it.
Read the report without installing anything. The recipient guide explains the three verify answers and how to check a package with Python 3 and OpenSSL instead.
The package
The manifest lists every file with its SHA-256 hash. The reader folder with the reports is written beside the ZIP.
Each URL you list gets desktop and mobile screenshots. The page PDF and the rendered HTML go with them. So do the network requests with their headers, and the console messages and redirects.
Page captureFor each host, Sealjar saves the DNS records and the connection details. HTTPS hosts also get their certificate details.
Manifest fieldsThe tracked files as they are in your working tree, with uncommitted changes. The commit and the working-tree state are recorded. --history adds a Git bundle. Secret files are left out by default, but exclusions cannot remove all private content.
Repository selectionHTML reports in English and German, with PDFs when generated during capture. The seal page and VERIFY.txt with the checking steps sit beside them.
See a reportTimestamps
The authority signs the hash of the manifest together with its own
time and returns an RFC 3161 token. Sealjar stores it beside the
manifest, for example as
manifest.json.digicert.tsr.
DigiCert is the default and FreeTSA the fallback. You can set other
authorities with --tsa. If none answers, the package is
written without a timestamp and sealjar stamp adds one
later.
A trusted timestamp shows that the sealed files existed by the time it records. It does not check when the capture was made. Sealjar does not assess eIDAS qualification.
Timestamps and trustThe pages and the code, with the reports.
manifest.json lists every file with its hash.
Signs the hash of the manifest with its own time.
Stored beside the manifest and checked offline.
Verification
sealjar verify answers three questions. Did the capture
finish? Do the files still match the manifest? Is the timestamp
trusted? It needs no network connection.
File check All 30 listed files match the manifest.
Exit 0 · Files match and timestamp is trusted
sealjar verify bakery-demo-2026-10-21-1746.sealjar.zip
Capture Complete. Repository bakery at 19c1a882e9c9a7d56a2d502ecf2fa5a3bd80453c with 2 uncommitted changes. Page http://127.0.0.1:35379/: complete. Page http://127.0.0.1:35379/prices/: complete. Files Unchanged. All 30 files listed in the manifest match their recorded hashes. Timestamp Trusted. At least one timestamp has a valid signature and trusted certificate chain. DigiCert at 2026-10-21 17:46:39 UTC: Valid signature; the certificate chain leads to a trusted root at the timestamp's time. A timestamp from an independent trusted authority gives an upper bound for when the files existed. This does not apply to tokens made with Sealjar's public demo key. Offline checks cannot see later certificate revocation. Sealjar does not assess eIDAS qualification.
Changed file
web/001-127-0-0-1/desktop.png
Exit 10 · Files differ from the manifest
sealjar verify demo-tampered.sealjar.zip
Capture Complete. Repository bakery at 19c1a882e9c9a7d56a2d502ecf2fa5a3bd80453c with 2 uncommitted changes. Page http://127.0.0.1:35379/: complete. Page http://127.0.0.1:35379/prices/: complete. Files Changed. Package files differ from the manifest. changed: web/001-127-0-0-1/desktop.png Timestamp Trusted. At least one timestamp has a valid signature and trusted certificate chain. DigiCert at 2026-10-21 17:46:39 UTC: Valid signature; the certificate chain leads to a trusted root at the timestamp's time. A timestamp from an independent trusted authority gives an upper bound for when the files existed. This does not apply to tokens made with Sealjar's public demo key. Offline checks cannot see later certificate revocation. Sealjar does not assess eIDAS qualification.
Capture completeness is separate from Files and Timestamp. Exit 0 can still come with a capture problem, such as a page that failed to load.
If no public timestamp authority answers, the demo signs with a local key and labels the token “Demo timestamp, not trusted”. Verify then exits 11. Because that key is public, the token says nothing about when the files existed.
Limits
Questions
Courts weigh evidence freely. Sealjar documents the files and makes later changes detectable. It promises no legal effect and no admissibility.
Sealjar is one executable for Linux, macOS and Windows. Web capture needs Chrome or Chromium, and code capture needs Git. Verify, report and restore need neither.
No. You list each URL yourself. The saved HTML is the rendered page; it cannot replay the site like a web archive.
Yes. HTTP basic auth goes in the SEALJAR_AUTH variable. For a form login, add --login and sign in yourself in the Chrome window that opens. Capture reuses that session.
Capture loads the pages you list with everything they load. It asks DNS servers about the hosts and sends the manifest hash to the timestamp authority, which sees that hash and normal network metadata. There are no accounts and no uploads. The package itself can still contain private content in screenshots and HTML, or in source files and Git history. Look through it before you share it.
MIT. Sealjar is free and open source.
The demo captures a bundled bakery site and an example repository on your own computer and writes a package you can verify.
sealjar demo --out ../bakery-demo