Skip to content

v1.0.0

Choose a tag to compare

@github-actions github-actions released this 20 Sep 03:04
· 53 commits to main since this release
v1.0.0
553c62f

Meet dexchat

This is the first public release of Dex, the IRC TUI client with modern features. 💬
Give it a try and let us know what you think!

demo
Check here the install instructions.


Full changelog

All commits

New

  • 9d05e24: feat(cfg): add notifications field
  • 0e10d5f: feat(commands): add /join support
  • be55818: feat(commands): add /leave support
  • 7a96532: feat(commands): add /list support
  • e92cfe0: feat(config): validate sound notification values
  • 3af2671: feat(goreleaser): improve releases
  • 4118f62: feat(help): add keybindings help modal overlay
  • daa2dc2: feat(history): load channel history on demand
  • ef60bcf: feat(history): restore direct message history
  • c7bcf96: feat(irc): queue self-JOIN events before sending to the UI
  • 610b983: feat(palette): allow up and down arrow key navigation
  • 3d10c01: feat(palette): improve text contrast and colors on selection
  • 5c68e22: feat(ui): add Dracula theme
  • cd2390a: feat(ui): add Gruvbox Dark theme
  • f78c017: feat(ui): add Solarized Light theme
  • 2307648: feat(ui): add channel mention/unread count in the channel list
  • 9dc45f8: feat(ui): add channel picker scrollbar
  • 0ab709d: feat(ui): add go to channel palette action
  • 29a2281: feat(ui): add sound notification cooldown
  • 76460c4: feat(ui): add unread/tag message counts for channels
  • 3a2fb19: feat(ui): avoid rendering things on inactive buffers
  • 8058c30: feat(ui): do not increment unread badges on user join/quit
  • 2003436: feat(ui): emit sound notification
  • b3b7133: feat(ui): ignore notifications from configured DM users
  • 65870d9: feat(ui): load channel history on demand
  • 10ffefe: feat(ui): load read state before IRC connection
  • eb0699f: feat(ui): nickname completion on tab
  • e045e7b: feat(ui): notify messages in configured channels
  • 26b315e: feat(ui): persist local read cursors
  • 244bff8: feat(ui): process playback messages in chunks
  • a4b9103: feat(ui): refine channel picker navigation
  • 076e4b7: feat(ui): rules for notification events
  • d07f032: feat(ui): select theme from config
  • 8efb225: feat(znc): adds compatibility for ZNC user/password format in config file
  • 6f859d6: feat(znc): start implementing ZNC support; enable echo-message
  • ff2888e: feat(znc): support playback history and multi-client connections
  • 5a73bfc: feat(znc): sync nickname with server after connection
  • a85c36e: feat: add /msg private messages
  • 3303b1d: feat: add colors to message events, like connect/disconnect, server messages
  • 706ba55: feat: add date (days) separator between messages
  • 4428aca: feat: add goreleaser
  • 0676052: feat: add part alias and close private messages
  • 7f8f2c4: feat: add persistent history support with deduplication
  • 64fe924: feat: add user info into join/part/quit messages
  • d786dbb: feat: bulk join channels on connect
  • b644b93: feat: edit message drafts in external editor
  • 4504208: feat: handle NICK events to refresh user change in all channels the user is in
  • 478ed44: feat: handle channel join errors
  • 0582e84: feat: handle irc disconnects
  • be42118: feat: highlight mentions in chat messages
  • 30bd54e: feat: identify notification channel activity
  • 8129d81: feat: load config from XDG directory
  • eb6518c: feat: message batching to avoid UI re-render flood
  • 9748cc8: feat: message types
  • 47422ac: feat: multiple reconnects
  • 3c01733: feat: nick of messages sent by users not in channel is shown as gray in history
  • 3b52ce7: feat: provide default IRC configuration
  • 1c325bc: feat: pulse channel names on mentions
  • 8ab973c: feat: pulse follow-up activity after mentions
  • 606285d: feat: pulse notified channel names
  • 47e6425: feat: rose pine theme
  • 43a2038: feat: scroll hovered panes independently
  • 7fab4d7: feat: send all BufferNewMessageMsg through batches
  • ec0c3d4: feat: send reconnected messages to all channels
  • 26114fe: feat: show error when messaging channels that failed to join
  • b3079d2: feat: show prefix in chat and fix case in viewport
  • 41937fa: feat: show user join messages in channel buffer
  • 129c673: feat: show user parts messages in channel buffer
  • a209c56: feat: show user quit messages in channel buffer
  • 37720bc: feat: style topic on render
  • 3fc2f2c: feat: support server IRCv3 timestamps
  • e1f17df: feat: switch to the last selected buffer
  • b05be01: feat: upgrade bubbletea/lipgloss to v2; use lipgloss composite

