Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
soju(1) 		     General Commands Manual			 soju(1)

NAME
     soju - IRC bouncer

SYNOPSIS
     soju [options...]

DESCRIPTION
     soju is a user-friendly IRC bouncer. It connects to upstream IRC servers on
     behalf of the user to provide extra features.

     *	 Multiple  separate  users sharing the same bouncer, each with their own
	 upstream servers
     *	 Sending the backlog (messages received while the user was  disconnected
	 from the bouncer), with per-client buffers

     To  connect to the bouncer, use the bouncer username and password. To use a
     client which doesn't support the  soju.im/bouncer-networks  IRC  extension,
     setup  one  connection per server configured in soju, and indicate the net-
     work name in the username: "<username>/<network>".  Then  channels  can  be
     joined and parted as if you were directly connected to the upstream server.

     For  per-client  history  to  work on clients which don't support the IRCv3
     chathistory extension, clients need to indicate their  name.  This  can  be
     done by adding a "@<client>" suffix to the username.

     When  joining a channel, the channel will be saved and automatically joined
     on the next connection. When registering or authenticating  with  NickServ,
     the credentials will be saved and automatically used on the next connection
     if  the  server  supports SASL. When parting a channel with the reason "de-
     tach", the channel will be detached instead of being left.

     If a network specified in the username doesn't exist, and the network  name
     is a valid hostname, the network will be automatically added.

     When  all	clients are disconnected from the bouncer, the user is automati-
     cally marked as away by default.

     soju will reload the configuration file, the TLS  certificate/key	and  the
     MOTD  file  when it receives the HUP signal. The configuration options lis-
     ten, db and log cannot be reloaded.

     Administrators can broadcast a message to all  bouncer  users  via  /notice
     $<hostname>  <text>, or via /notice $* <text> if the connection isn't bound
     to a particular network. All currently connected bouncer users will receive
     the message from the special BouncerServ service.

OPTIONS
     -h, -help
	 Show help message and quit.

     -config <path>
	 Path to the config file. If unset, a default config file is used.

     -debug
	 Enable debug logging (this will  leak	sensitive  information	such  as
	 passwords).  This can be overriden at run time with the service command
	 server debug.

     -listen <uri>
	 Listening URI (default: ":6697"). Can be specified multiple times.

