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…
Observer
File
Reloads
0
Last change
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' }
}

see also

references