- Rust 56.6%
- TypeScript 40.9%
- Kotlin 0.9%
- Python 0.7%
- Shell 0.3%
- Other 0.5%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
|
||
| .forgejo/workflows | ||
| android | ||
| backend | ||
| e2e | ||
| frontend | ||
| mikrotik | ||
| .dockerignore | ||
| .gitignore | ||
| CLAUDE.md | ||
| FABLE_AUDIT.md | ||
| LICENSE | ||
| README.md | ||
rev
A personal webmail with contacts, calendars, notes and full-text search over the whole mailbox (message bodies and PDF/Office attachments). Rust/Axum backend, Next.js frontend, one SQLite database and one Tantivy index per user, in front of Purelymail (IMAP/SMTP, CalDAV/CardDAV). It also has an Android app (WebView, biometric unlock, notifications without Google).
Quick start
There is no local toolchain requirement; everything builds in Docker.
# Backend: build and test
docker run --rm -v "$PWD":/src -v rev-cargo-registry:/usr/local/cargo/registry \
-v rev-cargo-target:/src/backend/target -w /src/backend rust:1-bookworm cargo test
# Frontend: typecheck and test
cd frontend && docker run --rm -v "$PWD":/app -v rev-frontend-nm:/app/node_modules \
-w /app node:24-bookworm-slim sh -c 'npm i -g bun@1.4.3 && bun install --frozen-lockfile && npx tsc --noEmit -p . && npx vitest run'
To run the whole app, build the frontend (bun run build → frontend/out),
build the backend (cargo build --release) and start the binary with
STATIC_DIR, DATA_DIR, IMAP_HOST, SMTP_HOST and DAV_URL set; it
listens on port 3001. All settings are environment variables, listed in
backend/src/config.rs.
Build and deploy
Pushing to main makes Forgejo Actions build the arm64 image
(mikrotik/Dockerfile), push it to git.exithub.net/ivan.pavlina/rev and
the MikroTik RB5009 repulls it by itself (scheduler repull-tick). A change under android/ also builds a
signed APK and publishes it as a release for Obtainium. Details are in
CLAUDE.md.
More
- CLAUDE.md — build, test, deploy, local testing and gotchas
- mikrotik/README.md — design log and router notes
License
MIT, see LICENSE. rev started as a fork of rav
(itself a fork of oxi); their copyright
notices stay in it, as the MIT license requires.