package module
v0.3.0 Latest Latest

This package is not in the latest version of its module.

Go to latest
Published: Nov 27, 2023 License: ISC Imports: 24 Imported by: 0


NOTICE me :senpai!

Welcome home, desune~

A modern terminal IRC client.

a screenshot of your senpai feat. simon!

senpai is an IRC client that works best with bouncers:

  • no logs are kept,
  • history is fetched from the server via CHATHISTORY,
  • networks are fetched from the server via bouncer-networks,
  • messages can be searched in logs via SEARCH.

Quick demo

To try out senpai "online", a live SSH demo is available at:

ssh -p 6666

Your nick will be set to your SSH username.

(This connects to the Ergo test network.)


From source (requires Go):

git clone
cd senpai
sudo make install

For a simple Go local installation:

git clone
cd senpai
go install ./cmd/senpai


From your terminal:


Senpai will guide you through a configuration assistant on your first run.

Then, type /join #senpai on Libera.Chat and have a... chat!

See doc/senpai.1.scd for more information and doc/senpai.5.scd for more configuration options!

Debugging errors, testing servers

To debug IRC traffic, run senpai with the -debug argument (or put debug true) in your config, it will then print in the home buffer all the data it sends and receives.

Issue tracker

Browse tickets at

To create a ticket, visit the page above, or simply send an email to: (does not require an account)


Sending patches to senpai is done by email, this is simple and built-in to Git.

Using pyonji

pyonji streamlines the Git email contribution workflow.

Install, then after adding your changes to a commit, run pyonji.

Using traditional git tools

Set up your system once by following the steps Installation and Configuration of

Then, run once in this repository:

git config "~delthas/"

Then, to send a patch, make your commit, then run:

git send-email --base=HEAD~1 --annotate -1 -v1

It should then appear on the mailing list.


This senpai is open source! Please use it under the ISC license.

Copyright (C) 2021 The senpai Contributors




This section is empty.


This section is empty.


func DefaultHighlightPath

func DefaultHighlightPath() (string, error)

func ParseAddr added in v0.3.0

func ParseAddr(addr string, cfg *Config) error


type App

type App struct {
	// contains filtered or unexported fields

func NewApp

func NewApp(cfg Config) (app *App, err error)

func (*App) Close

func (app *App) Close()

func (*App) CurrentBuffer

func (app *App) CurrentBuffer() (netID, buffer string)

func (*App) CurrentSession

func (app *App) CurrentSession() *irc.Session

func (*App) LastMessageTime

func (app *App) LastMessageTime() time.Time

func (*App) Run

func (app *App) Run()

func (*App) SetLastClose

func (app *App) SetLastClose(t time.Time)

func (*App) SwitchToBuffer

func (app *App) SwitchToBuffer(netID, buffer string)

type Config

type Config struct {
	Addr          string
	Nick          string
	Real          string
	User          string
	Password      *string
	TLS           bool
	TLSSkipVerify bool

	Channels []string

	Typings bool
	Mouse   bool

	Highlights       []string
	OnHighlightPath  string
	OnHighlightBeep  bool
	NickColWidth     int
	ChanColWidth     int
	ChanColEnabled   bool
	MemberColWidth   int
	MemberColEnabled bool
	TextMaxWidth     int
	StatusEnabled    bool

	Colors ui.ConfigColors

	Debug     bool
	Transient bool

func Defaults

func Defaults() Config

func LoadConfigFile

func LoadConfigFile(filename string) (Config, error)


Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL