airenare10 downloadsPreview notes as your InkStone site renders them, live beside the editor, and commit and push your site folder with Git.
Edit a note on the left. See the real page on the right.
InkStone turns an Obsidian vault into a website, but Obsidian's reading view doesn't render notes the way InkStone does. Indentation, line breaks, headings and callouts can all come out different. This plugin closes that gap: it runs InkStone on your machine and shows the actual rendered page in a pane next to your note. There's no commit, push and wait cycle to find out how a post will look.
Early release (0.x). It's been tested by the author on macOS. Linux and Windows are supported in the code and covered by unit tests, but nobody has run them live yet. Expect a few rough edges, and please open an issue when you hit one.
.venv inside the checkout). If you don't have it yet, clone it from github.com/airenare/inkstone and follow its README to install the requirements. The plugin reads the checkout's VERSION file and tells you to git pull if it's older. Version 1.58.0 or newer is recommended: it makes the server stop with Obsidian even after a crash or force-quit.git, if you want the git panel.From Obsidian (recommended). Open Settings > Community plugins, turn off Restricted mode if it's on, choose Browse, search for InkStone Preview, then Install and Enable. You can also open the plugin's page in the community directory and click Add to Obsidian.
Manual. Download main.js, manifest.json and styles.css from the latest release into <your vault>/.obsidian/plugins/inkstone-preview/, then enable InkStone Preview under Settings > Community plugins.
BRAT (for betas). To try a pre-release before it reaches the store, add airenare/inkstone-obsidian-plugin in the BRAT plugin. Most people don't need this.
app.py), using Browse or by typing the path. The Python path fills in on its own.~/notes/site works, and so does a path relative to your vault (a single dot means the vault root). The settings page tells you right away if something's wrong.The site folder works the same way InkStone's vault does: files at the top level become /slug, a blog/ folder becomes /blog/..., and so on.
| Setting | What it does |
|---|---|
| Site folder | The folder with your site notes. Pick it from the vault's folder tree with Choose from vault, browse to a folder on disk, or type a path: absolute, ~/..., or relative to the vault (. is the vault root). A folder outside the vault still previews, but auto-reload and editor sync only work inside the vault, because Obsidian only reports changes to vault files. |
| InkStone folder | The folder where you cloned InkStone, the one with app.py. |
| Python executable | Defaults to the checkout's venv: <checkout>/.venv/bin/python3 on macOS and Linux, <checkout>\.venv\Scripts\python.exe on Windows. It needs InkStone's requirements installed. |
| Start server automatically | Starts the preview server when Obsidian opens. Otherwise it starts the first time you open the preview. |
Change the site folder, checkout or Python path while the server's running and the plugin restarts it for you.
There's also a command, Restart server, and the preview toolbar shows the server status with a Restart button if it ever crashes.
The toolbar shows the current URL (never the Owner token), a status dot, and the Owner view checkbox.
website: true) show a "not published" message instead of a stale page. .base and .canvas files publish when their name ends in __website.http, https and mailto only.Expand Git under the toolbar. It lists changed files (all checked by default), shows a diff when you click one, and takes a commit message ("Update site content" by default). Commit sends exactly the files you checked. It doesn't push for you.
What the buttons do depends on the state of the site folder:
| Folder state | Pull | Commit | Push |
|---|---|---|---|
| No site folder set | Disabled ("Site folder not set") | Disabled (same hint) | Disabled (same hint) |
| Not a git repo | Disabled ("Folder is not a git repo") | Disabled (same hint) | Disabled (same hint) |
| Repo, no remote | Disabled ("No remote configured") | Enabled | Disabled ("No remote configured") |
| Repo with a remote | Enabled | Enabled | Enabled |
Hover a disabled button to see why. The preview works in every state. A few details worth knowing:
git pull --rebase. Push never forces.WEBHOOK_SECRET, so its /webhook endpoint can't be used to run git pull in your notes.127.0.0.1, on a random port.INKSTONE_DEV_API=1. A server you run on your own doesn't have it.Obsidian asks plugin authors to be upfront about a few things. Here's all of it.
127.0.0.1. Two things can still reach the network on your behalf: the pages InkStone renders can load whatever your site's theme and settings include (for example Giscus comments or web fonts), and the git panel runs your own git, which contacts your git remote when you click Pull or Push.app.py and VERSION) and runs Python from it. It runs git in the site folder, and only changes anything when you click Commit, Pull or Push. The plugin never edits your notes itself.git as child processes. Both are stopped when Obsidian closes.| You see | What to do |
|---|---|
| "No app.py found in ..." | Point InkStone folder at the repository root, the folder that contains app.py. |
| "InkStone x.y.z found; this plugin needs 1.57.0 or newer" | git pull in your InkStone checkout. |
| A Python or Flask error in the settings | Install InkStone's requirements into the Python you chose (pip install -r requirements.txt), or point Python executable at the right venv. |
| "Not published" in the pane | The note needs website: true in its frontmatter. For .base and .canvas files, rename them to end with __website. |
| The preview doesn't reload when you save | Auto-reload needs the site folder to be inside the vault. A folder outside it still previews, but you'll need to reload by hand. |
| A git timeout on a remote that uses SSH | Git may be waiting on a passphrase or host-key prompt it can't show. Load the key into your ssh-agent, or run git push once in a terminal. |
.env file in the InkStone checkout that sets URL_PATH_PREFIX isn't supported.npm install
npm test
npm run build
Use Node 20 (see .nvmrc). To try your build in Obsidian, symlink this folder into a test vault's .obsidian/plugins/ as inkstone-preview, enable the plugin, and reload it after each build.
Bump version in manifest.json and package.json, add it to versions.json, then push a tag that equals that version exactly, with no v prefix (for example 0.1.0). The release workflow fails if the tag and manifest.json disagree.
MIT. See LICENSE.