Skip to content

devlargs/largs-hub

Repository files navigation

Largs Hub

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.

Latest release Downloads License: MIT Platform Built with Electron

Click the link above to download the installer, run it, and you're done β€” no setup required.

Largs Hub main window
More screenshots Multiple services Settings Add service

Why Largs Hub?

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.

Features

πŸ—‚οΈ 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.

Installation

Download (Windows)

Easiest way β€” one click:

That link always gives you the newest version. Once it downloads:

  1. Open the downloaded Largs Hub Setup.exe.
  2. If Windows shows a "Windows protected your PC" prompt, click More info β†’ Run anyway (this appears because the app isn't code-signed yet).
  3. 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 .dmg and .AppImage targets, 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.

Getting Started

  1. Launch Largs Hub.
  2. Click οΌ‹ Add Service in the sidebar.
  3. Give it a name and the web app's URL (e.g. https://mail.google.com), then save.
  4. Sign in once β€” your session is remembered and isolated from every other service.

Repeat for each app you want in your workspace.

Development

Prerequisites

Setup

git clone https://github.com/devlargs/largs-hub.git
cd largs-hub
npm install

Run in development

npm run dev

Starts the Vite dev server, the Electron TypeScript watcher, and Electron itself (with hot reload) concurrently.

Common scripts

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.

Tech Stack

  • Electron β€” desktop shell with a layered WebContentsView architecture
  • 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

Architecture

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 WebContentsView per enabled service, each with its own persist: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

Contributing

Contributions are welcome!

  1. Fork the repository
  2. Create a feature branch (git checkout -b feat/your-feature)
  3. Make your changes
  4. Verify locally: npm run typecheck, npm run lint, and npm test
  5. Commit with a descriptive message (git commit -m "feat: add your feature")
  6. Push and open a Pull Request

Guidelines

  • 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.md with a short, user-facing note for your change.

License

MIT Β© Ralph Largo

About

Open source Rambox/Station/Wavebox alternative built with Electron + React. My Personal Social Workstation

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors

Languages