8 releases (stable)

1.3.1 Dec 15, 2021
1.3.0 Mar 16, 2021
1.2.0 Feb 3, 2021
1.1.2 Nov 27, 2020
0.1.0 Sep 6, 2020

#1330 in Command line utilities


1.5K SLoC

A distributed LAN chat application in the terminal (without needing a server!). Run the application in your terminal and write into the LAN!

Built on top of tui-rs to create the terminal UI and message-io to make the network connections.


You can use the cargo package manager in order to install it.

$ cargo install termchat --all-features

If you have ~/.cargo/bin in your PATH (or similar in your OS), you will be able to use termchat everywhere in your computer!

Also, you can download the last release for your machine from the releases.

Arch Linux

termchat can be installed from available AUR packages using an AUR helper. For example,

$ yay -S termchat

If you prefer, you can clone the AUR packages and then compile them with makepkg. For example,

$ git clone https://aur.archlinux.org/termchat.git && cd termchat && makepkg -si

How it works?

To not saturate the network, termchat uses only one multicast message at startup to find other termchat applications on the network. Once a new application has been found by multicast, a TCP connection is created between them.


Simply write:

$ termchat

to open the application in your terminal.

By default, your computer user name is used. You can use a different username with -u <name>

You can modify the multicast discovery address with -d <address>

You can set a custom tcp sever port with -t <port>

(see the application help for more info --help).


Termchat treats messages containings the following commands in a special way:

  • ?send <$path_to_file>: sends the specified file to everyone on the network, example: ?send ./myfile

    Note: The received files can be found in /tmp/termchat/<termchat-username>/<file_name>

  • ?startstream/?stopstream: starts/stops video stream and send it to all peers. Currently this is only supported on linux, the other platforms can only receive the video.


Termchat store its configuration in a simple file located at $ConfigDir/termchat/config

Default config:

discovery_addr = ""
tcp_server_port = 0
user_name = "my_awesome_user_name"
terminal_bell = true

message_colors = ["Blue", "Yellow", "Cyan", "Magenta"]
my_user_color = "Green"
date_color = "DarkGray"
system_info_color = ["Cyan", "LightCyan"]
system_warning_color = ["Yellow", "LightYellow"]
system_error_color = ["Red", "LightRed"]
chat_panel_color = "White"
progress_bar_color = "LightGreen"
command_color = "LightYellow"
input_panel_color = "White"

Frequently Asked Questions

Q: Hosts are not disoverable


  • Make sure that no firewall is running (example: ufw), and if that's the case either stop it or add termchat ports to the white list.

  • By default you need to allow port 5877/udp and port X/tcp, X is a different with each run. Note that you can specify a custom tcp port as mentioned above and add it to the firewall whitelist.

Q: Can I silence the terminal bell when I received a message?

A: Yeah! You can run termchat passing the flag --quiet-mode or simple -q.

Q: I can't see anything on my light themed desktop!!!

A: You can use termchat --theme light, also you can customize colors individually via the config file.


~231K SLoC