Skip to content

Releases: squidowl/halloy

Nightly

Nightly Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 05 Jun 12:32
eb3737b

This release is automatically updated on every commit to main that passes tests.

Warning

This is a nightly build, not an official release. Using an official release is recommended.
You can find the latest official release at https://github.com/squidowl/halloy/releases/latest.

For nightly documentation, see https://nightly.halloy.chat.

2026.7.2

Choose a tag to compare

@github-actions github-actions released this 08 Jun 07:45
abc0ad4

Added:

  • Add clear buffer shortcut to title bar
  • Indicate in query if user is offline in its title bar

Fixed:

  • Issue where large window size could cause Halloy to crash in certain scenarios
  • Correctly support RPL_METADATASYNCLATER
  • Issue where input box could lose focus after a filehost, reply, or reaction modal
  • Issue where a buffer could jitter in certain particular scroll positions
  • Minor issues where input tooltips could fail to reflect current caret position, highlight the correct active argument, show when first the input is first loaded, etc
  • Show Display in Configuration docs menu
  • Document that servers.<name>.username setting will fall back to servers.<name>.nickname if not set
  • Nick completion tooltip no longer shows when there is only a single match

Changed:

  • buffer.reply.insert_nick no longer inserts nick when replying in query buffers or to yourself
  • Input tooltips are aligned with the input (i.e. inset when text_input.nickname.enabled = true)
  • servers.<name>.sasl.plain.username setting will fall back to servers.<name>.nickname if not set
  • Replace the Windows MSI package with a per-user Inno Setup installer

Thanks:

2026.7.1

Choose a tag to compare

@github-actions github-actions released this 02 Jun 18:34
b2b4d39

Fixed:

  • Panic when a reply contains a multibyte character near the start of message
  • Ensure messages don't get formatted if channel has +c mode (colour filter)
  • User highlighting incorrectly matching contraction suffixes

Thanks:

2026.7

Choose a tag to compare

@github-actions github-actions released this 28 May 11:35
b41dde6

Added:

  • Support for IRCv3 reply client tag
  • Support for IRCv3 draft/message-redaction
  • Support for IRCv3 metadata display-name, avatar, pronouns, homepage, color, status keys
  • IRCv3 bot mode support, with bot icon in buffers and nicklists
  • Support for IRCv3 WebSockets
  • Support for displaying SVGs
  • Notification for reacts (notifications.reaction)
  • Theme colors for horizontal rule text and buffer backlog/date separators
  • Font size settings the sidebar (sidebar.font_size) and server titles in the sidebar (sidebar.server_font_size)
  • The focused buffer is indicated in the sidebar by a thin border (can be configured with the optional theme color buttons.primary.border_active, falls back to buffer.border_selected if no color is configured; set to "#00000000" to disable)
  • Two new optional theme colors, buttons.primary.border_active and buttons.secondary.border_active that define border color used to signal secondary state (set to "#00000000" to disable)
  • The config buffer.server_messages.condense.max may be used to limit the number of user entries shown in condensed messages
  • Setting to close queries when closing query buffer panes (buffer.close.query)
  • Configuration options for font stretch (font.stretch)
  • The default font is not bundled if default feature iosevka-font is disabled.
  • Customize the character used to indicate a nickname was truncated with display.truncation_character
  • Support for draft/chathistory-end message tag
  • Setting to mark new messages as read for any open buffer when the buffer is scrolled to the bottom and Halloy is focused (buffer.mark_as_read.on_message)
  • Setting to hide the text of messages that contain only a single URL, when the URL's preview is visible (preview.hide_url)
  • Nick and channel completion picker
  • Runtime graphics settings (graphic backend, vsync, and antialiasing)

Fixed:

  • Issue where duplicate messages could appear for sent messages when connecting to a soju bouncer
  • Issue where ZNC playback would produce duplicate messages
  • Record NICK and QUIT messages returned by draft/event-playback (chathistory)
  • Allow multiple file uploads when pasting on macOS
  • Preview inclusion conditions would require both channel and user/server_message be specified, when one or the other should be sufficient
  • Matching against users for some include/exclude conditions
  • Do not hide consecutive nicknames if the user's displayed access levels or bot mode changes
  • Link matching:
    • Channel link matching on single line only
    • Fix link matching for both end of line delimiters & punctuations
    • Handle URLs ending with paired delimiters chars when matching links
    • Handle leading delimiters when parsing link fragments to match nicks after quotes
  • Issue where a shorter highlight word would match instead of a longer one sharing the same prefix
  • Issue where unread indicator could appear in sidebar for an open pane that does not have unread messages
  • Issue where backlog divider in highlights or logs pane would not update when marking the pane as read
  • VERSION and JOIN commands on connect are skipped if server is primary soju server
  • tor enabled builds
  • Emoji pickers not finding newer emoji like 🙂‍↕️
  • Selection expansion will take precedence over input history navigation (i.e. shift + ↑ will expand the selection to include the top line of input, rather than navigate to the previous input history entry)
  • Window title displays buffer name after closing previously last pane

