Skip to content

Releases: xhluca/retalk

v0.0.13

Choose a tag to compare

@xhluca xhluca released this 14 Jul 19:06
6b38266

A small client-only release.

  • retalk show now honors --dir like every other command. Directory-based identities no longer need the RETALK_HOME workaround: retalk show PEER --dir DIR, or --group NAME / --web with no positional at all. Giving both a USER positional and --dir is refused as ambiguous; the named-user form (retalk show alice bob) is unchanged. (#34)

No server changes; relays on 0.0.12 are fully compatible.

v0.0.12

Choose a tag to compare

@xhluca xhluca released this 14 Jul 16:19
7a82cbc

The stable release bundling everything since 0.0.10.

Group chat (#29)

  • retalk group create/list/members/add/remove/rename/leave/join/delete and retalk send --group NAME.
  • Client-side fan-out: one pairwise-encrypted copy per member; the relay never learns the roster.
  • Groups are identified by a 32-hex id; names are local labels (rename freely, duplicates error).
  • Cooperative membership: each message carries its sender's roster, receivers adopt it.
  • Real leave protocol: members are notified, stragglers' copies are refused with a signed negative-ack, and the refusal corrects the straggler's roster too. Rejoining works (group join).
  • Roster size capped at 100 by default; relay-adjustable (--max-group-size / RETALK_SERVER_MAX_GROUP_SIZE, advertised at GET /info).
  • receive/history/show gain group/group_id fields and a --group room view (one color per sender).

New default relay: relay.retalk.dev (#30)

  • The built-in default relay is now https://relay.retalk.dev.
  • retalk-server --audience (and RETALK_SERVER_AUDIENCE) accept a comma-separated list, so a relay can serve old and new URLs during a domain move. The public relay answers both; identities that saved the old URL keep working.

show, --save, and the web view

  • retalk show USER PEER renders a saved conversation as a terminal chat (--follow keeps it live); show USER --group NAME renders a room.
  • retalk show USER --web [--port N] (#32) serves all saved conversations as a local web app: sidebar plus chat bubbles, live-updating, 127.0.0.1-only, guarded by a per-run URL token.
  • The save flag is now --save on send/receive (RETALK_SAVE_MESSAGE=1 unchanged); the README documents message history (#31).

JSON standard

  • Group send receipt documented: {"id","group","group_id","sent","failed"}, exit 2 on partial failure; group_leave control records; group fields on messages.

Full test suite: 71 tests.

v0.0.11rc2 (pre-release)

Pre-release

Choose a tag to compare

@xhluca xhluca released this 09 Jul 16:23
c73e62e

Pre-release — try it with pip install --pre -U retalk (a plain pip install retalk keeps giving 0.0.10).

Changes since 0.0.11rc1:

  • Removed retalk auth (it only ever existed in rc1). A child process can't set its parent shell's environment, so auth needed an eval wrapper — and every eval-free alternative trades real complexity or safety for a few keystrokes. The documented way is the plain, standard one:
    export RETALK_USER=alice
    export RETALK_PASSPHRASE="<YOUR-PASSPHRASE>"
  • README: placeholder shortened to "<YOUR-PASSPHRASE>"; --peer values consistently quoted (--peer "bob").

Everything else from rc1 is unchanged: retalk show USER PEER chat view (--follow for live), --save rename, zsh-paste-safe CLI output, quoted placeholders, post-verify next-steps block. 49 tests pass.

v0.0.11rc1 (pre-release)

Pre-release

Choose a tag to compare

@xhluca xhluca released this 08 Jul 20:16
a5645df

Pre-release — try it with pip install --pre -U retalk (a plain pip install retalk keeps giving 0.0.10).

New

  • retalk auth USER [PASSPHRASE] — select the user + passphrase for this terminal session in one command: eval "$(retalk auth alice "<YOUR-PASSPHRASE>")". It verifies the credentials actually unlock the identity before printing the exports; omitting a required passphrase is a clear error, and a --no-passphrase identity is confirmed as fine.
  • retalk show USER PEER — the saved conversation rendered as a chat: peer bubbles left, yours right, colored names, timestamps, 📅 date separators, word-wrapped to your terminal. --follow keeps it live (fetching + saving like receive --save). Shows exactly what --save kept.

Changed

  • --save-messages is now --save on send and receive (breaking; RETALK_SAVE_MESSAGE=1 still works).
  • Every copy-paste block retalk prints (invites, errors, post-verify hints, --help quickstart) is now safe to paste into stock macOS zsh: no trailing # comments on commands, no shell-hostile characters in comment text, and placeholders like "<YOUR-PASSPHRASE>" are quoted so <...> can't turn into a redirection.
  • add --verify / verify end with a ready-to-paste block (exports + send + receive --follow).

54 tests pass, including live show --follow coverage.

v0.0.10

Choose a tag to compare

@xhluca xhluca released this 08 Jul 17:49
1270417

Bug-fix release: crossed session initiation no longer wedges a pair.

If two peers messaged each other before either received (easy to do — both run retalk send after swapping fingerprints), each side overwrote its only stored Olm session with the inbound one, and every later message failed with OlmDecryptionException: invalid MAC — permanently.

  • Multi-session storage — a pair can hold several Olm sessions; decrypt tries each, prekey messages add (never overwrite), send uses the freshest. Existing stores migrate automatically on first use.
  • No more crashes — mail that matches no stored session is refused (signed nack) with a clear warning, and receive/--follow keep polling.
  • Self-healing — a sender whose ciphertext was refused drops its sessions with that peer and starts fresh, so pairs already wedged on ≤0.0.9 heal by themselves once both sides upgrade: refuse → reset → resume. (Anything that was refused needs to be re-sent by its author.)

New regression suite tests/test_crossed_sessions.py (crossed initiation, wedged-pair healing, legacy-store migration), verified live over both a local relay and retalk-relay.mcgill-nlp.org.

Upgrade: pip install -U retalk

v0.0.9

Choose a tag to compare

@xhluca xhluca released this 07 Jul 20:15
8c61333

CLI feedback release: you always know whether you're reachable.

init reports its registration outcome

  • Success (green): ✓ Registered on <relay> — peers can message you.
  • Relay unreachable (bold red): ⚠ NOT registered naming the relay and the exact retalk register … command to run once it's back.
  • No relay configured (bold red): ⚠ NOT registered with the retalk config --relay <url> + retalk register … pair.
  • --no-register stays silent (explicit opt-out).

No more tracebacks on relay failures
Connection problems (DNS, refused, timeout, TLS) and relay-layer errors exit with a clean, actionable message — queued sends stay in the outbox and go out on the next successful command (e.g. retalk sync).

Install/upgrade: pip install -U retalk

v0.0.8

Choose a tag to compare

@xhluca xhluca released this 07 Jul 03:07
1b76326

Docs and CLI polish.

README, rewritten around getting started

  • New intro (why a CLI messenger, vs Signal/Matrix) and a real Quickstart: initadd <fingerprint> --peer bob --verifysend/receive, with default-relay and passphrase notes. Every command block in the README is tested end-to-end.
  • Troubleshooting <details> for the macOS SSL: CERTIFICATE_VERIFY_FAILED crash (python.org Pythons ship without CA certs) and a new-to-uv primer.
  • 14-command table synced with retalk --help; deep-dive sections moved to docs/ (selecting the user, sharing contacts, message history at rest, relay flags, register/config reference).

CLI

  • Forgot the passphrase? The error is now a colored, copy-paste block showing your actual command with the fix filled in (-p …, export RETALK_PASSPHRASE=…, or --no-passphrase when creating) instead of a list of flag names.
  • --help synced: config appears in the usage line, and the quickstart epilog uses the current add <id> --peer NAME syntax.

Install/upgrade: pip install -U retalk

v0.0.7

Choose a tag to compare

@xhluca xhluca released this 30 Jun 21:12
dd33be5

Builds on the global / per-identity contact lists (0.0.6) with verification and history UX.

Contacts & verification

  • retalk verify works on a global contact with no --user: manual keys record offline; a relay fetch auto-picks an identity to sign the authenticated get_keys (the signer never changes the fetched keys) and records into the global list.
  • retalk add --verify — fetch and pin a new contact's two keys immediately (also a clean way to name + verify in one step).
  • verify now prints the same aligned, init-styled block (Name/Fingerprint/Keys/Saved to/Signed by) with a green ✓ Verified header.

Identities

  • retalk id --last — print the most recently created identity (tracked via a created_at stamp, mtime fallback for older stores).

Message history — now two-directional and opt-in

  • send --save-messages keeps your sent side (symmetric with receive --save-messages).
  • RETALK_SAVE_MESSAGE=1 (truthy 1/true/t/yes/y/on) enables saving for every send and receive.
  • retalk history interleaves both sides per conversation, oldest first, tagged "direction": "in"|"out"; --peer shows the whole thread with that peer.

Short flags: -r/--relay, -p/--passphrase, -np/--no-passphrase; add's label flag renamed --name--peer.

v0.0.6

Choose a tag to compare

@xhluca xhluca released this 26 Jun 20:22

New

  • retalk register — explicitly publish your keys to the relay so peers can reach you. retalk init now auto-registers (best-effort) unless --no-register — a fresh init makes you reachable right away, and it never hard-fails if the relay is down.

Changed

  • retalk add errors if the contact name is already taken (suggesting a free name like bob-1) instead of silently overwriting; pass --override to replace. Success now prints next-step hints.
  • receive --all prints a warning (it drains/acks mail from every sender, including strangers); docs and --help now lead with --peer NAME.
  • retalk id: --card is now human-readable; --json emits the full Contact card (the pipeable, shareable form — use retalk id --json | retalk import).
  • init output reworked: unencrypted-keys warning first, then Name:/Path:/Fingerprint:/Relay: and a copy-paste invite (its init line includes --passphrase).
  • Top-level --help quickstart shows the -u form.

Note

init now contacts the relay by default to register; use --no-register to keep it fully offline.

v0.0.5

Choose a tag to compare

@xhluca xhluca released this 26 Jun 19:09

Python 3.9 support

retalk now supports Python 3.9+ (previously 3.10+). PEP 604 X | None annotations are deferred with from __future__ import annotations, and the dependency (vodozemac) ships cp39 wheels. The full test suite passes on CPython 3.9 and 3.12.

Docs

  • README: pippip3.