Skip to content
This repository was archived by the owner on Oct 15, 2026. It is now read-only.
raftappPublic archive

About

[No longer maintained] Open-source Chrome tab manager: tab suspension and session management.

Resources

Security policy

Stars

5 stars

Watchers

0 watching

Forks

Repository files navigation

Warning

Raft is no longer maintained.

I'm sorry. I don't have the time to keep supporting Raft, so I've stopped working on it and archived this repository. Thank you to everyone who installed it, reported bugs, and sent feedback.

If you have Raft installed:

  • Your installed copy keeps working. Your sessions are stored locally in your browser, not on a server, so nothing is deleted. Raft won't get any more updates or fixes.
  • Export your sessions. Options → Sessions → Import / Export → Export JSON.
  • Cloud sync runs between your browser and your own Google Drive; there is no Raft server. If it stops working, your local sessions are unaffected. To remove the encrypted sync files from your Drive: drive.google.com → Settings → Manage apps → Raft → Delete hidden app data.
  • Raft is no longer on the Chrome Web Store, and raftapp.io is going away.

The code stays here, public and MIT-licensed. Fork it if you'd like to keep it going.

— Kevin


Shells the otter keeping watch

Raft

CI codecov

Keep your tabs safe. A Chrome extension for tab suspension and session management.

Named after the way otters hold hands while sleeping to stay together — a group of otters is called a raft. Our mascot Shells keeps watch over your tabs, making sure they stay safe and connected.

Features

Tab Suspension

  • Auto-suspend inactive tabs using Chrome's native tab discarding
  • Protection rules: pinned tabs, audio, whitelisted sites always safe
  • Custom suspended page with one-click restore
  • Manual suspend via popup, context menu, or keyboard shortcut
  • Close duplicate tabs across all windows with intelligent keep-best logic

Session Management

  • Capture every window, tab, and tab group
  • Tab group preservation: names, colors, collapsed state
  • Selective restore: expand a session and pick individual tabs or windows
  • Restore sessions as suspended to save memory
  • Auto-save on configurable schedule
  • Search across sessions by title or URL
  • Organize sessions into folders

Backup & Recovery

  • Multi-layer backup: auto-save, recovery snapshots (rotating last 5), browser sync
  • Backup health monitor in popup and options with actionable suggestions
  • Export sessions as JSON or text
  • Import from OneTab, Session Buddy, Tab Session Manager, Toby

Cloud Sync

  • End-to-end encryption (AES-256-GCM with PBKDF2)
  • Google Drive integration via private app-data folder
  • Free and optional

Trust Report

Encryption

All cloud-synced data is encrypted on your device before it leaves. Raft uses AES-256-GCM with a unique 96-bit IV per encryption operation. Encryption keys are derived from your password using PBKDF2 with 100,000 iterations (SHA-256). Your recovery key is shown once during setup and is never stored. OAuth uses PKCE (S256) to protect the authorization flow, and tokens are encrypted at rest with your password.

Privacy

Raft collects zero analytics, telemetry, or usage data. Eight automated tests verify that no fetch() or XMLHttpRequest calls exist in the save, restore, import, or export code paths — your session data never touches a network unless you explicitly enable cloud sync.

The extension's Content Security Policy restricts all network access to googleapis.com (for cloud sync). No other outbound connections are possible.

Automated Safety Tests

Raft's data safety claims are backed by automated tests covering crash recovery, network isolation, import/export integrity, scale limits, and tab fidelity. Run pnpm test:trust-report to generate the full report yourself.

See the generated safety report for details.

Permissions

Raft requests only five permissions, each with a specific purpose:

Permission Why
tabs Read tab URLs/titles to save sessions and identify inactive tabs
storage Persist sessions and settings to chrome.storage.local
alarms Run periodic checks for auto-suspend and auto-save
contextMenus Add "Suspend tab" to the right-click menu
identity Google OAuth for cloud sync

Not requested: history, bookmarks, webRequest, <all_urls>, notifications.

Open Source

Raft's source code is available for inspection. Every claim in this trust report can be verified by reading the code or running the tests.

Keyboard Shortcuts

Shortcut Action
Alt+Shift+S Suspend current tab
Alt+Shift+O Suspend other tabs in window
Alt+Shift+D Close duplicate tabs

Known Issues

Duplicate tab groups in Chrome's menu after restore

After restoring a session, Chrome's three-dot menu → Tab groups (and the bookmarks-bar chips) may list a group more than once — e.g. Work, Personal, Work, Personal — even though the restored window itself shows each group correctly.

This is a Chrome-side limitation, not data loss in Raft. Chrome's saved tab groups are persistent and expose no stable identity to extensions, so on restore Raft can only create fresh native groups; Chrome keeps the previously-saved entries alongside the new ones. Extensions cannot detect, reuse, or delete saved groups. The duplication is also an open Chromium bug (crbug 365519965), independently reproduced as recently as Chrome 148. The duplicate entries are harmless and can be removed manually from the same Tab groups menu.

Tech Stack

  • Build: Vite + CRXJS
  • UI: Preact + TailwindCSS v4
  • State: Zustand
  • Testing: Vitest
  • Language: TypeScript

Installation

pnpm install
pnpm build

Then load the dist/ folder as an unpacked extension in Chrome.

Development

pnpm dev          # Start dev server with HMR
pnpm build        # Build for production
pnpm test         # Run tests
pnpm test:coverage # Run tests with coverage
pnpm typecheck    # Type check
pnpm lint         # Lint

OAuth Setup

Google OAuth credentials are injected at build time from a .env file.

cp .env.example .env
# Edit .env with your Google Cloud OAuth client ID and secret

Create credentials at the Google Cloud Console — choose "OAuth 2.0 Client ID" for a Web application, enable the Drive API, and configure the consent screen. See .env.example for the required variables.

The OAuth flow is additionally protected by PKCE (S256).

License

MIT

About

[No longer maintained] Open-source Chrome tab manager: tab suspension and session management.

Resources

Security policy

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages