docs: v0.2 status — invite string, no QR graphic
All checks were successful
ci / test (push) Successful in 2m43s
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:
parent
4fb47444d5
commit
1d7f8e1f35
1 changed files with 12 additions and 8 deletions
20
README.md
20
README.md
|
|
@ -1,7 +1,9 @@
|
||||||
# OnionWire
|
# OnionWire
|
||||||
|
|
||||||
Lean Tor messenger: one Rust process (ratatui + Noise IK + sqlite + in-process Arti).
|
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.
|
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
|
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
|
## 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.
|
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
|
## 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.
|
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 |
|
| `j` `k` / `↑` `↓` | Move or scroll the focused pane |
|
||||||
| `g` / `G` | Jump to top / bottom of the focused pane |
|
| `g` / `G` | Jump to top / bottom of the focused pane |
|
||||||
| `?` | Keybinding help (`Esc` closes) |
|
| `?` | Keybinding help (`Esc` closes) |
|
||||||
| `F2` | Share: invite string (`onionwire:v1:…`) |
|
| `F2` | Share invite (`onionwire:v1:…`) |
|
||||||
| `F3` | Paste a friend’s payload |
|
| `F3` | Paste a friend’s invite |
|
||||||
| `F4` | Rotate **onion** (locator only) |
|
| `F4` | Rotate **onion** (locator only) |
|
||||||
| `F5` | Selected friend’s profile (`/who`) |
|
| `F5` | Selected friend’s profile (`/who`) |
|
||||||
| Enter | Run `/wipe`, `/wipe-all`, `/profile`, `/who`, `/pay`, `/tip`, `/backup`, `/restore` from the composer |
|
| Enter | Run `/wipe`, `/wipe-all`, `/profile`, `/who`, `/pay`, `/tip`, `/backup`, `/restore` from the composer |
|
||||||
| `Esc` | Close overlay / back to Main / clear composer |
|
| `Esc` | Close overlay / back to Main / clear composer |
|
||||||
| `Ctrl-Q` | Quit |
|
| `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=…`
|
`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
|
## F4 rotate onion
|
||||||
|
|
||||||
|
|
@ -263,7 +267,7 @@ Do not run `cargo publish`; `publish = false`. CI needs the repo secret
|
||||||
|
|
||||||
## Not in v1
|
## 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
|
## License
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue