A universal inbox for saving URLs, notes, images, emails, and audio — backed by remoteStorage. Your data stays on your own storage server, not someone else's cloud.
Web App — A Svelte app that displays all your saved items in a card grid. Connect to any remoteStorage-compatible server to view, browse, and manage your inbox items. Click any card to view full details, edit, convert to a todo, or delete. The header also links to a Plugins page with downloadable browser and Thunderbird builds.
Browser Extension — A Chrome/Firefox extension for quickly saving things while browsing:
- Save Page — Saves the current page as a bookmark with title, og:image preview, favicon, and site name. For tweets, it captures the full tweet text and any attached images.
- Quick Note — Jot down a note with no page context needed.
- Right-click: Save Link — Save any link to your inbox.
- Right-click: Save Image — Downloads and saves the actual image binary (not just the URL).
- Right-click: Save Selection — Saves highlighted text as a note with a link back to the source page.
Mobile App — A native iOS/Android app (Flutter) for quick capture on the go. Drop in text notes, audio recordings, or photos and send to your remoteStorage inbox. Includes offline queue with automatic sync.
Thunderbird Extension — A Thunderbird MailExtension (128+) for saving emails to your inbox:
- Opens from the message toolbar when reading an email.
- Pre-fills subject, sender, and body from the current email.
- Includes an optional notes field for your own annotations.
- Saves a
mid:URI link back to the original email in your mail client.
packages/
rs-module/ # Shared remoteStorage data module (types, schemas, CRUD)
web/ # Svelte web app (card grid, view modal, todos)
extension/ # Chrome MV3 + Firefox WebExtension (popup, context menus, content script)
thunderbird/ # Thunderbird MailExtension (message toolbar popup, email saving)
All four packages share the @inbox-rs/rs-module for consistent data types and storage layout.
/inbox/items/{uuid} # JSON metadata for each item
/inbox/files/{uuid}.{ext} # Binary files (images, audio)
| Type | Description |
|---|---|
bookmark |
URL with title, description, og:image, favicon. Optionally includes body (embedded content like tweet text) and filePath (downloaded image). |
note |
Freeform text with title and body. |
image |
Downloaded image binary with metadata and optional source URL. |
audio |
Audio recording with duration. |
document |
Uploaded file with metadata. |
email |
Email with subject, body, sender, optional notes, and mid: URI link. |
todo |
Task with title, completion status, and optional notes. Any item can be converted to a todo. |
See DEVELOPMENT.md for full setup instructions.
npm install
docker compose up -d # Start local remoteStorage server
npm run dev -w packages/web # Start web app on localhost:5173
npm run build # Build web app and package downloadable plugin artifacts into dist/
npm run build:extension # Build browser extension only
npm run build:thunderbird # Build Thunderbird extension onlyAfter npm run build, the web app output in packages/web/dist/ includes:
downloads/inbox-rs-chromium-<version>.zipdownloads/inbox-rs-firefox-<version>.xpidownloads/inbox-rs-thunderbird-<version>.xpi
That makes the built dist/ folder self-contained for static hosting.
gh workflow run release.yml -f bump=patch # or minor / majorThe web app version tracks the root package.json. The browser and
Thunderbird extensions have their own version namespaces and only move
when their bundle changed since the previous tag — see
docs/RELEASING.md for the runbook.
- Svelte 5 with runes (
$state,$derived,$effect,$props) - Vite 5 for both web app and extension builds
- remotestorage.js for data sync + remotestorage-module-shares for Sharesome integration
- TypeScript throughout
- Chrome Manifest V3 / Firefox WebExtension APIs / Thunderbird Manifest V2
- Armadietto as the local dev remoteStorage server
GPL-3.0