diff --git a/README.md b/README.md index b045f83..6d6740a 100644 --- a/README.md +++ b/README.md @@ -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 friend’s. 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 friend’s payload | +| `F2` | Share invite (`onionwire:v1:…`) | +| `F3` | Paste a friend’s invite | | `F4` | Rotate **onion** (locator only) | | `F5` | Selected friend’s 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