CONFIG FILE
     The config file has one directive per line.

     Example:

	 listen ircs://
	 tls cert.pem key.pem
	 hostname example.org

     The following directives are supported:

     listen <uri>
	 Listening URI (default: ":6697").

	 The following URIs are supported:

	 *   [ircs://][host][:port] listens with TLS over TCP (default	port  if
	     omitted: 6697)
	 *   irc://localhost[:port]  listens  with  plain-text over TCP (default
	     port if omitted: 6667, host must be "localhost")
	 *   irc+insecure://[host][:port] listens with plain-text over TCP  (de-
	     fault port if omitted: 6667)
	 *   unix://<path> listens on a Unix domain socket
	 *   https://[host][:port]  listens for HTTPS connections (default port:
	     443) and handles the following requests:
	     *	 /socket for WebSocket
	     *	 /uploads (and subdirectories) for file uploads
	 *   http://localhost[:port] listens  for  plain-text  HTTP  connections
	     (default  port:  80, host must be "localhost") and handles requests
	     like https:// does
	 *   http+insecure://[host][:port] listens for plain-text  HTTP  connec-
	     tions (default port: 80) and handles requests like https:// does
	 *   http+unix://<path>  listens  for  plain-text  HTTP connections on a
	     Unix domain socket and handles requests like https:// does
	 *   wss://[host][:port] listens for WebSocket connections over TLS (de-
	     fault port: 443)
	 *   ws://localhost[:port] listens for plain-text WebSocket  connections
	     (default port: 80, host must be "localhost")
	 *   ws+insecure://[host][:port]  listens  for plain-text WebSocket con-
	     nections (default port: 80)
	 *   ws+unix://<path> listens for plain-text WebSocket connections on  a
	     Unix domain socket
	 *   ident://[host][:port] listens for plain-text ident connections (de-
	     fault port: 113)
	 *   http+prometheus://localhost:<port> listens for plain-text HTTP con-
	     nections and serves Prometheus metrics (host must be "localhost")
	 *   http+pprof://localhost:<port>  listens  for plain-text HTTP connec-
	     tions and serves pprof runtime profiling data (host must be "local-
	     host").	     For	 more	      information,	    see:
	     <https://pkg.go.dev/net/http/pprof>.
	 *   unix+admin://[path] listens on a Unix domain socket for administra-
	     tive connections, such as sojuctl (default path: /run/soju/admin)

	 If  the scheme is omitted, "ircs" is assumed. If multiple listen direc-
	 tives are specified, soju will listen on each of them.

     hostname <name>
	 Server hostname (default: system hostname).

	 This should be set to a fully qualified domain name.

     title <title>
	 Server title. This will be sent as  the  ISUPPORT  NETWORK  value  when
	 clients don't select a specific network.

     tls <cert> <key>
	 Enable  TLS  support. The certificate and the key files must be PEM-en-
	 coded.

     db <driver> <source>
	 Set the database location for user, network and channel storage. By de-
	 fault, a sqlite3 database is opened in "./soju.db".

	 Supported drivers:

	 *   sqlite3 expects source to be a path to the SQLite file
	 *   postgres expects source to be a space-separated list  of  key=value
	     parameters,  e.g.	db  postgres "host=/run/postgresql dbname=soju".
	     Note that sslmode defaults to require. For more information on con-
	     nection  strings,	see:  <https://pkg.go.dev/github.com/lib/pq#hdr-
	     Connection_String_Parameters>.

     message-store <driver> [source]
	 Set the database location for IRC messages. By default, db is used.

	 Supported drivers:

	 *   db  stores  messages  in  the database. A full-text search index is
	     used to speed up search queries.
	 *   fs stores messages on disk, in the same format as	ZNC.  source  is
	     required  and is the root directory path for the database. This on-
	     disk format is lossy: some IRCv3 messages	(e.g.  TAGMSG)	and  all
	     message tags are discarded.
	 *   memory  stores  messages in memory. For each channel/user, only the
	     latest 4K messages are kept in  memory,  older  messages  are  dis-
	     carded. This driver is very basic and doesn't support features such
	     as the chathistory extension and search.

	 (log is a deprecated alias for this directive.)

     file-upload <driver> [source]
	 Set the database location for uploaded files.

	 File  upload  requires  setting  up  an HTTP listener (see https:// and
	 http+insecure:// URIs in the listen directive).

	 Supported drivers:

	 *   fs stores uploaded files on disk. source is required.
	 *   http stores uploaded files through an external HTTP service. source
	     is required and must be an HTTP URL. When receiving  a  file,  soju
	     will  send an HTTP POST request to that URL, sending the file as is
	     in the HTTP request body; additionally sending  the  uploader  soju
	     username  in the Soju-Username header. The HTTP server must respond
	     with an HTTP 201 on success, with the Location header being set  to
	     the URL of the uploaded file.

     http-origin <patterns...>
	 List  of  allowed  HTTP origins for WebSocket listeners. The parameters
	 are interpreted as shell patterns, see glob(7).

	 By default, only the request host is authorized. Use this directive  to
	 enable cross-origin WebSockets.

     http-ingress <url>
	 External URL on which HTTPS listeners are exposed.

	 By default, this is https://<hostname>.

     accept-proxy-ip <cidr...>
	 Allow	the  specified IPs to act as a proxy. Proxys have the ability to
	 overwrite the remote and local connection addresses (via the PROXY pro-
	 tocol, the Forwarded HTTP header field defined in RFC 7239  or  the  X-
	 Forwarded-*  HTTP  header fields). The special name "localhost" accepts
	 the loopback addresses 127.0.0.0/8 and ::1/128.

	 By default, all IPs are rejected.

     max-user-networks <limit>
	 Maximum number of enabled networks per user. By default,  there  is  no
	 limit.

     motd <path>
	 Path to the MOTD file. The bouncer MOTD is sent to clients which aren't
	 bound to a specific network. By default, no MOTD is sent.

     upstream-user-ip <cidr...>
	 Enable  per-user IP addresses. One IPv4 range and/or one IPv6 range can
	 be specified in CIDR notation. One IP address per  range  will  be  as-
	 signed  to  each  user and will be used as the source address when con-
	 necting to an upstream network.

	 This can be useful to avoid having the whole bouncer banned from an up-
	 stream network because of one malicious user.

     disable-inactive-user <duration>
	 Disable inactive users after the specified duration.

	 A user is inactive when the last downstream connection is closed.

	 The duration is a positive decimal number  followed  by  the  unit  "d"
	 (days). For instance, "30d" disables users 30 days after they last dis-
	 connect from the bouncer.

     enable-user-on-auth true|false
	 Enable users when they successfully authenticate.

	 This can be used together with disable-inactive-user to seamlessly dis-
	 able and re-enable users during lengthy inactivity.

	 When  external authentication is used (e.g. auth oauth2), bouncer users
	 are automatically created after successful authentication.

     auth <driver> ...
	 Set the authentication method. By default, internal  authentication  is
	 used.

	 Supported drivers:

	 auth internal
	     Use internal authentication.
	 auth http <url>
	     Use  external  HTTP  basic  authentication. An HTTP request is made
	     against the URL, passing the user credentials in  an  Authorization
	     Basic header. The credentials are considered valid on HTTP 200; in-
	     valid on HTTP 403; and any other error code means an error occured.
	 auth oauth2 <url>
	     Use external OAuth 2.0 authentication. The authorization server URL
	     must  be  provided. The client ID and client secret can be provided
	     as username and password in the URL. The authorization server  must
	     support  OAuth  2.0  Authorization  Server  Metadata (RFC 8414) and
	     OAuth 2.0 Token Introspection (RFC 7662).
	 auth pam
	     Use PAM authentication.

IRC SERVICE
     soju exposes an IRC service called BouncerServ to manage the bouncer.  Com-
     mands  can be sent via regular private messages (/msg BouncerServ <command>
     [args...]). Commands may be written in full or abbreviated  form,	for  in-
     stance network can be abbreviated as net or just n.

     Commands  are  parsed according the POSIX shell rules. In particular, words
     can be quoted (via double or single quotes) and  a  backslash  escapes  the
     next character.

     help [command]
	 Show  a  list of commands. If command is specified, show a help message
	 for the command.

     network create -addr <addr> [options...]
	 Connect to a new network at addr. -addr is mandatory.

	 addr supports several connection types:

	 *   [ircs://]<host>[:port] connects with TLS over TCP
	 *   irc+insecure://<host>[:port] connects with plain-text TCP
	 *   irc+unix:///<path> connects to a Unix socket

	 For example, to connect to Libera Chat:

	     net create -addr irc.libera.chat

	 Other options are:

	 -name <name>
	     Short network name. This will be used instead of addr to  refer  to
	     the network.

	 -username <username>
	     Connect  with  the  specified username. By default, the nickname is
	     used.

	 -pass <pass>
	     Connect with the specified server password.

	 -realname <realname>
	     Connect with the specified real name. By default, the account's re-
	     alname is used if set, otherwise the network's nickname is used.

	 -certfp <fingerprint>
	     Instead of using certificate authorities to check the server's  TLS
	     certificate,  check whether the server certificate matches the pro-
	     vided fingerprint. This can be used to  connect  to  servers  using
	     self-signed  certificates.  The  fingerprint  format  is SHA512. An
	     empty string removes any previous fingerprint.

	     The following command can be used to fetch the certificate  finger-
	     print of an IRC server:

		 openssl s_client -connect irc.example.org:6697 -verify_quiet </dev/null | openssl x509 -fingerprint -sha512 -noout -in /dev/stdin

	 -nick <nickname>
	     Connect  with  the  specified  nickname.  By default, the account's
	     username is used.

	 -auto-away true|false
	     Enable or disable the auto-away feature. If the feature is enabled,
	     the user will be marked as away when all clients  are  disconnected
	     from the bouncer. By default, auto-away is enabled.

	 -enabled true|false
	     Enable  or  disable  the  network.  If the network is disabled, the
	     bouncer won't connect to it. By default, the network is enabled.

	 -ignore-limit true|false
	     Ignore the max networks limit for this command.  Only  admin  users
	     can ignore the limit.

	 -connect-command <command>
	     Send  the	specified quoted string as a raw IRC command right after
	     connecting to the server. This can be used to identify  to  an  ac-
	     count when the server doesn't support SASL.

	     For  instance, to identify with NickServ, the following command can
	     be used:

		 "PRIVMSG NickServ :IDENTIFY <password>"

	     The flag can be specified multiple times to send multiple IRC  mes-
	     sages. To clear all commands, set it to the empty string.

     network update [name] [options...]
	 Update  an  existing  network.  The options are the same as the network
	 create command.

	 When this command is executed, soju will disconnect and  re-connect  to
	 the network.

	 If name is not specified, the current network is updated.

     network delete [name]
	 Disconnect and delete a network.

	 If name is not specified, the current network is deleted.

     network quote [name] <command>
	 Send a raw IRC line as-is to a network.

	 If name is not specified, the command is sent to the current network.

     network status
	 Show a list of saved networks and their current status.

     channel status [options...]
	 Show a list of saved channels and their current status.

	 Options:

	 -network <name>
	     Only  show channels for the specified network. By default, only the
	     channels in the current network are displayed.

     channel create <name> [options...]
	 Join a new channel.

	 Joining a channel should usually be done with a simple  join  from  the
	 client,  but this command can be used to join another user to a channel
	 when used with user run.

	 Options are:

	 -detached true|false
	     Attach or detach this channel.

	     A detached channel is joined but is hidden by the bouncer. This  is
	     useful to e.g. collect logs and highlights in low-interest or high-
	     traffic channels.

	 -relay-detached <mode>
	     Set  when to relay messages from detached channels to the user with
	     a BouncerServ NOTICE.

	     Modes are:

	     message
		 Relay any message from this channel when detached.

	     highlight
		 Relay only messages mentioning you when detached.

	     none
		 Don't relay any messages from this channel when detached.

	     default
		 Currently same as highlight. This is the default behaviour.

	 -reattach-on <mode>
	     Set when to automatically reattach to detached channels.

	     Modes are:

	     message
		 Reattach to this channel when any message is received.

	     highlight
		 Reattach to this channel when any message mentioning you is re-
		 ceived.

	     none
		 Never automatically reattach to this channel.

	     default
		 Currently same as none. This is the default behaviour.

	 -detach-after <duration>
	     Automatically detach this channel after the specified duration  has
	     elapsed without receving any message corresponding to -detach-on.

	     Example duration values: 1h30m, 30s, 2.5h.

	     Setting  this  value  to  0  will disable this behaviour, i.e. this
	     channel will never be automatically detached. This is  the  default
	     behaviour.

	 -detach-on <mode>
	     Set  when	to  reset  the	auto-detach timer used by -detach-after,
	     causing it to wait again for the auto-detach duration timer  before
	     detaching. Joining, reattaching, sending a message, or changing any
	     channel  option  will  reset the timer, in addition to the messages
	     specified by the mode.

	     Modes are:

	     message
		 Receiving any message from this channel will reset the auto-de-
		 tach timer.

	     highlight
		 Receiving any message mentioning you from this channel will re-
		 set the auto-detach timer.

	     none
		 Receiving messages from this channel will not reset  the  auto-
		 detach  timer.  Sending  messages  or	joining the channel will
		 still reset the timer.

	     default
		 Currently same as message. This is the default behaviour.

     channel update <name> [options...]
	 Update the options of an existing channel. The options are the same  as
	 the network create command.

     channel delete <name>
	 Leave and forget a channel.

     certfp generate [options...]
	 Generate  self-signed	certificate  and  use it for authentication (via
	 SASL EXTERNAL).

	 Generates a 3072-bit RSA private key by default.

	 Note, reconnection to the upstream network is required to use the newly
	 generated certificate.

	 Options are:

	 -network <name>
	     Select a network. By default, the current network is  selected,  if
	     any.

	 -key-type <type>
	     Private  key  algorithm  to  use.	Valid values are: rsa, ecdsa and
	     ed25519. ecdsa uses the NIST P-521 curve.

	 -bits <bits>
	     Size of RSA key to generate. Ignored for other key types.

     certfp fingerprint [options...]
	 Show SHA-1 and SHA-256 fingerprints for the certificate currently  used
	 with the network.

	 Options are:

	 -network <name>
	     Select  a	network. By default, the current network is selected, if
	     any.

     sasl status [options...]
	 Show current SASL status.

	 Options are:

	 -network <name>
	     Select a network. By default, the current network is  selected,  if
	     any.

     sasl set-plain [options...] <username> <password>
	 Set SASL PLAIN credentials.

	 Note, reconnection to the upstream network is required to apply the new
	 settings.

	 Options are:

	 -network <name>
	     Select  a	network. By default, the current network is selected, if
	     any.

     sasl reset [options...]
	 Disable SASL authentication and remove stored credentials.

	 Note, reconnection to the upstream network is required to apply the new
	 settings.

	 Options are:

	 -network <name>
	     Select a network. By default, the current network is  selected,  if
	     any.

     user status [username]
	 Show  a list of users on this server. Only admins can query this infor-
	 mation.

	 If username is specified, statistics are only displayed for this user.

     user create -username <username> -password <password> [options...]
	 Create a new soju user. Only admin users can create new  accounts.  The
	 -username and -password flags are mandatory.

	 Options are:

	 -username <username>
	     The  bouncer  username.  This  cannot be changed after the user has
	     been created.

	 -password <password>
	     The bouncer password.

	 -disable-password
	     Disable password authentication. The user will be unable to login.

	 -admin true|false
	     Make the new user an administrator.

	 -nick <nick>
	     Set the user's nickname. This is used as a fallback if there is  no
	     nickname set for a network.

	 -realname <realname>
	     Set  the user's realname. This is used as a fallback if there is no
	     realname set for a network.

	 -enabled true|false
	     Enable or disable the user. If the user is  disabled,  the  bouncer
	     will  not	connect to any of their networks, and downstream connec-
	     tions will be immediately closed. By default, users are enabled.

	 -max-networks <max-networks>
	     Set a limit on the number of enabled networks this user can use.  A
	     limit  of 0 means no network, and -1 means to default to the global
	     max-user-networks configuration value.

     user update [username] [options...]
	 Update a user. The options are the same as the user create command.

	 If username is omitted, the current user is updated.  Only  admins  can
	 update other users.

	 Not all flags are valid in all contexts:

	 *   The -username flag is never valid, usernames are immutable.
	 *   The  -nick and -realname flag are only valid when updating the cur-
	     rent user.
	 *   The -admin, -enabled and -max_networks flags are  only  valid  when
	     updating another user.

     user delete <username> [confirmation token]
	 Delete a soju user.

	 Only admins can delete other users.

     user run <username> <command...>
	 Execute a command as another user.

	 Only admins can use this command.

     server status
	 Show some bouncer statistics. Only admins can query this information.

     server notice <message>
	 Broadcast  a notice. All currently connected bouncer users will receive
	 the message from the  special	BouncerServ  service.  Only  admins  can
	 broadcast a notice.

     server debug <true|false>
	 Enable/disable  debug	logging  (this will leak sensitive information).
	 This overrides any value passed to soju in -debug.

AUTHORS
     Maintained by Simon Ser <contact@emersion.fr>, who  is  assisted  by  other
     open-source  contributors. For more information about soju development, see
     <https://soju.im>.

SEE ALSO
     sojuctl(1)

				   2026-07-30				 soju(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=soju&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>

home | help