Need help with goirc?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

467 Stars 77 Forks BSD 3-Clause "New" or "Revised" License 436 Commits 7 Opened issues


Event-based stateful IRC client framework for Go.

Services available


Need anything else?

Contributors list

Build Status

GoIRC Client Framework

Acquiring and Building

Pretty simple, really:

go get

There is some example code that demonstrates usage of the library in

. This will connect to freenode and join
by default, so be careful ;-)


and the README there for a quick way to migrate from the old

Using the framework

Synopsis: ```go package main

import ( "crypto/tls" "fmt"

irc ""


func main() { // Creating a simple IRC client is simple. c := irc.SimpleClient("nick")

// Or, create a config and fiddle with it first:
cfg := irc.NewConfig("nick")
cfg.SSL = true
cfg.SSLConfig = &tls.Config{ServerName: ""}
cfg.Server = ""
cfg.NewNick = func(n string) string { return n + "^" }
c = irc.Client(cfg)

// Add handlers to do things here! // e.g. join a channel on connect. c.HandleFunc(irc.CONNECTED, func(conn *irc.Conn, line *irc.Line) { conn.Join("#channel") }) // And a signal on disconnect quit := make(chan bool) c.HandleFunc(irc.DISCONNECTED, func(conn *irc.Conn, line *irc.Line) { quit

} ```

The test client provides a good (if basic) example of how to use the framework. Reading

gives a more in-depth look at how handlers can be written. Commands to be sent to the server (e.g. PRIVMSG) are methods of the main
struct, and can be found in
(not all of the possible IRC commands are implemented yet). Events are produced directly from the messages from the IRC server, so you have to handle e.g. "332" for
to get the topic for a channel.

The vast majority of handlers implemented within the framework deal with state tracking of all nicks in any channels that the client is also present in. These handlers are in

. State tracking is optional, disabled by default, and can be enabled and disabled by calling
respectively. Doing this while connected to an IRC server will probably result in an inconsistent state and a lot of warnings to STDERR ;-)


Sorry the documentation is crap. Use the source, Luke.

Feedback on design decisions is welcome. I am indebted to Matt Gruen for his work on go-bot which inspired the re-organisation and channel-based communication structure of

. I'm sure things could be more asynchronous, still.

This code is (c) 2009-15 Alex Bramley, and released under the same licence terms as Go itself.

Contributions gratefully received from:

And thanks to the following for minor doc/fix PRs:

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.