zapchat (Python)
Terminal-native LAN chat. No accounts, no cloud, no servers — just your local network.
This is the Python distribution of zapchat. It speaks the same discovery protocol as the Node.js version, so a Python user and an npm user on the same Wi-Fi can chat with each other.
The Python client runs the proven protocol v1 wire format (JSON envelopes over TCP, discovery beacons). The Node.js client's protocol v2 adds TLS-style encryption on top of the same envelope shapes — so Python and npm users see each other on the LAN via the shared discovery, and both sides use identical message formats, but npm v2 currently refuses v1 chat links (no plaintext fallback by design). npm ↔ npm and Python ↔ Python chat work today; npm ↔ Python chat is on the roadmap.
Install
pip install zapchat
Run
zapchat
That is it. Everyone on the same network who runs zapchat shows up
automatically, and you can start chatting.
zapchat 3.0.0 — LAN chat, no accounts, no server
you are sam on #general (tcp:45913)
waiting for people on this network... (ctrl+c to quit, /help)
* alex connected
10:24 alex: morning all
10:25 sam: morning! which room are we using today?
Commands
| Command | What it does |
|---|---|
/help |
Show the command list |
/rooms |
Rooms discovered on the LAN |
/users /who |
Who is on the LAN and connected |
/join <room> |
Join a room (created if nobody is in it) |
/name <username> |
Change your display name |
/me <action> |
Send an action message: /me waves → * sam waves |
/connect <ip[:port]> |
Connect straight to a peer when discovery is blocked |
/status |
Discovery state, ports, peers |
/quit |
Exit |
How it works
- Every instance sends a small UDP beacon (multicast + subnet broadcast) announcing its username, room and TCP port.
- Beacons are how instances find each other; then they open direct TCP connections and exchange newline-delimited JSON messages.
- Rooms are derived, not stored: a room exists while somebody is in it.
- There is no server of any kind. If the LAN works, zapchat works.
Works with the npm version of zapchat on the same network (same beacons, same
message protocol). Actions (/me) use the same CTCP-style framing as the npm
client, so an npm user sees * sam waves exactly like a Python user does.
Privacy
- No accounts, no telemetry, no cloud: the only network traffic is UDP beacons and TCP messages on your local network.
- Config is one small JSON file (your username, a random client id, the last room). Chat history stays in memory.
- Messages are plain text on your LAN — anyone who can capture that traffic can read it. For sensitive conversations use an encrypted messenger.
Requirements
- Python 3.9+ (standard library only — zero dependencies)
- Python 3.9+ on any OS: Windows, macOS, Linux
License
MIT © Samarth Chugh (Sam3360)
Metadata
Release files for zapchat 4.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| zapchat-4.0.0.tar.gz | 21.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| zapchat-4.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 39.7 kB
Release files / zapchat-4.0.0.tar.gz
| Download URL | zapchat-4.0.0.tar.gz |
|---|---|
| Size | 21.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fefee1356d1e788a0ce319f33cfb30c1ad28467e788e48ea35fbbd5995410a46
|
|
BLAKE2b-256 checksum How to use checksums |
53121851016c5474503d96e98af263f371b23d23882d056dc8176f923aa5676c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.2
|
Release files / zapchat-4.0.0-py3-none-any.whl
| Download URL | zapchat-4.0.0-py3-none-any.whl |
|---|---|
| Size | 18.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
17c18b71441788f5a595c54ac13daa092be5ec81a802fbafbadb06bb7c5ee782
|
|
BLAKE2b-256 checksum How to use checksums |
fba1416e3cee2cdb6794f2ff4389c4b22cbd7fce621028dbc8e88c0e44c1245a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.2
|