ServiceWorker

ServiceWorker API for request handling.


Lifecycle

parsing → installing → installed → activating → activated

Events

fetch

Fires for incoming requests.

self.addEventListener("fetch", (event) => {
  event.respondWith(new Response("Hello"));
});

install

Fires once during worker registration.

self.addEventListener("install", (event) => {
  event.waitUntil(initializeApp());
});

activate

Fires after successful installation.

self.addEventListener("activate", (event) => {
  event.waitUntil(runMigrations());
});

FetchEvent

Property Type Description
request Request Incoming request
clientId string Client identifier

respondWith(response: Response | Promise<Response>): void

Sets the response.

event.respondWith(new Response("OK"));
event.respondWith(fetchFromAPI(request));

waitUntil(promise: Promise<any>): void

Extends event lifetime for background work.

event.respondWith(new Response("OK"));
event.waitUntil(logRequest(request)); // Doesn't block response

ExtendableEvent

Base interface for lifecycle events.

waitUntil(promise: Promise<any>): void

Delays event completion until promise resolves.

self.addEventListener("install", (event) => {
  event.waitUntil(cacheAssets());
  event.waitUntil(validateConfig()); // Multiple calls OK
});

Globals

Global Type Description
self ServiceWorkerGlobalScope Global scope
caches CacheStorage Cache API
databases DatabaseStorage ZenDB
directories DirectoryStorage FileSystem
loggers LoggerStorage Logging
cookieStore CookieStore Cookies
crypto Crypto Web Crypto API
fetch function Fetch API

fetch() During Lifecycle

Relative URLs route through your own fetch handler:

self.addEventListener("install", (event) => {
  event.waitUntil(
    (async () => {
      const response = await fetch("/404.html");
      const html = await response.text();
      // Write to static output
    })()
  );
});

Differences from Browser

Feature Browser Shovel
Runs in Browser Server
Registration JavaScript API Automatic
Updates navigator.serviceWorker App restart

Supported

Server-Only


See Also