Early-stage software. Shurli is experimental and built with AI assistance. It will have bugs. Not recommended for production or safety-critical use. Read the disclaimer.
Open source · Self-sovereign
Can't reach your home server from outside? Neither could we.

Shurli just 
connects.

Connect your devices directly - no accounts, no cloud, no subscriptions. 
Works even when your network blocks everything.

From zero to connected in 60 seconds

Two commands on each device. No accounts to create, no keys to exchange manually, no ports to forward.

Shurli terminal demo showing init, invite, join, and proxy commands

How it works

Three steps. Both devices end up in each other's authorized_keys. That's it.

1
Step 1: Initialize Shurli on your server

Initialize

Run shurli init on your server. It creates a unique identity and comes online, ready to accept connections.

2
Step 2: Create and share invite code

Invite

Run shurli invite to get a one-time code. Send it however you like - text, email, Signal, carrier pigeon.

3
Step 3: Join and start proxying services

Connect

Run shurli join on your laptop. Both devices trust each other automatically. Access any service through the encrypted connection.

Direct when possible, relayed when necessary

Shurli tries to connect your devices directly. When the network won't allow it, traffic flows through an encrypted relay, which never sees your data.

Network diagram showing peer-to-peer connections through NAT with relay fallback

Install

Single binary. No runtime dependencies. Build from source with Go.

# Clone and build
git clone https://github.com/shurlinet/shurli.git
cd Shurli
go build -ldflags="-s -w" -trimpath -o shurli ./cmd/shurli

# Move to PATH
sudo mv shurli /usr/local/bin/

# Verify
shurli version
# Clone and build
git clone https://github.com/shurlinet/shurli.git
cd Shurli
go build -ldflags="-s -w" -trimpath -o shurli ./cmd/shurli

# Move to PATH
sudo mv shurli /usr/local/bin/

# Verify
shurli version
# Requires Go 1.22+
git clone https://github.com/shurlinet/shurli.git
cd Shurli
go build -ldflags="-s -w" -trimpath -o shurli ./cmd/shurli

# Run directly
./shurli version