Turn an Obsidian vault into a self-contained static website, or serve it directly in the browser without writing anything to disk.
I wanted an easy way to render my Obsidian notes into some kind of HTML output that can either be published on my own website or be used for private viewing with advanced search functionalities.
There is of course Obsidian Publish but I wanted to have a small challenge in creating my own tool.
There are two modes you can either export your vault as a vite build or serve it directly as a site.
When running the obsidianator it will scan the files and folders in the provided path, takes the content of the markdown files to parse them and then write everything into a vault-data.json file, which will then be loaded by the vite build.
Currently you can either download the pre-compiled binaries from the latest release or you can build it from source:
Bash1git clone https://github.com/Fx64b/obsidianator 2cd obsidianator 3make all # builds frontend then Go binary 4make install # adds to path
Requirements: Go 1.21+, Node 18+, pnpm.
Serve a vault in memory (no disk output)
Bash1obsidianator serve ./my-vault 2obsidianator serve ./my-vault --watch # live reload on file changes 3obsidianator serve ./my-vault --port 8080
Export to a static site:
Bash1obsidianator export ./my-vault 2obsidianator export ./my-vault --output ./dist 3obsidianator export ./my-vault --output ./dist --serve # export then serve 4obsidianator export ./my-vault --output ./dist --watch # export, watch, serve
Filter to specific folders or files:
Bashobsidianator serve ./my-vault --include Notes --include Diary/2026.md
Other options
Bash1obsidianator --version # print version 2obsidianator --help 3obsidianator serve --help 4obsidianator export --help
Important: The serve options primary purpose is for checking how the output looks and not for serving the site publicly! While some steps to secure the serve option were taken it is by far not ready to be used for public hosting. Instead you should do an export and host that using a real webserver.
| Layer | Location | Role |
|---|---|---|
| Go CLI | main.go | serve / export commands via cobra |
| Vault parser | internal/vault/ | Walk filesystem, parse frontmatter, resolve wikilinks, build folder tree |
| Exporter | internal/export/ | Write static files to disk, serve in-memory, SSE live reload |
| Frontend | web/src/ | React + Vite app, embedded into the binary at build time |
The Go binary embeds the compiled frontend (web/ → ./static) via //go:embed. In serve mode nothing touches disk — vault data is served as JSON from memory and attachments are proxied directly from the vault directory.