- Published on
Browser DevTools Deep Dive 2026 — Chrome / Firefox / Safari / Edge / WebDriver BiDi / CDP / Lighthouse 12 / AI Assistance (Gemini) Deep-Dive Guide
- Authors

- Name
- Youngju Kim
- @fjvbn20031
Browser DevTools is the tool a front-end engineer opens more often than the IDE. By 2026, DevTools has long left the "Inspect Element" era behind. AI explains console errors for you, the BiDi protocol is replacing CDP, Lighthouse 12 reports INP as a first-class metric, and Recorder turns clicks into automated workflows. This article is a single map of the Chrome / Firefox / Safari / Edge DevTools landscape as of May 2026, along with the CDP / BiDi / Lighthouse / automation ecosystem around them.
1. The 2026 Browser DevTools Map — Four Camps: Chrome / Firefox / Safari / Edge
The reason it is hard to lump DevTools into one description is that "which browser you debug in" maps directly to "which protocol, which UI, and which limits you live with." As of 2026 the market sorts into four camps.
- Chrome DevTools — the Chromium home, the de-facto standard for CDP (Chrome DevTools Protocol)
- Firefox DevTools — Mozilla's independent line, inheriting the Quantum era
- Safari Web Inspector — Apple's debugger on the WebKit side
- Edge DevTools — a Chromium fork with a 3D View and Edge-specific panels
| Camp | Base | Protocol | Strengths | Weaknesses |
|---|---|---|---|---|
| Chrome DevTools | Chromium | CDP + BiDi | richest UI, AI Assistance | cannot debug mobile Safari |
| Firefox DevTools | Gecko / Quantum | RDP + BiDi | best CSS Grid inspector | declining market share |
| Safari Web Inspector | WebKit | Inspector Protocol | only way to debug iOS / iPadOS on device | UI is conservative |
| Edge DevTools | Chromium | CDP + BiDi | 3D View, accessibility tree | 90% identical to Chrome |
Along the standards axis, WebDriver BiDi (W3C) enters the picture. In 2026 Selenium 4.x, Playwright 1.50+, and Cypress 14 have all adopted BiDi as a first-class back end. CDP remains a Chrome-only superset, while BiDi becomes the common language for cross-browser automation.
2. Chrome DevTools — Richest, the Home of the CDP Standard
Chrome DevTools is still the biggest camp. As of May 2026, the DevTools that ships with Chrome 137 stable contains 14+ main panels: Sources / Elements / Network / Performance / Memory / Application / Lighthouse / Recorder / Security / Privacy Sandbox / AI Assistance and more.
CDP is a WebSocket-based RPC protocol. To remote-debug Chrome from outside, you launch it like this.
google-chrome \
--remote-debugging-port=9222 \
--user-data-dir=/tmp/chrome-debug \
https://example.com
Then hit http://localhost:9222/json to get a JSON list of open tabs. Grab the WebSocket URL, send CDP method calls, and you can drive Chrome from code.
import WebSocket from 'ws'
const ws = new WebSocket('ws://localhost:9222/devtools/page/ABC123')
ws.on('open', () => {
ws.send(JSON.stringify({ id: 1, method: 'Page.navigate', params: { url: 'https://www.google.com' } }))
})
Puppeteer, Playwright (Chromium mode), Lighthouse, and the Chrome Headless Shell all speak CDP. The Chrome DevTools UI itself is just a web app that talks CDP back to its own host.
Key shifts in Chrome DevTools across 2025-2026:
- The Performance panel folds into Performance Insights, which automatically surfaces LCP / INP / CLS findings.
- AI Assistance (Gemini) ships GA and is embedded in Console / Network / Performance.
- Recorder groups steps into Workflows that export to JSON, Puppeteer, Cypress, or Playwright.
- A Privacy Sandbox tab now lives under Application, covering Topics, Protected Audience, and the Storage Access API.
- CSS Overview moves next to Elements and gets used much more often.
3. Firefox DevTools — The Second Camp, Inheriting the Quantum Era
Firefox DevTools, share aside, has held on to a set of areas where "Firefox is just better." The flagship example is the CSS Grid inspector. Chrome caught up after 2020, but Firefox's line-number toggle, area-names overlay, and transform overlay are still widely considered a notch above.
Since the Quantum engine (2017+), Firefox rewrote the entire DevTools stack on React + Redux. That codebase still lives under devtools/client/ in mozilla-central. Over 2024-2025 Mozilla pushed two big tracks.
- A first-class WebDriver BiDi implementation, gradually replacing Marionette
- Firefox Profiler integration — the standalone profiler at profiler.firefox.com is now invoked straight from the DevTools Performance tab
The weakness of Firefox is less about share and more about the cases where a site depends on Chrome-only APIs and simply cannot be debugged in Firefox at all. So by 2026 Firefox DevTools settles into the role of "compatibility verifier outside Chrome."
Areas where Firefox-specific strengths still hold:
- Storage Inspector — IndexedDB / Cookies / Cache on one screen
- The cleanest HAR export in any browser's Network Monitor
- Accessibility Inspector with color-contrast simulation
about:debuggingas a coherent UI for remote debugging
4. Safari Web Inspector — Apple, the WebKit Debugger
Safari Web Inspector is the only tool that can debug macOS Safari, iOS Safari, iPadOS Safari, visionOS Safari, and WKWebView in real apps. After the EU DMA went into effect in 2024, alternative engines (Blink, Gecko) became legal on iOS, but WebKit still owns 95%+ of the market, so debugging mobile Safari in 2026 is still debugging Web Inspector.
How to connect:
- On the iPhone / iPad, enable Settings - Safari - Advanced - Web Inspector
- Plug the device into macOS over cable
- macOS Safari - Develop menu - device name - pick the open tab
Once connected, Web Inspector pops up with the same UI as desktop Safari. You can see the device's memory, CPU, and network live.
Web Inspector strengths:
- iOS Safari debugging on real hardware — nothing else does this
- Audit tab — not Lighthouse, but a rules-based auditor in its own right
- Timelines / Memory / Canvas / Layers — metrics closer to WebKit internals
- Responsive Design Mode is identical to the desktop Safari mode
The weakness is that Inspector's UX is conservative. Chrome's AI Assistance, Recorder, and Workflows have no equivalents here, and keyboard shortcuts differ. A lot of teams therefore only fire it up when "this only breaks on iOS Safari."
5. Edge DevTools — A Chromium Fork with 3D View and an Accessibility Tree
Edge DevTools is Chromium-based and is 90% identical to Chrome DevTools. But Microsoft has shipped a handful of differentiating panels.
- 3D View — visualizes the DOM tree in 3D, strong for z-index and Composited Layer debugging
- Microsoft-specific checks in the Issues panel — Edge for Business policies, enterprise compatibility
- Microsoft Edge Tools for VS Code — a full DevTools surface inside VS Code
- Application Insights integration — Azure telemetry
Edge DevTools really shines when you debug from inside VS Code. With Microsoft Edge Tools for VS Code you can stay in one window for:
- Breakpoints set in the VS Code debugger
- An Edge DevTools panel embedded in the VS Code sidebar
- CSS Mirror Editing — changes in the inspector flow directly to your SCSS / CSS source file
For an enterprise stack on Windows + VS Code + Edge, this combo is more integrated than running Chrome DevTools out of the browser. The drawback is that new features land in Chrome upstream first and roll into Edge about a major version later.
6. WebDriver BiDi (W3C) — The CDP Successor and Common Language for Cross-Browser Automation
CDP started around 2009 as an internal Chrome protocol, and Puppeteer / Playwright have used it as a near-standard ever since. The problem is that CDP is Chrome-only. Firefox and Safari speak their own protocols (Marionette and Inspector Protocol respectively), so cross-browser automation libraries had to branch internally.
To fix this, W3C began standardizing WebDriver BiDi (Bidirectional). The old WebDriver Classic (the one Selenium uses) was a one-way HTTP request/response model, which made real-time events (network, console, DOM mutations) hard to capture. BiDi is WebSocket-based and bidirectional, putting CDP-class functionality behind a standard.
Status as of May 2026:
- Chrome / Edge — BiDi is GA, though some domains still ship richer features on CDP
- Firefox — BiDi first-class, Marionette gradually deprecated
- Safari — partial BiDi (browser, browsingContext, log domains), with network / script in progress
- Selenium 4.20+ — BiDi command API is official
- Playwright 1.50+ —
--use-bidiflag selects the BiDi backend - Puppeteer 23+ — Firefox support has switched over to BiDi
What BiDi means is that automation tools can finally honor the long-promised "same code for Chrome, Firefox, and Safari." Not every capability (especially some CDP-only Performance trace paths) has migrated yet, so deep Chrome work will keep CDP as a companion for a while.
7. Chrome AI Assistance (Gemini, 2024.4) — AI Built Into DevTools
Chrome 124 (April 2024) shipped this as "Console Insights" first, and it has since grown into AI Assistance, an umbrella that spans Console / Network / Performance / Styles / Sources. In 2026 Gemini 1.5 / 2.0 sits behind it and offers:
- An explanation of a console error in one line, plus a fix proposal
- A natural-language read of one network request's status / headers / payload
- Plain-language narration of the call chain that caused a Long Task in a Performance trace
- A CSS-side answer to questions like "why is this element not centered" from the Styles panel
- Variable-context explanations at the breakpoint when the debugger pauses in Sources
Enable it under the gear icon at the top right of DevTools - Preferences - Experiments - AI Assistance. It requires a Google account, and data is debounced and de-identified before being sent to Google servers (admins can disable it by policy).
Where AI Assistance really earns its keep is the moment you hit an error you cannot recognize. A console message like Uncaught (in promise) DOMException: Failed to execute 'transaction' on 'IDBDatabase' becomes one click: "The IndexedDB transaction was called after it closed. The cause is ..." A 30-minute search-Stack-Overflow loop shrinks to 30 seconds.
That said, the limits are clear. AI Assistance has no view of your monorepo or in-house code, so it cannot get you to "this is why your codebase trips this error." That part belongs to the IDE-side AI tools (Cursor, Claude Code, GitHub Copilot Chat).
8. Performance Insights + Trace + LCP / INP / CLS — The New Workflow
The classic Performance panel dumped the whole trace and made you find where LCP / FID / CLS happened. Performance Insights, added in 2024, flips this around.
Workflow:
- DevTools - Performance - Record - run your scenario - Stop
- LCP / INP / CLS positions are marked with colored markers on the trace
- The "Insights" side panel sorts detected issues into cards
- Clicking a card highlights the offending function, network request, or layout shift
Common insights:
- Render-blocking request — CSS / JS that blocks before LCP
- Long Task — a function that held the main thread for 50ms+
- Forced Synchronous Layout — JS that synchronously triggers layout
- LCP image not eagerly loaded —
loading="lazy"mistakenly attached to the LCP image - Document request latency — TTFB is too large
INP (Interaction to Next Paint) is the Core Web Vital that replaced FID in March 2024. Performance Insights visualizes INP per interaction. If one button click produced a 250ms INP, that interaction's input delay / processing time / presentation delay are broken into bars. Where to cut for a smaller INP becomes obvious at a glance.
9. Recorder + Workflows — No-Code E2E Automation
The Recorder panel records user actions and saves them as a replayable workflow. It started as a beta in Chrome 97 and is GA in 2026.
Basic flow:
- DevTools - Recorder - "Create a new recording"
- Enter the starting URL - start recording
- Click, type, scroll on the page
- Stop - save the workflow
What you can do with a saved workflow:
- Replay the same scenario — regression checks
- Tie it to a Performance trace — measure performance per scenario
- Export as code — Puppeteer, Playwright, JSON, Cypress, WebPageTest script
For example, a Puppeteer export of a Recorder workflow looks like this.
import puppeteer from 'puppeteer'
;(async () => {
const browser = await puppeteer.launch({ headless: false })
const page = await browser.newPage()
await page.setViewport({ width: 1280, height: 800 })
await page.goto('https://shop.example.com/')
await page.locator('input[name="search"]').fill('headphones')
await page.keyboard.press('Enter')
await page.locator('a.product-card >> nth=0').click()
await page.locator('button.add-to-cart').click()
await browser.close()
})()
QA records the scenario, hands it to engineering as code, and that code drops into the CI E2E suite. Compared with Cypress / Playwright's own record features, the strength of Recorder is "everything stays inside DevTools." The weakness is selector stability is lower.
10. Workspace — Edit Files in DevTools, Persisted to Disk
Workspace is the folder-mapping feature of the Sources panel. Connect a local directory to DevTools and the CSS / JS changes you make in the inspector get saved straight to the file on disk. No reload required.
Setup:
- Sources - Filesystem - "Add folder to workspace"
- Pick the local project folder - allow permission
- Files served on the network are mapped to disk files (URL domain → folder)
Since late 2024, Workspace has evolved further. In some setups you get automatic mapping (DevTools Project), where a single .devtools folder lets DevTools read:
- The workspace root path
- Source-map mapping rules
- Recommended device / network profiles
- AI Assistance context (codebase structure)
CSS Mirror Editing was pushed first by Edge DevTools and has since landed in Chrome. Color tweaks in the Styles panel are written straight back to the SCSS / CSS source file. No bundler step required.
11. Lighthouse 12 + Lighthouse CI + PageSpeed Insights — The Politics of the Score
Lighthouse has been Chrome's built-in audit tool since around 2018. Starting with Lighthouse 11 in Chrome 122 (February 2024), INP is a first-class metric, and Lighthouse 12 (late 2025) brings a Bento refresh so the five categories (Performance / Accessibility / Best Practices / SEO / PWA) line up in one row.
Local Lighthouse has two surfaces.
- The Lighthouse tab in DevTools (the simplest)
- The
lighthouseCLI package (for CI)
npm i -g lighthouse
lighthouse https://example.com --output html --output-path ./report.html
Lighthouse CI is the tool that prevents score regressions in CI like GitHub Actions. Example config:
name: lighthouse-ci
on: pull_request
jobs:
lhci:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
- run: npm ci && npm run build
- run: npx @lhci/cli@latest autorun
Encode the thresholds in .lighthouserc.json and PRs that drop a category below the bar get blocked.
{
"ci": {
"collect": { "url": ["http://localhost:3000/"], "numberOfRuns": 3 },
"assert": {
"assertions": {
"categories:performance": ["error", { "minScore": 0.85 }],
"categories:accessibility": ["error", { "minScore": 0.95 }]
}
}
}
}
PageSpeed Insights runs the same Lighthouse engine on Google's servers and also overlays the 28-day field data from CrUX (Chrome User Experience Report). Local Lighthouse is "lab data," CrUX is "field data," and PSI shows both side by side.
12. Privacy Sandbox Debugger — Debugging in a Cookie-less World
Third-party cookies are being phased out of Chrome in stages. Privacy Sandbox is the bundle of APIs that step in: Topics API (interest signals), Protected Audience API (formerly FLEDGE, for retargeting), Storage Access API, Attribution Reporting API, CHIPS (Cookies Having Independent Partitioned State), Federated Credential Management (FedCM), and others.
These APIs are hard to debug. Data is de-identified, some events fire only after a delay, and there is no direct way to read the result. So the Application tab in Chrome DevTools grew a Privacy Sandbox section.
What you can see:
- Topics — the topics currently inferred for the user
- Protected Audience — registered interest groups, in-flight and completed auctions
- Storage Access — per-iframe storage access state
- Attribution Reporting — pending source / trigger events and the report queue
- CHIPS — partitioned cookie state
- FedCM — Identity Provider and Relying Party setup
In test environments, Chrome flags (chrome://flags) force-enable or disable each API.
google-chrome \
--enable-features=BrowsingTopics,InterestGroupStorage,FledgeBiddingAndAuctionServer
If your day job is ads or marketing back-end work, in 2026 the Privacy Sandbox debugger is the panel you open most.
13. Animation Inspector + Memory + JS Profiler — Three Deep-Diagnosis Tools
Animation Inspector groups the page's CSS and Web Animations API animations onto one timeline. Use it when:
- A transition feels jittery — easing curve, duration collision
- A transform is happening on paint instead of composite
- A requestAnimationFrame loop and a CSS animation are out of sync
The Memory panel has two big tools.
- Heap snapshot — captures the object tree at a point in time
- Allocation timeline — shows allocation rate over time
The canonical memory-leak playbook is the "three-snapshot" technique. (1) Baseline snapshot - (2) run the suspected scenario - (3) second snapshot - (4) run it again - (5) third snapshot. Objects that grow monotonically from 1 to 2 to 3 are the leak candidates. Detached DOM Tree is the most common smoking gun.
The JS Profiler (the main-thread trace in the Performance panel) shows self time and total time per function. Since 2024 V8's sampling profiler has gotten precise enough that any function over 200ms is almost certainly captured. The horizontal width of the flame chart is time.
14. Coverage Tab — Finding Unused Code
The Coverage tab shows the fraction of each JS / CSS file actually executed during load or an interaction. How to use:
- DevTools - Coverage tab (Cmd/Ctrl+Shift+P - "Show Coverage")
- Reload - run the scenario
- Used vs. unused bytes are tabulated per file
Files with a high unused ratio are prime targets for tree-shaking or code splitting. Vendor bundles in a large SaaS app routinely report 60-80% unused, and walking the report is how you decide what to split out into a dynamic import.
A warning — Coverage tells you "not used on this page / in this scenario," not "never used anywhere." Aggregate the unused report across routes, then narrow down the dead-code candidates.
15. Network Throttling + Device Emulation + CSS Overview — The Environment-Simulation Trio
Network throttling lives in the Network panel's top dropdown: No throttling / Slow 4G / Fast 4G / Offline. In 2026 Custom profiles let you dial in RTT, download, upload, and packet loss.
Device emulation is triggered by Toggle Device Toolbar (Cmd/Ctrl+Shift+M). Presets cover iPhone 15 Pro, Galaxy S24, iPad mini, and you can define a custom viewport. CSS media queries, viewport meta tags, touch event simulation, and geolocation overrides all run from one panel.
CSS Overview rolls page-wide CSS statistics onto a single page.
- The set of font-families, font-sizes, and line-heights in use
- The full color palette actually used
- The list of media queries
- Candidate unused selectors
- Text with low contrast (an accessibility hint)
It is the fastest tool when you need to rein in design-system consistency. If your color palette has diverged to 100 colors, you see it instantly.
16. Source Maps + Long Task Analyzer — Bundle Debugging and INP
Source maps map bundled, minified, or transpiled code back to the original (.ts, .tsx, .jsx, .vue). Every 2026 bundler (Vite, Webpack, Rspack, Turbopack, esbuild, swc) emits them by default.
DevTools tips for source maps:
- Right-click in Sources - "Add source map" lets you wire in an external map manually
- Settings - Preferences - "Enable JavaScript source maps" should be on
- The Network panel's Initiator column shows the source-map-resolved path
- Production error reporters (Sentry and friends) restore stack traces to the original source when you upload source maps
The Long Task analyzer is the "Long Tasks" track in the Performance panel. Tasks that held the main thread for 50ms or more show up as horizontal bars. It is the first stop for INP debugging.
When INP is bad, walk through this checklist:
- Performance recording - reproduce the bad interaction
- Find which Long Task fired right after the interaction
- In the flame chart, follow the widest function or the deepest call chain
- Watch for forced reflow (the purple warning markers)
- Decide whether
requestIdleCallbackorscheduler.yieldcan yield the chunk
The 2025-era scheduler.yield() is the biggest INP-debugging change. Explicitly yielding from a long task drops INP immediately, and you verify the effect by re-running the trace in DevTools.
17. Puppeteer + Playwright + Cypress + chrome://inspect — The Bridge from DevTools to Automation
Puppeteer, Playwright, and Cypress are all close relatives of DevTools. All three speak CDP or BiDi at the back.
Comparison:
| Tool | Backend | Strengths | Weaknesses |
|---|---|---|---|
| Puppeteer | CDP (Chrome) / BiDi (Firefox) | lightest, deep Chrome access | weak cross-browser |
| Playwright | CDP + Patchright + BiDi | cross-browser, parallelism | steeper learning curve |
| Cypress | in-browser runner | developer-friendly UX | iframe / multi-tab limits |
Two scenarios for remote debugging:
(1) Same machine — start Chrome with --remote-debugging-port=9222 and visit http://localhost:9222
(2) Other machine / mobile — use chrome://inspect
Real-device Android debugging:
- Open
chrome://inspect/#deviceson the PC's Chrome - Enable USB debugging on the Android phone (Developer options)
- Plug in the USB cable
- Open a page in the phone's Chrome and a tab appears on the PC's chrome://inspect
- Click "inspect" and the PC DevTools attaches to the phone's page
iOS Safari does not support chrome://inspect. The only way is macOS Safari plus USB cable plus Web Inspector.
18. Korea / Japan — Toss Perf, NAVER D2, Mercari, Cybozu DevTools Blog
DevTools usage tracks "how deeply the org cares about performance." Looking at Korea and Japan, the picture is almost in sync with the global one.
Korea:
- Toss — the Frontend category on toss.tech is full of Lighthouse CI, INP debugging, and Long Task analysis case studies. Posts like "how we pushed INP below 100ms" rank #1 in search.
- NAVER D2 — d2.naver.com's front-end articles. NAVER D2 is the de-facto Korean-language reference for Chrome DevTools Performance and Memory snapshots.
- Kakao if(kakao) conference — every year there are one or two DevTools-perf sessions, and the videos go up on YouTube.
- Woowa Brothers (Baemin) — woowahan.com/tech publishes front-end perf case studies that mix CrUX and RUM data.
Japan:
- Mercari engineering — engineering.mercari.com runs a Web Performance series covering Lighthouse, INP, and Core Web Vitals work.
- Cybozu Frontend — blog.cybozu.io regularly publishes Chrome DevTools and Playwright integration posts.
- LINE Yahoo techblog — techblog.lycorp.co.jp. Debugging case studies grounded in RUM data from Japanese-domain traffic.
- DeNA testblog — testblog.dena.com publishes Cypress / Playwright BiDi-migration case studies on the automation side.
These differ in flavor from web.dev. They tend to bring real Korean (the three carriers) or Japanese (docomo / au / softbank) 4G / 5G RTT data and build Network throttling profiles from it.
19. Who Should Learn What Deeply — Full-Stack, Front-End, Mobile Web
DevTools is wide. Here is a role-by-role priority cheat sheet.
| Role | First priority | Second priority | Nice to know |
|---|---|---|---|
| Full-stack engineer | Network, Console, Sources | Performance Insights, Lighthouse | AI Assistance, Recorder |
| Front-end (UI) | Elements, Styles, Animation Inspector, CSS Overview | Workspace, Coverage | Memory, JS Profiler |
| Front-end (perf) | Performance, Long Task, Memory | Lighthouse CI, INP debugging | Privacy Sandbox |
| Mobile web | Device emulation, Network throttling, Safari Web Inspector | chrome://inspect (Android), Web Inspector (iOS) | BiDi-based mobile automation |
| QA / automation | Recorder, HAR export | Playwright + BiDi, Lighthouse CI | CDP message debugging |
| Security | Security panel, Application/Cookies, Privacy Sandbox | CSP debugging, Mixed Content | CORS simulation |
| Full-time debugger | AI Assistance, Sources debugger | Issues panel, Lighthouse | Three-snapshot Memory |
A suggested learning order for a new front-end engineer:
- Elements + Styles + Network + Console — 1 week
- Sources (breakpoints, conditional, logpoint) — 1 week
- Performance + Performance Insights — 2 weeks
- Memory + Coverage — 1 week
- Local Lighthouse + Lighthouse CI — 1 week
- Recorder + Workspace — 1 week
- AI Assistance — folded in at every step from here
Seven to eight weeks gets you to "I use 80% of DevTools." The remaining 20% you pick up as cases come up.
20. References
- Chrome DevTools — https://developer.chrome.com/docs/devtools
- Chrome DevTools Protocol — https://chromedevtools.github.io/devtools-protocol/
- WebDriver BiDi (W3C draft) — https://w3c.github.io/webdriver-bidi/
- Firefox DevTools — https://firefox-source-docs.mozilla.org/devtools-user/
- Safari Web Inspector — https://webkit.org/web-inspector/
- Edge DevTools — https://learn.microsoft.com/microsoft-edge/devtools-guide-chromium/
- Lighthouse — https://developer.chrome.com/docs/lighthouse
- Lighthouse CI — https://github.com/GoogleChrome/lighthouse-ci
- PageSpeed Insights — https://pagespeed.web.dev/
- Core Web Vitals — https://web.dev/articles/vitals
- INP guide — https://web.dev/articles/inp
- Privacy Sandbox — https://privacysandbox.com/
- Chrome AI Assistance — https://developer.chrome.com/docs/devtools/ai-assistance
- Recorder — https://developer.chrome.com/docs/devtools/recorder
- Workspace — https://developer.chrome.com/docs/devtools/workspaces
- Puppeteer — https://pptr.dev/
- Playwright — https://playwright.dev/
- Cypress — https://www.cypress.io/
- Toss Frontend — https://toss.tech/tech/categories/frontend
- NAVER D2 — https://d2.naver.com/
- Mercari engineering — https://engineering.mercari.com/
- Cybozu Frontend — https://blog.cybozu.io/
- web.dev — https://web.dev/