Secure, anonymous peer-to-peer chat over I2P
End-to-end encrypted peer-to-peer messenger over I2P. Uses the SAM bridge for anonymous, serverless communication with full file transfer support.
Latest CI build (all platforms)
~/.i2pchat/www/ for a multi-file static site at your b32 address
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
sudo apt-get install build-essential qt5-qmake qtbase5-dev qtmultimedia5-dev libqt5svg5-dev libqt5xml5-dev pkg-config
sudo dnf install gcc-c++ qt5-qtbase-devel qt5-qtmultimedia-devel qt5-qtsvg-devel qt5-qtxml-devel make pkgconfig
sudo pacman -S base-devel qt5-base qt5-multimedia qt5-svg qt5-xml pkgconf
--appimage): needs wget plus the native prerequisites above.
--windows): needs git gperf libtool plus the native prerequisites. MXE is cloned and built automatically on first run.
--upx): needs upx.
--deb): needs dpkg-deb (pre-installed on Debian/Ubuntu).
--format): needs clang-format.
--tidy): needs clang-tidy bear compiledb.
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):
qmake I2PChat.pro "CONFIG += release"
make -j$(nproc)
On Linux, bash build.sh creates a stripped binary at dist/I2PChat. Run it with ./dist/I2PChat.
~/.i2pchat/ (Linux) or %APPDATA%\Roaming\I2PChat\ (Windows).
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:
/login challenges and /logout returns to the public root
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.
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:
~/.i2pchat/sounds/
%APPDATA%\Roaming\I2PChat\sounds\
~/Library/Application Support/I2PChat/sounds/
Sound files can be customized by editing application.ini under [Sound][SoundFilePath].
Licensed under GPLv3.