Fixed

  • 289569d: fix(history): preserve entries during persistence
  • befd3bc: fix(history): use dex data directory
  • b197e76: fix(irc): avoid ZNC queue delays from WHO bursts
  • aa971c7: fix(irc): avoid blocking startup event delivery
  • edfab6c: fix(irc): preserve channel context for quit events
  • d52da5c: fix(nix): update Go module vendor hash
  • 818acfe: fix(ui): add background color to all message cells
  • b85bd17: fix(ui): avoid inactive buffer rerender on nick update
  • 39e6442: fix(ui): avoid redundant sidebar resize channel/user list
  • 3d915b2: fix(ui): distinguish inactive nickname colors
  • a9f1034: fix(ui): don't render chat when no need for it
  • 373026f: fix(ui): handle chat actions synchronously
  • 9ad3b17: fix(ui): improve Rose Pine theme contrast
  • 2014ce7: fix(ui): keep app open after persistence failure
  • 948f2ab: fix(ui): load configured history asynchronously
  • b4f73ff: fix(ui): move periodic persistence off update loop
  • ed7915a: fix(ui): parse IRC hexadecimal colors
  • 5d4ef69: fix(ui): persist private messages before closing
  • bfb4001: fix(ui): persist state before quitting
  • 8d30c31: fix(ui): restore DMs after IRC connection
  • 2274dee: fix(ui): serialize history persistence
  • 4143dd6: fix: close irc client connection on exit
  • 76f6718: fix: correctly render messages colored by type
  • 95c7919: fix: count only user messages as new messages for badges
  • 87ee111: fix: creates a buffer dynamically if the user list arrives before the buffer exists
  • 352ad42: fix: display topic correctly for dynamically created buffers
  • 8cf4aca: fix: don't duplicate ownecho messages when on ZNC
  • 54555db: fix: enable truecolor in Docker image
  • d803e7a: fix: foreground in some messages
  • 0ebb409: fix: girc Connect was being shadowed
  • f246a58: fix: honor advertised IRC user prefixes
  • 38b4912: fix: improve channel list indentation
  • a2033c2: fix: insert dynamically created channels at the correct position
  • 101148d: fix: join events now refreshs the user list
  • 0b45518: fix: keep selected buffer visible
  • b1d8888: fix: load history in a batch instead of message per message
  • b2edccb: fix: move reconnection loop to Connect()
  • e7b1d87: fix: moves ConnectAll into bubbletea lifecycle
  • a7771da: fix: notify active buffers when terminal is unfocused
  • 9f3b345: fix: only refreshes on UserListMsg in the active buffer
  • 5e5cf45: fix: render IRC formatted messages also in server buffers
  • 4a4438e: fix: run irc echo-message handler in the background
  • d67c6e2: fix: select archives for Homebrew cask
  • 13b1eef: fix: set default terminal type in Docker image
  • 9518959: fix: use Homebrew tap token secret

Refactored

  • c0f2999: refactor(ui): isolate persistence orchestration
  • 7b43350: refactor(ui): move editor I/O into tea.Exec
  • 11bf39b: refactor(ui): organize persistence state
  • f632ab9: refactor(ui): schedule IRC commands with tea.Cmd
  • 5ca32fe: refactor: centralize help keybindings
  • a635971: refactor: migrate module path to dexchat

Documentation

  • 661e854: docs(ui): document routing and persistence invariants

