A dart implementation of a full node that can run on any device with any architecture. https://torchat.org
Find a file
2025-06-24 02:08:00 +07:00
bin general idea and structure together 2025-06-24 00:53:53 +07:00
lib general idea and structure together 2025-06-24 00:53:53 +07:00
protospec general idea and structure together 2025-06-24 00:53:53 +07:00
test general idea and structure together 2025-06-24 00:53:53 +07:00
.gitignore Initial commit 2025-06-23 15:43:04 +00:00
analysis_options.yaml general idea and structure together 2025-06-24 00:53:53 +07:00
CHANGELOG.md general idea and structure together 2025-06-24 02:08:00 +07:00
LICENSE Initial commit 2025-06-23 15:43:04 +00:00
pubspec.yaml general idea and structure together 2025-06-24 00:53:53 +07:00
README.md general idea and structure together 2025-06-24 02:08:00 +07:00

TorChat Dart SDK (Full 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, and most importantly, run a full node on your phone, without too much strain.

TL;DR
dart pub global activate torchat
torchat 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 (TorChatClient, TorChatRelay, 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 torchat: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

# 1. Install Dart ≥ 3.4
# 2. Install TorChat globally
dart pub global activate torchat
# 3. Run a node
torchat run

First launch will:

  1. Generate an Ed25519 keypair.
  2. Start Arti & publish xxxxxx.onion.
  3. Sync seed-peers and begin relaying.

🔧 Configuration

torchat.yaml (auto-created in $HOME/.torchat/):

listen_port: 20900
data_dir: ~/.torchat/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 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

grpcurl -plaintext -protoset out/descriptor.pb \
  -d '{"value":"<your pubkey hex>"}' \
  127.0.0.1:20900 torchat.Relay/GetEnvelopes

🛠️ Dart SDK snippet

import 'package:torchat/torchat.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/dart-torchat
  2. dart pub get
  3. dart test
  4. PRs welcome — keep commits sign-off (-s) for DCO.

🛡 License

Apache-2.0