41 lines
2.5 KiB
Markdown
41 lines
2.5 KiB
Markdown
|
|
# carrier
|
||
|
|
|
||
|
|
A minimalist desktop client for [Smol Mail](../smolmail): one compact window — the list above, the article below — built on [fumi-core](../fumi), the reference CLI's own library, with an [Iced](https://iced.rs) UI. One 32-byte seed is the only secret; mail stays sealed at rest and opens on demand.
|
||
|
|
|
||
|
|
## What it does
|
||
|
|
|
||
|
|
- Create or restore an identity from a seed, shown once at creation time.
|
||
|
|
- Pin a server's key — paste the operator's, or connect and pin what it presents — then register a username or recall an existing address.
|
||
|
|
- Fetch (with cancel), read, reply and send sealed mail; the inbox, the requests tier and sent copies each keep their own folder.
|
||
|
|
- Accept or block a requester when their mail carried a self-certifying reply address; accept tokens attach to accepted contacts automatically.
|
||
|
|
- Contacts with verified/tofu marks and smol:// import; your own address as a URI, a QR code and a clipboard line.
|
||
|
|
- Key rotation with a confirm-first step, server pin management, a network timeout, and gsmol backup export/import that never contains the seed.
|
||
|
|
|
||
|
|
## Layout
|
||
|
|
|
||
|
|
```
|
||
|
|
src/main.rs config directory, iced launch
|
||
|
|
src/app.rs state and update; blocking calls run on the worker pool
|
||
|
|
src/view.rs the compact split view: tab bar, list, article, status line
|
||
|
|
src/ops.rs fumi-core calls, key/read-mark files, and the offline tests
|
||
|
|
src/theme.rs the palette: navy surfaces, mint accent, monospace protocol values
|
||
|
|
```
|
||
|
|
|
||
|
|
## State
|
||
|
|
|
||
|
|
Everything lives under `$XDG_CONFIG_HOME/carrier` (default `~/.config/carrier`): `carrier.key` is the master seed, written 0600; `carrier.db` is fumi-core's sealed store; `read.txt` is carrier's own read marks, one hex id per line.
|
||
|
|
|
||
|
|
## Run and verify
|
||
|
|
|
||
|
|
```
|
||
|
|
devbox run run # build release and launch
|
||
|
|
devbox run check # fmt --check, build, tests
|
||
|
|
devbox run test # tests only
|
||
|
|
```
|
||
|
|
|
||
|
|
The tests run offline against an in-memory store: seed and key parsing, a sealed envelope listed and opened end to end, contact import, a full backup round-trip, pin labels and the date formatter. `scripts/devbox-libs.sh` puts the GUI stack's runtime libraries (wayland, xkbcommon, EGL, vulkan) on the library path inside the devbox shell — they are dlopened, so nothing that links the binary can provide them.
|
||
|
|
|
||
|
|
## Status
|
||
|
|
|
||
|
|
Work in progress: the UI is unexercised against a live server — the store, crypto and address paths are covered by tests, the network flows (register, fetch, send, rotate) are wired to fumi-core's operations but only smoke-tested as far as launching the window.
|