Other changes

  • f01e08f: move palette loose numbers to const
  • e501047: 1st prototype
  • 58f63cc: Initial commit
  • e3efd24: MoveDown/Up will go to the top/bottom on end/start
  • 7ee1d4b: Update README.md
  • 7a81f5d: Update README.md
  • 7d63d4e: Update README.md
  • a497b57: Update README.md
  • e85ae64: Update issue templates
  • 556f928: add .gitignore
  • 0550288: add PRIVMSG handler for channels; add time to message
  • a03f3f9: add a preview in doc
  • f331526: add channel member count
  • 2a7e1cf: add ctrl+c confirmation to exit
  • 5cd2b88: add help text at bottom
  • 5f5de2f: add initial config
  • 9a1e572: add minimum support to scroll through chat
  • 5e56f50: add more todo
  • e367dde: add myuser to userlist
  • 2a2cd12: add new item for the theme to colorize
  • da64774: add nickname in inputbar
  • 4174312: add padding to chat text messages
  • 1416748: add quit handler
  • 53cb021: add serers handlers: show connection output to server buffer
  • ded18f0: add topic and username for server buffers
  • 0cf9751: add topic channel
  • 3a9a47b: add topic to server buffers
  • 57727b3: agents: improve instructions
  • 2e5e582: change buffer field name
  • c75798b: change channel model to value
  • 56f91ee: change help keybinding
  • 55f9f6b: channels tree
  • 0d80bb9: chore(ui): extract command dispatch
  • e2ba3ca: config.toml
  • 8ae2796: create buffers for servers as well
  • baf706b: disable userlist scroll for now
  • c9593c7: docs
  • b6802ce: docs
  • bcfbc44: docs
  • 4944e78: docs
  • 98760d1: docs
  • 94ca9a2: docs and preview
  • f4d723e: fix borders/paddings/margins from chatarea
  • d63e3bf: fix buffer keys case
  • 907457a: fix bug where j/k in input would scroll viewport
  • 715a905: fix bug where users sometimes dont get updated
  • 4d0246b: fix channel name cases after connecting
  • 50692cf: fix mouseevents from input bar
  • 821d468: format received styled messages
  • 917c484: get servers from config file
  • ec24d28: github: add issue form
  • da422ba: github: configure issue template chooser
  • f52d0fd: github: fix issue form title validation
  • fa60cde: github: inherit organization issue forms
  • c486c25: global Width is not necessary
  • 1b3c267: go sum
  • 05b76c5: handle keybindings pressed in a different place
  • e6f5e84: handle nick updates
  • ec03e35: handle topic
  • f1c99d6: implement buffers; update user list for each buffer
  • 2315e09: improve a bit input code
  • 883acd2: improve code a bit
  • 3ad0463: improve layout's readability (i hope)
  • 2986e79: increase channel sidebar ratio
  • 69f96a6: input inside chat
  • bf7a1e4: input looking ok
  • 115fd2f: input working
  • bf273b2: keybindings; command palette and more
  • 1a91e15: main
  • 1e38cff: move input from chat to a new component
  • 8b9f184: move input package
  • fa8442f: new preview
  • 8f40989: only show member count on channels
  • f573906: perf(chat): cache rendered chat history
  • 890577f: perf(ui): avoid redundant component updates
  • f08eca7: preview image
  • bceb6cf: randomize nicks in userlist
  • 1241578: refactor layout part of chat
  • 2f4aa17: remove dead code
  • caacc89: remove layout package
  • 5cceeee: remove up/down keybindings for channels
  • 046fd5e: rename const in ui.go
  • f1b8d0f: replace placeholder users/chat buffer
  • b92f402: rever input update order
  • e190863: revert sidebars ratio; fix member count separator width calc
  • 15360fd: send messages to channel on enter
  • 9b75973: set a viewport to display the userlist
  • ec0c08f: simple connection to libera
  • 46ec8e1: simplify layout code
  • 304a1fe: simplify layout in main model
  • 9a46300: small tweaks in users.go
  • 7dd2891: sort servers/channels in config type
  • 0b5f344: sort user list by permissions as well
  • 1a9c972: structure messages; add color to usernames in chat
  • 4a7a53e: style the channel sidebar
  • 9725fa7: support connection to multiple servers
  • 5f37229: support private messages
  • cc98c49: test(keybindings): make quit handler deterministic
  • 00b9ef3: test(ui): cover asynchronous buffer persistence
  • b570754: test(ui): cover persistence failure and shutdown
  • da4d1ab: tree working minimally
  • 7f09813: update userslist with channel users
  • feca6f3: upgrade go version
  • 340bce9: use JoinVertical in channels.go
  • 32b1592: user irc handlers send a tea message to UI
  • 34f5637: working
  • 41bfcd2: working mvp
  • bb8f41d: wrap chat messages in the correct viewport width