Mullion — ページだけを映すフレームレスブラウザ

動画や BGM を流しっぱなしにしたいだけなのに、ブラウザで開くとタブバーもツールバーもブックマークバーも付いてくる。ウィンドウの上半分が「ページを見るための道具」に占められ、肝心のページが縮む。
Mullion は、URL やローカルファイルを ページだけ のウィンドウで開く Electron 製のフレームレスブラウザ。ナビゲーションバーは呼んだときだけ現れ、用が済めばまた引っ込む。ページ読み込み後にスクリプトを流すこともできるし、Dock ではなくメニューバーに常駐させることもできる。
名前は、窓を細く分ける方立 (mullion) から。窓を構成する部品のうち、唯一「気付かれないこと」を期待されているもの。
ダウンロード・ソース
- Homebrew —
brew install --cask cyberneura/tap/mullion - ▶ 最新版をダウンロード (GitHub Releases)
- GitHub リポジトリ (ソースコード)
macOS 版は Apple Developer ID 署名 + 公証済みの universal build (Intel / Apple Silicon)。
主な機能
- タイトルバーは 30px の 1 行だけ — ウィンドウボタン・favicon・タイトルのみ。オーバーレイではなく確保された行なので、ページの上に何も乗らない。タイトルをクリックするとナビゲーションバーが開閉する
- 呼べば出るナビゲーションバー — 画面上端に 300ms ポインタを置く /
Cmd+L/ タイトルクリックで出現し、ページをクリックすれば消える。タブが 2 つ以上あってもバーごと引っ込むので、放っておいたウィンドウにはページしか映らない - メニューバーモード (
--menubar) — トレイアイコンに紐づくポップオーバーになる。左クリックで開閉、右クリックでメニュー - 読み込み後のスクリプト実行 (
--js/--playwright) — 「開いたら再生ボタンを押す」までを起動時に済ませられる。Playwright 互換 API を DOM 上に再実装しているので、page.click()やexpect(...).toBeVisible()を含む既存のコードがそのまま動く。既定ではコマンドラインで指定したページにだけ適用され、リンクを辿った先には引き継がない - ページ右クリックメニュー — スクリーンショット保存、既定ブラウザで開く、URL の QR コード表示 (生成はプロセス内で完結し、URL を外部へ送らない)、コマンドライン指定のページへの Restart
- タブとセッション復元 (
--restore)、--always-on-top/--zoom/--titleなどの見た目の固定 - ローカルファイル — PDF・画像・音声・動画・HTML は Chromium 内蔵ビューアに渡す。標準入力から HTML を流し込むこともできる
実装上の判断
タイトルバーの favicon は、メインプロセスがページ自身のセッションで取得してデコード済み PNG として渡す。タイトルバーに URL を直接持たせるとリクエストがコンテンツパーティションの外に出てしまうため。取得するのは http(s) のみで、file: やカスタムプロトコルを辿らせない。表示するのも PNG だけ — 画像はデコード前にサイズを測る必要があり (256KB のデータが数 GB のキャンバスを宣言できる)、PNG はサイズを 1 箇所で 1 度しか名乗らないのに対し、JPEG は名乗り方も偽り方も複数あるため、測らずに拒否している。
CLI パーサ・ターゲット判定・スクリプト包み・QR エンコーダ・PNG ヘッダ解析は Electron に依存しない純粋なモジュールに切り出してあり、ブラウザを起動せず node --test で検証できる。
技術スタック: Electron / Chromium。macOS 向けに署名・公証済みの universal dmg を GitHub Releases と Homebrew cask で配布。MIT ライセンス。