daggermaster300032 downloadsTurn a note into a clean single-page website and PDF, with a contents rail, numbered figures and live preview.
Turn an Obsidian note, or a whole folder of notes, into a clean website and matching PDFs: a handout, a course page, a lab manual, a report. Write in Obsidian as usual; the plugin does the typesetting.
$inline$ and $$display$$.[[links]] between pages.Right-click a folder and choose Set up website… (or run Set up a new website…). One dialog asks:
site/ inside the folder).Running it again on the same folder updates the settings instead of starting over.
Click the globe in the ribbon and choose Show all websites, or run the
command of that name. A panel opens listing every website in the vault:
each multi-page site, and every note that has been built or has a
site-folder:. Each entry shows its pages, where it builds to, when it was
last built, its GitHub Pages address, and buttons to build, build with PDF,
preview, open, publish, and change its settings.
Open a note, then click the globe in the left ribbon, or run a command from the command palette:
| Command | What it does |
|---|---|
| Set up a new website… | The setup dialog above |
| Build website from current note | Writes index.html (and the other pages) and a figures/ folder |
| Build website and PDF from current note | The same, plus a PDF of the page |
| Start or stop live preview | Serves the page at http://localhost:8321 and rebuilds on save |
| Open built website / Open built PDF | Opens them in your browser or PDF viewer |
| Publish with git | Lets you pick which folders go along, shows what changed, then commits and pushes |
| Open published website | Opens https://<you>.github.io/<repo>/ |
You can also right-click a note in the file explorer and choose Build website.
By default a note's site goes into a folder next to it, named after the note
(My Handout.md → my-handout-site/). Change the pattern in settings, or give
one note its own folder with a site-folder: property.
The note's top-level headings become the numbered sections. The contents rail
lists them, along with the headings one level below. A note whose headings
start at ## works too. Anything before the first heading opens the page
without a number.
Figures. An image embed on its own line becomes a numbered figure. The caption is the next line if that line is entirely italic or bold:
![[confocal.png|400]]
*Maximum projection of a 5 dpf larva. Scale bar 50 µm.*
|400 sets the display width, as in Obsidian. Other text after the pipe is
used as the caption. A typed "Figure 3." prefix is dropped, because numbering
is automatic.
Excalidraw drawings embed like images: ![[My diagram.excalidraw|500]]
with a caption line under it becomes a numbered figure. The drawing is exported
as SVG in the light theme when you build, so the Excalidraw plugin needs to be
on. Without it, an SVG or PNG that Excalidraw auto-exported next to the drawing
is used instead.
The masthead comes from optional properties:
---
title: The cerebellum in *inpp5e* mutants
eyebrow: BIO321 · Practical course 2026
subtitle: A whole-mount immunofluorescence project in larval zebrafish.
notice: "**Draft.** Some sections are still being written."
---
Without a title:, the page is named after the note.
Laser lines. /laser{488} shows a dot in the colour of the channel that
line excites, followed by "488 nm", in tables or running text. 405, 488, 561
and 647 are blue, green, orange and far red; other wavelengths get a blend of
their neighbours. The chips appear in Obsidian's reading view and live preview
as well as on the page. Type /laser for a list of common lines.
Several pages. A folder is a multi-page site when one of its notes has
site-home: true (the setup dialog adds it). That note becomes index.html;
every other note in the folder and its subfolders becomes a page named after
it, listed in the bar at the top. site-order: 2 sets a note's place in the
bar, and site-hide: true leaves a note out. [[Other page]] and
[[Other page#Heading]] link across pages; links to notes that aren't on the
site become plain text. Any build or preview command run from any page builds
the whole site.
Keeping things off the page without deleting them from the note:
## Experiment 3 //hidden: hides the heading and everything under it, down
to the next heading of the same or higher level.1) Why use projections? //answer Smaller files, faster analysis: hides the
rest of the line after //answer, so questions go out without their answers.
A line that starts with //answer is dropped entirely.%% comments %% are dropped, as in Obsidian's reading view.Also supported: tables (wide ones scroll), callouts (> [!note], including
nested ones), ==highlights==, task lists and code
blocks. [[#Heading]] links jump within the page. Links to other notes become
plain text, since only this note is published. A heading with nothing under it
gets a "to be written" box; you can turn that off in settings.
Keep the note in a git repository with a GitHub remote.
On GitHub, open Settings → Pages and set Source to GitHub Actions.
Add .github/workflows/pages.yml, with path: set to your site folder:
name: Pages
on: { push: { branches: [main] } }
permissions: { contents: read, pages: write, id-token: write }
jobs:
deploy:
runs-on: ubuntu-latest
environment: { name: github-pages }
steps:
- uses: actions/checkout@v4
- uses: actions/upload-pages-artifact@v3
with: { path: my-handout-site }
- uses: actions/deploy-pages@v4
From then on, Publish with git is all it takes. It builds the page, commits and pushes.
Choosing what gets published. The note and its site are always included. The Publish dialog also lists the note's folder and each folder above it, up to the top of the repository, and Add another folder… takes any other folder in the repository. Tick the ones to include; the list of changed files updates as you go, so you can see exactly what will be pushed. Each note remembers its selection. Settings → Publish by default sets the starting point for notes without one: only the note and its site, its whole folder, or the whole repository.
127.0.0.1 only.git only when you use Publish, or to stamp the page with the
commit it was built from, and only when the note is in a git repository.Desktop only.
npm install
npm run dev # rebuilds main.js on change
npm run build # type-check and production build
Release: npm version patch && git push --follow-tags. The workflow attaches
main.js, manifest.json and styles.css to a GitHub release.
MIT