A local-first desktop email client for people who want a calmer, more private inbox.
Pebble is a desktop mail client built with Rust, Tauri, and React. It keeps mail data, the search index, attachments, rules, and application settings on your device by default.
The app is designed around a few practical ideas:
- Your mailbox should stay readable, fast, and quiet.
- Email workflows should be local-first instead of cloud-dashboard-first.
- Privacy controls should be explicit, visible, and easy to override per message.
- Search, snooze, rules, and a Kanban board should work together instead of living in separate tools.
Pebble currently supports Gmail, IMAP, and experimental Outlook accounts.
- Local SQLite database for messages, folders, labels, rules, and settings.
- Local Tantivy full-text index for fast search.
- Attachments are stored on disk under the app data directory.
- OAuth tokens and credentials are encrypted with a per-device key.
- No telemetry.
- Network requests are limited to features you configure: mail sync, translation, and optional WebDAV settings backup.
- Unified inbox across multiple accounts.
- Gmail, IMAP, and experimental Outlook support.
- Threaded and message-list views.
- Archive, delete, star, mark read, batch actions, and restore flows.
- Snooze messages and bring them back later.
- Full-text search and advanced filters.
- Rules engine for automatic organization.
- Kanban board with Todo, Waiting, and Done columns.
- Command palette and keyboard-first navigation.
- Built-in translation providers with bilingual reading.
- Dark and light themes.
- English and Chinese UI.
- Optional WebDAV backup for settings, rules, and Kanban data.
![]() Inbox |
![]() Kanban |
![]() Dark Mode |
![]() Settings |
| Layer | Technology |
|---|---|
| Desktop shell | Tauri 2 |
| Backend | Rust |
| Frontend | React 19, TypeScript |
| State | Zustand, TanStack Query |
| Database | SQLite via rusqlite |
| Search | Tantivy |
| Styling | Tailwind CSS and app CSS |
| Localization | i18next |
- Rust stable
- Node.js 18 or newer
- pnpm 8 or newer
- Tauri system dependencies for your platform
git clone https://github.com/QingJ01/Pebble.git
cd Pebble
pnpm install
cp .env.example .env
pnpm devThe development command starts the Vite frontend and the Tauri desktop app.
pnpm buildDesktop bundles are written under target/release/ and target/release/bundle/.
Pebble can connect to Gmail and Outlook through OAuth. IMAP accounts use the IMAP/SMTP credentials configured in the app.
Copy .env.example to .env, then fill the provider values you need.
| Variable | Description |
|---|---|
GOOGLE_CLIENT_ID |
Google OAuth client ID. Use a Desktop app client when possible. |
GOOGLE_CLIENT_SECRET |
Optional for PKCE flows. Add it if Google rejects token exchange with client_secret is missing. |
MICROSOFT_CLIENT_ID |
Microsoft public/native app client ID. |
MICROSOFT_CLIENT_SECRET |
Optional. Leave empty for public/native Microsoft apps. |
| Command | Purpose |
|---|---|
pnpm dev |
Run the Tauri desktop app in development mode. |
pnpm dev:frontend |
Run only the Vite frontend dev server. |
pnpm test |
Run frontend tests with Vitest. |
pnpm build:frontend |
Type-check and build the frontend. |
pnpm build |
Build the desktop app. |
cargo test -p pebble-mail |
Run the mail crate tests. |
cargo check |
Check the Rust workspace. |
Pebble/
|-- src/ React frontend
| |-- components/ Shared UI components
| |-- features/ Inbox, compose, search, Kanban, settings
| |-- hooks/ React hooks and query helpers
| |-- lib/ IPC API, i18n, utilities
| `-- stores/ Zustand stores
|-- src-tauri/ Tauri application and IPC commands
|-- crates/ Rust workspace crates
| |-- pebble-core/ Shared types and errors
| |-- pebble-store/ SQLite persistence
| |-- pebble-mail/ Mail providers and sync
| |-- pebble-search/ Tantivy search index
| |-- pebble-crypto/ Credential encryption
| |-- pebble-oauth/ OAuth 2.0 and PKCE
| |-- pebble-rules/ Rules engine
| |-- pebble-translate/ Translation providers
| `-- pebble-privacy/ HTML sanitizing and tracker controls
|-- tests/ Frontend tests
`-- site/ Static project site and screenshots
| Shortcut | Action |
|---|---|
J / K |
Move through messages |
Enter |
Open the selected message |
E |
Archive |
S |
Toggle star |
R |
Reply |
A |
Reply all |
F |
Forward |
C |
Compose |
/ |
Focus search |
Esc |
Close, cancel, or go back |
Shortcuts can be reviewed and customized in Settings.
Pebble is under active development. It is usable for day-to-day testing, but mail clients handle sensitive data and provider behavior varies. Keep backups of important mail, and verify account actions against your provider when testing new builds.
Issues and pull requests are welcome.
For code changes, please keep patches focused and include tests for behavior changes when practical. Before submitting, run the relevant checks:
pnpm test
pnpm build:frontend
cargo checkPebble is licensed under the GNU Affero General Public License v3.0.



