# HTML Dev Viewer Open `.html` / `.htm` files directly inside Obsidian. The plugin renders your page in a live preview tab with a built-in debugger, and — key feature — **no API restrictions**: local development pages can call any internet API without CORS errors. ## Features - **Live preview** — any `.html` / `.htm` file in your vault renders in a sandboxed iframe, exactly as it would in a browser. - **No CORS restriction** — a fetch bridge routes every HTTP(S) call from the page through Obsidian's request engine, so `fetch()` to any API works with no CORS errors, no proxy, no config. Cookies, headers, and methods (GET/POST/PUT/DELETE...) are forwarded. - **In-page DevTools** — toggle [Eruda](https://github.com/liriliri/eruda) for console, elements, network, resources, and info panels right inside the preview. - **Source view / edit** — switch between rendered preview and a syntax-highlighted source view with adjustable font size and line-wrap for quick edits. - **Local asset inlining** — relative CSS, JS, and images are inlined automatically so the page renders standalone even when assets sit next to it in the vault. - **Open in browser** — launch the file in your default browser with one click. - Works fully offline-only files too, since remote assets are only fetched on demand. ## Install (while not yet on the community list) One of: 1. **[BRAT](https://github.com/TfTHacker/obsidian42-brat)** — add this repo (`d0uub/obsidian-html-viewer`) via *Add a beta plugin*. 2. **Manual** — download the latest release: `main.js`, `manifest.json`, `styles.css` → copy into `/.obsidian/plugins/html-dev-viewer/` → enable under *Settings → Community plugins*. 3. **Turn on HTML file links** — if `.html` files aren't opening with the viewer, enable *Settings → Files & Links → Detect all file extensions*. Once accepted, it will appear in *Community plugins → Browse* as **HTML Viewer**. ## Usage - Click any `.html` or `.htm` file in the file explorer to open it in preview. - **Source / preview** — click the pencil button in the top-right of the pane header to toggle source view; click play to render again. - **DevTools** — click the bug icon in the pane header to open/close the Eruda console, elements, and network panels inside the iframe. - **Debug local pages that call APIs** — the fetch bridge is injected into every previewed page automatically. `fetch('https://any-api.example/api')` from your local HTML just works. - **Open in browser** — click the external-link icon to open the file in your default browser (useful for full-screen demos). ## Security notes - Pages render inside a sandboxed iframe (`allow-scripts allow-same-origin allow-forms allow-modals allow-popups`), so the page cannot touch the host Obsidian window except through the two explicit message channels: the fetch bridge and the DevTools toggle. - The fetch bridge forwards requests to the vault's own request engine and does **not** expose filesystem or vault reads to the rendered page. - Inline DevTools loads Eruda from `cdn.jsdelivr.net`; offline preview still works, only the DevTools panel needs network. ## Build from source ``` npm install npm run build # writes main.js ``` Uses [esbuild](https://esbuild.github.io/) via the `build` script in `package.json`. ## Compatibility - `minAppVersion: 0.15.0` - Desktop and mobile. ## License MIT — see [LICENSE](LICENSE).