End-to-end encrypted cross-device browser session sync. No registration required.
Install SessionSync from Chrome Web Store
The browser extension is live on the Chrome Web Store. For most users, we recommend installing it directly and using the built-in shared cloud backend with zero setup.
- Zero Registration — System-generated random key, no email or account needed
- End-to-End Encrypted — AES-256-GCM with PBKDF2 (600K iterations), server only stores ciphertext
- Write-Protected — All writes go through an RPC function that verifies a
write_token; no one can tamper with or delete another user's data - Self-Hostable — Uses a shared cloud by default, or configure your own Supabase instance
- Open Source — Fully transparent, auditable code
One key derives three independent values:
| Derived Value | Purpose | Algorithm |
|---|---|---|
user_hash |
Database lookup | HMAC-SHA-256(key, session-sync:user-id) |
write_token |
Write authorization | HMAC-SHA-256(key, session-sync:write-token) |
| AES key | Encrypt / decrypt data | PBKDF2(key, random_salt) → AES-256-GCM |
SessionSync on Chrome Web Store
Install the published extension directly and start syncing right away. The default shared cloud backend is included, so no setup is required.
If you want to run your own backend or customize the extension, follow the steps below.
Go to supabase.com, create a project, and grab the URL and anon key from Settings → API.
cp .env.example .envVITE_SUPABASE_URL=https://your-project.supabase.co
VITE_SUPABASE_ANON_KEY=your-anon-keyCopy the SQL from supabase/schema.sql and run it in the Supabase SQL Editor.
pnpm install
pnpm run buildOpen chrome://extensions/ → Enable Developer Mode → Load Unpacked → select the dist folder.
All public SQL is in a single file: supabase/schema.sql
sync_datatable — stores encrypted session payloads per user per originread_sync_data()— reads encrypted data byuser_hash+originupsert_sync_data()— writes withwrite_tokenverification and size limitslist_user_origins()— lists all synced origins for a userdelete_sync_data()— removes a synced origin (requireswrite_token)
├── src/
│ ├── shared/
│ │ ├── crypto.ts # Key generation + E2EE (AES-256-GCM)
│ │ ├── config.ts # Config persistence (chrome.storage)
│ │ ├── supabaseClient.ts # Supabase client factory
│ │ ├── messaging.ts # Extension message passing
│ │ ├── i18n.ts # Internationalization helper
│ │ └── toast.ts # Toast notification utility
│ ├── background/index.ts # Push / Pull via Supabase RPC
│ ├── content/index.ts # Read/write page storage
│ ├── popup/ # Popup UI
│ ├── options/ # Settings page
│ └── manifest.json
├── supabase/
│ └── schema.sql # Database schema (public)
└── public/
└── _locales/ # i18n messages (en, zh_CN)
Manifest V3 · TypeScript · Vite · CRXJS · Tailwind CSS · Supabase · Web Crypto API
