P2P Commands
Share files directly between peers without uploading to a central server. Uses QUIC transport for fast, secure, multiplexed connections.
Zero-Config Local Sharing
Use
--local flag for same-network sharing. No internet required - mDNS automatically discovers peers on your WiFi or LAN.| Command | Description | Usage |
|---|---|---|
| share | Share a directory via P2P (host) | dits p2p share [OPTIONS] <PATH> |
| connect | Connect to a P2P share (client) | dits p2p connect [OPTIONS] <TARGET> |
| send | Send a file to a peer | dits p2p send <FILE> <TARGET> |
| receive | Receive a file from a peer | dits p2p receive [OPTIONS] |
| status | Show P2P status and discovery methods | dits p2p status |
| ping | Test connectivity to a peer | dits p2p ping <TARGET> |
Discovery Methods
DITS supports multiple peer discovery methods, tried in priority order. By default, all available methods are used with automatic fallback.
| Method | Flag | Priority | Use Case |
|---|---|---|---|
| Direct IP | --direct | 0 | Known addresses, no discovery |
| mDNS | --local | 10 | Same WiFi/LAN, no internet |
| STUN | --stun | 20 | NAT traversal, hole-punching |
| Signal Server | --signal <URL> | 30 | Internet sharing, NAT traversal |
| Relay | --relay | 40 | 100% NAT traversal, no port forwarding |
dits p2p share
Share a directory via P2P. Creates a QUIC server and registers with discovery services so other peers can find and connect to you.
Synopsis
dits p2p share [OPTIONS] <PATH>Arguments
PATH- Directory to share
Options
-p, --port <PORT> Port to listen on (default: 4433)
-n, --name <NAME> Name for this share
--signal <URL> Signal server URL
--code <CODE> Use specific join code
--local Use only mDNS (local network, no internet)
--direct Use only direct IP mode (no discovery)
--stun Use STUN for external IP discovery
--relay Force relay mode (guaranteed NAT traversal)Examples
# Share on local network (easiest, no internet)
$ dits p2p share ./my-project --local
DITS P2P - Sharing Active
============================================================
Mode: local network (mDNS)
Or use code: ABC-123
Connect with: dits p2p connect ABC-123 --local
============================================================
# Share over internet (default)
$ dits p2p share ./my-project
DITS P2P - Sharing Active
============================================================
Mode: auto (mDNS + signal + relay)
Or use code: XYZ-789
Connect with: dits p2p connect XYZ-789
============================================================
# Share via relay (no port forwarding needed!)
$ dits p2p share ./my-project --relay
DITS P2P - Sharing Active
============================================================
Mode: relay (no port forwarding needed)
Or use code: XYZ-789
Connect with: dits p2p connect XYZ-789 --relay
============================================================
# Share with direct IP only
$ dits p2p share ./my-project --direct
DITS P2P - Sharing Active
============================================================
Mode: direct IP only
Connect with: dits p2p connect 0.0.0.0:4433
============================================================
# Share with custom signal server
$ dits p2p share ./my-project --signal ws://localhost:8080dits p2p connect
Connect to a P2P share. Uses the discovery chain to find the peer by join code, URL, or direct IP address.
Synopsis
dits p2p connect [OPTIONS] <TARGET>Arguments
TARGET- Join code (ABC-123), URL (https://dits.byronwade.com/j/ABC-123), or direct IP:port
Options
-o, --output <PATH> Output directory
--signal <URL> Signal server URL
--local Use only mDNS (local network)
--direct Use only direct IP mode
--relay Force relay mode (guaranteed NAT traversal)Examples
# Connect on local network
$ dits p2p connect ABC-123 --local
DITS P2P - Connecting
============================================================
Target: ABC-123
Mode: local network (mDNS)
Discovering peer...
Found: 192.168.1.50:4433 [mDNS] (local)
Connected: 192.168.1.50:4433
============================================================
# Connect via relay (no port forwarding needed!)
$ dits p2p connect XYZ-789 --relay
DITS P2P - Connecting
============================================================
Target: XYZ-789
Mode: relay (no port forwarding needed)
Using relay server for NAT traversal
Found: relay.dits.byronwade.com [relay] (remote)
Connected: via relay
============================================================
# Connect using auto-discovery
$ dits p2p connect XYZ-789
Found: 203.0.113.50:4433 [signal] (remote)
# Connect via direct IP
$ dits p2p connect 192.168.1.100:4433
Found: 192.168.1.100:4433 [direct] (local)
# Connect using share link
$ dits p2p connect https://dits.byronwade.com/j/ABC-123dits p2p send / receive
Send and receive individual files between peers.
Send a File
dits p2p send <FILE> <TARGET>
# Example
$ dits p2p send video.mp4 ABC-123
DITS P2P - Sending File
============================================================
File: video.mp4
Size: 1,234,567 bytes
Chunks: 10
============================================================Receive a File
dits p2p receive [OPTIONS]
Options:
-o, --output <PATH> Output path
-p, --port <PORT> Port to listen on
--code <CODE> Use specific join code
# Example
$ dits p2p receive --output ./downloads
DITS P2P - Ready to Receive
============================================================
Share code: DEF-456
Sender should run: dits p2p send <file> DEF-456
============================================================dits p2p status
Show P2P status including available discovery methods.
$ dits p2p status
DITS P2P Status
============================================================
Protocol Version: 1
Default Port: 4433
Signal Server: wss://dits-signal.fly.dev
Discovery Methods:
- direct
- mDNS
- STUN
- signal server
Active Shares: 0
Active Connects: 0
============================================================Choosing the Right Method
| Scenario | Recommended | Command |
|---|---|---|
| Same WiFi/LAN | --local | dits p2p share --local |
| Remote collaborator | Default (auto) | dits p2p share |
| Known IP address | Direct connection | dits p2p connect IP:port |
| Self-hosted setup | --signal | dits p2p share --signal ws://... |
| Maximum privacy | --local | No external servers used |
Run Your Own Signal Server
DITS includes a simple signal server. Run
cargo run -p dits-signalto start it locally, then use --signal ws://localhost:8080.Troubleshooting
Peer not found with --local
- Ensure both peers are on the same network
- Check if mDNS is blocked (corporate networks)
- Verify firewall allows UDP multicast (port 5353)
- Try the signal server method instead
Connection timeout
- Check firewall allows UDP port 4433
- Try direct IP if you know it
- Verify signal server is reachable
Debug Mode
# Show discovery process
$ dits -v p2p connect ABC-123
# Show detailed debug info
$ dits -vv p2p connect ABC-123Related Commands
- Remote Commands - Push, pull, and sync with servers
- Repository Commands - Initialize and clone repositories
Related Topics
- Peer-to-Peer Concepts - Understanding P2P architecture
- Configuration - Configure P2P settings