i2pchat

Secure, anonymous peer-to-peer chat over I2P

View the Project on GitHub

End-to-end encrypted peer-to-peer messenger over I2P. Uses the SAM bridge for anonymous, serverless communication with full file transfer support.


Screenshots

screenshot-roster screenshot-chat


Downloads

Latest CI build (all platforms)


Features


Build instructions

The project includes a build.sh wrapper script that handles compilation, optional AppImage packaging, Windows cross-compilation via MXE, clang-format, clang-tidy, and version bumping.

Prerequisites

Linux distribution package commands
  • Debian / Ubuntu:
    sudo apt-get install build-essential qt5-qmake qtbase5-dev qtmultimedia5-dev libqt5svg5-dev libqt5xml5-dev pkg-config
  • Fedora / RHEL:
    sudo dnf install gcc-c++ qt5-qtbase-devel qt5-qtmultimedia-devel qt5-qtsvg-devel qt5-qtxml-devel make pkgconfig
  • Arch Linux:
    sudo pacman -S base-devel qt5-base qt5-multimedia qt5-svg qt5-xml pkgconf

Usage

bash build.sh [OPTIONS]

Options:
  --clean       Clean previous build artifacts before building
  --format      Run clang-format (auto-fix sources)
  --tidy        Run clang-tidy with --fix (check and auto-fix issues)
  --appimage    Build portable AppImage (Linux only)
  --deb         Build .deb package (Linux only)
  --windows     Cross-compile Windows .exe via MinGW-w64
  --upx         Compress binary with UPX (reduces size, all platforms)
  --bump        Bump patch version, update Core.h and create git tag
  -j N          Use N parallel jobs (default: all cores)
  -h, --help    Show this help

Manual compilation (without build.sh):


Running

On Linux, bash build.sh creates a stripped binary at dist/I2PChat. Run it with ./dist/I2PChat.

Web server

Static files in ~/.i2pchat/www/ (or a custom docroot) are served on your b32.i2p address. Supports HTTP Basic Auth, per-user folder mapping, cookie-based sessions, directory listing, and rate-limited login. Visit Settings → Web Server to configure:

  • Require login — when ON, all paths challenge for credentials; when OFF, only /login challenges and /logout returns to the public root
  • Session timeout — configurable cookie lifetime (default 60 min)
  • Users — per-user username, password, and document root folder
  • Directory listing — file index when no index.html exists

Content-Security-Policy: default-src 'self'; form-action 'none'; base-uri 'none'; frame-ancestors 'none'. Only GET/HEAD accepted. Request headers limited to 4KB. Symlinks rejected. Session cookies are HttpOnly+SameSite=Lax. 3 failed logins = 1h ban. Transport security by I2P's garlic routing.

Sounds

I2PChat plays notification sounds for online/offline events, incoming messages, and file transfers.

Debian/Ubuntu (`.deb`): Sounds are included and automatically copied to ~/.i2pchat/sounds/ on first run.

Other platforms: Download the sounds archive and extract to the config directory:

  • Linux: ~/.i2pchat/sounds/
  • Windows: %APPDATA%\Roaming\I2PChat\sounds\
  • macOS: ~/Library/Application Support/I2PChat/sounds/

Sound files can be customized by editing application.ini under [Sound][SoundFilePath].


License

Licensed under GPLv3.