Project

swift-webapp-viewer

active

Chromeless macOS web app viewer — one URL, one native WebKit window, no browser furniture.

Overview

The missing macOS web app wrapper: a tiny native Swift shell that opens a specific URL in a WebKit window with as little visible chrome as macOS will allow. No address bar, no tab strip, no bookmark bar — just the page in a native window. Safari Web Apps bring too much browser furniture; Web App Viewer brings none.

How it works

Each window is a WKWebView that fills the frame. An invisible draggable strip at the top (right of the traffic lights) lets you move the window even with the titlebar suppressed. Traffic-light controls hide when the window isn't active. The default URL comes from DefaultWebAppURL in Info.plist — change it and rebuild. A Share Extension, a macOS Service, and a webappviewer://open?url= URI scheme round out the integration surface.

Features
🪟
Chromeless WebKit window

No toolbar, no address bar, no fullscreen frame — just the page.

🎯
Opinionated single-URL default

Set DefaultWebAppURL in Info.plist once; it opens on launch.

📤
Share Extension + macOS Service

"Open in Web App Viewer" appears in the Services menu and the system Share sheet.

🔗
URI scheme

webappviewer://open?url=… for external integrations and scripts.

🖱
Invisible drag strip

Narrow draggable area lets you move the window without visible titlebar chrome.

📦
Single `make` build

One command; app bundle at .build/WebAppViewer.app.

Architecture
URL Sources Info.plist default Share Extension webappviewer:// scheme Web App Viewer Native Swift NSWindowController Invisible drag strip Traffic lights hidden when window inactive WKWebView Full-frame WebKit no browser chrome Web any URL or app