Repository navigation
1.0.0
Upload attachments to your own S3-compatible storage, and keep a local copy in a cache folder —
so images still render with no network.
What this release can do
- Upload on paste or drag-and-drop, rewriting the link in your note to point at your storage
- Images render from the local copy, with zero remote requests while offline
- Content-addressed by default ({hash}.{ext}): the same image is stored once, pasting it twice
uploads nothing - A failed upload never loses the file — it stays in your attachment folder with a working local link
and the reason is shown - Optional third-party image caching (off by default) and an optional cache size limit
- Four maintenance commands: show cache usage, repair the local-copy index, clean up unused cache
files, upload existing attachments
Before you start - Requires Obsidian 1.13.0 or newer (desktop and mobile). The floor is set by the declarative
settings API, which makes the settings searchable in Obsidian's global search. - You need an S3-compatible endpoint, a bucket, and an access key. Cloudflare R2, AWS S3, MinIO and
Backblaze B2 all work; anything S3-compatible should too. - If you serve images through a CDN or a custom domain, put that prefix in Public URL base.
Leaving it empty uses the object address, which requires the bucket to allow anonymous reads.
How far this has been verified
Signing, key and path derivation, the upload chain and the cleanup commands are covered by tests,
and every rule is mutation-checked (deliberately broken, with the suite required to fail for that
rule's own reason). The real build is then driven in a real Obsidian, and the full upload and
download round trip is proven against a real MinIO instance — the object key is recomputed
independently from the bytes and matches, the link opens anonymously, the bytes read back are
identical, and the renderedpoints at the local copy rather than the remote URL.
Not verified: iOS has never been run, and Android has not been run on a real device.
MIT licensed. See the repository README for setup details.