v133 · storage
Hot-reload simulation
A minimal hot-reload loop: edit Markdown in the left pane, press Save, and a FileSystemObserver fires to re-render the preview on the right — exactly how Vite/webpack dev-server HMR works, but in a single tab using the Origin Private File System.
FileSystemObserver: checking…
index.md — editor
Preview
live preview
Initialising…
FileSystemObserver events
Initialising…
// Hot-reload pattern with FileSystemObserver
const opfsRoot = await navigator.storage.getDirectory();
const fileHandle = await opfsRoot.getFileHandle('index.md', { create: true });
const observer = new FileSystemObserver(async (records) => {
for (const record of records) {
if (record.type === 'modified') {
// File changed — re-read and re-render
const file = await fileHandle.getFile();
const text = await file.text();
renderMarkdown(text);
showReloadFlash(); // green flash like browser devtools reload
}
}
});
await observer.observe(fileHandle);
// Editor save path
async function saveFile() {
const writable = await fileHandle.createWritable();
await writable.write(editor.value);
await writable.close();
// Observer fires automatically with { type: 'modified' }
}