Skip to content

Accord v3.0.0

Choose a tag to compare

@github-actions github-actions released this 19 Jul 09:49

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 from website/.

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_e2e binary: 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.app

Windows — the installer is not code-signed: click More info → Run anyway.