A personal suite of privacy tools — password manager, authenticator, subscriptions.
Built with Tauri, Rust, React + Supabase
Mocha Suite is a desktop application that brings together the privacy tools you use every day into one place. No cloud dependencies, no subscriptions — just your own Supabase instance and your own data.
Apps included:
- Password Manager — AES-256-GCM encrypted vault synced to your Supabase storage, protected by a master password (Argon2id key derivation)
- Authenticator — TOTP (RFC 6238) two-factor codes generated from base32 secrets, stored securely in your Supabase storage
- Subscriptions — track recurring subscriptions with cost summaries, upcoming renewals, and category management
- Master-password protected vault (AES-256-GCM, key derived with Argon2id)
- Cloud sync via Supabase — your vault lives on your own Supabase project
- Full entry management : name, username, password, URL, notes, folders
- Folders with sidebar filtering (mapped to/from Bitwarden)
- Password generator (20 chars, cryptographic random source)
- Bitwarden-compatible JSON export & import
- Search across name, username and URL
- Copy-to-clipboard and show/hide passwords
- TOTP code generation (RFC 6238, HMAC-SHA1, 6-digit, 30-second window)
- Live countdown bar showing time until next code refresh
- Manual secret entry (base32)
- Copy code to clipboard
- Persisted to Supabase storage
- Full CRUD for recurring subscriptions
- Monthly / yearly / quarterly / weekly billing cycles
- Monthly and yearly spend totals
- Upcoming renewals (next 30 days)
- 66 popular subscription presets with search
- Color-coded category badges
- 20 supported currencies (including XPF)
- Persisted to Supabase storage
- Email/password authentication via Supabase Auth
- 6 themes — Mocha (default), Latte, Espresso, Matcha, Midnight, Caramel
- 6 languages — English, Français, Español, 中文, 한국어, Русский
- Persistent sidebar navigation
- In-app Supabase setup (no
.envfile required) - Tiny footprint : Tauri uses the OS webview, no bundled Chromium (~3–5 MB binary)
| Tool | How to get it |
|---|---|
| Node.js + npm | Download from nodejs.org (LTS version is fine) |
| Rust | Run curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh then follow the prompts (rustup.rs) |
| Platform deps | See the table below |
Platform-specific dependencies:
- Windows — WebView2 (preinstalled on Windows 10/11) + MSVC Build Tools ("Desktop development with C++" in the Visual Studio installer)
- Debian / Ubuntu —
sudo apt install libwebkit2gtk-4.1-dev build-essential curl wget file \ libxdo-dev libssl-dev libayatana-appindicator3-dev librsvg2-dev
- Arch / Manjaro / EndeavourOS —
sudo pacman -Syu sudo pacman -S --needed webkit2gtk-4.1 base-devel curl wget file openssl \ appmenu-gtk-module libappindicator-gtk3 librsvg
- macOS —
xcode-select --install
Mocha Suite uses Supabase for authentication and storage. You get 1 GB of storage for free.
- Sign up at app.supabase.com.
- Create a new project — pick any name and region.
- Wait for the project to finish initializing.
Mocha Suite stores data in a Supabase Storage bucket called vaults.
- In your Supabase dashboard, go to Storage.
- Click New bucket, name it
vaults, toggle Public bucket OFF. - Click Create bucket.
- Go to Project Settings → API.
- Copy the Project URL and the anon / publishable key.
git clone https://github.com/hunixcode/mocha.git
cd mocha
npm install
npm run tauri devThe first run compiles all Rust dependencies and takes a few minutes.
When the app opens, paste the Project URL and anon key, then click Save & restart.
Alternatively, create a .env file at the project root:
VITE_SUPABASE_URL=https://xxxxxxxx.supabase.co
VITE_SUPABASE_PUBLISHABLE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...After the app restarts, sign up with your email and password. You'll land on the Dashboard where you can access all apps.
npm run tauri buildOutputs land in src-tauri/target/release/bundle/.
- On launch, Mocha Suite checks for an active Supabase session.
- If no session, you see the Sign in / Sign up screen.
- After signing in, the Dashboard opens with access to all apps.
- The Password Manager additionally requires a master password to unlock the vault.
The vault is an encrypted JSON blob stored in Supabase Storage at
vaults/<user-id>/vault.mocha.
- A 32-byte key is derived from your master password and a random salt using Argon2id.
- Entries are encrypted with AES-256-GCM with a fresh random nonce on every save.
- The key and decrypted entries are held in memory only while the vault is unlocked.
There is no master-password recovery — if you forget it, the vault cannot be decrypted.
TOTP secrets are stored as JSON in Supabase Storage. Codes are generated client-side using the Web Crypto API (HMAC-SHA1).
Subscription data is stored as JSON in Supabase Storage. The app computes monthly/yearly totals and upcoming renewals from the stored data.
mocha/
├── index.html Entry HTML
├── package.json Dependencies and scripts
├── src/ Frontend (React + TypeScript)
│ ├── main.tsx Bootstrap with providers
│ ├── App.tsx Router and gate screen
│ ├── App.css All styles
│ ├── types.ts Shared types
│ ├── supabase.ts Supabase client
│ ├── contexts/ React contexts (Auth, Theme, I18n)
│ ├── components/ Layout, Sidebar, Topbar, Gate, Icons
│ ├── pages/ Dashboard, PasswordManager, Authenticator,
│ │ Subscriptions, Settings
│ └── lib/ Storage helpers, TOTP, translations
└── src-tauri/ Backend (Rust)
├── Cargo.toml
├── tauri.conf.json
├── capabilities/
├── icons/
└── src/
├── lib.rs Crypto and Tauri commands
└── main.rs Entry point
- Dashboard — landing page with cards for each app.
- Password Manager — unlock with your master password, then manage entries. Lock returns to the unlock screen.
- Authenticator — add accounts by pasting the base32 secret from your 2FA setup page. Codes refresh every 30 seconds.
- Subscriptions — search from 66 popular presets or add manually. Summary cards show monthly/yearly spend and upcoming renewals.
- Settings — switch between 6 themes and 6 languages.