{"id":35858903,"url":"https://github.com/ravnmail/ravn","last_synced_at":"2026-01-23T12:56:53.336Z","repository":{"id":326575852,"uuid":"1104046831","full_name":"ravnmail/ravn","owner":"ravnmail","description":"A modern email client for digital natives","archived":false,"fork":false,"pushed_at":"2025-12-12T18:12:58.000Z","size":2674,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-14T08:19:21.644Z","etag":null,"topics":["client","desktop-application","emails","nuxt","rust","tailwindcss-v4"],"latest_commit_sha":null,"homepage":"https://ravnmail.com","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ravnmail.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-25T17:18:24.000Z","updated_at":"2025-12-12T17:43:14.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ravnmail/ravn","commit_stats":null,"previous_names":["ravnmail/ravn"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/ravnmail/ravn","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ravnmail%2Fravn","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ravnmail%2Fravn/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ravnmail%2Fravn/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ravnmail%2Fravn/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ravnmail","download_url":"https://codeload.github.com/ravnmail/ravn/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ravnmail%2Fravn/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28692472,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-23T11:01:27.039Z","status":"ssl_error","status_checked_at":"2026-01-23T11:00:26.909Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["client","desktop-application","emails","nuxt","rust","tailwindcss-v4"],"created_at":"2026-01-08T11:08:07.866Z","updated_at":"2026-01-23T12:56:53.320Z","avatar_url":"https://github.com/ravnmail.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RAVN\n\n**The modern email client for digital natives**\n\nRAVN is a feature-rich desktop email client built with modern web technologies. It combines the power of a native desktop application with the flexibility of a web frontend, offering a superior email experience for power users.\n\n![Version](https://img.shields.io/badge/version-26.1.8-blue)\n![Nuxt](https://img.shields.io/badge/Nuxt-4.2-00DC82)\n![Tauri](https://img.shields.io/badge/Tauri-2.9-FFC131)\n![License](https://img.shields.io/github/license/ravnmail/ravn)\n\n## Features\n\n### Email Management\n- **Multi-Account Support** - Manage Gmail, Office365, Apple Mail, and any IMAP account\n- **Unified Views** - View emails from all accounts in one place\n- **Smart Organization** - Folders, labels, conversation threading, and full-text search\n- **Intelligent Sync** - Incremental synchronization with configurable intervals per folder\n\n### Composition \u0026 Sending\n- **Rich Text Editor** - Powered by TipTap with formatting, code blocks, tables, and more\n- **Email Signatures** - Per-account signatures with HTML support\n- **Keyboard Shortcuts** - Cmd/Ctrl+Enter to send, Cmd/Ctrl+S for drafts\n\n### Advanced Features\n- **Full-Text Search** - Fast search across all accounts using Tantivy\n- **AI Integration** - Email analysis and enhancement with Corvus AI\n- **Contact Management** - Auto-extracted contacts with avatars and statistics\n- **Secure Credentials** - OS-level keyring storage (Keychain, Credential Manager, Secret Service)\n- **Deep Linking** - Custom `ravn://` URL scheme for navigation\n\n## Technology Stack\n\n### Frontend\n- **Framework**: Nuxt 4.2 (Vue 3)\n- **Styling**: Tailwind CSS 4\n- **UI Components**: shadcn, reka UI, custom component library\n- **Rich Text**: TipTap 2.27 (ProseMirror)\n- **Icons**: Lucide Icons\n- **Utilities**: vueUse, dayjs, lodash\n\n### Desktop \u0026 Backend\n- **Runtime**: Tauri 2.9 (Rust-based)\n- **Database**: SQLite with sqlx\n- **Email Protocols**: async-imap, lettre (SMTP), mail-parser\n- **Authentication**: OAuth2 for cloud providers\n- **Search**: Tantivy full-text search engine\n- **Security**: OS keyring integration, AES-GCM encryption\n\n## Prerequisites\n\n- **Node.js**: 22.x or higher\n- **Package Manager**: bun\n- **Rust**: 1.19.1 or higher (for Tauri)\n- **Cargo**: Latest stable\n\n## Installation\n\n1. **Clone the repository**\n   ```bash\n   git clone \u003crepository-url\u003e\n   cd ravn\n   ```\n\n2. **Install dependencies**\n   ```bash\n   bun install\n   ```\n\n3. **Set up environment variables** (optional)\n   ```bash\n   cp .env.example .env\n   # Edit .env with your configuration\n   ```\n\n## Development\n\n### Web Development Server\n\nRun the desktop application in development mode:\n\n```bash\nnpm run tauri:dev\n```\n\nThis will start both the Nuxt dev server and the Tauri desktop application with hot-reload enabled.\n\n## Building for Production\n\n### Build Desktop Application\n\n```bash\nnpm run tauri:build\n```\n\nThis will:\n1. Generate the optimized Nuxt static site\n2. Compile the Rust backend\n3. Package the desktop application for your platform\n\nThe built application will be available in `src-tauri/target/release`.\n\n## Project Structure\n\n```\nravn/\n├── app/                    # Nuxt frontend application\n│   ├── components/         # Vue components\n│   │   ├── ui/             # UI component library\n│   │   └── ...             # Email, sidebar, navigation components\n│   ├── pages/              # Route pages\n│   │   ├── auth/           # Authentication flows\n│   │   ├── mail/           # Email views\n│   │   ├── settings/       # Settings pages\n│   │   └── ...\n│   ├── composables/        # Vue composables\n│   ├── lib/                # Utilities and libraries\n│   │   └── editor/         # TipTap editor configuration\n│   ├── layouts/            # Page layouts\n│   ├── assets/             # Static assets\n│   └── types/              # TypeScript types\n│\n├── src-tauri/              # Tauri backend (Rust)\n│   ├── src/\n│   │   ├── commands/       # Tauri command handlers\n│   │   ├── database/       # Database models \u0026 repositories\n│   │   ├── sync/           # Email synchronization subsystem\n│   │   │   ├── providers/  # Email provider implementations\n│   │   │   └── ...         # Sync logic, OAuth, workers\n│   │   ├── services/       # Business logic services\n│   │   ├── search/         # Full-text search\n│   │   └── main.rs         # Application entry point\n│   ├── migrations/         # Database migrations\n│   ├── Cargo.toml          # Rust dependencies\n│   └── tauri.conf.json     # Tauri configuration\n│\n├── nuxt.config.ts          # Nuxt configuration\n├── tailwind.config.ts      # Tailwind CSS configuration\n└── package.json            # Node dependencies\n```\n\n## Configuration\n\n### Email Accounts\n\nRAVN supports multiple email providers:\n\n- **Gmail**: OAuth2 authentication\n- **Office365**: OAuth2 authentication\n- **Apple/iCloud**: Standard IMAP\n- **Custom IMAP**: Any IMAP-compatible server\n\nConfigure accounts through the application's account setup wizard (`/auth/add-account`).\n\n### AI Features\n\nRAVN includes AI-powered features via Corvus AI. Configure in Settings \u003e AI.\n\n## Database\n\nRAVN uses SQLite for local data storage with the following key tables:\n\n- `accounts` - Email account configurations\n- `folders` - Mailbox folder hierarchy\n- `emails` - Email messages with metadata\n- `attachments` - File attachments with caching\n- `conversations` - Threaded email conversations\n- `contacts` - Auto-extracted contact information\n- `labels` - User-defined email labels\n- `signatures` - Email signatures per account\n\nDatabase migrations are managed through sqlx and located in `src-tauri/migrations/`.\n\n## Security\n\nRAVN takes security seriously:\n\n- **Credential Storage**: Uses OS-level keyring (Keychain on macOS, Credential Manager on Windows, Secret Service on Linux)\n- **Encrypted Fallback**: AES-GCM encryption when keyring is unavailable\n- **OAuth2 with PKCE**: Secure authentication for cloud providers\n- **No Credential Logging**: Credentials never appear in logs\n- **Zero-Trust Rendering**: Blocks remove images by default\n\n## Architecture Highlights\n\n### Sync Subsystem\n- Provider-agnostic design with trait-based architecture\n- Incremental sync (only fetch new emails)\n- Configurable sync intervals per folder type\n- Background workers for sync, body fetching, avatars, and AI analysis\n- Real-time UI updates via Tauri events\n\n### Email Rendering\n- HTML rendering with CSS inlining for client compatibility\n- Automatic plain-text fallback generation\n- Inline and regular attachment support\n- CID (Content-ID) mapping for embedded images\n\n### Search System\n- Full-text search using Tantivy\n- Multi-account search support\n- Real-time index updates\n- Efficient query parsing\n\n## Authors\n\n**Michael Wallner @ Coder's Cantina**\n\n## License\n\nThis project is licensed under the GNU General Public License v3.0. See the [LICENSE](LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fravnmail%2Fravn","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fravnmail%2Fravn","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fravnmail%2Fravn/lists"}