torchat 0.1.0
torchat: ^0.1.0 copied to clipboard
A gRPC-based anonymous chat node (client / server) built with Dart and Tor/Arti
TorChat Dart Node #
A full, cross-platform Tor/Arti-powered TorChat written 100 % in Dart.
Spin it up on Windows, macOS, Linux—even mobile or Raspberry Pi—no C tool-chain, no hassle.
TL;DR
dart pub global activate whisper_node
whisper_node run
Voilà: a fully-functional relay + client with gRPC endpoints and a sweet high-level SDK.
🌐 What Is It? #
TorChat-Dart is the reference implementation of the TorChat protocol in pure Dart.
It exposes:
| Layer | Purpose |
|---|---|
| gRPC API | Full power, language-agnostic. Auto-generated protobuf docs & stubs. |
| Dart SDK | High-level classes (WhisperClient, WhisperRelay, GroupChat, …). |
| Tor/Arti wrapper | Boots a hidden service automatically; no Tor install required. |
Perfect for bots, CLIs, desktop apps, or embedding in Flutter.
🚀 Features #
- Multi-platform – runs anywhere Dart VM runs ✔
- Automatic Tor/Arti –
dart run whisper_node:torlaunches a hidden service for you ✔ - gRPC over onion – multiplexed, binary, schema-safe ✔
- Envelope store-and-forward – offline delivery with spam-PoW ✔
- Group chat – federated membership & signed admin events ✔
- Identity graph – user profiles + attestations ✔
- Pluggable back-end – swap LMDB ⇄ Hive ⇄ SQLite with one flag ✔
📦 Installation #
# 1. Install Dart ≥ 3.4
# 2. Install TorChat globally
dart pub global activate whisper_node
# 3. Run a node
whisper_node run
First launch will:
- Generate an Ed25519 keypair.
- Start Arti & publish
xxxxxx.onion. - Sync seed-peers and begin relaying.
🔧 Configuration #
whisper_node.yaml (auto-created in $HOME/.whisper_node/):
listen_port: 20900
data_dir: ~/.whisper_node/data
tor:
enabled: true
socks_port: 9050 # 0 = random
storage:
backend: hive # hive | sqlite | lmdb
pow:
difficulty: 20 # leading zero bits
Change, save, restart — settings hot-reload.
📚 gRPC & Protobuf Docs #
- Protos live in
/protoand are versioned in this repo. make protodocsautogenerates HTML docs for every RPC & message.- Language stubs:
dart run build_runner(Dart) orbuf generate(all major languages).
Quick test with grpcurl #
grpcurl -plaintext -protoset out/descriptor.pb \
-d '{"value":"<your pubkey hex>"}' \
127.0.0.1:20900 torchat.Relay/GetEnvelopes
🛠️ Dart SDK snippet #
import 'package:whisper_node/whisper.dart';
void main() async {
final node = await TorChat.bootstrap(); // starts Tor + gRPC
final client = node.client;
await client.sendMessage(
recipientPk: '<hex>',
text: 'Hello, dark net!',
);
client.onMessage.listen((msg) {
print('${msg.senderShort}: ${msg.text}');
});
}
🗺 Roadmap #
| Phase | Goal | ETA |
|---|---|---|
| v0.1 | MVP relay + direct messages | ✅ now |
| v0.2 | Group chats + signed admin events | Jun 2025 |
| v0.3 | Mobile Flutter wrapper | Q3 2025 |
| v1.0 | Plugin marketplace, file transfer, sticker packs | Q1 2026 |
🤝 Contributing #
git clone https://foss.haveno.com/haveno-network/whisper_node_dartdart pub getdart test- PRs welcome — keep commits sign-off (
-s) for DCO.
🛡 License #
AGPL-3.0-or-later — code wants to stay free.
“They can block the site, they can censor the net — but they can’t stop the whisper.”
