chghost Extension

Copyright © 2013 Christine Dodrill <>

Copyright © 2016 Ryan <>

Copyright © 2020 James Wheare <>

Unlimited redistribution and modification of this document is allowed provided that the above copyright notice and this permission notice remains intact.

Introduction πŸ”—

The chghost capability allows servers to send a notification when clients change their username or host. This mechanism avoids simulating a reconnect of the client. This is useful for servers that implement virtual hosts or cloaks, and helps to reduce clutter in client UI.

The chghost capability πŸ”—

When a client username or host is changed, servers MUST send the CHGHOST message to other clients who share channels with the target client and who have enabled the chghost capability. Servers SHOULD also send the CHGHOST message to the client whose own username or host changed, if that client also supports the chghost capability.

The CHGHOST message πŸ”—

The CHGHOST message is as follows:

:nick!old_user@old_host.local CHGHOST new_user new_host.local

The new_user parameter represents the user’s username.

The new_host.local parameter represents the user’s hostname.

One or both of the username and hostname can change during the CHGHOST process.

Servers that implement ident checking might choose to prefix a username with a tilde ~ character to indicate missing confirmation from an ident server. This MUST be considered part of the username and included in any CHGHOST messages where relevant.

:nick!~old_user@old_host.local CHGHOST ~new_user new_host.local

Fallback when the chghost capability has not been negotiated πŸ”—

When the capability is not enabled for other clients who share channels with the changed client, servers SHOULD send fallback messages to simulate the client reconnecting. This allows clients to keep their user state up to date. For shared channels, the simulated events SHOULD include appropriate QUIT, JOIN and MODE commands, to restore membership and user channel modes.

:nick!old_user@old_host.local QUIT :Changing hostname
:nick!new_user@new_host.local JOIN #ircv3
:ircd.local MODE #ircv3 +v :nick

Examples πŸ”—

In this example, tim!~toolshed@backyard gets their username changed to ~b and their hostname changed to ckyard. Their new user mask is tim!~b@ckyard:

:tim!~toolshed@backyard CHGHOST ~b ckyard

In this example, tim!b@ckyard gets their username changed to toolshed and their hostname changed to backyard. Their new user mask is tim!toolshed@backyard:

:tim!b@ckyard CHGHOST toolshed backyard

Errata πŸ”—

Software supporting chghost: Ergo, ircd-hybrid, InspIRCd, Solanum, txircd, UnrealIRCd, AdiIRC, Ambassador, catgirl, Colloquy, Glirc, HexChat, IceChat, Irssi, Konversation, KVIrc, mIRC, Quassel, Textual, WeeChat, gamja, IRCCloud, Kiwi IRC, The Lounge, web client, CoreIRC, Palaver, Quasseldroid, pounce (as Server), pounce (as Client), soju (as Server), soju (as Client), BitBot, Eggdrop, Limnoria, Moon Moon, ChatSharp, Communi, girc, irc-framework, ircrobots, Kitteh IRC Client Library, pydle, Rust irc, Warren, Heisenbridge (bouncer mode), PyLink (clientbot mode)