No description
Find a file
Andros Fenollosa ba9bbbf3b9
Some checks are pending
build-windows / windows-exe (push) Waiting to run
Add macOS signing and notarized-release scripts
sign-macos.sh signs neotalk.app with the Developer ID under the hardened
runtime; release-macos.sh builds, signs, notarizes, staples and can publish the
zip to the Gitea releases page. Credentials are read from the environment.
2026-08-21 10:17:55 +02:00
.gitea/workflows Add PyInstaller packaging (macOS .app / Windows .exe) and Windows CI 2026-08-21 09:19:20 +02:00
assets Add app icon (two-bubble P2P mark) for macOS and Windows 2026-08-21 10:05:18 +02:00
packaging Add macOS signing and notarized-release scripts 2026-08-21 10:17:55 +02:00
src/neotalk Make the listen port configurable from the settings panel 2026-08-21 10:11:33 +02:00
tests Make the listen port configurable from the settings panel 2026-08-21 10:11:33 +02:00
.gitignore Initial neotalk: P2P encrypted chat over UDP discovery + TCP streaming 2026-08-21 09:16:07 +02:00
.pre-commit-config.yaml Initial neotalk: P2P encrypted chat over UDP discovery + TCP streaming 2026-08-21 09:16:07 +02:00
pyproject.toml Add PyInstaller packaging (macOS .app / Windows .exe) and Windows CI 2026-08-21 09:19:20 +02:00
README.md Make the listen port configurable from the settings panel 2026-08-21 10:11:33 +02:00
uv.lock Add PyInstaller packaging (macOS .app / Windows .exe) and Windows CI 2026-08-21 09:19:20 +02:00

neotalk

A modern peer-to-peer (P2P) chat over IP, with a graphical interface. Inspired by the classic Unix talk.

  • Negotiation (finding each other and ringing the doorbell) goes over UDP.
  • The conversation goes over a direct TCP connection between the two clients.
  • End-to-end encryption (X25519 + AES-GCM).
  • No servers, no accounts, no groups. Nothing is stored: closing loses it.
  • VPN friendly. Auto-discovery works on the local network; across a VPN (WireGuard, Tailscale…) you connect directly by address. See Connecting over a VPN.

Usage

uv run neotalk --alias yourname

Open another instance (on the same machine or another one on the local network) and they will find each other. Pick someone from the list, type, and press Enter.

Both people must be on the same local network for automatic discovery.

Connecting over a VPN (WireGuard, Tailscale…)

Automatic discovery uses multicast, which a VPN tunnel does not carry, so you will not see each other in the list. The conversation itself is a direct TCP connection, though, and that travels over the tunnel fine. Connect by address:

  1. One of you opens the ⚙ panel and sets a fixed Your port (for example 51821) so the address is stable, then Save. Leaving it empty keeps the local-network mode with an automatic port. (You can also pass --port 51821 at launch.)
  2. That person shares their address: their VPN IP plus that port, for example 10.8.0.2:51821. The ⚙ panel shows your current port.
  3. The other opens the ⚙ panel, types the address into Connect to host:port, and presses Connect.

The conversation opens over the tunnel, end-to-end encrypted as usual.

Running on Windows

Two options. Both need uv, installed once from PowerShell:

powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

Then get the code (or download the ZIP from the repository and unzip it):

git clone https://git.andros.dev/andros/neotalk.git
cd neotalk

Option A: just run it

uv run neotalk --alias yourname

uv downloads Python and every dependency the first time; later runs are instant.

Option B: build a standalone neotalk.exe

uv run --extra build pyinstaller --noconfirm --clean --distpath dist --workpath build/pyinstaller packaging/neotalk.spec

The result is a single file at dist\neotalk.exe. Double-click it to run, no Python required, and copy it anywhere you like.

A Windows executable must be built on Windows: PyInstaller does not cross-compile from macOS or Linux.

Development

uv run --extra dev pytest        # tests
uv run --extra dev ruff check    # lint

Contributing

Contributions are welcome! Please see the contribution guidelines for instructions on how to submit issues or pull requests.

License

GPL-3.0-or-later.