LocalStorage: Small, synchronous storage that isn't available in Web Workers or Service Workers. It's read into memory on page nav and limited to 5-10MB, so keep it for small stuff. Sync access means you can update it on page unload, though.
Cache Storage: good for content-addressable stuff (i.e. assets like JS, CSS, and HTML). Use in a Service Worker.
IDB: everything else. Large data, asynchronously accessed, agnostic to whether it's accessed on main thread or in a worker.