Wizzlethorpe Vaults
Publish an Obsidian vault as a private, role-gated wiki on your own Cloudflare account. Sync it into Foundry VTT as journal entries with one click. Self-hosted, open source, free.
What it is
Vaults turns your Obsidian vault into a static site hosted on your own Cloudflare account. Pages are filtered per access tier (e.g. public, patron, dm) so different audiences see different content from the same source.
A companion Foundry VTT module pulls the same content into journal entries, with images cached locally and wikilinks rewritten as native Foundry references.
Drop an image at public/screenshots/hero.png and reference it here.
What you'll need
vaults CLI. Install.Quickstart
-
Install the CLI
Works on Windows, macOS, and Linux. Requires Node.js 22 or newer.
npm install -g @wizzlethorpe/vaults -
Initialise your vault
Run from inside an Obsidian vault directory. Writes a
settings.mdfile the renderer reads (you edit it as Properties in Obsidian).cd ~/Documents/MyVault vaults initcd $HOME\Documents\MyVault vaults init -
Add roles (optional, for multi-tier vaults)
Skip this step entirely for a fully public wiki.
vaults role add public # default tier; anyone can read vaults role add patron # extra tier, password-gated vaults role add dm # top tier, password-gated vaults password patron # set passwords vaults password dmTag a page with
role: dmin its frontmatter to restrict it. Lower tiers structurally cannot see higher-tier pages; they don't exist in those deploys. -
Push to Cloudflare
First run prompts for a Pages project name, runs
wrangler loginif you aren't authed, and creates the Pages project. Subsequent runs just deploy.vaults pushYour wiki is live at
your-project.pages.dev. Set a custom domain in the Cloudflare dashboard if you wantyourwiki.cominstead.[ Screenshot: terminal showing successful push + the deployed URL ]Drop at
public/screenshots/push.png. -
Preview locally (optional)
Renders + serves the wiki on
localhost:4173viawrangler pages dev. Auth Functions run, so you can click around as different roles before deploying.vaults preview
Foundry VTT integration
The Foundry module syncs vault pages into JournalEntry documents.
Images are downloaded into your world's data directory so they
load locally, and cross-page wikilinks are rewritten as native
@UUID references that route to the matching journal.
Multi-vault: connect any number of vaults to a single Foundry
world; each gets its own folder.
Install in Foundry
-
Open Foundry's module browser
From Foundry's Setup screen: Add-on Modules → Install Module. Or from inside a world: Settings → Manage Modules → Install Module.
-
Paste the manifest URL
https://github.com/wizzlethorpe/vaults-foundry/releases/latest/download/module.jsonClick Install. Enable the module in your world's module list and reload.
-
Connect your vault
Open the Journal sidebar, click the Sync Vault button. Add Vault with your deployed URL, sign in if your vault is multi-role, click Approve. The module persists a 90-day bearer token; subsequent syncs are one click.
[ Screenshot: Foundry vault list dialog with one connected vault ]Drop at
public/screenshots/foundry-list.png. -
Sync
Click Sync. The module pulls only changed pages (manifest-diff), downloads referenced images into the world data dir, and creates/updates JournalEntries. ~10 seconds for a 300-page vault on a fresh world; near-instant for incremental updates.
What you get
- Per-role variants. A page tagged
role: dmstructurally does not exist in the public deploy. Guessing the URL 404s. - Wiki-style sidebar. Folder tree, search, hover previews, backlinks; all generated at build time.
- Obsidian features. Wikilinks, image embeds, transclusions, callouts, frontmatter aliases; all render.
- Obsidian Bases.
```basecode fences render as sortable, filterable HTML tables. Auto-generated folder index pages use Bases too, with columns picked from your folder's frontmatter. - Custom theming.
accent_color+accent_color_darkinsettings.md; favicon auto-generated from your accent color. - Multi-vault Foundry sync. Connect any number of vaults to a single Foundry world; each gets its own folder + image cache.
- Bearer-token API.
/_batch+/_batch-imagesendpoints for any sync client. The Foundry module uses these; AI tooling can too.
Examples
(Add a few public vaults built with this here once they're up. Probably link to the southaven public wiki, the wands docs, etc.)
Drop at public/screenshots/example-vault.png.
Common questions
Is there a hosted version?
Not yet. The CLI + your Cloudflare account is the supported path. Cloudflare's free tier handles bandwidth and storage for any reasonable personal vault.
What about my existing Obsidian Publish site?
You can run both. Vaults gives you role-based access control and Foundry sync, which Obsidian Publish doesn't. They serve different use cases.
Can I use my own domain?
Yes. After your first deploy, add a custom domain in the Cloudflare
Pages dashboard for the project. Wildcard subdomains work too
(e.g. foo.yourdomain.com,
bar.yourdomain.com).
How do I revoke access if a token leaks?
Run vaults push --rotate-secret. This regenerates the
SESSION_SECRET and invalidates every issued token at
once; affected clients (Foundry module, etc.) will need to
reconnect.
Is the source open?
Yes. CLI + renderer, Foundry module, and this site. MIT licensed.