dukhaelee364 downloadsExport a note as one self-contained HTML file that works offline. Preview it, then share or save.
Export any note as a single, self-contained HTML file — no internet, no asset folder, no external dependencies. Open it anywhere, share it with anyone.
Works on desktop and mobile, including a native share sheet on iOS.
| Preview before anything is written | The exported file, opened in a browser |
|---|---|
![]() |
![]() |
html-export-css: false in a note's frontmatter to opt out, or html-export-css: [my-snippet] to force one in.| Platform | Actions |
|---|---|
| Windows / macOS / Linux | Save… — choose a location, then Show in folder |
| iOS / iPadOS | Share — hands the file to the native share sheet (AirDrop, Messages, Files, …) |
| Android | Save to shared folder — writes to Download/Obsidian HTML/ and copies the path, so you can open and share it from your file manager |
| Command | Description |
|---|---|
| Diagnose export options | Shows which export capabilities this device provides |
| Clean up exported HTML in the vault | Moves HTML files created by older versions of this plugin into the vault trash |
Some viewers — the iOS Files preview, simple HTML viewer apps — don't run JavaScript. In those viewers the exported page is fully readable, but the theme toggle and copy buttons are hidden on purpose, so you never see a button that does nothing. Open the same file in a regular browser and everything works.
The community directory scan flags the capabilities below. Here is what each one is for.
| Capability | Why |
|---|---|
| Filesystem outside the vault | Only on desktop, and only after you pick a location in the save dialog — the file you asked for is written with Node's fs. Obsidian has no API for writing outside the vault. On Android the same role is played by the Capacitor Filesystem bridge, writing to Download/Obsidian HTML/. |
| Clipboard | Write only, never read. The saved path is copied so you can paste it into a file manager, and the diagnostics command copies its report. |
| Local storage | The plugin stores nothing. It reads the app's own language setting as a fallback when the locale isn't otherwise available. The exported page uses localStorage for its own theme toggle, but that runs in the exported file — not inside Obsidian. |
| Reading your CSS snippets | Read only, at export time, from <vault>/.obsidian/snippets/. Only snippets you have enabled are considered, and only the ones whose selectors match the note being exported are copied into that file. @import rules and non-data: url() references are stripped so the result stays self-contained. Nothing is written back, and no other part of your config is read. |
Nothing is sent anywhere: the plugin makes no network requests, and an exported file has no external references.
From the community plugin directory (once approved): Settings → Community plugins → Browse → search "Single HTML Export".
With BRAT: add DDEOK/Obsidian-Single-HTML-Export in BRAT.
Manually: download main.js, manifest.json, and styles.css from the latest release into <vault>/.obsidian/plugins/single-html-export/.
The plugin is a single plain-JavaScript file — no build step. Clone the repo, edit main.js, then copy main.js, manifest.json, and styles.css into <vault>/.obsidian/plugins/single-html-export/ and reload the plugin.
Two platform notes for contributors:
Platform.isDesktopApp.Filesystem bridge exposed by the Obsidian mobile app, feature-detected at runtime. When it's absent the plugin degrades to preview-only.This plugin bundles or references the following third-party work. The same notices are embedded in every exported HTML file.
local(), not embedded.Syntax highlighting reuses the Prism token classes Obsidian emits, and Mermaid diagrams are rendered by Obsidian's own engine — neither library is bundled.