Changed:

  • On-join topic messages dropped by default (buffer.server_messages.join_topic), instead the topic banner is enabled by default (buffer.channel.topic_banner)
  • Topic messages manually requested via /topic have a distinct setting from topic messages received on join (buffer.server_messages.topicbuffer.server_messages.request_topic & buffer.server_messages.join_topic)
  • Badging on server icons used to indicate unread/highlight state (instead of the color of the server icon); unread indicators positioned to be aligned with server badge
  • Default sidebar.server_icon.size changed from 1220
  • Default sidebar.unread_indicator.highlight_icon_size changed from 86
  • Default sidebar.spacing.server changed from 62
  • Default sidebar.padding.buffer changed from [4, 4] to [5, 4]
  • For filehosts, localhost is now treated as a secure transport when using servers.<name>.filehost.override_url
  • buffer.mark_as_read.on_message = true is now equivalent to buffer.mark_as_read.on_message = "open" (previously equivalent to buffer.mark_as_read.on_message = "focused")
  • Tooltips have had their spacing tightened
  • Reactions are listed in the order they were first added to the message
  • Reaction tooltips:
    • Display the reaction text in a larger font size (uses font.only_emojis_size if set and the reaction is an emoji)
    • Lists nicks with a new layout, where nicks are now colored and are listed in order of when they reacted

Thanks:

2026.6

Choose a tag to compare

@github-actions github-actions released this 22 Apr 05:43
3ffe679

Added:

  • Files can be uploaded to server using soju.im/FILEHOST (see the file uploads guide for details)
  • typing
    • Per-server typing settings (servers.<name>.typing)
    • Animate typing dots
    • buffer.typing.style setting with padded and popped modes for typing indicators
  • Settings to reroute direct PRIVMSG and/or NOTICE messages to another buffer (servers.<name>.reroute.query and servers.<name>.reroute.notice)
  • channel-context support (messages with the tag will be automatically rerouted)
  • Theme & Display
    • buffer.nickname.color now supports { palette = ["#RRGGBB", ...] } for nickname colors from a fixed set
    • buffer.server_messages.away setting to control when automated away messages are shown
    • buffer.server_messages.away theme setting to control how automated away messages appear
    • Setting to control whether unread indicators are shown on open buffers (sidebar.unread_indicator.show_on_open_buffers)
    • Unread indicators for queries can be hidden via sidebar.unread_indicator.exclude
    • Ability to customize the arrows used for directional messages such as join, part, quit, kick, and CTCP messages.
    • Expanded tooltips setting to allow hiding auto-complete tooltips
  • Commands
    • Ability to add optional arguments in custom aliases (/msg ChanServ op $channel $1?-)
    • /massmessage command to send Ergo/Solanum mass-messages
    • /invite command tooltip and validation provided, and display of INVITE-related messages improved
    • // can be used to escape a leading /; in other words, //topic example will send the message /topic example (not execute the /topic command)
  • Controls
    • Right-click context menu on messages now includes "Copy message" to copy the message text to the clipboard
    • Message drafts are remembered across Halloy sessions (can be disabled with buffer.text_input.persist)
    • ctrl + , now opens the config file ( + , on macOs)
    • emacs bindings for ctrl + u and ctrl + w
    • buffer.text_input.kill_to_clipboard to control key bindings moving killed text to clipboard
  • Windows MSI installer does not automatically start Halloy during passive or quiet installations

Changed:

  • Default typing style (buffer.typing.style) is now popped (from padded)
  • Moved typing settings from buffer.channel.typing to buffer.typing to clarify that they apply to queries as well as channels
  • Moved nicklist nickname settings from buffer.channel.nicklist to buffer.nickname (away and color)
  • Colons, semicolons and double quotes are no longer considered part of channel names
  • Backslash escapes are now only interpreted when escaping markdown formatting characters
  • Tooltips will be shown for all commands, even those not available on the server, with an error tooltip shown if the server does not support the command
  • Parsed URLs will be displayed with IDN encoded domains (to avoid domain spoofing) and percent-decoded path & later components (for legibility) by default (display.decode_urls)

