A lightweight, terminal-based peer-to-peer (P2P) chat application written in C.
Features
- P2P Communication: Direct messaging between peers using TCP/IP.
- Automatic Discovery: Local network peer discovery via UDP beacons.
- Terminal UI: Interactive interface built with
ncurses. - File Transfer: Support for sending and receiving files over the network.
- End-to-End Encryption: All messages and file transfers are encrypted using X25519 key exchange and XSalsa20-Poly1305 authenticated encryption via
libsodium. Encryption is fully transparent — no configuration or key management required.
Requirements
- GCC
- Make
- ncurses library
- pthread library
- libsodium library
Installation
The easiest way to install Lume is by running our automated script:
curl -sSL https://raw.githubusercontent.com/jorgegarcia33/lume/master/install.sh | bash- Download the latest
lume.debpackage from the Releases section. - Install the package using:
sudo apt install ./lume.deb
- Launch the application:
lume <username> <port>
If you prefer to build the project manually:
make
sudo make installUsage
lume <username> <port>- Start with arguments:
lume <username> <port> - Start with saved config:
lume(loads from~/.config/lume/lume.conf) - Configure interactively:
lume config
Controls & Commands
- Arrow Keys (Up/Down): Cycle through the list of discovered peers in the network.
- Type & Enter: Send a text message to the currently selected peer.
- /file <path>: Send a file to the selected peer (e.g.,
/file ./document.txt). - ESC: Exit the application.
Configuration File
You can easily create or update your configuration using the config command:
lume configAlternatively, you can manually create ~/.config/lume/lume.conf with the following format:
username=yourname
port=12345Both fields are required. The application will only use the config file if you run lume without arguments.
Contributing
Please see CONTRIBUTING.md for guidelines on how to contribute, report issues, or request features.