dart-torchat/README.md
2025-06-23 22:51:10 +07:00

149 lines
No EOL
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# TorChat Dart Node
<p align="center">
<a href="https://haveno.com"><img src="https://foss.haveno.com/tor-project/torchat/raw/branch/main/assets/images/torchat-compressed-rounded.png" width=275 /></a>
</p>
----
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:tor` launches 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
```bash
# 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:
1. Generate an Ed25519 keypair.
2. Start Arti & publish `xxxxxx.onion`.
3. Sync seed-peers and begin relaying.
---
## 🔧 Configuration
`whisper_node.yaml` (auto-created in `$HOME/.whisper_node/`):
```yaml
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 [`/proto`](proto/) and are versioned in this repo.
- `make protodocs` autogenerates HTML docs for every RPC & message.
- Language stubs: `dart run build_runner` (Dart) or `buf generate` (all major languages).
### Quick test with `grpcurl`
```bash
grpcurl -plaintext -protoset out/descriptor.pb \
-d '{"value":"<your pubkey hex>"}' \
127.0.0.1:20900 torchat.Relay/GetEnvelopes
```
---
## 🛠️ Dart SDK snippet
```dart
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
1. `git clone https://foss.haveno.com/haveno-network/whisper_node_dart`
2. `dart pub get`
3. `dart test`
4. 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 cant stop the whisper.”_
---