AiTun Tunnel - Expose Local Web Pages to the Public Internet
When to Use
Use this skill when:
- You've built a web page, dashboard, or web app locally and need to share it publicly
- You need to test a local HTTP service from an external device
- You want to demo a locally-running application to someone
- You need a public webhook endpoint for an external service to call
- You want to expose a local API for integration testing
- You built a website for a user and they want to see it in their browser
Do NOT use this skill when:
- The content only needs to be viewed locally
- The user asks for a file download (use file sharing instead)
Instructions
Step 1: Install aitun
pip install aitun
Or if already installed, verify:
which aitun || pip show aitun
Step 2: Start the local web service
Ensure the local web service is running on a port. For static HTML files:
# Serve a directory with a built HTML page
python3 -m http.server 8080 --directory /path/to/html/dir
For other frameworks, start their dev server:
- Next.js:
npm run dev -- -p 3000 - Flask:
flask run --port 5000 - Any HTTP service on any port
Step 3: Create a tunnel
Option A: Free instant tunnel (no sign-up, 24-hour limit)
Free tunnels use proxy address mode (path-based routing). No subdomain is assigned — the public URL uses the format aitun.cc/<tunnel-code>. Simply run without a token:
aitun -p 8080 &
AITUN_PID=$!
sleep 3
The output will contain the public URL, e.g.:
https://aitun.cc/abc123
Option B: Custom subdomain (requires Google sign-in at aitun.cc)
Registered users can create custom subdomains with two domain levels:
- Standard domain:
myapp.t.aitun.cc(up to 5 subdomains) - Short domain:
myapp.aitun.cc(up to 2 subdomains)
# Check availability
curl -s https://aitun.cc/aitun-api/subdomain/check/myapp
# Register via website: https://aitun.cc
# Then use your token:
aitun -p 8080 -k YOUR_TOKEN
Step 4: Share the public URL
Tell the user their website is now publicly accessible:
Your website is now live at: https://aitun.cc/abc123
This free tunnel expires in 24 hours.
For a permanent subdomain (e.g., myapp.aitun.cc), register at https://aitun.cc
Step 5: Clean up
When done, stop the tunnel:
kill $AITUN_PID 2>/dev/null
CLI Reference
The aitun command (installed via pip install aitun) accepts these flags:
| Flag | Description |
|---|---|
-p PORT |
Local service port (default: 8080) |
-k TOKEN |
Auth token for registered subdomain (omit for free tunnel) |
-s SERVER |
Server address (default: aitun.cc:6639) |
--host HOST |
Local service address (default: localhost) |
--tcp-ports PORTS |
TCP forwarding ports, comma-separated (e.g., 22,3306; requires -k) |
--p2p |
Enable P2P direct connection (default: enabled) |
--no-p2p |
Disable P2P, force server relay mode |
--daemon |
Run as background daemon |
--stop |
Stop running daemon |
Common Mistakes to Avoid
- Do NOT use
-lflag — it does not exist. Use-pfor the local port. - Do NOT use
--freeflag — free tunnel is the default when no-ktoken is provided. - Do NOT use
--subdomainflag — subdomain is configured on the server after authentication, not via CLI. - Do NOT use
aitun-connect— this command does not exist in the pip package. - The command is
aitun(notaitun-client) afterpip install aitun. - Always use
-pto specify the local port. The default is 8080 if omitted.
API Reference
Check subdomain availability
GET https://aitun.cc/aitun-api/subdomain/check/{name}
Response: { "available": true, "name": "...", "url": "https://name.t.aitun.cc" }
Google OAuth login
POST https://aitun.cc/aitun-api/auth/google
Body: { "access_token": "<google-access-token>" }
Response: { "user": { ..., "token": "<jwt-token>" } }
Register subdomain (requires auth)
POST https://aitun.cc/aitun-api/subdomain/register
Headers: Authorization: Bearer <token>
Body: { "name": "myapp", "domain_base": "t.aitun.cc" }
Notes
- Free tunnels use proxy address mode (path-based URL like
aitun.cc/abc123), NOT subdomains - Free tunnels expire after 24 hours, auto-renewed on restart
- Registered subdomains remain active for 30 days of inactivity; use heartbeat to renew
- Standard domain subdomains (
xxx.t.aitun.cc): up to 5 per user - Short domain subdomains (
xxx.aitun.cc): up to 2 per user - All traffic is encrypted end-to-end
- Reserved subdomains (www, api, admin, test, etc.) cannot be registered
