nirc-rs/STATUS.md

4.4 KiB
Executable File

nirc-rs 0.9.0 — Status Report

Version: 0.9.0 Release date: 2026-07 Codename: Sovereign Data Terminal License: GPL-3.0-or-later Rust edition: 2021 Source: https://git.dcos.net/dcosnet/nirc-rs


Protocol Status

Protocol Implementation Testing Notes
IRC Complete Tested & Working TLS, SASL PLAIN, CTCP, ISUPPORT, oper commands
ADC/DC++ Complete Tested & Working Hub connect, search, file transfers, guard pipeline
Matrix Complete Untested Megolm E2EE, SQLite store, dedicated OS thread
Discord Complete Untested Gateway WebSocket, REST API
Stout Complete Untested REST + WebSocket (Revolt fork)
Spacebar Complete Untested REST + WebSocket (Revolt fork)
Nerimity Complete Untested REST + WebSocket (custom platform)
BitChat Complete Untested libp2p P2P, mDNS, gossipsub, noise

What's New in 0.9.0

Keybindings

  • Ctrl-P — jump to previous buffer in the window list
  • Ctrl-A — jump to next active (connected) buffer
  • Ctrl-Z — cycle through highlight words for notification filtering
  • Insert — scroll chat view to the bottom and re-enable auto-scroll
  • Delete — now deletes the character after the cursor only (no longer cycles connections; use Home/End for window switching)

F1 Dropdown Menu

The F1 key now opens a QBasic 4.5 / aptitude-style dropdown menu bar at the top of the screen. Navigate with arrow keys, select with Enter, dismiss with Esc or F1. All slash-commands are accessible through the menu for discoverability.

Transfer Ticker

A transfer progress ticker now appears in the footer bar, showing real-time transfer speed and ETA for all active file transfers — no need to toggle the transfer panel.

UI Fixes

  • /nick UI update — changing your nickname now immediately updates all tab titles and status bar displays
  • Local IP footer — the status bar now shows your local network IP address
  • Window list badges — protocol badges and unread indicators in the winlist sidebar

Under the Hood

  • Ratatui 0.29 migration
  • Crossterm 0.28
  • libp2p 0.54 (with macros feature, not the removed swarm-derive)
  • matrix-sdk 0.18
  • tokio-rustls 0.26 with webpki-roots

Known Issues

  1. F1 took the Quake console binding — the F1 key was previously used for the debug console overlay. This binding is now orphaned; the console overlay still exists in code but has no key binding. Pressing F1 opens the menu instead. A new key binding for the console overlay is needed (see TODO).

  2. Transfer panel is toggle-only/transfers toggles the transfer panel visibility, but the transfer widget is not integrated into the main draw loop. Transfers are only visible in the dedicated panel, not as a persistent widget.

  3. ADC CID generation is a placeholder — the ADC protocol currently generates CIDs using an NIRC{SID} placeholder format instead of proper Base32-encoded Tiger hash. This works for basic connectivity but is not standard-compliant.

  4. Matrix crypto types are not Send — the matrix-sdk crypto types require running on a dedicated OS thread with a single-threaded tokio runtime. This is handled correctly but adds architectural complexity.


Build & Test Status

  • Build: cargo build --release succeeds
  • Tests: All 313 tests pass
  • Binary size (release): ~834 MB debug, optimized release binary significantly smaller
  • Rust version required: 1.75+

Roadmap / Next Steps

0.9.x (Stabilization)

  • Test Matrix protocol against matrix.org
  • Test Discord protocol
  • Test remaining protocols (Stout, Spacebar, Nerimity, BitChat)
  • Fix ADC CID generation (proper Base32/Tiger hash)
  • Reassign console overlay key binding
  • Integrate transfer widget into main draw loop

0.10.0 (Hardening)

  • IRC SASL EXTERNAL with client certificates
  • IRC monitor mode (+i invisible)
  • DCC file transfers for IRC
  • Plugin API documentation
  • Config file hot-reload (SIGHUP or inotify)
  • Terminal title set/update (XTITLE)

1.0.0 (Release)

  • All 8 protocols tested and working
  • Scrollback persistence to disk
  • Full plugin API stability guarantee
  • Man page and completion scripts finalized
  • Packaging for major distributions