A Chrome extension that finds, classifies, and lets you inspect HLS, DASH, MP4, audio, and RTMP media streams on any page β live, deduplicated, and segment-aware, in a stable side panel.
If ManifestHawk is useful to you, consider starring the repository β it helps other developers find it.
Screenshots below are placeholders and will be updated as new releases ship.
| Home | Search |
|---|---|
![]() |
![]() |
| Preview | Settings |
|---|---|
![]() |
![]() |
- Passive, per-tab network capture β no manual scanning required
- Classifies HLS (
.m3u8), DASH (.mpd), MP4, audio, and RTMP streams Content-Typesniffing catches manifests served without a matching file extension (common behind CDNs / signed-URL proxies)- DOM fallback scan inspects
<video>,<audio>, and<source>elements for players that setsrcvia JavaScript without a plain network request
- The same manifest re-requested (token refresh, cache-busting query params, live-playlist polling) updates one record with a request counter β it never spams the list
.ts/.m4ssegments are grouped under their parent manifest instead of listed individually
- Instant, debounced search across filename, hostname, URL, and stream type
- One-click category filters (HLS / DASH / MP4 / Audio / Other)
- Filter and search state combine seamlessly
- In-extension preview player: HLS via
hls.js, DASH viadash.js, native playback for MP4 and audio - Playback libraries are loaded on demand, only for the stream type being previewed
- Export the current (filtered/searched) view to JSON or CSV
- One-click Copy URL
- One-click generated ffmpeg command for any stream
- Live-updating side panel driven by throttled push updates from the background service worker β no polling, no flicker
- Survives tab switches without losing state
- Per-tab capture state persists across Manifest V3 service-worker restarts via
chrome.storage.session
- Theme: Dark / Light / System
- Remember last filter and/or last search
- Clear results for the current tab, or clear everything
- No captured data ever leaves your device
- The only outbound request ManifestHawk makes on its own is the optional Check for Updates call to the GitHub Releases API
- No remote code execution β every script ships inside the extension package, per Manifest V3 requirements
Most media-stream inspectors are either heavyweight DevTools plugins or blunt "list every network request" tools that bury the manifest you actually care about under hundreds of segment requests.
ManifestHawk was built around a few specific priorities:
- Developer experience first β one manifest, one row, with request counts and segment counts folded in instead of noise.
- Performance by default β push-based updates instead of polling, on-demand loading of playback libraries, and a debounced UI so the panel stays smooth even on high-churn pages.
- Minimal, honest permissions β every permission in the manifest is used for a specific, documented feature (see Permissions below) β nothing is requested "just in case."
- A modern, stable UI β a side panel instead of a popup, so it doesn't blink out of existence when you switch tabs or click elsewhere.
- Reliable inspection, not guesswork β extension-based,
Content-Type-aware detection catches streams that URL-pattern-only tools miss.
ManifestHawk is not yet on the Chrome Web Store β install it as an unpacked extension:
Option A β Clone:
git clone https://github.com/istiakrahman15/ManifestHawk.gitOption B β Download ZIP: Go to the repository, click Code β Download ZIP, then extract it.
- Open
chrome://extensions - Enable Developer mode (top-right toggle)
- Click Load unpacked
- Select the extracted/cloned
ManifestHawkfolder
ManifestHawk's icon will appear in your toolbar.
- Click the ManifestHawk icon in your toolbar β this opens the side panel.
- Play media on the current page (or navigate to a page that's already streaming). Detected streams appear live.
- Search or filter to narrow down the list by type, filename, or hostname.
- Expand a card to see the full URL, first/last-seen time, and available actions:
- Copy URL
- Open β preview it in-extension
- Download β save it via Chrome's downloader
- ffmpeg cmd β copies a ready-to-run
ffmpeg -i "..." -c copy output.mp4command
- Export the current view to JSON or CSV from the Settings panel.
- Check for Updates from the About section any time.
| Permission | Why it's needed |
|---|---|
webRequest |
Observe request URLs and response Content-Type headers to classify media streams. |
webNavigation |
Detect full-page navigations so stale, previous-page data is cleared. |
tabs |
Track the active tab and open the preview player / links in a new tab. |
storage |
Persist per-tab captures across service-worker restarts and save user settings. |
downloads |
Power the Download and Export actions. |
sidePanel |
Show ManifestHawk as a side panel instead of a popup. |
host_permissions: <all_urls> |
Media requests can be made to any origin β narrowing this would silently break detection on many sites. |
No data collection. ManifestHawk does not send any captured data off your device. The only outbound request it makes on its own is the optional Check for Updates call to the GitHub Releases API.
ManifestHawk/
βββ manifest.json Manifest V3 configuration
βββ background.js Service worker β capture, classify, dedupe, persist, push updates
βββ content.js DOM fallback scan (video / audio / source elements)
βββ sidepanel.html
βββ sidepanel.js Side panel UI β list, filters, search, settings, export
βββ sidepanel.css
βββ player.html
βββ player.js In-extension preview player (lazy-loads hls.js / dash.js)
βββ libs/ Bundled hls.js and dash.js
βββ icons/ Toolbar and store icons
βββ CHANGELOG.md
βββ RELEASE_NOTES.md
βββ LICENSE
| Path | Purpose |
|---|---|
background.js |
The persistent brain of the extension. Watches chrome.webRequest, classifies and deduplicates streams per tab, and pushes throttled updates to the side panel. |
content.js |
Runs on every page as a fallback: scans the DOM for <video>/<audio>/<source> elements whose src was set directly by page JavaScript. |
sidepanel.* |
The entire user-facing UI: stream list, search, filters, dashboard stats, settings, and export. |
player.* |
A minimal, standalone preview page opened in a new tab, capable of playing HLS/DASH/MP4/audio. |
libs/ |
Third-party playback libraries (hls.js, dash.js), bundled locally β no remote script loading. |
icons/ |
Extension icons at all required sizes. |
Every item below was manually re-verified as part of the v1.0.0 release process:
- Capture (network + DOM fallback), deduplication, and segment grouping
- Side panel: live push updates, tab-switch handling, no polling
- Search (debounced), filters, and combined filter + search state
- Copy URL, Open (preview player), Download, ffmpeg command
- Export to JSON / CSV
- Settings: theme (dark / light / system), remember-filter, remember-search, clear all
- Update checker against the GitHub Releases API, with a request timeout
- About panel and all outbound links (Repository / Issues / Support)
- Manifest V3 compliance, minimal permissions, no remote code
- RTMP detection is opportunistic. Chrome's network stack generally doesn't expose native
rtmp://traffic to extensions, so ManifestHawk mainly catches RTMP URLs surfaced indirectly (for example, embedded in a page's JavaScript or JSON). - No virtual scrolling. The stream list is a plain DOM list, capped at 500 records per tab. Extremely long-lived, high-churn pages won't scale past that cap.
| Milestone | Focus |
|---|---|
| v1.0 | β Stable Chrome release β core detection, side panel, preview, export, settings |
| v1.1 | Performance improvements |
| v1.2 | Additional UX improvements |
| Future | Firefox support (planned after the Chrome build reaches maturity) |
This roadmap reflects current intent, not commitments β features are added deliberately and only once they meet the same quality bar as v1.0.
Does ManifestHawk collect data? No. All processing happens locally in your browser. Nothing captured is ever sent anywhere. The one exception is an optional, user-initiated "Check for Updates" call to the GitHub Releases API.
Does it work offline? ManifestHawk only detects media streams that a page actually requests, so it needs the page itself to load content over the network. The extension has no other online dependency β the update check is optional and only runs when you click the button.
Does it support Firefox? Not yet. Firefox support is on the roadmap for after the Chrome build matures. There's no timeline yet.
Why doesn't every stream preview? Browsers can't play RTMP natively, so RTMP entries can't be previewed in-browser β use the generated ffmpeg command or an external player like VLC instead. Some MP4/audio URLs may also fail to preview if the source requires authentication headers the preview player doesn't send.
Contributions are welcome β bug reports, fixes, and thoughtful improvements alike.
- Open an issue first for anything beyond a small fix, so the approach can be discussed before you invest time.
- Fork the repository and create a feature branch from
main. - Keep changes focused β one concern per pull request.
- Match the existing code style (no build step; plain, dependency-free JS/HTML/CSS).
- Don't add new permissions without discussing the justification in an issue first β see Permissions for the bar every existing one meets.
- Test your change as an unpacked extension before opening a PR: verify capture, the side panel, preview, search/filters, export, and settings all still behave correctly.
- Open a pull request with a clear description of what changed and why.
- π Found a bug? Open an issue
- π‘ Have a feature request? Open an issue and tag it as a feature request
- β Like the project? Star the repository
- β Want to support development? supportkori.com/istiakrahman15
Developed and maintained by Istiak Rahman
- Repository: github.com/istiakrahman15/ManifestHawk
- Support: supportkori.com/istiakrahman15
Released under the MIT License.
Built with care for developers.
If ManifestHawk helps you, consider giving the repository a β



