docs: v0.2 status — invite string, no QR graphic
All checks were successful
ci / test (push) Successful in 2m43s

README lede and F2/F3 now match the TUI: share/paste onionwire:v1
invite, no terminal QR.
This commit is contained in:
Sirius DevOps 2026-09-10 17:02:34 -04:00
parent 4fb47444d5
commit 1d7f8e1f35
No known key found for this signature in database

View file

@ -1,7 +1,9 @@
# OnionWire
Lean Tor messenger: one Rust process (ratatui + Noise IK + sqlite + in-process Arti).
Two people share an invite string, then chat. No hosted server. Identity is a public key; the onion is only a locator.
No hosted server. Identity is a public key; the onion is only a locator.
**v0.2** — Linux TUI. Two people add each other with an `onionwire:v1:…` invite string (`F2` share / `F3` paste). There is no QR graphic. Chat is Noise IK over your own v3 onion. Optional Monero invoices if you point at a local `monero-wallet-rpc`. Fail closed: peer down → send fails. Arti onion services are still experimental. The message log is plaintext on disk.
You do **not** install a `tor` daemon, `torrc`, Prosody, or XMPP. OnionWire embeds Arti and publishes its own v3 onion.
@ -96,7 +98,7 @@ ONIONWIRE_HOME=/tmp/ow-a ./onionwire
ONIONWIRE_HOME=/tmp/ow-b ./onionwire
```
Then F2 on A, F3-paste on B (and the other way around).
Then `F2` on A (invite string), `F3`-paste on B (and the other way around). No QR.
## First run
@ -108,6 +110,8 @@ or `cargo run --release`.
On start you should see `onionwire: bootstrapping Arti…` on stderr. Directory bootstrap is usually under a minute; the onion is ready once a probe connect works (combined Arti status may still say Bootstrapping). Fail closed at 360s. Data lives in `ONIONWIRE_HOME` if set, otherwise `~/.local/share/onionwire/` (`onionwire.db` + Arti state, mode 0700). First open creates an ed25519 identity key. That key **is** you.
Then `F2` to share your invite, `F3` to paste a friends. Mouse-select the `onionwire:v1:…` line to copy.
## Friends are keys
A friend is an ed25519 pubkey (`UNIQUE(pubkey)`). The `.onion` on that row is only where they are reachable right now. Pasting the same `k` updates the locator; it never creates a second person.
@ -123,21 +127,21 @@ Focus starts on the composer so typing works immediately. `Tab` cycles panes; `j
| `j` `k` / `↑` `↓` | Move or scroll the focused pane |
| `g` / `G` | Jump to top / bottom of the focused pane |
| `?` | Keybinding help (`Esc` closes) |
| `F2` | Share: invite string (`onionwire:v1:…`) |
| `F3` | Paste a friends payload |
| `F2` | Share invite (`onionwire:v1:…`) |
| `F3` | Paste a friends invite |
| `F4` | Rotate **onion** (locator only) |
| `F5` | Selected friends profile (`/who`) |
| Enter | Run `/wipe`, `/wipe-all`, `/profile`, `/who`, `/pay`, `/tip`, `/backup`, `/restore` from the composer |
| `Esc` | Close overlay / back to Main / clear composer |
| `Ctrl-Q` | Quit |
## F2 invite
## F2 / F3 invite
`F2` shows the invite string (mouse-select to copy):
There is no QR. `F2` opens `(o) invite` with truncated fingerprint, current onion, and the full payload (wrapped, mouse-select to copy):
`onionwire:v1:k=…:o=…:spk=…:sig=…`
Give that string to a friend. `F3` pastes it. Unknown `k` asks for approval. Same `k` already in the roster updates `onion` only.
Give that string to a friend. They `F3` paste it (`(o) paste invite`). Unknown `k` asks for approval. Same `k` already in the roster updates `onion` only.
## F4 rotate onion
@ -263,7 +267,7 @@ Do not run `cargo publish`; `publish = false`. CI needs the repo secret
## Not in v1
Prosody, XMPP, s2s, MAM, carbons, outbox, multi-device, DHT / name server, sqlcipher.
Prosody, XMPP, s2s, MAM, carbons, outbox, multi-device, DHT / name server, sqlcipher, QR codes.
## License