All Commands
Complete list of available commands and flags.
Tunnel Commands
drip http
Expose a local HTTP server:
drip http <port> [flags]| Flag | Short | Description | Default |
|---|---|---|---|
--subdomain | -n | Custom subdomain | (auto-generated) |
--address | -a | Local address to forward to | 127.0.0.1 |
--transport | Transport protocol (auto/tcp/wss) | auto | |
--daemon | -d | Run in background | false |
--server | -s | Server address | (from config) |
--token | -t | Authentication token | (from config) |
--auth | HTTP Basic Auth passwords (comma-separated) | (none) | |
--allow-ip | Allow only these IPs/CIDRs | (none) | |
--deny-ip | Block these IPs/CIDRs | (none) | |
--verbose | -v | Verbose output | false |
--insecure | -k | Skip TLS verification | false |
Examples:
# Basic HTTP tunnel
drip http 3000
# Custom subdomain
drip http 3000 -n myapp
# Forward to LAN device
drip http 8080 -a 192.168.1.100
# Run in background
drip http 3000 -d
# With HTTP Basic Auth
drip http 3000 --auth secret123
# With IP restriction
drip http 3000 --allow-ip 192.168.0.0/16
# Use WebSocket transport (CDN-friendly)
drip http 3000 --transport wssdrip https
Expose a local HTTPS server (same flags as drip http):
drip https <port> [flags]Use this when your local server already has TLS configured.
drip tcp
Expose a TCP service (same flags as drip http, except --auth):
drip tcp <port> [flags]Examples:
# PostgreSQL
drip tcp 5432
# MySQL
drip tcp 3306
# SSH
drip tcp 22
# Redis with IP restriction
drip tcp 6379 --allow-ip 10.0.0.0/8Predefined Tunnels
drip start
Start predefined tunnels from config file:
drip start [tunnel-names...] [flags]| Flag | Short | Description |
|---|---|---|
--all | -a | Start all configured tunnels |
Examples:
# List available tunnels
drip start
# Start a specific tunnel
drip start web
# Start multiple tunnels
drip start web api db
# Start all configured tunnels
drip start --allConfiguration example (~/.drip/config.yaml):
tunnels:
- name: web
type: http
port: 3000
subdomain: myapp
- name: api
type: http
port: 8080
subdomain: api
transport: wss
- name: db
type: tcp
port: 5432
allow_ips:
- 192.168.0.0/16Daemon Management
drip list
List all running background tunnels:
drip list [flags]| Flag | Short | Description |
|---|---|---|
--interactive | -i | Interactive selection mode |
Aliases: drip ls, drip ps, drip status
Output shows:
- Tunnel type (HTTP/HTTPS/TCP)
- Local port
- Public URL
- Process ID (PID)
- Uptime
drip attach
Attach to a running tunnel's logs:
drip attach [type] [port]Examples:
# Attach to specific tunnel
drip attach http 3000
drip attach tcp 5432
# Interactive selection (if no args)
drip attachPress Ctrl+C to detach (tunnel keeps running).
Aliases: drip logs, drip tail
drip stop
Stop running tunnels:
drip stop <type> <port>
drip stop allExamples:
# Stop specific tunnel
drip stop http 3000
# Stop all running tunnels
drip stop allAlias: drip kill
Configuration
drip config init
Interactive configuration setup:
drip config initPrompts for:
- Server address (e.g.,
tunnel.example.com:443) - Authentication token
drip config show
Display current configuration:
drip config show [flags]| Flag | Description |
|---|---|
--full | Show full token (not masked) |
drip config set
Set configuration values:
drip config set [flags]| Flag | Description |
|---|---|
--server | Server address |
--token | Authentication token |
Examples:
drip config set --server tunnel.example.com:443
drip config set --token YOUR_SECRET_TOKENdrip config reset
Delete configuration file:
drip config reset [flags]| Flag | Description |
|---|---|
--force | Skip confirmation |
drip config validate
Validate configuration:
drip config validateChecks:
- Server address format (host:port)
- Token presence
- TLS settings
Server Commands
drip server
Start the Drip server:
drip server [flags]| Flag | Short | Description | Default |
|---|---|---|---|
--port | -p | Server listening port | 8443 |
--public-port | Port shown in URLs | same as --port | |
--domain | -d | Server domain | tunnel.localhost |
--token | -t | Authentication token | (required) |
--tls-cert | TLS certificate path | (required if TLS enabled) | |
--tls-key | TLS private key path | (required if TLS enabled) | |
--tls-enabled | Enable TLS | true | |
--tcp-port-min | Min TCP tunnel port | 20000 | |
--tcp-port-max | Max TCP tunnel port | 20100 | |
--metrics-token | Token for /metrics endpoint | (optional) | |
--debug | Enable debug logging | false | |
--pprof | Enable pprof on port | (disabled) | |
--config | -c | Config file path | /etc/drip/config.yaml |
Examples:
# Direct TLS mode
drip server \
--port 443 \
--domain tunnel.example.com \
--tls-cert /path/to/cert.pem \
--tls-key /path/to/key.pem \
--token YOUR_SECRET_TOKEN
# Behind reverse proxy (no TLS)
drip server \
--port 8443 \
--domain tunnel.example.com \
--tls-enabled=false \
--public-port 443 \
--token YOUR_SECRET_TOKEN
# Using config file
drip server --config /etc/drip/config.yamldrip server config
Display server configuration:
drip server config [flags]| Flag | Description |
|---|---|
--full | Show full tokens (not masked) |
Other Commands
drip version
Print version information:
drip version [flags]| Flag | Description |
|---|---|
--short | Print version without styling |
Global Flags
These flags work with all tunnel commands:
| Flag | Short | Description |
|---|---|---|
--server | -s | Server address |
--token | -t | Authentication token |
--verbose | -v | Verbose output |
--insecure | -k | Skip TLS verification |
Environment Variables
Configuration can also be set via environment variables:
| Variable | Description |
|---|---|
DRIP_SERVER | Server address |
DRIP_TOKEN | Authentication token |
DRIP_TLS | Enable TLS (true/false) |
Priority: Command flags > Environment variables > Config file
Exit Codes
| Code | Meaning |
|---|---|
| 0 | Success |
| 1 | General error |
| 2 | Configuration error |
| 3 | Connection error |
| 4 | Authentication error |
Reconnection Behavior
The client automatically reconnects on connection loss:
- Max attempts: 5 retries
- Retry interval: 3 seconds between attempts
- Non-retryable errors: Authentication failures, subdomain conflicts
Errors that stop reconnection:
- "subdomain is already taken"
- "subdomain is reserved"
- "invalid subdomain"
- "Invalid authentication token"