README file from
GithubSealmark
Private proof of existence for your Obsidian notes.
Sealmark hashes a note locally, anchors the hash to the Bitcoin blockchain via OpenTimestamps, and lets anyone verify, with standard open-source tools, that the note existed at a given time and has not changed since.
Your content never leaves your machine. Only a hash is ever published. That is the whole point: you can prove you wrote something first without publishing it (unlike a preprint, which makes priority public by making the content public).
Status
v0, validated end-to-end inside Obsidian: the bundled opentimestamps library loads
in the renderer and the seal → upgrade → verify flow works on a real vault. The
cryptographic core is additionally covered by Node spikes and unit tests. See
ARCHITECTURE.md for the architecture and trust model.
How it works
- Seal: Sealmark reads the note's raw bytes, computes a SHA-256 digest, and submits
only that digest to several public OpenTimestamps calendars. You get a
pendingproof in seconds, stored as a.otssidecar next to your note. - Upgrade: Bitcoin confirmation takes hours. Sealmark re-fetches the completed proof
on startup (and on demand), flipping the note to
sealedwith a block height. - Verify: the
.otsis a standard OpenTimestamps proof. Anyone can verify it with Sealmark, with theotsCLI, or against a Bitcoin node. No trust in Sealmark or any server is required (a full node is fully offline and trustless; a block explorer is a convenience fallback).
A note whose content changes after sealing shows as Drifted: the old proof stays valid
for the bytes it sealed, it just no longer matches the current file.
Commands
- Seal current note
- Upgrade pending seals
- Verify current note seal
Install (manual, for testing)
npm install
npm run build
Then copy main.js and manifest.json into your vault at
<vault>/.obsidian/plugins/sealmark/, reload Obsidian, and enable Sealmark in
Settings → Community plugins.
Privacy and trust
- Content is hashed locally; only the digest is sent to calendars.
- The default backend is free public OpenTimestamps calendars. An optional hosted backend may be added later, off by default; the plugin is fully functional without it.
Architecture
See ARCHITECTURE.md. The trust core (src/core) is pure TypeScript with no Obsidian
dependency; the Obsidian shell (src/obsidian, src/main.ts) is a thin layer over it.
All contact with the opentimestamps library is confined to one file
(src/core/anchor/public-calendar.ts).
Author
Built by Yitebeier Aikebaier, who also works on Nexum, a Bitcoin-anchored ledger.
License
MIT.