Tinder-style triage for your Gmail. Swipe through your entire mailbox — left to keep, right to delete, down to unsubscribe — then bulk-delete in Gmail when you're ready.
Nothing is deleted by the app. Swiping applies Gmail labels
(Swipe/Delete, Swipe/Unsubscribe); you review and delete in Gmail
yourself with one search. Fully reversible until that moment.
| Light | Dark |
|---|---|
![]() |
![]() |
- Syncs metadata for all your mail (newest first) into a local SQLite database — sender, subject, snippet, date. Message bodies never leave Gmail.
- You swipe. Decisions are stored locally and flushed to Gmail as labels in batches.
- In Gmail: search
label:Swipe/Delete→ select all → delete. Done. - Undo any decision. Sender-level stats warn you when you've already marked a sender for unsubscribe.
This is a personal, self-hosted tool — you run it, pointed at your own Gmail, with your own free Google Cloud credentials. How?
- Docker (or Node.js 20+ to run without it)
- A Google account and 15 minutes for Google Cloud setup
git clone https://github.com/PakshP/InboxSwipe.git
cd InboxSwipe
cp .env.example .env # fill in your Google credentials
docker compose up -dRequires Node.js 20+:
npm install
cp .env.example .env
npm startThen from the machine running it (or through an SSH tunnel —
ssh -L 3000:localhost:3000 user@server):
- Open
http://localhost:3000/oauth/loginand connect your Gmail - Click Sync (a full first sync of a large mailbox takes ~1 hour due to Gmail API quotas; it's resumable and runs in the background)
- Swipe
After the first login, daily use works from any device that can reach the server — the OAuth redirect only matters for the login step.
Want to use your instance away from home (and reconnect Gmail from your phone)? See docs/public-hosting.md.
← keep · → delete · ↓ unsubscribe · U undo
- Metadata only, stored in SQLite on your machine
- Talks exclusively to Google's Gmail API — no third-party services, no telemetry
- Your OAuth credentials and token live in
.env/ local DB, gitignored
MIT


