image
Bichon

A lightweight, high-performance Rust email archiver with WebUI

Release Docker License Ask DeepWiki Discord Follow on X

Bichon is a minimal, high-performance, standalone Rust email archiver with a built-in WebUI. Its name is inspired by the puppy my daughter adopted last month. It runs as a single binary, requires no external dependencies, and provides fast, efficient email archiving, management, and search. ## ๐Ÿš€ Features ### โšก Lightweight & Standalone - Pure Rust, single-machine application. - No external database required. - Includes **WebUI** for intuitive management. ### ๐Ÿ“ฌ Multi-Account Management - Synchronize and download emails from multiple accounts. - Flexible selection: by **date range**, **number of emails**, or **specific mailboxes**. ### ๐Ÿ”‘ IMAP & OAuth2 Authentication - Supports **IMAP password** or **OAuth2** login. - Built-in WebUI for **OAuth2 authorization**, including **automatic token refresh** (e.g., Gmail, Outlook). - Supports **network proxy** for IMAP and OAuth2. - Automatic IMAP server discovery and configuration. ### ๐Ÿ” Unified Multi-Account Search - Powerful search across all accounts: **account**, **mailbox**, **sender**, **attachment name**, **has attachments**, **size**, **date**, **subject**, **body**. ### ๐Ÿท๏ธ Tags & Facets - Organize archived emails using **tags** backed by Tantivy **facets**. - Efficiently filter and locate emails based on these facet-based tags. ### ๐Ÿ’พ Compressed & Deduplicated Storage - Store emails efficiently with **transparent compression** and **deduplication**โ€”emails can be read directly without any extra steps. ### ๐Ÿ“‚ Email Management & Viewing - Bulk cleanup of local archives. - Download emails as **EML** or **attachments separately**. - View and browse emails directly. - View the full **conversation thread** of any email. ### ๐Ÿ“Š Dashboard & Analytics - Visualize email statistics: **counts**, **time distribution**, **top senders**, **largest emails**, **account rankings**. ### ๐ŸŒ Internationalization (i18n) * WebUI fully supports **17 languages** for all interface elements. * Backend responses (e.g., system messages, API data) are **not yet internationalized**. * Frontend is ready to support more languages in the future with minimal effort. ### ๐Ÿ› ๏ธ OpenAPI Support - Provides **OpenAPI documentation**. - **Access token authentication** for programmatic access. ## ๐Ÿพ Why Create Bichon? A few months ago, I released **rustmailer**, an email API middleware: https://github.com/rustmailer/rustmailer Since then, Iโ€™ve received many emails asking whether it could also archive emails, perform unified search, and support full-text indexingโ€”not just querying recipients. But rustmailer was designed as a middleware focused on providing API services. Adding archiving and full-text search would complicate its core purpose and go far beyond its original scope. Meanwhile, I realized that email archiving itself only requires a small portion of rustmailerโ€™s functionality, plus a search engine. With that combination, building a dedicated, efficient archiver becomes much simpler. Using the experience gained from rustmailer, I designed and built **Bichon** in less than two weeks, followed by another two weeks of testing and optimization. It has now reached a stable, usable stateโ€”and I decided to release it publicly. **Bichon is completely free**. You can download and use it however you like. Itโ€™s not perfect, but I hope it brings you value. ## ๐Ÿ“ธ Snapshot image image image image image image image image image ## ๐Ÿš€ Quick Start ### Docker Deployment (Recommended) ```bash # Pull the image docker pull rustmailer/bichon:latest # Create data directory mkdir -p ./bichon-data # Run container docker run -d \ --name bichon \ -p 15630:15630 \ -v $(pwd)/bichon-data:/data \ -e BICHON_LOG_LEVEL=info \ -e BICHON_ROOT_DIR=/data \ rustmailer/bichon:latest ``` * **Accessing Bichon from a browser:** You need to add the exact address you use in your browser to `BICHON_CORS_ORIGINS`. * If you access via **IP**, add `IP:port`, e.g.: ``` http://192.168.1.16:15630 ``` * If you access via **hostname**, add `hostname:port`, e.g.: ``` http://myserver.local:15630 ``` * If you access via **domain name**, add the domain, e.g.: ``` http://mydomain.com ``` * **If Bichon is running on port 80**, you **do not need to include the port**. * If you want to access Bichon in **multiple ways**, include all of them separated by commas. Example Docker run: ```bash docker run -d \ --name bichon \ -p 15630:15630 \ -v $(pwd)/bichon-data:/data \ -e BICHON_LOG_LEVEL=info \ -e BICHON_ROOT_DIR=/data \ -e BICHON_CORS_ORIGINS="http://192.168.1.16:15630,http://myserver.local:15630,http://mydomain.com" \ rustmailer/bichon:latest ``` > **Tip:** Do not add a trailing `/`. Using `*` allows all addresses, but is **not recommended** for security. ### Binary Deployment Download the appropriate binary for your platform from the [Releases](https://github.com/rustmailer/bichon/releases) page: - Linux (GNU): `bichon-x.x.x-x86_64-unknown-linux-gnu.tar.gz` - Linux (MUSL): `bichon-x.x.x-x86_64-unknown-linux-musl.tar.gz` - macOS: `bichon-x.x.x-x86_64-apple-darwin.tar.gz` - Windows: `bichon-x.x.x-x86_64-pc-windows-msvc.zip` Extract and run: ```bash # Linux/macOS ./bichon --bichon-root-dir /tmp/bichon-data # Windows .\bichon.exe --bichon-root-dir e:\bichon-data ``` * --bichon-root-dir argument is required and must be an absolute path. * If you are accessing Bichon from a proxy domain **mydomain** argument --bichon-cors-origins="https://mydomain" is required. ## Setting the Bichon Encryption Password Bichon uses an encryption password to secure sensitive data. **You must set it before first use**, when no data exists. Once set, it **cannot be changed**. Changing it later will make all encrypted data unreadable. To start over, you would need to **reinitialize Bichon and clear all emails and metadata**. ### How to Set the Password You can set the password **via command-line or environment variable**: ### Command-Line ```bash bichon --bichon-encrypt-password "your-strong-password" ``` ### Environment Variable ```bash export BICHON_ENCRYPT_PASSWORD="your-strong-password" bichon ``` **Tip:** Use a strong, secure password and keep it safe, as it cannot be changed later. ## ๐Ÿ”‘ Root User Login Information **Bichon currently supports a single Root user login for system access and management.** ### First Login and Enabling Access To enable the login feature, you must specify a command-line argument or set an environment variable when starting Bichon. #### 1\. Command-Line Argument Add the `--bichon-enable-access-token` flag to your startup command: ```bash # Linux/macOS Binary Deployment Example ./bichon --bichon-root-dir /tmp/bichon-data --bichon-enable-access-token ``` #### 2\. Environment Variable (Recommended for Docker) Set the environment variable `BICHON_ENABLE_ACCESS_TOKEN` to `true`: ```bash # Docker Deployment Example docker run -d \ --name bichon \ -p 15630:15630 \ -v $(pwd)/bichon-data:/data \ -e BICHON_LOG_LEVEL=info \ -e BICHON_ROOT_DIR=/data \ -e BICHON_ENABLE_ACCESS_TOKEN=true \ rustmailer/bichon:latest ``` ### Default Credentials * **Initial Login Account:** `root` * **Initial Password:** `root` ### Changing the Password **It is strongly recommended that you change the default password immediately after your first login.** You can change the password via the WebUI: 1. Log in to the WebUI. 2. Navigate to the **Settings** page. 3. Use the **Reset Root Password** option to modify your password. ## ๐Ÿ“– Documentation > Under construction. Documentation will be available soon. [Bichon Wiki](https://github.com/rustmailer/bichon/wiki). ## ๐Ÿ› ๏ธ Tech Stack - **Backend**: Rust + Poem - **Frontend**: React + TypeScript + Vite + ShadCN UI - **Core Engine (Storage & Search)**: Tantivy - Acts as both the primary storage for email content and the full-text search index. This unified approach ensures high performance and eliminates data redundancy. - **Metadata Storage**: Native_DB - Used exclusively for lightweight configuration and account metadata. - **Email Protocols**: IMAP (Supports standard Password & OAuth2) ## ๐Ÿค Contributing Issues and Pull Requests are welcome! ## ๐Ÿง‘โ€๐Ÿ’ป Developer Guide To build or contribute to Bichon, the following environment is recommended: ### Prerequisites - **Rust**: Use the latest stable toolchain for best compatibility and performance. - **Node.js**: Version **20+** is required. - **pnpm**: Recommended package manager for the WebUI. ### Steps #### 1. Clone the repository ```bash git clone https://github.com/rustmailer/bichon.git cd bichon ```` #### 2. Build the WebUI ```bash cd web pnpm install pnpm run build ``` Run the WebUI in development mode if needed: ```bash pnpm run dev ``` #### 3. Build or Run the Backend After the WebUI is built, return to the project root: ```bash cd .. cargo build ``` Or run directly: ```bash cargo run -- --bichon-root-dir e:\bichon-data ``` `--bichon-root-dir` specifies the directory where **all Bichon data** will be stored. ### WebUI Access * The WebUI runs on **[http://localhost:15630](http://localhost:15630)** by default. * **HTTPS is not enabled** in development or default builds. ## ๐Ÿ“„ License This project is licensed under [AGPLv3](LICENSE). ## ๐Ÿ”— Links - [Docker Hub](https://hub.docker.com/r/rustmailer/bichon) - [Issue Tracker](https://github.com/rustmailer/bichon/issues) - [Discord](https://discord.gg/evFnSpdpaE)