
Show HN: Witchat – Windows/Linux client for the bitchat Bluetooth mesh
an unofficial bitchat app for windows and linux
以下正文同步自 Hacker News 最新,版权归原站所有,已转换为易读排版。
an unofficial bitchat app for windows and linux
People nearby talk on bitchat over Bluetooth. There is no account and no phone number, and nobody has to run a server for the chat to work. A message can hop through other phones, so two people who are too far apart for a direct link can still share one conversation when something in the middle passes it on. The official apps run on iPhone, Mac, and Android. Witchat 🧙♀️ is how a Windows or Linux computer joins them.
Chat from the computer. This is the client: you, at the keyboard. Phones running bitchat show up next to you. You type in the shared nearby chat, message someone privately, and send a photo, a voice note, or a file. If you both mark each other as a favorite, those private messages still arrive after you leave Bluetooth range, encrypted the same way the phones already do it.
Leave the computer on for everyone else. This is the node: the computer itself, left on in the room. Bluetooth only reaches a short way. A computer left running in between — a desk, a counter, a box you do not turn off — can pass messages along for phones that cannot hear each other. Close the window and it keeps doing that from the tray. A no-window mode is there for a computer nobody sits at. An iPhone and an iPad, out of range of each other, have reached each other this way through a Windows PC in one lab. Honest limits says what is not shown yet.
If the computers already sitting there did the quiet version of this. Most Windows and Linux machines have Bluetooth and an internet connection, and they already sit plugged in at homes, offices, shops, and schools. Today a nearby chat only stretches as far as the phones people happen to have open. Headless in the background is the minimum: each computer passes nearby messages along even when the person there never joins the chat. Sitting in the tray is the fuller case: that person can talk too, and the computer keeps passing nearby messages after the window is closed.
Bluetooth is one path. One short step at a time, the nearby chat could then cross a building, a block, or a campus by walking from computer to computer. Two cities stay two nearby chats. Bluetooth has no path between them.
The internet connection is the other path, and each conversation picks one. When two people have both marked each other as favorites, their private messages go through Nostr relays once Bluetooth cannot reach, so that conversation can cross cities. Location channels are rooms on those relays from the start. A line in the nearby chat stays on Bluetooth. Lending the computer's internet connection to the phones around it, so their rooms travel out through the machine, comes after this release.
📡 Real mesh peer: Bluetooth LE central, plus the peripheral role (Windows, and Linux through BlueZ) when the adapter supports it. Public #mesh, relaying, fragments, gossip sync.
🔒 Private messages: Noise XX end to end, delivered and read receipts. Undelivered messages wait in an encrypted outbox for up to 24 h and are resent when the person is back; meanwhile nearby trusted peers can carry a sealed copy to them, and witchat carries theirs.
⭐ Favorites over the internet: mutual favorites keep chatting over Nostr, gift-wrapped like iOS.
📍 Location channels: block-to-region geohash channels, people lists, teleport, and private messages to people there.
📎 Files and voice: photos, voice notes and PDFs, encrypted in private chats. Nothing auto-plays.
🧅 Opt-in Tor for every relay connection, fail-closed.
🖥️ Desktop comforts: keeps running in the tray, notifications that never show message text, slash commands with completion.
🛡️ Safety: QR and fingerprint verification, /block, triple-click panic wipe.
📦 Unzip and run: no setup program. Your identity stays in your user account, so replacing the folder keeps your keys.
🔐 Trustworthy builds: SHA-256, a provenance JSON and third-party notices beside the program. MIT licensed.
⚠️ First start on Windows: the browser and SmartScreen say the publisher is unknown. That is expected for this unsigned build. Check the hash, then continue. Do not turn Defender off.
📥 Download
Get witchat-<version>-windows-x86_64.zip or witchat-<version>-linux-x86_64.tar.gz from Releases. Unzip the folder and run the program inside it. This release has no setup program: nothing is written to Program Files, and there is no uninstall entry. Put the folder in Downloads, on the desktop, or on a USB stick. Delete the folder when you want the program gone.
Your keys, favorites, and settings stay with your user account, so a newer zip does not reset them and a copy of the folder does not carry them to another computer. On Windows that is %APPDATA%\witchat. On Linux it is ~/.local/share/witchat. Logs sit beside that data. Panic wipe clears it. Start at login is off until you turn it on; that setting is what adds a startup entry. More on the keys: Honest limits.
The Windows exe is unsigned. Each archive carries a .sha256, a provenance .json (git commit, compiler, build time) and THIRD-PARTY-NOTICES.txt. What changed and what is known not to work yet: CHANGELOG.md.
Windows will warn you before witchat opens. This build has no publisher signature, so the browser, SmartScreen, and sometimes Defender all say the file is unknown. Those warnings are expected. They are not a report that this file is a known virus. Do not turn Defender off, and do not turn off ransomware protection.
Trust the file when its hash matches this Release, and only then. A match means you have the file the project published. It does not mean Microsoft has reviewed witchat. If the hash differs, delete the download and get it again from the Release page. Do not run a copy that arrived by mail or from another site. Copying the folder to a USB stick can hide the SmartScreen window and still proves nothing; check the hash anyway.
Open official bitchat on a phone near the PC, Bluetooth on. Keep it open on the screen until the PC finds it: a PC cannot discover an iPhone while bitchat is in the background.
Start witchat with Bluetooth on. The phone shows up in the sidebar within seconds; type in #mesh.
Click a person to message them privately. Star them, and have them star you, to keep chatting over Nostr when you are apart.
Bluetooth off (HRESULT 0x800710DF) and other radio trouble: docs/WINDOWS.md or docs/LINUX.md. Logs rotate under %LOCALAPPDATA%\witchat\witchat\data\logs (Windows) or ~/.local/share/witchat/logs (Linux). Filing a bug? Attach the report from witchat/ → debug → copy diagnostics report (or witchat --diag); it leaves out messages, keys and names.
Official bitchat is iOS, macOS, and Android. A PC still cannot join that mesh without a reimplemented protocol stack.
Other desktop work: BitChat Desktop is a restyled official Mac app; its Windows/Linux builds are Bluetooth scan-only. bitchat-tui is a terminal client. zakkeasterbrook/bitchat-windows is a 90-line UDP console.
Witchat is a working Windows/Linux messenger: iced desktop GUI, a folder you unzip and run, and an auditable Rust protocol crate. It follows the official apps rather than leading them: no wire changes of its own, and privacy changes only once both official platforms ship them.
📡 Mesh: packets, relaying, sync, diagnostics
Binary packet encode/decode (v1/v2), padding, zlib/deflate, announce TLVs, public messages.
BLE central: scan the official service UUID, connect, exchange frames. When the adapter supports the peripheral role, witchat also advertises the bitchat service so phones can connect in (WinRT on Windows, BlueZ on Linux).
Public chat, TTL relay, fragment split/reassembly sized to each link's MTU, packet dedup, and iOS-compatible gossip sync (Golomb-coded set filters) so neighbors fill each other's #mesh and peer list without resending what the other already has.
Reconnects: witchat announces as soon as a link comes up, so a phone walking back into range sees it within seconds.
/ping nick measures the round trip to a mesh peer (pong from bob: 42 ms · 3 hops). /trace nick estimates the path from the neighbor lists phones put in their announces (estimated path: you → amy → bob (2 hops)). Both work as on iOS.
witchat/ → debug, after Android's debug sheet: a live mesh map, Bluetooth links with RSSI and traffic (disconnect any), nearby devices (skip a reconnect backoff), peers with session state and capabilities, packet counters with drop reasons, gossip sync, Nostr relay health, and a verbose-logging switch.
🔒 Private messages: Noise, receipts, outbox, favorites, verification
Noise XX: pick a person and type. Witchat handshakes automatically, queues the message until the session is secured, resends until the phone acknowledges it, and shows delivered (✓) and read (✓✓) receipts. Transport uses the official explicit-nonce framing. Messages over the official 255-byte limit go out as several, split on word boundaries.
Outbox: a message that is not acknowledged is kept for up to 24 h (100 per person, 8 delivery rounds, as iOS) and sent again, under the same id, whenever that person's phone is back in range. The line says "queued" until then, or "with couriers" once a nearby peer is carrying a sealed copy. The outbox survives restarts, sealed with DPAPI (Windows) or a Secret Service key (Linux); with no keyring it lasts until you quit. A message sent to an out-of-range favorite over Nostr is kept the same way until they acknowledge it. Receivers drop duplicates by message id, and witchat remembers received ids for 25 h so a resend after a restart is not shown twice.
Couriers, as on iOS: while a mesh message waits, or after every Nostr relay has refused one, witchat seals a copy to the person's key (a one-time prekey from their published bundle when it has one, so a later key leak cannot open it) and hands it to up to three nearby mutual favorites or verified peers, who deliver it if they meet that person first. A relay that already accepted the message does not get a courier copy. Witchat carries mail the same way for others (opaque, 24 h, at most 40 envelopes) and opens mail carried to you. Couriers never see who wrote it or what it says. Details and limits: SECURITY.md.
Favorites and verification: star someone (sends the official [FAVORITED] notice; a moon means they favorited you first), compare fingerprints, mark them verified. After each handshake both sides exchange signed-key state, and witchat warns if it contradicts the announce.
QR verification, compatible with iOS: settings shows a signed "scan to verify me" code that renews every 4 minutes. To verify a phone, hold its QR up to the webcam, open a screenshot of it, or paste the bitchat://verify?… link. Witchat marks it verified only when the phone proves it holds the key in the code. witchat.exe --qr-lab runs the swapped-key experiment.
Over Nostr: mutual favorites exchange their npub. When that person is out of Bluetooth range, witchat sends an iOS-compatible gift wrap (kinds 1059/13/14, XChaCha20-Poly1305) through the iOS relays, with receipts. Offline favorites stay in the sidebar.
Private message history is never written to disk (only the encrypted outbox of unsent messages is).
📍 Location channels: geohash cells, people, location DMs
#location channels… opens the iOS-style list: after you click get location and my geohashes once, it shows your block, neighborhood, city, province and region cells with [N people]. The position (Windows location, or GeoClue on Linux) is used only as geohashes, kept in memory, never stored; once you have allowed it, witchat takes a fresh fix at each launch so phones keep counting you. remove location access turns it off.
With a channel open, HERE IN #cell lists who was heard in the last 5 minutes. Click a name to message them privately; the message is gift-wrapped between your key for that cell and theirs, so it is not linked to your mesh identity. A phone round trip for these messages is not in the lab log yet.
quick join sugg
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。