A deliberately tiny VS Code extension that makes .html files open as a
rendered, interactive preview instead of raw source — whether you open them
from the Explorer or click them in the Claude Code chat panel. Built for
viewing AI-generated HTML artifacts in one click, without right-clicking and
without a heavyweight "office viewer" extension.
It's the HTML counterpart to AIOS Markdown Auto-Preview: both make AI-generated artifacts open the way you actually want to read them.
Install
Search "AIOS HTML Auto-Preview" in the Extensions view, or from a terminal:
# VS Code (Marketplace)
code --install-extension kyledunne.aios-html-auto-preview
# Cursor / VSCodium / Windsurf (Open VSX)
codium --install-extension kyledunne.aios-html-auto-preview
To opt a whole project in automatically, add it to the repo's
.vscode/extensions.json recommendations:
{ "recommendations": ["kyledunne.aios-html-auto-preview"] }
How it works
Two cooperating pieces, so .html renders no matter how it was opened:
-
A custom editor for
*.html(aios.htmlPreview) that renders the file in a sandboxed webview — injecting a<base href>so relative resources (./style.css, images) resolve, and letting inline + CDN scripts run. It's registered withpriority: "option", so on its own it takes over only when a workspace opts in by associating*.htmlwith it (covers Explorer / Quick Open opens). -
A tab-watcher (
window.tabGroups.onDidChangeTabs) for the case associations can't reach: the Claude Code chat panel is a closed webview that bypasseseditorAssociationsand force-opens source. When an.htmlappears as a source tab the extension didn't expect, it closes it and reopens it with the custom editor above. Net effect: click an.htmlchat link, it opens rendered. (Brief source flash.)
It distinguishes intent structurally, not by timing, so "Reopen as source file" still sticks: a file it just showed as preview, reopened as source, is a deliberate downgrade and is left alone; a fresh forced-source open is swapped.
Pairing it with the association (recommended)
The watcher alone handles chat links. For Explorer / Quick Open opens to render
too, associate *.html with the custom editor in your settings:
{ "workbench.editorAssociations": { "*.html": "aios.htmlPreview" } }
Reading source when you want it
- On a preview, click the "Open Source" button (the go-to-file icon) in the editor title bar — it swaps that tab to source in place and sticks.
- Command Palette → AIOS: Open This HTML as Source.
- Turn it off entirely: AIOS: Toggle HTML Auto-Preview, or set
htmlPreview.enabledtofalse.
What renders well
- Self-contained artifacts: inline
<script>/<style>+ CDN tags (React, Tailwind, etc.) — the common case. - Relative resources, via the injected
<base>+ webview local-resource roots. - Live reload: edit in a split text editor and the preview refreshes.
What won't render
- Pages needing a real local server (
fetch('/api/...'), client-side routing). For those use Microsoft's Live Preview (server-backed); the two are complementary. Live Preview registers no custom editor, so it cannot be a one-click default — which is exactly why this exists.
Troubleshooting
Set htmlPreview.debug to true to log every tab event and swap decision to the
"AIOS HTML Auto-Preview" output channel.
Part of the AIOS starter pack.