Stream console logs and network activity from all your browsers to the terminal in real-time.
# Launch Chrome and start listening
npx devtap --open http://localhost:3000
# Or attach to already-running browsers
npx devtap[chrome] [console] log "User clicked submit"
[chrome] [console] error Uncaught TypeError: Cannot read property 'x' of null
[chrome] [network] ← REQ GET https://api.example.com/users
│ Host: api.example.com
│ Authorization: Bearer [REDACTED]
│ Accept: application/json
[chrome] [network] → RES 200 OK (142ms)
│ Content-Type: application/json
│ Content-Length: 1234
[firefox] [console] warn "Deprecated API usage"
[firefox] [network] ← REQ GET https://cdn.example.com/app.js
[firefox] [network] → RES 200 OK (312ms)
[webkit] [console] log "Page loaded"
- Multi-browser — Chrome, Edge, Firefox, and WebKit (via Playwright) in parallel
- Console + Network — full request/response with headers, body, and timing
- Secret redaction —
Authorization,Cookie, API keys auto-redacted by default - Host filtering —
--host api.example.comor--host "*.example.com" - Status filtering —
--status 4xxto see only errors - LLM-readable output —
--llmflag for clean markdown, perfect for AI tools - JSON output —
--jsonfor NDJSON piping - Compact mode —
--compactfor single-line network summaries - Tail mode —
-n 100to keep last N events - Auto-launch —
--open http://localhost:3000launches browser(s) and starts listening instantly - Headless mode —
--headlesswith--openfor CI/scripting (no visible browser window)
The easiest way to use devtap — launch a browser and start listening:
# Launch Chrome, open a URL, and stream all logs + network
npx devtap --open http://localhost:3000
# Launch multiple browsers at once
npx devtap --open http://localhost:3000 --browser chrome,firefox
# Headless mode (no visible window — great for CI/scripts)
npx devtap --open http://localhost:3000 --headless
# Headless + JSON output, piped to a file
npx devtap --open http://localhost:3000 --headless --json > logs.ndjsonAlternatively, attach to browsers you've already launched with debugging enabled:
# macOS Chrome
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222
# macOS Edge
/Applications/Microsoft\ Edge.app/Contents/MacOS/Microsoft\ Edge --remote-debugging-port=9222
# Linux
google-chrome --remote-debugging-port=9222firefox --remote-debugging-port 6000Then in another terminal:
npx devtap# Launch browser and open URL (easiest)
npx devtap --open http://localhost:3000
npx devtap --open http://localhost:3000 --browser chrome,firefox,webkit
npx devtap --open http://localhost:3000 --headless
# Auto-detect and connect to all running browsers
npx devtap
# Filter to specific browsers
npx devtap --browser chrome
npx devtap --browser chrome,firefox
# Filter to specific streams
npx devtap --only console
npx devtap --only network
# Tail mode — show last N events then follow
npx devtap --tail
npx devtap -n 100
npx devtap -n 50 --only network
# Filter by host
npx devtap --host api.example.com
npx devtap --host "*.example.com"
npx devtap --host api.example.com,cdn.example.com
# Filter network by status
npx devtap --status 4xx
npx devtap --status 500
# Custom debug ports
npx devtap --chrome-port 9222 --firefox-port 6000
# JSON output (NDJSON, for piping)
npx devtap --json
# Disable secret redaction
npx devtap --no-redact
# LLM-readable mode — no colors, markdown-structured
npx devtap --llm
npx devtap --llm -n 50 --host api.example.com | pbcopy
# Compact network output (single-line)
npx devtap --compact
# Launch + headless + filter (great for CI)
npx devtap --open http://localhost:3000 --headless --only network --host localhost --json[chrome] [network] ← REQ GET https://api.example.com/users
│ Host: api.example.com
│ Authorization: Bearer [REDACTED]
[chrome] [network] → RES 200 OK (142ms)
│ Content-Type: application/json
[chrome] [network] ← GET https://api.example.com/users
[chrome] [network] → 200 https://api.example.com/users (142ms)
## Chrome — Network
### GET https://api.example.com/users
Request Headers:
Host: api.example.com
Authorization: Bearer [REDACTED]
Response: 200 OK (142ms)
Response Headers:
Content-Type: application/json
Response Body:
{"users": [{"id": 1, ...}]}
Each event is a single JSON line (NDJSON):
{"type":"network-request","browser":"chrome","method":"GET","url":"https://api.example.com/users","headers":{"Host":"api.example.com"},"timestamp":1700000000000}By default, devtap redacts sensitive values:
- Headers:
Authorization,Cookie,Set-Cookie,X-API-Key,X-Auth-Token,X-CSRF-Token, and more - Bodies:
password,secret,token,api_key,client_secret,private_keyfields - Tokens: JWT patterns (
eyJ...) and Bearer tokens
Use --no-redact to disable redaction.
| Browser | --browser flag |
--open |
Attach |
|---|---|---|---|
| Google Chrome | chrome |
✅ | ✅ |
| Chromium | chromium |
✅ | ✅ |
| Microsoft Edge | edge |
✅ | ✅ |
| Opera | opera |
✅ | ✅ |
| Brave | brave |
✅ | ✅ |
| Vivaldi | vivaldi |
✅ | ✅ |
| Arc | arc |
✅ | ✅ |
| Browser | --browser flag |
--open |
Attach |
|---|---|---|---|
| Firefox | firefox |
✅ | ✅ |
| Zen Browser | zen |
✅ | ✅ |
| Waterfox | waterfox |
✅ | ✅ |
| LibreWolf | librewolf |
✅ | ✅ |
| Floorp | floorp |
✅ | ✅ |
| Tor Browser | tor |
✅ | ✅ |
| Browser | --browser flag |
--open |
Attach |
|---|---|---|---|
| WebKit | webkit |
✅ | — |
| Safari | safari |
✅ | — |
MIT