All Versions
48
Latest Version
Avg Release Cycle
59 days
Latest Release
130 days ago

Changelog History
Page 1

  • v2.10.0 Changes

    May 29, 2022

    ๐Ÿš€ We're pleased to be publishing v2.10.0, a new stable release.

    ๐Ÿš€ This release contains no changes to the config file format or database file format.

    โœ… Many thanks to @csmith, @FiskFan1999, @Mikaela, @progval, and @thesamesam for contributing patches, and to @emersion, @eskimo, @FiskFan1999, @jigsy1, @Mikaela, @mogad0n, @progval, and @xnaas for reporting issues and helping test.

    Config changes

    • ๐Ÿ‘ For better interoperability with Goguma, the recommended value of history.chathistory-maxmessages has been increased to 1000 (previously 100) (#1919)

    ๐Ÿ”„ Changed

    • Persistent voice (AMODE +v) in a channel is now treated as a permanent invite (i.e. overriding +i on the channel) (#1901, thanks @eskimo!)
    • If you are +R, sending a direct message to an anonymous user allows them to send you replies (#1687, #1688, thanks @Mikaela and @progval!)
    • ๐Ÿ‘ป 0 is no longer valid as a nickname or account name, with a grandfather exception if it was registered on a previous version of Ergo (#1896)
    • Implemented the ratified version of the bot mode spec; the tag name is now bot instead of draft/bot (#1938)
    • Privileged WHOX on a user with multiclient shows an arbitrarily chosen client IP address, comparable to WHO (#1897)
    • SAREGISTER is allowed even under DEFCON levels 4 and lower (#1922)
    • Operators with the history capability are now exempted from time cutoff restrictions on history retrieval (#1593, #1955)

    โž• Added

    • โž• Added draft/read-marker capability, allowing server-side tracking of read messages for synchronization across multiple clients. (#1926, thanks @emersion!)
    • INFO now includes the server start time (#1895, thanks @xnaas!)
    • โž• Added ACCEPT command modeled on Charybdis/Solanum, allowing +R users to whitelist users who can DM them (#1688, thanks @Mikaela!)
    • โž• Added NS SAVERIFY for operators to manually complete an account verification (#1924, #1952, thanks @tacerus!)

    ๐Ÿ›  Fixed

    • ๐Ÿ›  Having the samode operator capability made all uses of the KICK command privileged (i.e. overriding normal channel privilege checks); this has been fixed (#1906, thanks @pcho!)
    • ๐Ÿ›  Fixed LIST <n always returning no results (#1934, thanks @progval and @mitchr!)
    • NickServ commands are now more clear about when a nickname is unavailable because it was previously registered and unregistered (#1886, thanks @Mikaela!)
    • ๐Ÿ›  Fixed KLINE'd clients producing a QUIT snotice without a corresponding CONNECT snotice (#1941, thanks @tacerus, @xnaas!)
    • ๐Ÿ›  Fixed incorrect handling of long/multiline 319 RPL_WHOISCHANNELS responses (#1935, thanks @Mikaela!)
    • ๐Ÿ›  Fixed LIST returning 403 ERR_NOSUCHCHANNEL for a nonexistent channel; the correct response is an empty list (#1928, thanks @emersion!)
    • ๐Ÿ›  Fixed +s ("secret") channels not appearing in LIST even when the client is already a member (#1911, #1923, thanks @jigsy1 and @FiskFan1999!)
    • ๐Ÿ›  Fixed a spurious success message in HISTSERV DELETE by always requiring a consistent number of parameters (#1881, #1927, thanks @FiskFan1999!)
    • ๐Ÿ›  Sending the empty string as a nickname would not always produce the expected error numeric 431 ERR_NONICKNAMEGIVEN; this has been fixed (#1933, #1936, thanks @kylef!)
    • ๐Ÿ“œ znc.in/playback timestamps are now parsed as pairs of exact integers, not as floats (#1918)

    Internal

    • โฌ†๏ธ Upgraded to Go 1.18 (#1925)
    • โฌ†๏ธ Upgraded Alpine version in official Docker image
    • ๐Ÿ›  Fixed some issues in the example OpenRC init scripts (#1914, #1920, thanks @thesamesam!)
  • v2.9.1 Changes

    January 10, 2021

    ๐Ÿ›  Ergo 2.9.1 is a bugfix release, fixing a regression introduced in 2.9.0. We regret the oversight.

    ๐Ÿš€ This release includes no changes to the config file format or database format relative to 2.9.0.

    Many thanks to @FiskFan1999 for reporting the issue.

    ๐Ÿ›  Fixed

    • ๐Ÿ›  Every use of NS SAREGISTER would fail; this has been fixed (#1898, thanks @FiskFan1999!)
  • v2.9.0 Changes

    January 09, 2021

    ๐Ÿš€ We're pleased to be publishing 2.9.0, a new stable release. This release contains mostly bug fixes, with some enhancements to moderation tools.

    ๐Ÿš€ This release includes changes to the config file format, all of which are fully backwards-compatible and do not require updating the file before upgrading. It includes no changes to the database file format.

    โœ… Many thanks to @erincerys, @FiskFan1999, @mogad0n, and @tacerus for contributing patches, and to @ajaspers, @emersion, @FiskFan1999, @Jobe1986, @kylef, @Mikaela, @mogad0n, @pcho, and @progval for reporting issues and helping test.

    Config changes

    • โž• Added lock-file, which helps protect against accidentally starting multiple instances of Ergo. This is a no-op if unset. The recommended default value is ircd.lock, which (like the default datastore path ircd.db) is relative to the working directory of the Ergo process. If your datastore.path is absolute, this path (if set) should be absolute as well. (#1823)
    • 0๏ธโƒฃ +C (no channel-wide CTCP messages other than ACTION) is now a recommended default channel mode (#1851)
    • โž• Added exempt-sasl boolean to server.ip-check-script; if enabled, IP check scripts are run only for connections without SASL, improving performance for registered users (#1888)
    • 0๏ธโƒฃ hidden: true is now the recommended default for operator definitions (#1730)

    ๐Ÿ”„ Changed

    • The semantics of +R have been changed. +R now only prevents unauthenticated users from joining, so unregistered users who have already joined can still speak. The old semantics are still available via +RM (i.e. +R together with the +M "moderated-registered" mode). (#1858, thanks @ajaspers!)
    • ๐Ÿ‘ป Unauthenticated users matching a +I invite exception mask can now join +R channels (#1871)
    • INVITE now exempts the user from +b bans (#1876, thanks @progval!)
    • NS SUSPEND now only requires only the ban operator capability, as opposed to accreg (#1828, #1839, thanks @mogad0n!)

    โž• Added

    • ๐Ÿ–จ SHA-256 certificate fingerprints can now be imported from Anope and Atheme (#1864, #1869, thanks @tacerus!)
    • ๐ŸŽ IP check scripts can now be run only for users that have not authenticated with SASL by the end of the handshake, improving performance for registered users (#1888)
    • ๐ŸŒฒ Logging into an unverified account with SASL sends the new NOTE AUTHENTICATE VERIFICATION_REQUIRED standard reply code (#1852, #1853, thanks @emersion!)
    • CS PURGE now sends a snotice (#1826, thanks @tacerus!)
    • The v snomask is now used to send notifications about vhost changes initiated by operators (#1844, thanks @pcho!)

    ๐Ÿ›  Fixed

    • ๐Ÿ›  CAP LS and LIST responses after connection registration could be truncated in some cases; this has been fixed (#1872)
    • Unprivileged users with both a password and a certfp could not remove their password with NS PASSWD <password> * * as expected; this has been fixed (#1883, #1884, thanks @FiskFan1999!)
    • ๐Ÿ›  RELAYMSG identifiers that were not already in their case-normalized form could not be muted with +b m:; this has been fixed (#1838, thanks @mogad0n!)
    • ๐Ÿ›  CS AMODE changes did not take immediate effect if force-nick-equals-account was disabled and the nick did not coincide with the account; this has been fixed (#1860, thanks @eskimo!)
    • 315 RPL_ENDOFWHO now sends the exact, un-normalized mask argument provided by the client (#1831, thanks @progval!)
    • A leading $ character is now disallowed in new nicknames and account names, to avoid collision with the massmessage syntax (#1857, thanks @emersion!)
    • ๐Ÿ—„ The deprecated o parameter of WHO now returns an empty list of results, instead of being ignored (#1730, thanks @kylef, @emersion, @progval!)
    • ๐Ÿ‘ท WHOX queries for channel oplevel now receive * instead of 0 (#1866, thanks @Jobe1986!)

    Internal

    • ๐Ÿš€ Updated list of official release binaries: added Apple M1, OpenBSD x86-64, and Plan 9 x86-64, removed Linux armv7, FreeBSD x86-32, and Windows x86-32. (The removed platforms are still fully supported by Ergo; you can build them from source or ask us for help.) (#1833)
    • โž• Added an official Linux arm64 Docker image (#1855, thanks @erincerys!)
    • โž• Added service management files for OpenSolaris/Illumos (#1846, thanks @tacerus!)
  • v2.9.0-rc1 Changes

    January 02, 2021

    ๐Ÿš€ We're pleased to be publishing the release candidate for 2.9.0 (the official release should follow in a week or so).

    ๐Ÿš€ This release contains mostly bug fixes, with some enhancements to moderation tools.

    ๐Ÿš€ This release includes changes to the config file format, all of which are fully backwards-compatible and do not require updating the file before upgrading. It includes no changes to the database file format.

    ๐Ÿ‘ท Many thanks to @erincerys, @FiskFan1999, @mogad0n, and @tacerus for contributing patches, and to @ajaspers, @emersion, @FiskFan1999, @Jobe1986, @kylef, @mogad0n, @pcho, and @progval for reporting issues,

    Config changes

    • โž• Added lock-file, which helps protect against accidentally starting multiple instances of Ergo. This is a no-op if unset. The recommended default value is ircd.lock, which (like the default datastore path ircd.db) is relative to the working directory of the Ergo process. If your datastore.path is absolute, this path (if set) should be absolute as well. (#1823)
    • 0๏ธโƒฃ +C (no channel-wide CTCP messages other than ACTION) is now a recommended default channel mode (#1851)
    • โž• Added exempt-sasl boolean to server.ip-check-script; if enabled, IP check scripts are run only for connections without SASL, improving performance for registered users (#1888)
    • 0๏ธโƒฃ hidden: true is now the recommended default for operator definitions (#1730)

    ๐Ÿ”„ Changed

    • The semantics of +R have been changed. +R now only prevents unauthenticated users from joining, so unregistered users who have already joined can still speak. The old semantics are still available via +RM (i.e. +R together with the +M "moderated-registered" mode). (#1858, thanks @ajaspers!)
    • ๐Ÿ‘ป Unauthenticated users matching a +I invite exception mask can now join +R channels (#1871)
    • INVITE now exempts the user from +b bans (#1876, thanks @progval!)
    • NS SUSPEND now only requires only the ban operator capability, as opposed to accreg (#1828, #1839, thanks @mogad0n!)

    โž• Added

    • ๐Ÿ–จ SHA-256 certificate fingerprints can now be imported from Anope and Atheme (#1864, #1869, thanks @tacerus!)
    • ๐ŸŽ IP check scripts can now be run only for users that have not authenticated with SASL by the end of the handshake, improving performance for registered users (#1888)
    • ๐ŸŒฒ Logging into an unverified account with SASL sends the new NOTE AUTHENTICATE VERIFICATION_REQUIRED standard reply code (#1852, #1853, thanks @emersion!)
    • CS PURGE now sends a snotice (#1826, thanks @tacerus!)
    • The v snomask is now used to send notifications about vhost changes initiated by operators (#1844, thanks @pcho!)

    ๐Ÿ›  Fixed

    • ๐Ÿ›  CAP LS and LIST responses after connection registration could be truncated in some cases; this has been fixed (#1872)
    • Unprivileged users with both a password and a certfp could not remove their password with NS PASSWD <password> * * as expected; this has been fixed (#1883, #1884, thanks @FiskFan1999!)
    • ๐Ÿ›  RELAYMSG identifiers that were not already in their case-normalized form could not be muted with +b m:; this has been fixed (#1838, thanks @mogad0n!)
    • ๐Ÿ›  CS AMODE changes did not take immediate effect if force-nick-equals-account was disabled and the nick did not coincide with the account; this has been fixed (#1860, thanks @eskimo!)
    • 315 RPL_ENDOFWHO now sends the exact, un-normalized mask argument provided by the client (#1831, thanks @progval!)
    • A leading $ character is now disallowed in new nicknames and account names, to avoid collision with the massmessage syntax (#1857, thanks @emersion!)
    • ๐Ÿ—„ The deprecated o parameter of WHO now returns an empty list of results, instead of being ignored (#1730, thanks @kylef, @emersion, @progval!)
    • ๐Ÿ‘ท WHOX queries for channel oplevel now receive * instead of 0 (#1866, thanks @Jobe1986!)

    Internal

    • ๐Ÿš€ Updated list of official release binaries: added Apple M1, OpenBSD x86-64, and Plan 9 x86-64, removed Linux armv7, FreeBSD x86-32, and Windows x86-32. (The removed platforms are still fully supported by Ergo; you can build them from source or ask us for help.) (#1833)
    • โž• Added an official Linux arm64 Docker image (#1855, thanks @erincerys!)
    • โž• Added service management files for OpenSolaris/Illumos (#1846, thanks @tacerus!)
  • v2.8.0 Changes

    November 14, 2021

    ๐Ÿš€ We're pleased to be publishing Ergo 2.8.0. This release contains many fixes and enhancements, plus one major user-facing feature: user-initiated password resets via e-mail (#734).

    ๐Ÿš€ This release includes changes to the config file format, all of which are fully backwards-compatible and do not require updating the file before upgrading.

    ๐Ÿš€ This release includes a database change. If you have datastore.autoupgrade set to true in your configuration, it will be automatically applied when you restart Ergo. Otherwise, you can update the database manually by running ergo upgradedb (see the manual for complete instructions).

    ๐Ÿš€ As part of this release, our official Docker images have moved from Docker Hub to the GitHub Container Registry, at ghcr.io/ergochat/ergo. The stable and master tags correspond to the respective branches. Tagged releases (e.g. v2.8.0) are available under the corresponding named tags.

    ๐ŸŒ Many thanks to @ajaspers, @delthas, @mogad0n, @majiru, @ProgVal, and @tacerus for contributing patches, to @ajaspers for contributing code review, to @ajaspers, @cxxboy, @dallemon, @emersion, @erikh, @eskimo, @jwheare, @kylef, @Mikaela, @mogad0n, @MystaraTheGreat, @ProgVal, @tacerus, @tamiko, and @xnaas for reporting issues and helping test, and to our translators for contributing translations.

    Config changes

    • โž• Added accounts.registration.email-verification.password-reset block to configure e-mail-based password reset (#734, #1779)
    • โž• Added accounts.registration.email-verification.timeout to impose a timeout on e-mail sending; the recommended default value is 60s (60 seconds) (#1741)
    • โž• Added server.suppress-lusers to allow hiding the LUSERS counts (#1802, thanks @eskimo!)

    ๐Ÿ”’ Security

    • โž• Added accounts.registration.email-verification.timeout to impose a timeout on e-mail sending; the recommended default value is 60s (60 seconds) (#1741)

    โž• Added

    • โž• Added user-initiated password resets via email (#734). This requires e-mail verification of accounts, and must additionally be enabled explicitly: see the email-verification block in default.yaml for more information.
    • โž• Added the draft/extended-monitor capability (#1761, thanks @delthas!)
    • When doing direct sending of verification emails, make email delivery failures directly visible to the end user (#1659, #1741, thanks @tacerus!)
    • For operators, NS INFO now shows the user's email address (you can also view your own address) (#1677, thanks @ajaspers!)
    • ๐Ÿ‘€ Operators with the appropriate permissions will now see IPs in /WHOWAS output (#1702, thanks @ajaspers!)
    • โž• Added the +s d snomask, for operators to receive information about session disconnections that do not result in a full QUIT (#1709, #1728, thanks @mogad0n!)
    • โž• Added support for the SCRAM-SHA-256 SASL authentication mechanism (#175). This mechanism is not currently advertised in CAP LS output because IRCCloud handles it incorrectly. We also recommend against using SCRAM because of its lack of genuine security benefits.
    • /UBAN LIST output now includes the time the ban was created (#1725, #1755, thanks @Mikaela and @mogad0n!)
    • โž• Added support for running as a Type=notify systemd service (#1733)
    • โž• Added a warning to help users detect incorrect uses of /QUOTE (#1530)

    ๐Ÿ›  Fixed

    • ๐Ÿ›  The +M (only registered users can speak) channel mode did not work; this has been fixed (#1696, thanks @Mikaela!)
    • ๐Ÿ›  A channel /RENAME that only changed the case of the channel would delete the channel registration; this has been fixed (#1751, thanks @Mikaela!)
    • ๐Ÿ›  Fixed allow-truncation: true not actually allowing truncation of overlong lines (#1766, thanks @tacerus!)
    • ๐Ÿ›  Fixed several pagination bugs in CHATHISTORY (#1676, thanks @emersion!)
    • ๐Ÿ›  Fixed support for kicking multiple users from a channel on the same line, the TARGMAX 005 parameter that advertises this, and the default kick message (#1748, #1777, #1776), thanks @ProgVal!)
    • ๐Ÿ›  Fixed /SAMODE on a channel not producing a snomask (#1787, thanks @mogad0n, @ajaspers!)
    • โž• Adding +f to a channel with SAMODE used to require channel operator privileges on the receiving channel; this has been fixed (#1825, thanks @Mikaela!)
    • Fixed parameters sent with 697 ERR_LISTMODEALREADYSET and 698 ERR_LISTMODENOTSET (#1727, thanks @kylef!)
    • ๐Ÿ›  Fixed parameter sent with 696 ERR_INVALIDMODEPARAM (#1773, thanks @kylef!)
    • ๐Ÿ›  Fixed handling of channel mode +k with an empty parameter (#1774, #1775, thanks @ProgVal!)
    • WHOWAS with an empty string as the parameter now produces an appropriate error response (#1703, thanks @kylef!)
    • ๐Ÿ›  Fixed error response to an empty realname on the USER line (#1778, thanks @ProgVal!)
    • ๐Ÿ›  Fixed /UBAN ADD of a NUH mask (i.e. a k-line) not killing affected clients (#1736, thanks @mogad0n!)
    • ๐Ÿ›  Fixed buggy behavior when +i is configured as a default mode for channels (#1756, thanks @Mikaela!)
    • ๐Ÿ›  Fixed issues with channels.operator-only-creation not respecting /SAJOIN or always-on clients (#1757)
    • Protocol-breaking operator vhosts are now disallowed during config validation (#1722)
    • ๐Ÿ›  Fixed error message associated with /NS PASSWD on a nonexistent account (#1738, thanks @Mikaela!)
    • ๐Ÿ›  Fixed an incorrect CHATHISTORY fail message (#1731, thanks @ProgVal!)
    • ๐Ÿ›  Fixed a panic on an invalid configuration case (#1714, thanks @erikh!)

    ๐Ÿ”„ Changed

    • โฌ†๏ธ Upgraded the draft/register capability to the latest draft/account-registration iteration (#1740)
    • Unregistered users with +v or higher can now speak in +R (registered-only) channels (#1715, thanks @Mikaela and @ajaspers!)
    • For always-on clients with at least one active connection, 338 RPL_WHOISACTUALLY now displays an arbitrarily chosen client IP address (#1650, thanks @MystaraTheGreat!)
    • # can no longer be used in new account names and nicknames, or as the RELAYMSG separator (#1679)
    • The oragono.io/nope capability was renamed to ergo.chat/nope (#1793)

    โœ‚ Removed

    • โช never is no longer accepted as a value of the replay-joins NickServ setting (/NS SET replay-joins); user accounts which enabled this setting have been reverted to the default value of commands-only (#1676)

    Internal

    • We have a cool new logo!
    • ๐Ÿ— Official builds now use Go 1.17 (#1781)
    • ๐Ÿณ Official Docker containers are now at ghcr.io/ergochat/ergo (#1808)
    • โž• Added a traditional SysV init script (#1691, thanks @tacerus!)
    • โž• Added an s6 init script (#1786, thanks @majiru!)
  • v2.7.0 Changes

    June 07, 2021

    ๐Ÿš€ We're pleased to be publishing Ergo 2.7.0, our first official release under our new name of Ergo. This release contains bug fixes and minor enhancements.

    ๐Ÿš€ This release includes changes to the config file format, all of which are fully backwards-compatible and do not require updating the file before upgrading. This release includes no changes to the database format.

    โšก๏ธ Because the name of the executable has changed from oragono to ergo (ergo.exe on Windows), you may need to update your system configuration (e.g., scripts or systemd unit files that reference the executable).

    ๐ŸŒ Many thanks to @ajaspers and @jesopo for contributing patches, to @ajaspers, @ChrisTX, @emersion, @jwheare, @kylef, @Mikaela, @mogad0n, and @ProgVal for reporting issues and helping test, and to our translators for contributing translations.

    ๐Ÿ”„ Changed

    • ๐Ÿ“Š The project was renamed from "Oragono" to "Ergo" (#897, thanks to everyone who contributed feedback or voted in the poll)

    Config changes

    • 0๏ธโƒฃ Entries in server.listeners now take a new key, min-tls-version, that can be used to set the minimum required TLS version; the recommended default value is 1.2 (#1611, thanks @ChrisTX!)
    • โž• Added max-conns (maximum connection count) and max-conn-lifetime (maximum lifetime of a connection before it is cycled) to datastore.mysql (#1622)
    • โž• Added massmessage operator capability to allow sending NOTICEs to all connected users (#1153, #1629, thanks @jesopo!)

    ๐Ÿ”’ Security

    • If require-sasl.enabled is set to true, tor-listeners.require-sasl will be automatically set to true as well (#1636)
    • ๐Ÿ”ง It is now possible to set the minimum required TLS version, using the min-tls-version key in listener configuration
    • ๐Ÿ”ง Configurations that require SASL but allow user registration now produce a warning (#1637)

    โž• Added:

    • Operators with the correct permissions can now send "mass messages", e.g. /NOTICE $$* will send a NOTICE to all users (#1153, #1629, thanks @jesopo!)
    • ๐Ÿš€ Operators can now extend the maximum (non-tags) length of the IRC line using the server.max-line-len configuration key. This is not recommended for use outside of "closed-circuit" deployments where IRC operators have full control of all client software. (#1651)

    ๐Ÿ›  Fixed

    • RELAYMSG now sends a full NUH ("nick-user-host"), instead of only the relay nickname, as the message source (#1647, thanks @ProgVal, @jwheare, and @Mikaela!)
    • ๐Ÿ›  Fixed a case where channels would remain visible in /LIST after unregistration (#1619, thanks @ajaspers!)
    • ๐Ÿ›  Fixed incorrect tags on JOIN lines in +u ("auditorium") channels (#1642)
    • ๐Ÿ›  Fixed an issue where LUSERS counts could get out of sync (#1617)
    • ๐Ÿ›  It was impossible to add a restricted set of snomasks to an operator's permissions; this has been fixed (#1618)
    • ๐Ÿ›  Fixed incorrect language in NS INFO responses (#1627, thanks @ajaspers!)
    • ๐Ÿ›  Fixed a case where the REGISTER command would emit an invalid error message (#1633, thanks @ajaspers!)
    • ๐Ÿ›  Fixed snomasks displaying in a nondeterministic order (#1669, thanks @Mikaela!)

    โœ‚ Removed

    • โœ‚ Removed the draft/resume-0.5 capability, and the associated RESUME and BRB commands (#1624)

    Internal

    • โšก๏ธ Optimized MySQL storage of direct messages (#1615)
  • v2.7.0-rc1 Changes

    May 30, 2021

    ๐Ÿš€ We're pleased to be publishing Ergo 2.7.0-rc1, our first release candidate under our new name of Ergo. This release contains bug fixes and minor enhancements.

    ๐Ÿš€ This release includes changes to the config file format, all of which are fully backwards-compatible and do not require updating the file before upgrading. This release includes no changes to the database format.

    โšก๏ธ Because the name of the executable has changed from oragono to ergo (ergo.exe on Windows), you may need to update your system configuration (e.g., scripts or systemd unit files that reference the executable).

    ๐ŸŒ Many thanks to @ajaspers and @jesopo for contributing patches, to @ajaspers, @ChrisTX, @emersion, @jwheare, @kylef, @Mikaela, @mogad0n, and @ProgVal for reporting issues and helping test, and to our translators for contributing translations.

    ๐Ÿ”„ Changed

    • ๐Ÿ“Š The project was renamed from "Oragono" to "Ergo" (#897, thanks to everyone who contributed feedback or voted in the poll)

    Config changes

    • 0๏ธโƒฃ Entries in server.listeners now take a new key, min-tls-version, that can be used to set the minimum required TLS version; the recommended default value is 1.2 (#1611, thanks @ChrisTX!)
    • โž• Added max-conns (maximum connection count) and max-conn-lifetime (maximum lifetime of a connection before it is cycled) to datastore.mysql (#1622)
    • โž• Added massmessage operator capability to allow sending NOTICEs to all connected users (#1153, #1629, thanks @jesopo!)

    ๐Ÿ”’ Security

    • If require-sasl.enabled is set to true, tor-listeners.require-sasl will be automatically set to true as well (#1636)
    • ๐Ÿ”ง It is now possible to set the minimum required TLS version, using the min-tls-version key in listener configuration
    • ๐Ÿ”ง Configurations that require SASL but allow user registration now produce a warning (#1637)

    โž• Added:

    • Operators with the correct permissions can now send "mass messages", e.g. /NOTICE $$* will send a NOTICE to all users (#1153, #1629, thanks @jesopo!)
    • ๐Ÿš€ Operators can now extend the maximum (non-tags) length of the IRC line using the server.max-line-len configuration key. This is not recommended for use outside of "closed-circuit" deployments where IRC operators have full control of all client software. (#1651)

    ๐Ÿ›  Fixed

    • RELAYMSG now sends a full NUH ("nick-user-host"), instead of only the relay nickname, as the message source (#1647, thanks @ProgVal, @jwheare, and @Mikaela!)
    • ๐Ÿ›  Fixed a case where channels would remain visible in /LIST after unregistration (#1619, thanks @ajaspers!)
    • ๐Ÿ›  Fixed incorrect tags on JOIN lines in +u ("auditorium") channels (#1642)
    • ๐Ÿ›  Fixed an issue where LUSERS counts could get out of sync (#1617)
    • ๐Ÿ›  It was impossible to add a restricted set of snomasks to an operator's permissions; this has been fixed (#1618)
    • ๐Ÿ›  Fixed incorrect language in NS INFO responses (#1627, thanks @ajaspers!)
    • ๐Ÿ›  Fixed a case where the REGISTER command would emit an invalid error message (#1633, thanks @ajaspers!)
    • ๐Ÿ›  Fixed snomasks displaying in a nondeterministic order (#1669, thanks @Mikaela!)

    โœ‚ Removed

    • โœ‚ Removed the draft/resume-0.5 capability, and the associated RESUME and BRB commands (#1624)

    Internal

    • โšก๏ธ Optimized MySQL storage of direct messages (#1615)
  • v2.6.1 Changes

    April 26, 2021

    ๐Ÿ›  Oragono 2.6.1 is a bugfix release, fixing a security issue that is critical for some private server configurations. We regret the oversight.

    ๐Ÿ”ง The issue affects two classes of server configuration:

    โฌ†๏ธ 1. Private servers that use server.password (i.e., the PASS command) for protection. If accounts.registration.allow-before-connect is enabled, the REGISTER command can be used to bypass authentication. Affected operators should set this field to false, or upgrade to 2.6.1, which disallows the insecure configuration. (If the field does not appear in the configuration file, the configuration is secure since the value defaults to false when unset.) ๐Ÿ”ง 2. Private servers that use accounts.require-sasl for protection. If these servers do not additionally set accounts.registration.enabled to false, the REGISTER command can potentially be used to bypass authentication. Affected operators should set accounts.registration.enabled to false; this recommendation appeared in the operator manual but was not emphasized sufficiently. (Configurations that require SASL but allow open registration are potentially valid, e.g., in the case of public servers that require everyone to use a registered account; accordingly, Oragono 2.6.1 continues to permit such configurations.)

    ๐Ÿš€ This release includes no changes to the config file format or the database.

    Many thanks to @ajaspers for reporting the issue.

    ๐Ÿ”’ Security

    • ๐Ÿ›  Fixed and documented potential authentication bypasses via the REGISTER command (#1634, thanks @ajaspers!)
  • v2.6.0 Changes

    April 18, 2021

    ๐Ÿš€ We're pleased to announce Oragono 2.6.0, a new stable release.

    ๐Ÿš€ This release has some user-facing enhancements, but is primarily focused on fixing bugs and advancing the state of IRCv3 standardization (by publishing a release that implements the latest drafts). Some highlights:

    • A new CHATHISTORY API for listing direct message conversations (#1592)
    • โœ… The latest proposal for IRC-over-websockets, which should be backwards-compatible with existing clients (#1558)
    • โœ… The latest specification for the bot usermode (+B in our implementation) (#1562)

    ๐Ÿš€ This release includes changes to the config file format, all of which are fully backwards-compatible and do not require updating the file before upgrading.

    ๐Ÿš€ This release includes no changes to the embedded database format. If you are using MySQL for history storage, it adds a new table; this change is backwards and forwards-compatible and does not require any manual intervention.

    If you are using nginx as a reverse proxy for IRC-over-websockets, previous documentation did not recommend increasing proxy_read_timeout; the default value of 60s is too low and can lead to user disconnections. The current recommended value is proxy_read_timeout 600s;; see the manual for an example configuration.

    ๐ŸŒ Many thanks to @ajaspers and @Mikaela for contributing patches, to @aster1sk, @emersion, @eskimo, @hhirtz, @jlu5, @jwheare, @KoraggKnightWolf, @kylef, @Mikaela, @mogad0n, @ProgVal, and @szlend for reporting issues and helping test, and to our translators for contributing translations.

    Config changes

    • ๐Ÿ‘€ Listeners now support multiple TLS certificates for use with SNI; see the manual for details (#875, thanks @Mikaela!)
    • โž• Added server.compatibility.allow-truncation, controlling whether the server accepts messages that are too long to be relayed intact; this value defaults to true when unset (#1577, #1586, thanks @kylef!)
    • โž• Added new snomasks operator capability; operators must have either the ban or snomasks capability to subscribe to additional snomasks (#1176)

    ๐Ÿ”’ Security

    • ๐Ÿ›  Fixed several edge cases where Oragono might relay invalid UTF8 despite the UTF8ONLY guarantee, or to a text-mode websocket client (#1575, #1596, thanks @ProgVal!)
    • All operator privilege checks now use the capabilities system, making it easier to define operators with restricted powers (#1176)
    • โž• Adding and removing bans with UBAN now produces snomasks and audit loglines (#1518, thanks @mogad0n!)

    ๐Ÿ›  Fixed

    • ๐Ÿ›  Fixed an edge case in line buffering that could result in client disconnections (#1572, thanks @ProgVal!)
    • โฌ†๏ธ Upgraded buntdb, our embedded database library, fixing an edge case that could cause data corruption (#1603, thanks @Mikaela, @tidwall!)
    • ๐Ÿ‘Œ Improved compatibility with the published draft/register specification (#1568, thanks @ProgVal!)
    • 433 ERR_NICKNAMEINUSE is no longer sent when a fully connected ("registered") client fails to claim a reserved nickname, fixing a bad interaction with some client software (#1594, thanks @ProgVal!)
    • ๐Ÿ›  Fixed znc.in/playback commands causing client disconnections when history is disabled (#1552, thanks @szlend!)
    • ๐Ÿ›  Fixed syntactically invalid 696 ERR_INVALIDMODEPARAM response for invalid channel keys (#1563, thanks @ProgVal!)
    • ๐Ÿ‘‰ User-set nickserv settings now display as "enabled" instead of "mandatory" (#1544, thanks @Mikaela!)
    • ๐Ÿ‘Œ Improved error messages for some invalid configuration cases (#1559, thanks @aster1sk!)
    • ๐Ÿ‘Œ Improved CS TRANSFER error messages (#1534, thanks burning!)
    • ๐Ÿ– Handle panics caused when rehashing with SIGHUP (#1570)

    ๐Ÿ”„ Changed

    • Registered channels will always appear in /LIST output, even with no members (#1507)
    • ๐Ÿ”ง In the new recommended default configuration, Oragono will preemptively reject messages that are too long to be relayed to clients without truncation. This is controlled by the config variable server.compatibility.allow-truncation; this field defaults to true when unset, preserving the legacy behavior for older config files (#1577, #1586, thanks @kylef!)
    • Auto-away behavior now respects individual clients; the user is not considered away unless all clients are away or disconnected (#1531, thanks @kylef!)
    • Direct messages rejected due to the +R registered-only usermode now produce an error message (#1064, thanks @KoraggKnightWolf, @ajaspers!)
    • RELAYMSG identifiers now respect bans and mutes (#1502)
    • If end user message deletion is enabled, channel operators can now delete channel messages (#1565, thanks @Mikaela!)
    • Halfops can change the channel topic (#1523)
    • ๐Ÿšš Snomask add/remove syntax now matches other ircds more closely (#1074)
    • ๐Ÿšš CS OP will regrant your channel AMODE, in case you removed it (#1516, #1307, thanks @jlu5!)
    • ๐Ÿ‘‰ User passwords may no longer begin with : (#1571)
    • ๐Ÿ‘Œ Improved documentation of CS AMODE and NS UNREGISTER (#1524, #1545, thanks @Mikaela!)
    • Disabling history disables history-related CAPs (#1549)

    โž• Added

    • Implemented the new CHATHISTORY TARGETS API for listing direct message conversations (#1592, thanks @emersion, @hhirtz, @jwheare, @kylef!)
    • ๐Ÿ‘ Implemented the new IRC-over-websockets draft, adding support for binary websockets and subprotocol negotiation (#1558, thanks @jwheare!)
    • Implemented the new bot mode spec (#1562)
    • Implemented the new forward mode spec (#1612, thanks @ProgVal!)
    • WARN NICK ACCOUNT_REQUIRED is sent on failed attempts to claim a reserved nickname (#1594)
    • NS CLIENTS LIST displays enabled client capabilities (#1576)
    • CS INFO with no arguments lists your registered channels (#765)
    • NS PASSWORD is now accepted as an alias for NS PASSWD (#1547)

    Internal

    • โฌ†๏ธ Upgraded to Go 1.16 (#1510)
  • v2.6.0-rc1 Changes

    April 11, 2021

    ๐Ÿš€ We're pleased to be publishing the release candidate for 2.6.0 (the official release should follow in a week or so).

    ๐Ÿš€ This release has some user-facing enhancements, but is primarily focused on fixing bugs and advancing the state of IRCv3 standardization (by publishing a release that implements the latest drafts). Some highlights:

    • A new CHATHISTORY API for listing direct message conversations (#1592)
    • โœ… The latest proposal for IRC-over-websockets, which should be backwards-compatible with existing clients (#1558)
    • โœ… The latest specification for the bot usermode (+B in our implementation) (#1562)

    ๐Ÿš€ This release includes changes to the config file format, all of which are fully backwards-compatible and do not require updating the file before upgrading.

    ๐Ÿš€ This release includes no changes to the embedded database format. If you are using MySQL for history storage, it adds a new table; this change is backwards and forwards-compatible and does not require any manual intervention.

    If you are using nginx as a reverse proxy for IRC-over-websockets, previous documentation did not recommend increasing proxy_read_timeout; the default value of 60s is too low and can lead to user disconnections. The current recommended value is proxy_read_timeout 600s;; see the manual for an example configuration.

    ๐ŸŒ Many thanks to @ajaspers and @Mikaela for contributing patches, to @aster1sk, @emersion, @eskimo, @hhirtz, @jlu5, @jwheare, @KoraggKnightWolf, @kylef, @Mikaela, @mogad0n, @ProgVal, and @szlend for reporting issues and helping test, and to our translators for contributing translations.

    Config changes

    • ๐Ÿ‘€ Listeners now support multiple TLS certificates for use with SNI; see the manual for details (#875, thanks @Mikaela!)
    • โž• Added server.compatibility.allow-truncation, controlling whether the server accepts messages that are too long to be relayed intact; this value defaults to true when unset (#1596, thanks @kylef!)
    • โž• Added new snomasks operator capability; operators must have either the ban or snomasks capability to subscribe to additional snomasks (#1176)

    ๐Ÿ”’ Security

    • ๐Ÿ›  Fixed several edge cases where Oragono might relay invalid UTF8 despite the UTF8ONLY guarantee, or to a text-mode websocket client (#1575, #1596, thanks @ProgVal!)
    • All operator privilege checks now use the capabilities system, making it easier to define operators with restricted powers (#1176)
    • โž• Adding and removing bans with UBAN now produces snomasks and audit loglines (#1518, thanks @mogad0n!)

    ๐Ÿ›  Fixed

    • ๐Ÿ›  Fixed an edge case in line buffering that could result in client disconnections (#1572, thanks @ProgVal!)
    • โฌ†๏ธ Upgraded buntdb, our embedded database library, fixing an edge case that could cause data corruption (#1603, thanks @Mikaela, @tidwall!)
    • ๐Ÿ‘Œ Improved compatibility with the published draft/register specification (#1568, thanks @ProgVal!)
    • 433 ERR_NICKNAMEINUSE is no longer sent when a fully connected ("registered") client fails to claim a reserved nickname, fixing a bad interaction with some client software (#1594, thanks @ProgVal!)
    • ๐Ÿ›  Fixed znc.in/playback commands causing client disconnections when history is disabled (#1552, thanks @szlend!)
    • ๐Ÿ›  Fixed syntactically invalid 696 ERR_INVALIDMODEPARAM response for invalid channel keys (#1563, thanks @ProgVal!)
    • ๐Ÿ‘‰ User-set nickserv settings now display as "enabled" instead of "mandatory" (#1544, thanks @Mikaela!)
    • ๐Ÿ‘Œ Improved error messages for some invalid configuration cases (#1559, thanks @aster1sk!)
    • ๐Ÿ‘Œ Improved CS TRANSFER error messages (#1534, thanks burning!)
    • ๐Ÿ– Handle panics caused when rehashing with SIGHUP (#1570)

    ๐Ÿ”„ Changed

    • Registered channels will always appear in /LIST output, even with no members (#1507)
    • ๐Ÿ”ง In the new recommended default configuration, Oragono will preemptively reject messages that are too long to be relayed to clients without truncation. This is controlled by the config variable server.compatibility.allow-truncation; this field defaults to true when unset, preserving the legacy behavior for older config files (#1577, #1586, thanks @kylef!)
    • Auto-away behavior now respects individual clients; the user is not considered away unless all clients are away or disconnected (#1531, thanks @kylef!)
    • Direct messages rejected due to the +R registered-only usermode now produce an error message (#1064, thanks @KoraggKnightWolf, @ajaspers!)
    • RELAYMSG identifiers now respect bans and mutes (#1502)
    • If end user message deletion is enabled, channel operators can now delete channel messages (#1565, thanks @Mikaela!)
    • Halfops can change the channel topic (#1523)
    • ๐Ÿšš Snomask add/remove syntax now matches other ircds more closely (#1074)
    • ๐Ÿšš CS OP will regrant your channel AMODE, in case you removed it (#1516, #1307, thanks @jlu5!)
    • ๐Ÿ‘‰ User passwords may no longer begin with : (#1571)
    • ๐Ÿ‘Œ Improved documentation of CS AMODE and NS UNREGISTER (#1524, #1545, thanks @Mikaela!)
    • Disabling history disables history-related CAPs (#1549)

    โž• Added

    • Implemented the new CHATHISTORY TARGETS API for listing direct message conversations (#1592, thanks @emersion, @hhirtz, @jwheare, @kylef!)
    • ๐Ÿ‘ Implemented the new IRC-over-websockets draft, adding support for binary websockets and subprotocol negotiation (#1558, thanks @jwheare!)
    • Implemented the new bot mode spec (#1562)
    • Implemented the new forward mode spec (#1612, thanks @ProgVal!)
    • WARN NICK ACCOUNT_REQUIRED is sent on failed attempts to claim a reserved nickname (#1594)
    • NS CLIENTS LIST displays enabled client capabilities (#1576)
    • CS INFO with no arguments lists your registered channels (#765)
    • NS PASSWORD is now accepted as an alias for NS PASSWD (#1547)

    Internal

    • โฌ†๏ธ Upgraded to Go 1.16 (#1510)