SafeClaw as a PWA: Install It Like a Native App
SafeClaw as a PWA: Install It Like a Native App
The SafeClaw dashboard started as a web page served by a local daemon. It worked, but it felt like a second-class citizen on your desktop. You had to remember the URL, find the right browser tab, and keep it open to receive notifications. We wanted SafeClaw to feel like a native app — without actually building one.
Progressive Web Apps gave us exactly that.
What You Get
When you install SafeClaw as a PWA, it behaves like a native application:
- Home screen icon — Launch SafeClaw from your dock, taskbar, or app launcher. No browser tabs to manage.
- Standalone window — SafeClaw runs in its own window without browser chrome. No address bar, no tab strip, no bookmarks bar cluttering the interface.
- Push notifications — Receive escalation alerts, deny notifications, and budget warnings as native OS notifications. Click to go directly to the relevant item.
- Offline access — The dashboard loads instantly even when SafeClaw's daemon is starting up, showing cached session data while it connects.
- Auto-updates — The PWA updates silently in the background. No manual downloads, no version management.
Why PWA Over Electron
We considered Electron. It would have given us native-level capabilities and a familiar distribution model. But Electron apps are heavy — 100MB+ for the runtime alone. SafeClaw's entire footprint is designed to be minimal. Adding a Chromium bundle would have violated our philosophy.
We also considered Tauri, which uses the system webview and has a much smaller footprint. It's an excellent framework. But it would have added a build-time dependency on Rust and a platform-specific distribution pipeline. For a tool that's already running a web server locally, a PWA was the zero-overhead option.
The PWA approach means the dashboard is the same code whether you access it as a tab in your browser or as an installed app. One codebase, one deployment target, zero platform-specific code.
The Service Worker
SafeClaw's service worker handles three responsibilities:
Caching — The dashboard's HTML, CSS, JavaScript, and static assets are cached on first load. Subsequent launches load from cache instantly while checking for updates in the background. The cache strategy is stale-while-revalidate for assets and network-first for API data. Background Sync — If you approve an escalation while the daemon connection is temporarily interrupted, the approval is queued by the service worker and sent when the connection resumes. This prevents the frustrating experience of tapping "approve" and having nothing happen. Push Notifications — The service worker receives push events from SafeClaw's daemon and displays native OS notifications. Notification payloads are compact — just enough data to render the notification and deep-link to the correct dashboard view.Mobile Experience
The PWA is fully responsive. On mobile devices, it adapts to the smaller screen with a simplified layout optimized for the most common mobile action: reviewing and responding to escalations.
The swipe-to-approve feature we discussed in a previous post is part of the PWA's mobile experience. Combined with push notifications, it creates a seamless flow: notification arrives, tap to open, swipe to approve, done.
Installing SafeClaw as a PWA
Installing is straightforward. Open the SafeClaw dashboard in Chrome, Edge, or Safari. You'll see an install prompt (or use the browser's "Install App" option). On mobile, use "Add to Home Screen."
After installation, SafeClaw appears in your app launcher alongside your other applications. On macOS, it shows up in Spotlight. On Windows, it appears in the Start menu. On mobile, it's on your home screen.
Detailed installation instructions for each platform are in our documentation. The PWA implementation, including the service worker and manifest, is on GitHub.
The PWA approach lets us deliver a native app experience with zero additional dependencies. It's the right tool for the job — lightweight, universal, and always up to date.