01The Ones You Should Already Be Using
fetch is the obvious one. If you are still reaching for Axios for straightforward HTTP work, stop. fetch handles JSON, streams, and request cancellation via AbortController. It does not throw on non-2xx responses — that trips up newcomers — but once you know that, a two-line wrapper covers it:
async function get(url) {
const res = await fetch(url);
if (!res.ok) throw new Error(res.statusText);
return res.json();
}Clean, zero-dependency, ships everywhere. The AbortController pattern also works natively with timeouts: AbortSignal.timeout(5000) is a one-liner that used to require a library.
IntersectionObserver is the lazy-loading story. Before it arrived, developers polled getBoundingClientRect in scroll handlers — a layout-thrashing nightmare. Now you declare which elements you care about, and the browser tells you when they enter or leave the viewport. Lazy images, infinite scroll, scroll-triggered animations: all of it collapses to a few lines. ResizeObserver does the same for element dimensions, replacing the janky patterns that watched window.resize and guessed. These two observers alone have killed several mid-sized utility libraries.
localStorage and sessionStorage have been around forever, but IndexedDB is what you reach for once data gets structural. It is asynchronous, it handles large payloads, and it survives page reloads. The raw API is verbose — consider a thin wrapper like idb — but the underlying capability is entirely native.
fetch handles JSON, streams, and request cancellation via AbortController .
02The Ones Worth a Second Look
The Web Workers API gets underused because the mental model feels awkward. But the premise is simple: run JavaScript on a background thread, keep the main thread free for the UI. Parsing a large JSON payload, running a Wasm module, doing client-side search across a big dataset — offload any of these to a Worker and your UI stays responsive. Comlink, a small wrapper by the Chrome team, makes the message-passing ceremony almost disappear.
MutationObserver watches the DOM for structural changes without polling. It is how most third-party script injection detectors work, and it is the right tool when you need to react to DOM changes you did not cause — third-party widgets, CMS-injected content, progressive enhancement on server-rendered markup.
The Clipboard API — navigator.clipboard.writeText — replaced the ancient document.execCommand('copy') hack that nobody ever felt good about. Async, permission-aware, and actually works reliably across browsers.
The Web Share API (navigator.share) lets you invoke the native share sheet on mobile, handing off a URL or text to whatever apps the user has installed. Check feature support first, then fall back to a copy-link button. That one-two punch covers almost every sharing scenario without pulling in a social-buttons library.
For persistent background work, the Background Sync and Periodic Background Sync APIs in service workers let you defer network requests until the user has connectivity — critical for offline-first apps. Pair them with the Cache API (also in service workers) for a complete offline story that used to require a framework.
03The Rule That Ties It Together
Check MDN before you install a package. The instinct to reach for npm is deeply ingrained, but the browser's built-in surface has quietly expanded to absorb a decade of common patterns. The platform itself is often enough — and native code has no bundle-size cost, no supply-chain risk, and no upgrade cycle to manage.
