What you'll learn: By the end of this lesson you will be able to name the processes and threads a browser uses and what each is responsible for, trace the path from typing a URL to an interactive page, explain how a click reaches your event handler and why a busy main thread makes a page feel frozen, say what the same-origin policy and site isolation protect, and turn that model into concrete front-end design decisions.
Think of an office building. At the front desk, a receptionist checks visitors in and routes parcels. Each company rents its own locked office, so a fire in one office does not burn the paperwork of another. A mailroom handles everything that comes and goes, and a print room with special equipment produces the finished posters. Nobody walks into another company's office just because they are in the same building.
A modern browser is organised the same way. The front desk is the browser process. The locked offices are renderer processes, where web pages live. The mailroom is the network service and the print room is the GPU process. This layout explains why a crashed tab does not take down your browser, why a third-party iframe cannot read your page, and why one slow script can make a whole page feel stuck while the rest of the browser stays alive.
The running example is a product page with three parts: an image carousel, a search box with suggestions, and a third-party chat widget loaded in an iframe from another company's domain. Each part touches a different corner of the browser's design.
This lesson describes Chromium, the open-source engine behind Chrome and Edge, because it has the most thorough public documentation. Other engines appear only where their own project documentation says something specific. Companion lessons (The Critical Rendering Path, The Event Loop and the Main Thread, HTTP Caching for the Front End, Rendering Strategies, Loading Performance and Core Web Vitals) go deeper on single stages. This lesson is the map.
The core idea
A browser downloads code from strangers and runs it on your machine, so it is built like a small operating system: it isolates untrusted work, schedules it and shares the screen. Its main pieces are the user interface (address bar, tabs), the networking layer (DNS, connections, TLS, HTTP, caching), the rendering engine that turns HTML, CSS and images into pixels (Blink in Chromium, per the Chromium multi-process architecture page), the JavaScript engine (V8 in Chromium) and storage and platform glue such as cookies and file access.
How the pieces are split across operating system processes (programs with private memory) and threads (parallel workers inside a process) is an implementation choice. The Chrome team says there is no standard specification for how to build a browser (Inside look at modern web browser, part 1). Standards define what pages can do; process layouts are what one browser does.
Three goals drive the split into processes:
- Stability. If a renderer hangs or crashes, other tabs keep working. Chromium shows a "sad tab" or "sad frame" for the affected pages and creates a new renderer on reload.
- Security. A renderer runs in a sandbox, a restricted environment with little access to files, display, input devices or network. Anything privileged goes through the browser process.
- Performance. Slow work in one page does not block the browser's interface, and drawing can run in parallel on other cores.
The processes in Chromium
Figure 1. Chromium's process layout for the product page
How to read this: the browser process is the hub. Each renderer holds one site's code and talks to the browser process over IPC (inter-process communication, messages between processes). Renderers hand finished frames to the GPU process. The chat iframe sits in its own renderer because it comes from a different site.
| Process | What it does | Notes from the sources |
|---|---|---|
| Browser | Runs the browser's own interface (address bar, bookmarks, back and forward), manages other processes, and does privileged work such as network requests and file access | One per browser. It is the "broker" that sandboxed processes ask for permitted actions. |
| Renderer | Runs everything inside a tab's web page: parsing, scripts, style, layout, painting, input handling | Several. In Chromium's RenderingNG documentation, one renderer handles one site and tab combination (RenderingNG architecture). |
| GPU | Aggregates frames from renderers and the browser UI, rasterises and draws using the graphics hardware | The RenderingNG documentation calls this role Viz and says there is one for all of Chromium. The older "Inside look" series calls it the GPU process. |
| Network service | Low-level networking: HTTP, sockets, WebSockets | A utility process by default on most platforms. On Android it runs inside the browser process (network service README). |
How many processes? It varies
There is no fixed answer. The "Inside look" article says Chrome caps the number of processes it starts, depending on the device's memory and CPU, and past the cap runs several tabs from the same site in one process. Chromium's process model document is more specific, at the time of writing (Process Model and Site Isolation):
- Desktop uses full site isolation with a soft process limit based on available memory, which can be exceeded when site isolation needs more processes.
- Android with 2 GB of RAM or more uses partial site isolation (only some sites, chosen by heuristics such as login or password entry) and relies on the operating system to discard processes.
- Low-memory Android, Android WebView and Chrome for iOS have no site isolation.
So "every cross-site iframe is in its own process" is the desktop Chrome case, not a guarantee.
How other engines differ
The same goals led other engines to the same broad shape, with differences in detail. The table lists only what each project's own documentation states, at the time of writing.
| Engine | What the documentation says |
|---|---|
| WebKit (Safari) | A UI process (the application), WebContent processes that load pages and are tightly sandboxed (no file system access unless the user grants it), and a shared Networking process that handles network access, the disk cache and storage APIs (WebKit2 architecture). It says web pages are loaded in their own WebContent process but does not spell out the exact rule for tabs and sites. |
| Gecko (Firefox) | A parent process (not sandboxed) and sandboxed content processes, plus helpers such as a GPU process that is "not used on all platforms". With Fission enabled, content from each site goes to its own webIsolated process; without it, most web content shares a pool of web processes (Gecko process model). |
All three keep web code in sandboxed processes apart from a privileged one. How finely they split sites, and on which platforms, differs and changes between versions.
From URL to interactive page
DNS, TCP, TLS and HTTP are covered in the request lifecycle. Here the focus is what the browser itself does around that exchange, following Chrome's "Inside look" part 2.
Figure 2. Navigation: from address bar to load event
How to read this: time runs downward. The browser process (its UI and network threads) owns the network and the decision of where a page runs; the renderer owns everything after the first bytes of HTML.
In steps:
- Handle input. The browser process decides whether what you typed is a search query or a URL.
- Start the request. A network thread does the DNS lookup and TLS setup and sends the request. If the server answers with a redirect such as 301, the browser starts another request.
- Read the response. The browser checks the first bytes to work out the content type, because the
Content-Typeheader can be missing or wrong. HTML goes to a renderer; a zip file goes to the download manager. A Safe Browsing check can show a warning page, and Cross-Origin Read Blocking (the term in Chrome's 2018 article; Chromium's newer mechanism is called Opaque Response Blocking) keeps some sensitive cross-site data out of the renderer. - Pick a renderer. The browser already knows the target site, so it can start a renderer in parallel with the request. The spare may go unused if the navigation redirects to another site.
- Commit. The browser process tells the renderer over IPC to commit the navigation and hands it the response stream. Once the renderer confirms, the address bar, security indicator and history update.
- Parse and render. The renderer parses HTML into the DOM (the in-memory tree of the page that scripts can read and change). A preload scanner looks ahead for images and stylesheets and requests them early. A synchronous
<script>can pause parsing;asyncanddeferavoid that. The Critical Rendering Path lesson covers this stage. - Finish. After
onloadhas fired in every frame, the renderer tells the browser process and the spinner stops. Scripts can still load more afterwards, so "loaded" is not "finished".
Two more details. Service workers (scripts between the page and the network) are consulted on navigation; if a scope matches, the browser starts a renderer to run the worker, which may answer from a cache (HTTP Caching for the Front End covers this). And navigating to a different site leaves the old renderer alive to run beforeunload and unload handlers while a new renderer takes the new page; the article warns against unconditional beforeunload handlers.
Inside one renderer: threads
A renderer has several threads (RenderingNG architecture):