Skip to content

Conversation

@markijbema
Copy link
Contributor

What

Two DX improvements for the VS Code extension webview, inspired by PR #131:

1. Dev reload for webview

Watches dist/webview.* for changes when running in Development mode (Extension Development Host). When the webview JS or CSS is rebuilt by pnpm watch, the webview HTML is automatically reloaded — no more manually reloading the extension host window just to see webview changes.

Only active when extensionMode === ExtensionMode.Development, so production installs are unaffected.

2. Cache busting on webview assets

Appends ?v=<timestamp> to the script and style URIs in the webview HTML. This prevents the webview's embedded browser from serving stale bundles after a rebuild, which was a common source of confusion during development.

Changes

  • src/KiloProvider.ts: Added setupDevReload() method with FileSystemWatcher, cache-bust query param on asset URLs, watcher cleanup in dispose()
  • src/extension.ts: Pass context.extensionMode to KiloProvider constructor

@markijbema markijbema force-pushed the mark/dev-reload-and-cache-busting branch from 59631ee to c4d31b5 Compare February 10, 2026 14:48
- Watch dist/webview.* for changes in development mode and auto-reload
  the webview HTML so changes during `pnpm watch` are reflected without
  manually reloading the extension host window.
- Append ?v=<timestamp> cache-buster to script/style URIs so the
  webview browser doesn't serve stale bundles after a rebuild.
- Pass extensionMode to KiloProvider so dev reload is only active
  when running from the Extension Development Host.
@markijbema markijbema force-pushed the mark/dev-reload-and-cache-busting branch from c4d31b5 to ef26708 Compare February 10, 2026 16:37
…cache busting

Addresses PR #215 review feedback:

1. Replace FileSystemWatcher-based dev reload with Vite HMR
   - Add vite + vite-plugin-solid dev dependencies
   - Create webview-ui/vite.config.ts with port discovery plugin
   - Create webview-ui/index.html as Vite dev server entry
   - Add watch:vite script to package.json
   - Add getHMRHtmlContent() that connects to Vite dev server for
     true Hot Module Replacement (preserves component state)
   - Falls back to static build when Vite isn't running

2. Remove Date.now() cache busting from production HTML
   - Removes ?v=${bust} query params that defeated HTTP caching
   - Content-hashed filenames from the bundler handle cache invalidation

3. Remove devReloadWatcher field and setupDevReload method entirely
   - With Vite HMR each webview connects to the dev server independently
   - No more watcher cleanup issues with multiple webviews
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant