Accord v3.0.0
A reliability, diagnostics and authoring release. Fully backward-compatible on
the wire with 2.x — every new capability is local or negotiated, so a friend
still on 2.3.x keeps working unchanged.
Added
- Faster, more reliable reconnection to friends: Accord now remembers each
friend's last known direct address (persisted, 14-day freshness) and dials
those addresses at startup, in addition to the usual DHT bootstrap — so
sessions come back without waiting for peer discovery, including after the
Mac wakes from sleep. - Per-friend network panel (Settings → Network → "Connection to your
friends"): for each friend, whether a session is currently active and the
last address you reached them at — connectivity diagnostics without
screenshots. - Markdown tables (GitHub-flavored): header + alignment row, column
alignment, escaped pipes, rendered in a scrollable frame. - Markdown task lists (
- [ ]/- [x]): checkbox items render without a
bullet, with a read-only checkbox. - Copy conversation as Markdown: a header button on any DM or channel
copies the whole loaded thread to the clipboard as a clean Markdown
transcript — messages grouped by day, deleted messages redacted (never their
content), attachments listed by name. - "Back to latest" button: when you scroll up in a thread, a floating
button appears at the bottom-right to jump straight back to the most recent
message (one click), and disappears once you're at the bottom. - Full date on hover: hovering a message timestamp now shows the complete
date and time as a tooltip. - Copy button on code blocks: fenced code blocks now show a "Copy" button
on hover that copies the block's exact source to the clipboard. - Voice message playback speed: a button on the voice-message player cycles
through 1×, 1.5× and 2× playback speed. - Project website + French user guide (GitHub Pages): a download landing
page and a step-by-step guide (install, peer-to-peer connection,
troubleshooting), deployed fromwebsite/.
Performance
- Long conversations scroll smoothly: the message list now renders only
the visible tail of the thread to the DOM (80 rows, extending by 80 as you
scroll up, with scroll anchoring) instead of every loaded message. Jump
targets and the "new messages" divider are always rendered; switching
conversations resets the window.
Internal
-
The conversation view was split into focused modules (
chat/DmView,
chat/MemberList,chat/panels,chat/common) — every source file is now
under 800 lines. Pure moves, no behavior change. -
Custom theme editor (Settings → Appearance): a 25th "Custom" tile —
pick your chat background, side-panel and accent colors on a dark or light
base; the rest of the palette (hovers, inputs, rail, tooltip) is derived
automatically and applied live. The gallery tile previews your colors. -
Share a theme by code: export your custom theme to a compact
accord-theme:…code you can paste to a friend, and import theirs. -
Interface font choice (Settings → Appearance): System, Rounded or Serif
— all native system families, nothing downloaded. -
Scheduled Do Not Disturb (Settings → Notifications): silence sounds and
notifications during a chosen time range (spanning midnight supported).
Fixed
- "My friend's banner/profile never arrives" (field bug, root-caused):
when two peers re-established contact after a restart, the direct dial and
the hole-punch volley crossed — both sides opening a handshake at once
(simultaneous open). The peer that the tie-breaker turns into the
responder had its own outgoing handshake dropped, and every message it
had queued on that handshake was silently discarded — typically the
profile/banner announce it was about to send. The transport now re-seals and
delivers that queued backlog under the freshly-established session, so no
message is lost when handshakes cross. Covered by a new deterministic
transport test. Two safety nets were added on top: the profile announce is
replayed on the first inbound message of each session episode, and friend
addresses are persisted from pending-friendship sessions too (the on-connect
hook alone missed sessions opened before mutual friendship).
Tests
- New
reconnexion_e2ebinary: a friend reconnects purely from the persisted
address cache after a restart (no re-registration, no DHT), and a message
queued while a friend was offline is delivered once they reconnect. - e2e determinism: friend-sync test binaries disable mDNS (they register peers
manually) and widen wait windows to tolerate parallel CPU contention.
Install notes (macOS "damaged" warning, Windows SmartScreen)
macOS — the app is not damaged: it is not notarized by Apple (that requires a paid developer certificate), and macOS reports quarantined, non-notarized apps as "damaged" on Apple Silicon. Fix it once, after dragging Accord into Applications:
xattr -cr /Applications/Accord.appWindows — the installer is not code-signed: click More info → Run anyway.