Skip to main content
Documentation

P2P Commands

Share files directly between peers without uploading to a central server. Uses QUIC transport for fast, secure, multiplexed connections.

CommandDescriptionUsage
shareShare a directory via P2P (host)dits p2p share [OPTIONS] <PATH>
connectConnect to a P2P share (client)dits p2p connect [OPTIONS] <TARGET>
sendSend a file to a peerdits p2p send <FILE> <TARGET>
receiveReceive a file from a peerdits p2p receive [OPTIONS]
statusShow P2P status and discovery methodsdits p2p status
pingTest connectivity to a peerdits 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.

MethodFlagPriorityUse Case
Direct IP--direct0Known addresses, no discovery
mDNS--local10Same WiFi/LAN, no internet
STUN--stun20NAT traversal, hole-punching
Signal Server--signal <URL>30Internet sharing, NAT traversal
Relay--relay40100% 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] &lt;PATH&gt;

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:8080

dits 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] &lt;TARGET&gt;

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-123

dits 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

ScenarioRecommendedCommand
Same WiFi/LAN--localdits p2p share --local
Remote collaboratorDefault (auto)dits p2p share
Known IP addressDirect connectiondits p2p connect IP:port
Self-hosted setup--signaldits p2p share --signal ws://...
Maximum privacy--localNo external servers used

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-123

Related Commands

Related Topics