Skip to content

mtskf/Staaaash

Repository files navigation

Staaaash

A minimalist tab manager for Chrome.
Stash all your open tabs into named groups with one click,
then restore them whenever you're ready.

FeaturesInstallationUsageDevelopmentLicense


Features

  • 🗂 Save tabs in one click — Click the extension icon (or press ⌥S) to archive every tab in the current window into a named group. Originals are closed to clear your workspace.
  • ↩️ Restore anytime — Reopen a whole group in a new window, or restore single tabs into the current one.
  • 📌 Pin & organize — Pin important groups to a dedicated section at the top. Pinned groups stay in your collection after restoring.
  • 🔀 Merge groups — Shift+drag one group onto another to combine them. Duplicate URLs are removed automatically.
  • 🔍 Search — Filter groups and tabs by title or URL.
  • 🔄 Cloud sync — Sign in with Google to sync your collection across devices.
  • 🔒 Offline-first & private — Everything works without an account. Data lives in local storage and only syncs to your own Firebase path when you sign in. No third-party tracking.
  • ⌨️ Keyboard friendly — Navigate, rename, restore, and reorder without touching the mouse.
  • 📤 Import / Export — Back up your collection to JSON, or import and merge from a file.
  • 🌚 Dark mode — Dark theme by default.

Installation

Staaaash isn't on the Chrome Web Store yet, so you build it yourself and load it as an unpacked extension:

  1. Follow the Development steps below to install dependencies and run pnpm run build
  2. Open chrome://extensions/ in Chrome
  3. Enable Developer mode (toggle in the top-right corner)
  4. Click Load unpacked and select the dist directory

Usage

  • Stash tabs: Click the extension icon or press ⌥S — all tabs in the current window are saved as a new group and the dashboard opens.
  • Open the dashboard without stashing: Press ⌥⇧S, or right-click the extension icon and choose Open Collections.
  • Restore: Click a group's Restore button to open all its tabs in a new window, or use the external-link icon on a tab to open just that one.

Keyboard Shortcuts

Global (anywhere in Chrome)

Mac Win/Linux Action
S Alt S Archive all tabs and open the dashboard
S Alt Shift S Open the dashboard (no archiving)

In the dashboard

Shortcut Action
Navigate through groups and tabs
Collapse group / jump to parent group
Expand group
F Focus search
Rename selected group
Restore selected item
Delete selected item
P Pin/unpin selected group
/ Move selected item up/down
Esc Clear search / cancel editing

(On Windows/Linux, use Ctrl instead of .)

Drag & Drop

Gesture Action
Drag group Reorder within its section
+ drag group Merge into the target group (duplicate URLs removed)
Drag tab Move a tab within or across groups

Development

Prerequisites

  • Node.js v18+
  • pnpm

Clone & Install

git clone https://github.com/mtskf/Staaaash.git
cd Staaaash
pnpm install

Firebase & Google Auth Configuration

Staaaash uses Firebase for sync and Google Auth for identity. (You can skip this and use the extension offline-only, but sign-in won't work.)

  1. Create a Firebase project

    • Go to the Firebase Console
    • Create a new project and enable Authentication and Realtime Database
  2. Register a web app

    • In Project Settings > General, click the </> icon to add a web app
    • Copy the configuration keys (apiKey, authDomain, etc.)
  3. Configure environment variables

    • Copy .env.example to .env:
      cp .env.example .env
    • Fill in your Firebase config values
  4. Set up Google OAuth

    • To make chrome.identity work, you need a specific OAuth Client ID
    • Go to Google Cloud Console > APIs & Services > Credentials
    • Create an OAuth 2.0 Client ID (Type: Web application, NOT Chrome Extension)
    • Under Authorized Redirect URIs, add https://<YOUR-EXTENSION-ID>.chromiumapp.org/
      • You can find your extension ID at chrome://extensions after loading the unpacked extension once
    • Add this Client ID to .env as VITE_GOOGLE_CLIENT_ID
    • In Firebase Console > Authentication > Sign-in method, ensure the Google provider is enabled and whitelisted with this Client ID

Commands

pnpm run dev     # Dev server with HMR
pnpm run build   # Production build (outputs to dist/)
pnpm run check   # Type check + tests + lint (same as CI)
pnpm test        # Run tests in watch mode

After building, load the dist directory in Chrome as described in Installation.

Release

# 1. Bump version in package.json and manifest.json
# 2. Build
pnpm run build

# 3. Package
cd dist && zip -r ../release/staaaash-vX.X.X.zip .

Tech Stack

Category Technologies
Core TypeScript, React 19, Chrome Extension Manifest V3
Backend Firebase Realtime Database, Google OAuth via chrome.identity
UI Tailwind CSS v3, shadcn/ui (Radix), lucide-react, sonner
Drag & Drop @dnd-kit/core, @dnd-kit/sortable
Tooling pnpm, Vite, ESLint, Vitest

License

MIT © mtskf

About

A minimalist tab manager for Chrome. Save all tabs with one click, organize into groups, sync across devices. Built with React + Vite.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors