An open-source workspace browser β all your web apps in one window.
A free, privacy-friendly alternative to Rambox. Keep Gmail, Slack, Discord, WhatsApp, Messenger, and any other web app together in one window β one click apart, each in its own isolated session.
Click the link above to download the installer, run it, and you're done β no setup required.
Juggling a dozen browser tabs for the apps you use all day is noisy and easy to lose. Largs Hub gives each web app a dedicated home in a single, distraction-free window β with real unread badges, isolated logins, and a native desktop feel. It's fully open source, stores everything locally, and has no account, telemetry, or subscription.
| ποΈ Unified workspace | Add any web app by URL and switch between them from a clean sidebar. Reorder services by drag-and-drop. |
| π Isolated sessions | Every service runs in its own Chromium session partition, so logins and cookies never mix β sign in to two accounts of the same app without conflict. |
| π Real unread badges | Per-service notification detection (Gmail's feed, Messenger/WhatsApp DOM, and window-title counts) surfaces accurate unread counts on the sidebar and taskbar. |
| π€ Service hibernation | Optionally unload idle services to reclaim RAM; they reload on next click and stay logged in. Great for lower-memory machines. |
| π In-app link preview | Open links in a lightweight in-app popup via the "View Link" context action instead of losing your place or leaving the app. |
| π₯οΈ Native desktop feel | Frameless custom titlebar with back/forward/reload, persistent window size & position, native context menus, and light/dark themes. |
| β¨οΈ Keyboard shortcuts | Jump between services with Ctrl+1β9, even while a web app has focus. |
| π₯ Download handling | Configurable download location and completion notifications. |
| π Focus options | Per-service mute and optional blur-when-inactive for privacy. |
| π Notion Note Taker | Built-in note taker backed by your own Notion database. |
| π€ Messenger automation | Optional automation panel for Messenger: scheduled and interval messages, emoji bursts, and automated in-app call cycles. |
| β¬οΈ Auto-updates (Windows) | Checks GitHub Releases and installs the latest version in-app. |
| π΅οΈ Private by design | No account, no tracking, no cloud. All data lives in a local electron-store file on your machine. |
Easiest way β one click:
That link always gives you the newest version. Once it downloads:
- Open the downloaded
Largs Hub Setup.exe. - If Windows shows a "Windows protected your PC" prompt, click More info β Run anyway (this appears because the app isn't code-signed yet).
- Follow the installer β that's it.
Prefer to see all versions and release notes? Browse the Releases page. The installer is Largs Hub Setup.exe (NSIS), and it keeps itself up to date in-app.
macOS & Linux: There are no prebuilt macOS or Linux downloads yet. The packaging config includes
.dmgand.AppImagetargets, so you can build them from source on those platforms β but they're currently unofficial, untested, and don't receive auto-updates. Contributions to harden cross-platform support are very welcome.
- Launch Largs Hub.
- Click οΌ Add Service in the sidebar.
- Give it a name and the web app's URL (e.g.
https://mail.google.com), then save. - Sign in once β your session is remembered and isolated from every other service.
Repeat for each app you want in your workspace.
- Node.js 18 or newer
- npm
git clone https://github.com/devlargs/largs-hub.git
cd largs-hub
npm installnpm run devStarts the Vite dev server, the Electron TypeScript watcher, and Electron itself (with hot reload) concurrently.
| Script | Description |
|---|---|
npm run dev |
Run the app in development with hot reload |
npm run build |
Type-check and build the renderer + Electron bundles |
npm run electron:build |
Build and package a platform installer into release/ |
npm run typecheck |
Type-check the renderer, Electron, and test projects |
npm run lint / npm run lint:fix |
Lint with ESLint |
npm run format / npm run format:check |
Format with Prettier |
npm test |
Run the Vitest unit suite |
Windows packaging note: If you hit symlink errors during
electron:build, enable Developer Mode in Settings β System β For developers.
- Electron β desktop shell with a layered
WebContentsViewarchitecture - React 19 + TypeScript β renderer UI, fully typed across main/preload/renderer
- Vite β dev server and bundler
- Tailwind CSS 4 β styling with Catppuccin-style theme variables
- Zustand β lightweight renderer state (notification counts)
- electron-store β local persistence for services and preferences
- electron-builder β packaging and auto-updates
- Vitest + ESLint + Prettier β testing and code quality, run in CI on every PR
Largs Hub is built on a three-layer WebContentsView stack hosted in a single frameless window:
- UI view β the React app (sidebar, titlebar, modals, settings), rendered transparently over the full window.
- Service views β one
WebContentsViewper enabled service, each with its ownpersist:service-<id>session partition for isolated logins. Only the active one is visible. - Overlay views β the link-preview and call popups, layered on top.
The main process owns all persistence, native menus, notification detection (via pluggable per-service badge adapters), download handling, and the auto-updater. The renderer holds only runtime UI state and communicates through a typed IPC bridge (main.ts handler β preload.ts API β types.ts interface).
largs-hub/
βββ electron/ # Main process & preload
β βββ main.ts # Window + layered view orchestration
β βββ preload.ts # Typed contextBridge API
β βββ serviceViews.ts # Service-view lifecycle, calls, hibernation
β βββ store.ts # electron-store schema & helpers
β βββ downloads.ts # Download session handling
β βββ updater.ts # GitHub Releases auto-updater
β βββ notificationCounts.ts
β βββ messengerAutomation.ts
β βββ notionNotes.ts
β βββ badge-adapters/ # Per-service unread-count detection
β βββ ipc/ # services & settings IPC handlers
βββ src/ # React renderer
β βββ components/ # UI components
β βββ store/ # Zustand stores
β βββ types.ts # Shared IPC/types
β βββ App.tsx
β βββ index.css
βββ test/ # Vitest unit tests
βββ assets/ # App & service icons
Contributions are welcome!
- Fork the repository
- Create a feature branch (
git checkout -b feat/your-feature) - Make your changes
- Verify locally:
npm run typecheck,npm run lint, andnpm test - Commit with a descriptive message (
git commit -m "feat: add your feature") - Push and open a Pull Request
- Follow the existing style β TypeScript throughout, functional React components, Tailwind + CSS-variable theming.
- Keep the main / preload / renderer layers cleanly separated; add IPC in all three places (
main.ts,preload.ts,types.ts). - Keep PRs focused β one feature or fix each.
- Update
CHANGELOG.mdwith a short, user-facing note for your change.
MIT Β© Ralph Largo


