8.5 KiB
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.
🛠️ 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
🚀 Quick Start
Docker Deployment (Recommended)
# 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
-
If you are accessing Bichon on the same machine where it is installed (Machine A), open:
http://localhost:15630 -
If you are accessing Bichon from another machine (Machine B), make sure to set CORS with the IP of Machine B, for example:
# 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 \
-e BICHON_CORS_ORIGINS="http://localhost:15630,http://B_MACHINE_IP:15630,*" \
rustmailer/bichon:latest
Access instructions: This allows Machine B to access the Bichon interface on Machine A via a browser.
Binary Deployment
Download the appropriate binary for your platform from the 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:
# Linux/macOS
./bichon --bichon-root-dir /tmp/bichon-data
# Windows
.\bichon.exe --bichon-root-dir e:\bichon-data
📖 Documentation
Under construction. Documentation will be available soon.
🛠️ Tech Stack
- Backend: Rust + Poem
- Frontend: React + TypeScript + Vite + ShadCN
- Storage: Native_DB
- Search Engine: Tantivy
- Email Protocols: IMAP (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
git clone https://github.com/rustmailer/bichon.git
cd bichon
2. Build the WebUI
cd web
pnpm install
pnpm run build
Run the WebUI in development mode if needed:
pnpm run dev
3. Build or Run the Backend
After the WebUI is built, return to the project root:
cd ..
cargo build
Or run directly:
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 by default.
- HTTPS is not enabled in development or default builds.
📄 License
This project is licensed under AGPLv3.