A modern IRC server (daemon/ircd) written in Go.
We're pleased to be publishing the release candidate for 2.10.0 (the official release should follow in a week or so).
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.
history.chathistory-maxmessages
has been increased to 1000
(previously 100
) (#1919)AMODE +v
) in a channel is now treated as a permanent invite (i.e. overriding +i
on the channel) (#1901, thanks @eskimo!)+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)bot
instead of draft/bot
(#1938)SAREGISTER
is allowed even under DEFCON
levels 4 and lower (#1922)history
capability are now exempted from time cutoff restrictions on history retrieval (#1593, #1955)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!)ACCEPT
command modeled on Charybdis/Solanum, allowing +R
users to whitelist users who can DM them (#1688, thanks @Mikaela!)NS SAVERIFY
for operators to manually complete an account verification (#1924, #1952, thanks @tacerus!)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!)LIST <n
always returning no results (#1934, thanks @progval and @mitchr!)QUIT
snotice without a corresponding CONNECT
snotice (#1941, thanks @tacerus, @xnaas!)319 RPL_WHOISCHANNELS
responses (#1935, thanks @Mikaela!)LIST
returning 403 ERR_NOSUCHCHANNEL
for a nonexistent channel; the correct response is an empty list (#1928, thanks @emersion!)+s
("secret") channels not appearing in LIST
even when the client is already a member (#1911, #1923, thanks @jigsy1 and @FiskFan1999!)HISTSERV DELETE
by always requiring a consistent number of parameters (#1881, #1927, thanks @FiskFan1999!)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)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.
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, @mogad0n, @pcho, and @progval for reporting issues,
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)+C
(no channel-wide CTCP messages other than ACTION) is now a recommended default channel mode (#1851)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)hidden: true
is now the recommended default for operator definitions (#1730)+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!)+I
invite exception mask can now join +R
channels (#1871)+b
bans (#1876, thanks @progval!)ban
operator capability, as opposed to accreg
(#1828, #1839, thanks @mogad0n!)NOTE AUTHENTICATE VERIFICATION_REQUIRED
standard reply code (#1852, #1853, thanks @emersion!)v
snomask is now used to send notifications about vhost changes initiated by operators (#1844, thanks @pcho!)NS PASSWD <password> * *
as expected; this has been fixed (#1883, #1884, thanks @FiskFan1999!)+b m:
; this has been fixed (#1838, thanks @mogad0n!)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!)$
character is now disallowed in new nicknames and account names, to avoid collision with the massmessage syntax (#1857, thanks @emersion!)o
parameter of WHO
now returns an empty list of results, instead of being ignored (#1730, thanks @kylef, @emersion, @progval!)*
instead of 0
(#1866, thanks @Jobe1986!)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,
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)+C
(no channel-wide CTCP messages other than ACTION) is now a recommended default channel mode (#1851)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)hidden: true
is now the recommended default for operator definitions (#1730)+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!)+I
invite exception mask can now join +R
channels (#1871)+b
bans (#1876, thanks @progval!)ban
operator capability, as opposed to accreg
(#1828, #1839, thanks @mogad0n!)NOTE AUTHENTICATE VERIFICATION_REQUIRED
standard reply code (#1852, #1853, thanks @emersion!)v
snomask is now used to send notifications about vhost changes initiated by operators (#1844, thanks @pcho!)NS PASSWD <password> * *
as expected; this has been fixed (#1883, #1884, thanks @FiskFan1999!)+b m:
; this has been fixed (#1838, thanks @mogad0n!)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!)$
character is now disallowed in new nicknames and account names, to avoid collision with the massmessage syntax (#1857, thanks @emersion!)o
parameter of WHO
now returns an empty list of results, instead of being ignored (#1730, thanks @kylef, @emersion, @progval!)*
instead of 0
(#1866, thanks @Jobe1986!)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.
accounts.registration.email-verification.password-reset
block to configure e-mail-based password reset (#734, #1779)accounts.registration.email-verification.timeout
to impose a timeout on e-mail sending; the recommended default value is 60s
(60 seconds) (#1741)server.suppress-lusers
to allow hiding the LUSERS counts (#1802, thanks @eskimo!)accounts.registration.email-verification.timeout
to impose a timeout on e-mail sending; the recommended default value is 60s
(60 seconds) (#1741)email-verification
block in default.yaml
for more information.draft/extended-monitor
capability (#1761, thanks @delthas!)NS INFO
now shows the user's email address (you can also view your own address) (#1677, thanks @ajaspers!)/WHOWAS
output (#1702, thanks @ajaspers!)+s d
snomask, for operators to receive information about session disconnections that do not result in a full QUIT (#1709, #1728, thanks @mogad0n!)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!)Type=notify
systemd service (#1733)/QUOTE
(#1530)+M
(only registered users can speak) channel mode did not work; this has been fixed (#1696, thanks @Mikaela!)/RENAME
that only changed the case of the channel would delete the channel registration; this has been fixed (#1751, thanks @Mikaela!)allow-truncation: true
not actually allowing truncation of overlong lines (#1766, thanks @tacerus!)CHATHISTORY
(#1676, thanks @emersion!)TARGMAX
005 parameter that advertises this, and the default kick message (#1748, #1777, #1776), thanks @ProgVal!)/SAMODE
on a channel not producing a snomask (#1787, thanks @mogad0n, @ajaspers!)+f
to a channel with SAMODE
used to require channel operator privileges on the receiving channel; this has been fixed (#1825, thanks @Mikaela!)697 ERR_LISTMODEALREADYSET
and 698 ERR_LISTMODENOTSET
(#1727, thanks @kylef!)696 ERR_INVALIDMODEPARAM
(#1773, thanks @kylef!)+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!)USER
line (#1778, thanks @ProgVal!)/UBAN ADD
of a NUH mask (i.e. a k-line) not killing affected clients (#1736, thanks @mogad0n!)+i
is configured as a default mode for channels (#1756, thanks @Mikaela!)channels.operator-only-creation
not respecting /SAJOIN
or always-on clients (#1757)/NS PASSWD
on a nonexistent account (#1738, thanks @Mikaela!)CHATHISTORY
fail message (#1731, thanks @ProgVal!)draft/register
capability to the latest draft/account-registration
iteration (#1740)+v
or higher can now speak in +R
(registered-only) channels (#1715, thanks @Mikaela and @ajaspers!)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)oragono.io/nope
capability was renamed to ergo.chat/nope
(#1793)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)We're pleased to be publishing the release candidate for 2.8.0 (the official release should follow in a week or so).
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 will move from Docker Hub to the GitHub Container Registry at ghcr.io; more details will be forthcoming with the final release.
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.
accounts.registration.email-verification.password-reset
block to configure e-mail-based password reset (#734, #1779)accounts.registration.email-verification.timeout
to impose a timeout on e-mail sending; the recommended default value is 60s
(60 seconds) (#1741)server.suppress-lusers
to allow hiding the LUSERS counts (#1802, thanks @eskimo!)accounts.registration.email-verification.timeout
to impose a timeout on e-mail sending; the recommended default value is 60s
(60 seconds) (#1741)email-verification
block in default.yaml
for more information.draft/extended-monitor
capability (#1761, thanks @delthas!)NS INFO
now shows the user's email address (you can also view your own address) (#1677, thanks @ajaspers!)/WHOWAS
output (#1702, thanks @ajaspers!)+s d
snomask, for operators to receive information about session disconnections that do not result in a full QUIT (#1709, #1728, thanks @mogad0n!)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!)Type=notify
systemd service (#1733)/QUOTE
(#1530)+M
(only registered users can speak) channel mode did not work; this has been fixed (#1696, thanks @Mikaela!)/RENAME
that only changed the case of the channel would delete the channel registration; this has been fixed (#1751, thanks @Mikaela!)allow-truncation: true
not actually allowing truncation of overlong lines (#1766, thanks @tacerus!)CHATHISTORY
(#1676, thanks @emersion!)TARGMAX
005 parameter that advertises this, and the default kick message (#1748, #1777, #1776), thanks @ProgVal!)/SAMODE
on a channel not producing a snomask (#1787, thanks @mogad0n, @ajaspers!)697 ERR_LISTMODEALREADYSET
and 698 ERR_LISTMODENOTSET
(#1727, thanks @kylef!)696 ERR_INVALIDMODEPARAM
(#1773, thanks @kylef!)+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!)USER
line (#1778, thanks @ProgVal!)/UBAN ADD
of a NUH mask (i.e. a k-line) not killing affected clients (#1736, thanks @mogad0n!)+i
is configured as a default mode for channels (#1756, thanks @Mikaela!)channels.operator-only-creation
not respecting /SAJOIN
or always-on clients (#1757)/NS PASSWD
on a nonexistent account (#1738, thanks @Mikaela!)CHATHISTORY
fail message (#1731, thanks @ProgVal!)draft/register
capability to the latest draft/account-registration
iteration (#1740)+v
or higher can now speak in +R
(registered-only) channels (#1715, thanks @Mikaela and @ajaspers!)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)oragono.io/nope
capability was renamed to ergo.chat/nope
(#1793)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.
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!)max-conns
(maximum connection count) and max-conn-lifetime
(maximum lifetime of a connection before it is cycled) to datastore.mysql
(#1622)massmessage
operator capability to allow sending NOTICEs to all connected users (#1153, #1629, thanks @jesopo!)require-sasl.enabled
is set to true
, tor-listeners.require-sasl
will be automatically set to true
as well (#1636)min-tls-version
key in listener configuration/NOTICE $$*
will send a NOTICE
to all users (#1153, #1629, thanks @jesopo!)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)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!)/LIST
after unregistration (#1619, thanks @ajaspers!)JOIN
lines in +u
("auditorium") channels (#1642)NS INFO
responses (#1627, thanks @ajaspers!)REGISTER
command would emit an invalid error message (#1633, thanks @ajaspers!)draft/resume-0.5
capability, and the associated RESUME
and BRB
commands (#1624)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.
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!)max-conns
(maximum connection count) and max-conn-lifetime
(maximum lifetime of a connection before it is cycled) to datastore.mysql
(#1622)massmessage
operator capability to allow sending NOTICEs to all connected users (#1153, #1629, thanks @jesopo!)require-sasl.enabled
is set to true
, tor-listeners.require-sasl
will be automatically set to true
as well (#1636)min-tls-version
key in listener configuration/NOTICE $$*
will send a NOTICE
to all users (#1153, #1629, thanks @jesopo!)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)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!)/LIST
after unregistration (#1619, thanks @ajaspers!)JOIN
lines in +u
("auditorium") channels (#1642)NS INFO
responses (#1627, thanks @ajaspers!)REGISTER
command would emit an invalid error message (#1633, thanks @ajaspers!)draft/resume-0.5
capability, and the associated RESUME
and BRB
commands (#1624)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:
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.)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.
REGISTER
command (#1634, thanks [@ajaspers](https://
github.com/ajaspers)!)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:
+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.
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!)snomasks
operator capability; operators must have either the ban
or snomasks
capability to subscribe to additional snomasks (#1176)UTF8ONLY
guarantee, or to a text-mode websocket client (#1575, #1596, thanks @ProgVal!)UBAN
now produces snomasks and audit loglines (#1518, thanks @mogad0n!)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!)znc.in/playback
commands causing client disconnections when history is disabled (#1552, thanks @szlend!)696 ERR_INVALIDMODEPARAM
response for invalid channel keys (#1563, thanks @ProgVal!)CS TRANSFER
error messages (#1534, thanks burning!)/LIST
output, even with no members (#1507)server.compatibility.allow-truncation
; this field defaults to true
when unset, preserving the legacy behavior for older config files (#1577, #1586, thanks @kylef!)+R
registered-only usermode now produce an error message (#1064, thanks @KoraggKnightWolf, @ajaspers!)CS OP
will regrant your channel AMODE
, in case you removed it (#1516, #1307, thanks @jlu5!):
(#1571)CS AMODE
and NS UNREGISTER
(#1524, #1545, thanks @Mikaela!)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)