Fixed:

  • Server notices with wildcard targets (for example NOTICE *) are shown in the server buffer again
  • typing
    • Settings for buffers could get in a stuck state without any way to control them (or see that the state is stuck)
    • +typing=done should not be sent when the message is sent
  • chathistory
    • Support for multiline messages
    • TARGETS pagination
    • More conservative treatment of pagination on reconnect
    • Greatly reduced the scope of deduplication to only messages that can be expected to possibly be duplicates
  • Receive & apply reactions in queries
  • IRC URIs now handle bracketed IPv6 hosts and percent-encoded channel targets correctly
  • Fix URLs with non-ASCII characters getting percent-encoded when rendered in buffers
  • Filtering for common trailing punctuation and delimiters when linking channel names (and nicks & urls)
  • /MOTD command will not trigger end-of-registration actions
  • Repeat lines in some MOTDs would be deduplicated
  • Keyboard shortcuts now work in popped out buffer windows, including command bar shortcuts
  • sidebar.order_by setting works when set to "config"

Removed:

  • buffer.channel.message.nickname_color in favor of buffer.nickname.color

Thanks:

2026.5

Choose a tag to compare

@github-actions github-actions released this 21 Mar 20:27
a12a031

Added:

  • Setting to limit reaction display length (buffer.channel.message.max_reaction_display) and maximum length (buffer.channel.message.max_reaction_chars)
  • Emoji and command picker entries are now clickable and insert the selected completion directly into the input.
  • Multi-line send support (uses IRCv3 multiline when available; note: incompatible with the current release of soju [v0.10.1], expected to be resolved in a future version)
  • Typing indicator support (uses IRCv3 typing)
  • Add emoji reactions for supported servers (uses IRCv3 react)
  • New "config" option to sidebar.order_channels_by. Uses server.<server_name>.channels to determine order.
  • Case insensitive sort of query names in sidebar
  • Copied order_channels_by from sidebar to server.<name>, defaults to sidebar.order_channels_by if empty.
  • Alias commands (see buffer.commands.aliases)
  • Exec command support for generating input from shell command output (see buffer.commands.exec)
  • The titlebar now displays the current buffer for each window.
  • /plain-me, /format-me, /plain-msg, /format-msg, /plain-notice, and /format-notice commands were added to provide /plain//format functionality to the /me, /msg, and /notice commands

Fixed:

  • Improved message length calculation (when known the bytes required to relay a message are included in the calculation, when unknown an estimate is used)
  • Prevent interaction leakage behind open modals: clicks, cursor changes, and hover states no longer affect underlying UI while preserving outside-click and Esc to close
  • Prevent clicks from passing through completion picker overlays to content behind them (for example nicknames in the buffer).
  • Regression that could make the application slow to close
  • Apply locale to context menu, copy, and date separator timestamps
  • Fixed direct message notifications when excludes are present
  • Fixed reloading config for channel sorting.
  • Fixed handling of URLs ending with ).
  • Auto-format rules are applied to the content of /me, /msg, and /notice commands

Changed:

  • Spoilers (/f ||hello world||) now reveal on click instead of hover

Security:

  • Fixed file transfer path traversal vulnerability when using DCC
  • Config directories and config.toml are now created with owner-only permissions

Thanks:

2026.4

Choose a tag to compare

@github-actions github-actions released this 03 Mar 10:24
5cc0677

Added:

  • Support for the IRCv3 react client tag.
  • Correctly record window size if window is maximized

Changed:

  • Notification toasts can now use a subtitle on supported operating systems
  • New about screen accessible from the user menu in the sidebar
  • Added setting to mark focused buffers as read on incoming messages
  • Formatting inside code spans is now ignored in order to prevent breaks in code span styling
  • Links inside code spans are not detected in order to prevent breaks in code span styling
  • Setting to hide consecutive timestamps (buffer.timestamp.hide_consecutive)

Fixed:

  • High CPU usage when opening very large buffers
  • Window state is saved even if altered shortly before quitting
  • Default dimmed value for server messages no longer overrides dimmed = false set for individual server message kinds
  • Issue where context menu items would not respond to clicks
  • Filters are loaded on first connection to server via bouncer-networks and updated on config file reload
  • Compatibility with ZNC's backlog service
  • Markdown formatting inside code spans is properly ignored

