fnumatic486 downloadsExport notes as self-contained HTML files with advanced features.
Export Obsidian notes as self-contained HTML files with advanced features for sharing and archiving.
Turn your entire wiki into a single HTML file. Export one note or your whole network of linked notes — either way, you get one portable, self-contained file that's easy to share, archive, or send to anyone. No broken links, no missing assets, no hassle.
The Advanced HTML Export plugin allows you to export individual Obsidian notes as self-contained HTML files. Key features include:
While Obsidian has built-in HTML export capabilities, this plugin offers several advantages:
Export a network of linked notes as a single HTML file with single-page application navigation.
Ensure you have the Obsidian Excalidraw Plugin installed and enabled.
To include Excalidraw diagrams in your exported HTML, configure the following settings in the Excalidraw plugin:
Open Excalidraw Settings
Settings → Community Plugins → ExcalidrawEnable SVG Export
Once configured, embed Excalidraw diagrams in your notes using wiki-links:
![[my-diagram.excalidraw]]
The diagrams will be automatically converted to embedded SVG when exporting to HTML.
Problem: Excalidraw diagrams appear as empty placeholders or don't render
Solution: Verify "Export as native SVG" is enabled in Excalidraw settings
fnumatic/obsidian-advanced-html-export.obsidian/plugins/obsidian-advanced-html-export/ directoryCtrl/Cmd + P) and search for "Export Current File as HTML"Ctrl/Cmd + P) and search for "Export wiki as HTML"Timestamps are off by default, so a fresh installation writes My Note.html.
Add a format under Settings → Advanced HTML Export → Export options → Timestamp format to enable them. The settings page shows a live preview of the resulting
filename.
Example with YYYY:
My Note-2026.html01-central-note-wiki-2026.htmlBy default an export is downloaded by the browser, which may ask where to put
the file. Set Settings → Advanced HTML Export → Automatic saving → Export folder (for example exports) to write exports straight into that vault folder
instead, so no file dialog appears. The folder is created on the first export.
Clear the field to download again.
Overwrite existing exports decides what happens when the name is taken: on, the
file is replaced; off, the export becomes My Note-1.html, My Note-2.html and
so on. Combined with a timestamp format you get one file per run, or one file
per period when the format is coarser (for example YYYY-MM-DD).
Supported tokens:
| Token | Meaning | Example |
|---|---|---|
YYYY |
four-digit year | 2026 |
YY |
two-digit year | 26 |
MM |
month | 10 |
DD |
day | 26 |
HH |
hours (24h) | 16 |
mm |
minutes | 30 |
ss |
seconds | 05 |
Other characters are kept as literals. Spaces and characters that are invalid in filenames become underscores. An empty format disables timestamps and is the default.
Override the format per note in the frontmatter:
---
export:
timestamp: "YYYY-MM-DD"
---
Disable the timestamp for one export:
---
export:
timestamp: false
---
Use the global format, falling back to the default when the setting is empty:
---
export:
timestamp: true
---
For a wiki export, the value comes from the start note. For a single-file export, it comes from the exported note. The frontmatter value wins over the setting.
The start note of a wiki export can exclude notes through its frontmatter:
---
export:
exclude:
tags: [companion]
folders: [Kurse/Begleitmaterial]
links: ["Companion Note", "Glossar"]
---
tags matches frontmatter and inline tags; the leading # is optional.folders matches the folder and its subfolders.links accepts note names or vault paths.publish: false.publish: false is a global hard exclusion and is not overridden.The rules apply only to the export started at that note. To export the excluded
notes, start another export at a note that links them and has no export.exclude
rules — for example a companion-notes hub that the course note links to. Add that
hub to links as well if it should not appear in the course export.
Exports can optionally be wrapped in a self-extracting, compressed HTML container. The resulting file stays a single .html file and unpacks itself in the browser using the native DecompressionStream — no server or external assets required.
Configure it under Settings → Advanced HTML Export → Export options → Export compression:
| Option | Description |
|---|---|
None |
Plain HTML (default) |
gzip + base64 |
gzip-compressed payload, base64-encoded |
gzip + base85 |
gzip-compressed payload, base85-encoded (~6% smaller than base64) |
The start note of an export can override the global setting via its frontmatter:
---
export:
compression: gzipb85
---
Accepted values are none, gzipb64 and gzipb85. The resolution order is: frontmatter → plugin setting → none. An absent or invalid value falls back to the plugin setting, and none can be used to disable compression for a single note.
Opening a compressed export briefly shows an "Unpacking…" screen. It requires a browser with DecompressionStream support (Chrome 80+, Firefox 113+, Safari 16.4+).
It is often unclear what actually fills up an exported file. Enable Settings → Advanced HTML Export → Export options → Show export statistics to open a size overview after each wiki or single-file export (default: off).
The overview is measured exactly while rendering and shows:
.excalidraw diagrams) and otherwise the source note; the export type is what the artifact becomes in the file (image format such as webp, svg for Excalidraw drawings or the diagram type for other engines, code language, HTML for notes).Diagram and code block bytes are measured from the rendered elements. Diagram detection is conservative: markup from renderers that are not recognized is counted as note markup instead of being attributed incorrectly.
pnpm installStart development server: pnpm dev
This launches an interactive development environment that:
For automatic plugin reloading in Obsidian without restarting the app, install the Hot Reload plugin from the Obsidian community plugins. This allows your changes to be reflected immediately in the running Obsidian instance.
pnpm buildpnpm previewpnpm testpnpm test:watchpnpm type-checkThe four export dialogs use TypeScript and native DOM views, without a UI framework runtime. Shared components handle buttons, icons and progress bars; the modal base class owns view cleanup. See Native UI for the structure, lifecycle rules and reproducible bundle/browser measurements.
To test the plugin against the real Obsidian without a window or manual clicks, see Headless end-to-end testing.
Releases are managed by release-please. Commits to main are analyzed by the Release Please workflow, which opens or updates a release pull request containing the version bump and the CHANGELOG.md changes.
To release:
chore(release): release X.Y.Z pull request.release.yml workflow builds the plugin and attaches the assets.Versions follow Conventional Commits (fix → patch, feat → minor; pre-1.0 features bump the minor version). release-please updates the version in manifest.json; versions.json is synced automatically once the release has been created.
release-please.yml: Creates/updates the release PR and, on release, the tag and GitHub releaserelease.yml: Triggers on version tags, builds the plugin and attaches the release assets