Quickstart - 20 languages
Pick your stack; the CLI is the same everywhere. Free tunnels need no account.
# no install needed - runs straight from npm
npx @easytunnel/et-sdk 3000
# source-only: grab the file, run with Node >= 22
curl -O https://raw.githubusercontent.com/topcheer/etunnel/main/sdks/typescript/etunnel.ts
node etunnel.ts 3000
deno run --allow-net https://raw.githubusercontent.com/topcheer/etunnel/main/sdks/deno/etunnel.ts 3000
pip install etunnel
etunnel 3000
go install github.com/topcheer/etunnel/cmd/etunnel@latest
etunnel -server 'wss://t.etun.uk/tunnel' 3000
# single-file source launch (JDK 11+)
curl -O https://raw.githubusercontent.com/topcheer/etunnel/main/sdks/java/src/main/java/dev/ggcode/Etunnel.java
java Etunnel.java 3000
curl -O https://raw.githubusercontent.com/topcheer/etunnel/main/sdks/kotlin/Etunnel.kt
kotlinc Etunnel.kt -include-runtime -d etunnel.jar
java -jar etunnel.jar 3000
curl -O https://raw.githubusercontent.com/topcheer/etunnel/main/sdks/scala/Etunnel.scala
scala Etunnel.scala 3000
# .NET 10 single-file app
dotnet add package etunnel
dotnet run 3000
cargo install etunnel
etunnel 3000
git clone https://github.com/topcheer/etunnel
cd etunnel && swift build -c release
.build/release/etunnel 3000
dart pub add etunnel
dart run etunnel.dart 3000
gem install etunnel
etunnel 3000
curl -O https://raw.githubusercontent.com/topcheer/etunnel/main/sdks/php/etunnel.php
php etunnel.php 3000
curl -O https://raw.githubusercontent.com/topcheer/etunnel/main/sdks/perl/etunnel.pl
perl etunnel.pl 3000
luarocks install ggcode.etunnel
lua $(luarocks show ggcode.etunnel | awk '/Location/{print $2}')/etunnel.lua 3000
curl -O https://raw.githubusercontent.com/topcheer/etunnel/main/sdks/c/etunnel.c
cc -O2 -o etunnel etunnel.c -lwebsockets -lcurl -lssl -lcrypto
./etunnel 3000
curl -O https://raw.githubusercontent.com/topcheer/etunnel/main/sdks/cpp/etunnel.cpp
c++ -std=c++17 -O2 -o etunnel etunnel.cpp -lssl -lcrypto
./etunnel 3000
curl -O https://raw.githubusercontent.com/topcheer/etunnel/main/sdks/clojure/etunnel.clj
clojure -M -i etunnel.clj -e "(et/-main \"3000\")"
mix deps.get
mix run --no-halt runner.exs 3000