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.

[ Screenshot: rendered vault homepage with sidebar + DM journal view ]

Drop an image at public/screenshots/hero.png and reference it here.

What you'll need

Obsidian
A vault you'd like to publish. Markdown source, role tagged via frontmatter.
Node.js 22+
For the vaults CLI. Install.
Cloudflare account
Free tier is enough. Sign up.
Foundry VTT v13+ (optional)
Only if you want vault journals inside Foundry.
You own everything. The CLI deploys to your Cloudflare account, with your SESSION_SECRET. Wizzlethorpe Labs doesn't host or proxy anything; we just publish the open-source tools.

Quickstart

  1. Install the CLI

    Works on Windows, macOS, and Linux. Requires Node.js 22 or newer.

    npm install -g @wizzlethorpe/vaults
  2. Initialise your vault

    Run from inside an Obsidian vault directory. Writes a settings.md file the renderer reads (you edit it as Properties in Obsidian).

    cd ~/Documents/MyVault
    vaults init
    cd $HOME\Documents\MyVault
    vaults init
  3. 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 dm

    Tag a page with role: dm in its frontmatter to restrict it. Lower tiers structurally cannot see higher-tier pages; they don't exist in those deploys.

  4. Push to Cloudflare

    First run prompts for a Pages project name, runs wrangler login if you aren't authed, and creates the Pages project. Subsequent runs just deploy.

    vaults push

    Your wiki is live at your-project.pages.dev. Set a custom domain in the Cloudflare dashboard if you want yourwiki.com instead.

    [ Screenshot: terminal showing successful push + the deployed URL ]

    Drop at public/screenshots/push.png.

  5. Preview locally (optional)

    Renders + serves the wiki on localhost:4173 via wrangler 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

  1. Open Foundry's module browser

    From Foundry's Setup screen: Add-on ModulesInstall Module. Or from inside a world: SettingsManage ModulesInstall Module.

  2. Paste the manifest URL

    https://github.com/wizzlethorpe/vaults-foundry/releases/latest/download/module.json

    Click Install. Enable the module in your world's module list and reload.

  3. 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.

  4. 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

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.)

[ Screenshot: example deployed vault on a custom subdomain ]

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.