Releases: squidowl/halloy
Releases · squidowl/halloy
Release list
Nightly
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
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
DisplayinConfigurationdocs menu - Document that
servers.<name>.usernamesetting will fall back toservers.<name>.nicknameif not set - Nick completion tooltip no longer shows when there is only a single match
Changed:
buffer.reply.insert_nickno 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.usernamesetting will fall back toservers.<name>.nicknameif not set- Replace the Windows MSI package with a per-user Inno Setup installer
Thanks:
- Contributions: @luca020400, @englut, @furudean
- Feature requests: @G00S
- Bug reports: wwWraith, @skizzerz, @ncfavier, @account1009
2026.7.1
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:
- Contributions: @luca020400, @aniketkotal
- Bug reports: @WinnerWind, @sco1, @classabbyamp, @aniketkotal
2026.7
Added:
- Support for IRCv3
replyclient tag - Support for IRCv3
draft/message-redaction - Support for IRCv3 metadata
display-name,avatar,pronouns,homepage,color,statuskeys - 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 tobuffer.border_selectedif no color is configured; set to"#00000000"to disable) - Two new optional theme colors,
buttons.primary.border_activeandbuttons.secondary.border_activethat define border color used to signal secondary state (set to"#00000000"to disable) - The config
buffer.server_messages.condense.maxmay 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-fontis disabled. - Customize the character used to indicate a nickname was truncated with
display.truncation_character - Support for
draft/chathistory-endmessage 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
NICKandQUITmessages returned bydraft/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
usersfor 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
VERSIONandJOINcommands on connect are skipped if server is primary soju servertorenabled 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
/topichave a distinct setting from topic messages received on join (buffer.server_messages.topic→buffer.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.sizechanged from12→20 - Default
sidebar.unread_indicator.highlight_icon_sizechanged from8→6 - Default
sidebar.spacing.serverchanged from6→2 - Default
sidebar.padding.bufferchanged 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 = trueis now equivalent tobuffer.mark_as_read.on_message = "open"(previously equivalent tobuffer.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_sizeif 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
- Display the reaction text in a larger font size (uses
Thanks:
- Contributions: @bb010g, @furudean, @englut, @luca020400, @4e554c4c, @stephenfin, @achille, @ncfavier
- Bug reports: @bb010g, daniiooo, @e00E, belthesar, @Fingel, @Death916, @furudean, @ncfavier, @WinnerWind, @alexaandru, @kasper93, tranzystorekk
- Feature requests: @WinnerWind, Shyny, @classabbyamp, @4e554c4c, @furudean, @englut, @esden, @Erroneuz
2026.6
Added:
- Files can be uploaded to server using
soju.im/FILEHOST(see the file uploads guide for details) typing- Per-server
typingsettings (servers.<name>.typing) - Animate typing dots
buffer.typing.stylesetting withpaddedandpoppedmodes for typing indicators
- Per-server
- Settings to reroute direct PRIVMSG and/or NOTICE messages to another buffer (
servers.<name>.reroute.queryandservers.<name>.reroute.notice) channel-contextsupport (messages with the tag will be automatically rerouted)- Theme & Display
buffer.nickname.colornow supports{ palette = ["#RRGGBB", ...] }for nickname colors from a fixed setbuffer.server_messages.awaysetting to control when automated away messages are shownbuffer.server_messages.awaytheme 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
tooltipssetting to allow hiding auto-complete tooltips
- Commands
- Ability to add optional arguments in custom aliases (
/msg ChanServ op $channel $1?-) /massmessagecommand to send Ergo/Solanum mass-messages/invitecommand tooltip and validation provided, and display ofINVITE-related messages improved//can be used to escape a leading/; in other words,//topic examplewill send the message/topic example(not execute the/topiccommand)
- Ability to add optional arguments in custom aliases (
- 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_clipboardto 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 nowpopped(frompadded) - Moved
typingsettings frombuffer.channel.typingtobuffer.typingto clarify that they apply to queries as well as channels - Moved nicklist nickname settings from
buffer.channel.nicklisttobuffer.nickname(awayandcolor) - 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)
/MOTDcommand 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_bysetting works when set to"config"
Removed:
buffer.channel.message.nickname_colorin favor ofbuffer.nickname.color
Thanks:
- Contributions: @furudean, @omentic, @KaiKorla, @achille, @classabbyamp, @ncfavier, @englut, @WinnerWind, @okdana, @luca020400, @mgdudas, @auronandace
- Bug reports: sebbu, @whitequark, @SnoopJ, @esden, @miyukoc, @ld-cd, @achille, @classabbyamp, vignoux, @ncfavier, @englut, @cyrneko, @jeffharrell1, @RoboDanjal, @internet-catte, @Lualttt, @c727, @cyrneko, @furudean, @lephe
- Feature requests: @omentic, @classabbyamp, @ncfavier, @ineeee, @4e554c4c, @RoboDanjal
2026.5
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
multilinewhen 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 tosidebar.order_channels_by. Usesserver.<server_name>.channelsto determine order. - Case insensitive sort of query names in sidebar
- Copied
order_channels_byfromsidebartoserver.<name>, defaults tosidebar.order_channels_byif 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-noticecommands were added to provide/plain//formatfunctionality to the/me,/msg, and/noticecommands
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
Escto 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/noticecommands
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.tomlare now created with owner-only permissions
Thanks:
2026.4
Added:
- Support for the IRCv3
reactclient 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 = falseset 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:
- Contributions: @melocene, @4e554c4c, @TheOneric, @bmndc, @RealKindOne, @englut
- Feature requests: @deepspaceaxolotl, @RoboDanjal
- Bug reports: @barretgoat, @TheOneric, @Erroneuz, @BKVad1m. @englut, @whitequark, petteri, xtracked
2026.3
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 toCtrl+Qon 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>.autoconnectsetting /connect(without an argument) and/reconnectcan 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_indicatorsetting has been changed tocheck_for_update_on_launchto 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:12→6
Fixed:
- When joining a channel fails (for example, invite-only or channel full), we now show the
failure reason
Thanks:
- Contributions: @Hummer12007, @chamlis, @englut
- Feature requests: @megumintyan, @4e554c4c, @RoboDanjal, @stacyharper, @zZzUP3RzZz, @Porkepix, @vidje
- Bug reports: @someone2037492034, @deepspaceaxolotl, @whitequark, @sebbu2, @esden, @Porkepix, @someone2037492034, @Hexorg, @sulrich, @Erroneuz
2026.2
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:
- Contributions: @Hummer12007
- Bug reports: @e00E, @oooo-ps, @csmith, @bw1, @deepspaceaxolotl
2026.1.1
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:
- Bug reports: @englut