Whatnot MultiView — Several Livestreams, One Window

Whatnot is a live shopping platform, and it shows one stream at a time. If you follow several sellers you end up switching back and forth, and browser tabs do not fix it — every tab keeps playing audio, so you spend the auction hunting for the one that is talking. MultiView is a small desktop app that puts the streams in a grid and gives each tile its own volume slider, mute button and solo button. It is open source, MIT licensed, and ships as an installer for all three desktop platforms.

Four livestreams side by side in the MultiView grid, each tile with its own volume controls

The grid with four streams. The screenshots on this page use a local demo page in place of live streams, so no third-party content ends up in the repository — the interface is the real one.

Why it is a desktop app and not a website

This was the first thing I checked, and it settled the whole architecture in one command:

$ curl -sSI https://www.whatnot.com/ | grep -i x-frame-options
X-Frame-Options: SAMEORIGIN

Whatnot sends X-Frame-Options: SAMEORIGIN together with a strict Content-Security-Policy. No website and no <iframe> can embed those streams — a browser-based multiview is not inconvenient, it is impossible. So the app is Electron, and each tile is a <webview>: a genuine separate browser view rather than a frame, which the embedding restriction does not cover. That also means every tile is a full browser — you log in, browse, chat and bid inside it.

App windowgrid, audio, layoutwebview — seller Aown volume, own historywebview — seller Bmuted, still playingwebview — seller Csoloed…more tilesadded at runtimeOne shared sessionpersist:whatnot — log in once

The part the app exists for: audio

Four streams playing at once is useless if you cannot control who is talking. Every tile carries its own strip, and three layers combine in a fixed order: master mute silences everything, an active solo silences every tile but one, and otherwise the tile's own mute decides. An audible tile then plays at tile volume × master volume.

A tile header: back, home, mute, volume slider, favourite, chat toggle, solo, focus, reload, open externally, close
  • Solo is the fastest control in the app. Press 19 and everything except that stream goes quiet — nothing pauses, so you miss nothing when you switch back.
  • New tiles start muted. Adding a stream never makes everything talk at once; you decide what you want to hear.
  • Focus mode lets one tile fill the window while the others keep running unseen, so their audio continues and nothing reconnects when you come back.
  • Muting is layered. Volume is set on the page's <video> elements, but mute is applied at the webview level — so if Whatnot ever rebuilt its player, mute and solo would keep working and only the fine-grained levels would be affected.

Hiding the chat without knowing a single class name

Collapsing the chat gives the video the whole tile, but there is no official way to do it and Whatnot renames its CSS classes without notice. So the app looks for the shape of the page instead: a tall narrow column right of the video in the desktop layout, or — since a narrow tile gets Whatnot's mobile layout, where no such column exists — a scrollable list of many short items, which is what a chat is in any layout. Every candidate is grown upwards to the enclosing panel, rejecting anything that holds the video or covers more than 80% of the page.

Heuristics fail, though, so there is a guaranteed way out: shift-click the chat button and the tile enters picking mode — hover until the chat is outlined, click it once, and that choice is remembered for every tile and across restarts. Alt-clicking copies a structural report for bug reports, carrying layout only and no message content.

What it does

FeatureWhat it means in use
Per-stream audioOwn slider and mute per tile, plus a master level over all of them
Solo19 hears one stream and silences the rest; nothing pauses
Focus modeOne tile fills the window while the others keep playing unseen
Chat toggleCollapse the chat per tile, by heuristic or by pointing at it once
FavouritesStar the page a tile is showing and reopen it in one click
Flexible gridAuto-square layout or a forced 1–4 columns, drag to reorder
One loginAll tiles share a session; it survives restarts
Dark by defaultLight theme one click away, both as CSS custom properties
Focus mode: one stream fills the window while the other tiles keep playing unseen

Focus mode. The other three tiles are hidden, not paused — their audio continues.

Build and release

Pushing a version tag builds an NSIS installer, a DMG for both Apple architectures and an AppImage, and attaches them to a GitHub release together with their checksums. A second, dependency-free workflow checks JavaScript syntax and every documentation link on each push — it runs in seven seconds, which is what makes it worth running every time. The screenshots and the app icon are generated from source by a script that renders the real interface with a local demo page in the tiles, so no third-party content or account data lands in the repository.

The builds are not code-signed, so Windows SmartScreen warns on first launch — the button you need is hidden behind More info. Published checksums let you confirm a download is byte-for-byte what CI produced, and building from source avoids the warning entirely.

Not affiliated with, endorsed by, or connected to Whatnot Inc. MultiView is a personal viewer that renders whatnot.com in embedded browser views; you need your own account, and use of the site remains subject to Whatnot's Terms of Service.

Project Overview

Back to my Projects