Skip to content

razchiriac/tunnel-chat

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

126 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿš‡ Tunnel Chat

Ephemeral peer-to-peer tunnel chat from the terminal

Create secure, temporary chat rooms that connect peers directly through WebRTC tunnels. Perfect for quick collaboration, file sharing, or secure communication without leaving your terminal.

โœจ Features

  • ๐Ÿ”’ End-to-end encrypted peer-to-peer communication
  • ๐Ÿš€ Zero configuration - works out of the box
  • ๐Ÿ“ฑ Cross-platform - works on macOS, Linux, and Windows
  • ๐ŸŒ NAT traversal - connects through firewalls and routers
  • ๐Ÿ’ฌ Real-time chat with typing indicators
  • ๐Ÿ“ File sharing capabilities
  • ๐ŸŽฏ Ephemeral rooms - automatically cleaned up
  • ๐Ÿ”‘ Pro features with TURN servers for reliable connections

๐Ÿš€ Quick Start

Basic Usage (Free)

# Start a chat room
npx tunnel-chat@latest

# Join an existing room
npx tunnel-chat@latest join <room-name>

Pro Usage (Paid)

Get your API key and unlock premium features:

# Get your Pro API key
npx tunnel-chat@latest auth [email protected]

# Set your API key
export TUNNEL_API_KEY="sk_..."

# Now enjoy Pro features with reliable TURN servers
npx tunnel-chat@latest

๐Ÿ“ฆ Installation

Global Installation

npm install -g tunnel-chat
# or
pnpm add -g tunnel-chat

One-time Usage

npx tunnel-chat@latest

๐ŸŽฎ Commands

Command Description
tunnel-chat Create or join a chat room
tunnel-chat join <name> Join a specific room
tunnel-chat auth <email> Get your Pro API key
tunnel-chat upgrade Upgrade to Pro plan

In-Chat Commands

Command Description
/help Show available commands
/quit or /exit Leave the chat
/upload <file> Share a file (Pro only)
/fpkey Show DTLS fingerprints for verification

๐Ÿ”ง Configuration

Environment Variables

Variable Description Required
TUNNEL_API_KEY Your Pro API key for premium features No
TUNNEL_SIGNAL Custom signaling server URL No
BILLING_SERVER Custom billing server URL No

Example Configuration

# Set your Pro API key
export TUNNEL_API_KEY="sk_ditch_abc123..."

# Optional: Use custom signaling server
export TUNNEL_SIGNAL="wss://your-server.com"

๐Ÿ’Ž Pro Features

Upgrade to Pro for enhanced reliability and features:

  • ๐ŸŒ TURN servers for guaranteed connectivity through corporate firewalls
  • ๐Ÿ“ File uploads to cloud storage
  • ๐Ÿ”„ Multi-peer rooms (coming soon)
  • ๐Ÿ›ก๏ธ Priority support

Upgrade to Pro โ†’

๐Ÿ—๏ธ Self-Hosting

Want to run your own instance? Here's how:

Server Requirements

  • Node.js 20+
  • Stripe account (for billing)
  • Resend account (for emails)
  • Optional: TURN server for NAT traversal

Environment Variables

# Required for billing
STRIPE_SECRET_KEY=sk_live_...
STRIPE_PRICE_ID=price_...
STRIPE_WEBHOOK_SECRET=whsec_...

# Required for email auth
RESEND_API_KEY=re_...
[email protected]
PUBLIC_BASE_URL=https://yourdomain.com

# Optional TURN server
TURN_SECRET=your-coturn-secret
TURN_REALM=yourdomain.com

# Server config
PORT=8787
KEYS_PATH=./server/keys.json

Deploy with Docker

# Build the image
docker build -t tunnel-chat .

# Run with environment variables
docker run -p 8787:8787 \
  -e STRIPE_SECRET_KEY=sk_live_... \
  -e RESEND_API_KEY=re_... \
  tunnel-chat

Deploy to Fly.io

# Install Fly CLI
curl -L https://fly.io/install.sh | sh

# Deploy
fly deploy

๐Ÿ”’ Security

  • End-to-end encryption: All messages are encrypted using WebRTC's built-in DTLS
  • Ephemeral: Rooms are automatically deleted after inactivity
  • No data retention: Messages are never stored on servers
  • Peer verification: Use /fpkey to verify connection fingerprints
  • Open source: Full transparency - audit the code yourself

๐Ÿ› ๏ธ Development

Setup

# Clone the repository
git clone https://github.com/razchiriac/tunnel-chat.git
cd tunnel-chat

# Install dependencies
pnpm install

# Build the project
pnpm run build

Scripts

pnpm run dev          # Development CLI
pnpm run server       # Run signaling server only
pnpm run combined     # Run combined billing + signaling server
pnpm run build        # Build TypeScript to JavaScript

Architecture

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚   Client A  โ”‚    โ”‚  Signaling  โ”‚    โ”‚   Client B  โ”‚
โ”‚             โ”‚โ—„โ”€โ”€โ–บโ”‚   Server    โ”‚โ—„โ”€โ”€โ–บโ”‚             โ”‚
โ”‚             โ”‚    โ”‚             โ”‚    โ”‚             โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
       โ”‚                                      โ”‚
       โ”‚            Direct P2P Connection     โ”‚
       โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
  • Signaling Server: Facilitates WebRTC handshake
  • TURN Servers: Help with NAT traversal (Pro only)
  • Billing Server: Handles Stripe subscriptions and API keys
  • P2P Connection: Direct encrypted communication between peers

๐Ÿค Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Guidelines

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

๐Ÿ“„ License

MIT License - see LICENSE file for details.

๐Ÿ†˜ Support

๐Ÿ™ Acknowledgments


Made with โค๏ธ by the Tunnel Chat team

Website โ€ข GitHub

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors