Yep, it's super nice. The Service Workers API also makes this really easy too. I experimented with compiling a Rust Axum server to WASM and then ran it in my service worker. Also, thanks for incorporating fetch into htmx!

I thought I'd include an example of replacing fetch for anyone that come across this.

    const originalFetch = window.fetch;
    window.fetch = function(url, options) {
      if (url.includes('/api/user')) {
        const mockUser = {id: 1, name: 'John Doe', email: 'john@example.com'};
        return Promise.resolve(new Response(JSON.stringify(mockUser)));
      }
      return originalFetch(url, options);
    };
https://developer.mozilla.org/en-US/docs/Web/API/ServiceWork...

in htmx 4 you are able to swap it on a per-trigger basis, so need to muck w/the global fetch function:

   <button hx-get="/foo" hx-on:htmx:config:request="ctx.fetch = myCustomFetch">
     Do It
   </button>

Oh that’ll be much nicer. Would myCustomFetch then need to return a Response?

https://developer.mozilla.org/en-US/docs/Web/API/Response