Email at the speed of thought.
A fast, native, minimalist email client for Windows — with your own Claude as the copilot.
Free & open source · ~5 MB installer · no admin rights needed
Grab Skim_x.y.z_x64-setup.exe from the latest release
Website · Download · Report a bug · Contribute
One violet accent, reserved exclusively for AI. Everything else stays out of your way.
Most mail clients are either web apps in a trench coat or twenty-year-old battleships. Skim is neither:
- ⚡ Native & fast. Rust core + WebView2 UI (Tauri 2). The installer is a few megabytes, cold start is instant, idle memory is tiny. No Electron.
- 🔒 Local-first & private. Your mail syncs over IMAP straight into a local SQLite cache. It works offline, search is instant, and nothing ever passes through anyone else's servers. Zero telemetry.
- ✦ AI on your terms. Paste your own API key — Anthropic, or OpenRouter for models from any vendor (Claude, GPT, Gemini, Grok, …) — and the AI drafts replies, summarizes threads, answers questions about a message, and chats across your whole mailbox with cited sources. No key? Skim is a great mail client without it. Requests go directly from your machine to the provider; the key lives in Windows Credential Manager.
- 🌍 11 languages, light & dark themes, keyboard-first.
- Gmail, Outlook, Yahoo, iCloud, or any IMAP/SMTP server (autoconfig for the big ones)
- Google sign-in via OAuth (loopback + PKCE) or app password
- Conversation threading (References/In-Reply-To with subject fallback)
- Archive, delete, star, read/unread — all optimistic with a durable offline queue: act instantly, Skim syncs when the network returns
- IMAP IDLE push + periodic polling; new-mail notifications with a mark-read quick action
- Lives in the tray: closing the window keeps mail syncing in the background; starts with Windows minimized (both optional)
- Compose, reply, reply-all, forward with proper threading headers
- Attachments: open, save; inline images served from the local cache
Speed
- Instant full-text search (SQLite FTS5) over subject, sender, recipients, and bodies
Ctrl+Kcommand palette: search-as-you-type, jump to folders, every command- Keyboard shortcuts:
j/kmove ·earchive ·#delete ·sstar ·uunread ·rreply ·Ctrl+Ncompose ·/search
AI (bring your own key)
- Draft reply — tell Claude what to say (“confirm the timeline, keep it warm”), get a draft in your voice; make it shorter, warmer, or more formal with one click
- AI Recap — opened your inbox to six unread emails? One click gets a digest of all of them, action items first with cited sources, and marks them read
- Summarize — long threads in a few bullets, action items called out
- Ask about this — question a specific email
- Mailbox chat — ask “which invoices are still unpaid this month?” in the palette; answers cite the source emails as clickable chips
- Your writer, your voice — set your name, pick a writing style (formal / friendly / concise / witty / enthusiastic), and give the AI standing instructions ("sign as Nick", "my company is called…")
- Two providers — Anthropic directly (Claude Sonnet 5 default, Opus 4.8, Haiku 4.5) or OpenRouter with one key for every vendor: Claude, GPT, Gemini, Grok, or any model slug you type in
- Answers follow your UI language
Privacy & security
- HTML email is sanitized in Rust (ammonia) and rendered in a sandboxed iframe with a strict CSP — scripts never run
- Remote images blocked by default, with one-click per-sender allow
- Passwords, OAuth tokens, and your API key live in Windows Credential Manager — never in the database, never in a config file
Download the latest installer from Releases — the .exe (NSIS) installs per-user without admin rights; an .msi is also published for managed environments.
Requirements: Windows 10/11 with WebView2 (preinstalled on Windows 11).
Press Continue with Google during onboarding. Skim opens your browser, you approve access, done. Skim never sees your password; the OAuth token is stored in Credential Manager.
Note for source builds: Google requires each app distribution to register its own OAuth client. Official installers ship with the project's client ID. If you build from source, either paste your own client ID in the connect screen (see below) or use an app password.
These providers require an app password for IMAP:
- Enable 2-step verification on your account.
- Create an app password (Gmail · Yahoo · iCloud · Outlook).
- Enter your address and the app password in Skim. Server settings fill themselves in.
Enter your address and password; adjust the IMAP/SMTP hosts under “Server settings” if the guess is wrong. Implicit TLS (:993) for IMAP, STARTTLS (:587) or TLS (:465) for SMTP.
For forks and source builds (~15 minutes, free):
- console.cloud.google.com → create a project.
- APIs & Services → Enable APIs → enable Gmail API.
- Google Auth Platform → configure the consent screen (External).
- Data access → add the scope
https://mail.google.com/. - Clients → create an OAuth client ID of type Desktop app.
- Paste the client ID (and secret) into Skim's connect screen, or bake them into your build via the
SKIM_GOOGLE_CLIENT_ID/SKIM_GOOGLE_CLIENT_SECRETenv vars.
While your Google app is unverified it runs in testing mode: only listed test users can sign in and refresh tokens expire weekly. App passwords have no such limits.
- Get an API key from either provider:
- Anthropic — console.anthropic.com (Claude, straight from the source)
- OpenRouter — openrouter.ai (one key for Claude, GPT, Gemini, Grok, and hundreds more — pick a suggested model or type any
vendor/modelslug)
- Paste it in onboarding (step 2) or later in Settings → Skim AI, on the provider's tab.
- That's it — the ✦ violet buttons light up.
Your key, your bill: Skim talks to the provider's API directly and adds no markup, no proxy, no accounts. The key is stored in Windows Credential Manager and can be removed in one click.
| Key | Action |
|---|---|
Ctrl K / / |
Command palette / search |
Ctrl N |
New message |
j / k |
Next / previous conversation |
e |
Archive |
# / Delete |
Delete |
s |
Star / unstar |
u |
Mark unread |
r |
Reply |
Esc |
Close / deselect |
Prerequisites:
- Node.js 20+
- Rust (stable, MSVC)
- Visual Studio Build Tools with the Desktop development with C++ workload:
winget install Microsoft.VisualStudio.2022.BuildTools --override "--quiet --wait --add Microsoft.VisualStudio.Workload.VCTools --includeRecommended"
winget install Rustlang.RustupThen:
npm install
npm run tauri dev # develop with hot reload
npm run tauri build # produce NSIS + MSI installers in src-tauri/target/release/bundle/┌───────────────────────────────┐ IMAP/SMTP (rustls) ┌──────────────┐
│ Svelte 5 UI (WebView2) │◄──── sync engine ───────────►│ your mail │
│ 3 panes · palette · composer │ │ server │
├───────────────────────────────┤ HTTPS (your key) └──────────────┘
│ Rust core (Tauri 2) │◄──── AI features ───────────► api.anthropic.com
│ sync · sanitize · ops queue │
├───────────────────────────────┤
│ SQLite + FTS5 (local cache) │ passwords & keys → Windows Credential Manager
└───────────────────────────────┘
- Sync: per-account engine over one worker IMAP session — newest-first header windows, incremental fetches above the UID high-water mark, flag/expunge reconciliation, UIDVALIDITY recovery. A second connection IDLEs on INBOX for push.
- Every action is offline-first: archive/delete/star/send are applied locally at once and queued in SQLite (
pending_ops); the queue drains with retries whenever the server is reachable. - HTML mail is sanitized in Rust before it ever reaches the UI, then rendered in a no-script sandboxed iframe.
- AI requests are assembled in Rust (mailbox chat retrieves context via FTS5/bm25) and streamed to the UI token by token.
English, Русский, Srpski, Français, Deutsch, Español, Italiano, Polski, 中文, 日本語, 한국어 — switchable at runtime, no restart. Translations live in src/lib/i18n/locales/; fixes from native speakers are very welcome (how to contribute).
Skim stays small on purpose: no calendar, no contacts manager, no rules/filters, no snooze, no read receipts, no tracking pixels of its own. One account per install for now (multi-account is on the roadmap). If you need everything, there are battleships; if you need speed, there's Skim.
Known limitations: Windows Snap Layouts don't pop over the custom maximize button (Tauri frameless-window limitation); self-signed IMAP certificates are rejected rather than click-through-able — by design.
Bug reports, patches, and translation fixes are welcome — see CONTRIBUTING.md. The short version: keep it small, keep it fast, run cargo clippy and npm run check before pushing.
MIT © Skim contributors