Security:

  • Improve link preview management to mitigate spam-driven resource abuse

Thanks:

2026.3

Choose a tag to compare

@github-actions github-actions released this 24 Feb 23:27
1dcae00

Added:

  • Support requesting window attention (setting urgency) for notifications (notifications.<type>.request_attention)
  • Default server message pseudo-type, allowing the default values for server message types to be user-specified
  • Default internal message pseudo-type, allowing the default values for internal message types to be user-specified
  • Add setting to specify queries to be added to the sidebar after connecting to a server
  • Added ability to disconnect on SASL authentication failure
  • Setting to configure font line height (font.line_height)
  • Ability to add multiple keybinds for a single shortcut
  • Sidebar actions can now be configured separately for channel and query buffers (actions.sidebar.channel, actions.sidebar.query)
  • URL context menu now supports Hide Preview / Show Preview
  • New shortcuts:
    • new_horizontal_buffer (not bound by default)
    • new_vertical_buffer (not bound by default)
    • quit_application (defaults to Ctrl+Q on linux, not bound on Windows/MacOS)
  • Expand show_access_levels to allow all access levels (in addition to highest or no access levels) in buffer/nicklist/input
  • Configuration setting to allow locale specification used when formatting timestamps
  • Configuration setting to include chantypes / prefixes when sorting channels in the sidebar
  • When leaving a server (via context menu on sidebar entry or /quit), the server will not be automatically removed from the sidebar
  • Manual disconnection from a server will disable auto-reconnect
  • Disconnected servers can be connected to via the "Connect to server" entry in the context menu for its sidebar entry
  • Servers can be prevented from connecting on launch (or configuration reload) with the servers.<name>.autoconnect setting
  • /connect (without an argument) and /reconnect can be used in open buffers for disconnected servers to (re-)connect to the server
  • /join (without an argument) can be used in channel buffers where the channel is not joined in order to (re-)join the channel

Fixed:

  • Channel mode in pane headers not updating immediately after mode changes
  • Cycle next/previous (unread) buffer shortcuts work from an empty pane
  • Virtualize message rendering to improve buffer performance
  • Default proxy used when checking for an update
  • Detect system locale when formatting timestamps with locale-specific stftime formats
  • When changing connection details for server (e.g. address, port, SASL authentication, etc) the connection details will be properly updated and the connection re-initiated
  • Server configurations are properly updated when reloading configuration file

Changed:

  • Condensed server messages are now enabled by default for nick changes, joins, parts, and quits
  • The default condensed server message icon is now "none"
  • sidebar.user_menu.show_new_version_indicator setting has been changed to check_for_update_on_launch to clarify that it prevents the check for an update
  • Default settings:
    • buffer.server_messages.condense.messages: []["change-host", "change-nick", "join", "part", "quit"]
    • sidebar.padding.buffer: [5,5][4,4]
    • sidebar.spacing.server: 126

Fixed:

  • When joining a channel fails (for example, invite-only or channel full), we now show the
    failure reason

Thanks:

2026.2

Choose a tag to compare

@github-actions github-actions released this 02 Feb 08:35
2ba4f2f

Added:

  • Settings to disable (selectively, or for the entire server) confirmation of delivery for sent messages
  • Setting to adjust inner spacing and outer padding for panes (pane.gap.inner, pane.gap.outer)
  • Setting to style unread query buffers as highlights in the sidebar (sidebar.unread_indicator.query_as_highlight)
  • Settings to configure card and image preview dimensions
  • Support for transparent background.

Fixed:

  • Buffer not showing history until resize
  • Previews are fetched through the same proxy as the server (or default proxy) for HTTP/SOCKS5 proxies
  • No longer highlight nickname mentions in sent messages in certain scenarios
  • Filters applied to one server will no longer hide query panes for other servers
  • Card preview description text is now limited in height to prevent excessive text display

Changed:

  • No longer highlight matches in sent messages
  • No longer show notifications for messages where the relevant buffer is open and Halloy is focused

Thanks:

2026.1.1

Choose a tag to compare

@github-actions github-actions released this 21 Jan 19:16
ebc52d3

Note: Windows

Windows build didn't like our extra version number here, so please use 2026.1 until we release 2026.2.

Changelog

Fixed:

  • Version number reported in AppData file

Thanks: