Overview
Sandboxes can expose services to the internet via public tunnels. Your application must bind to IPv6 to be reachable.IPv6 requirement
Internally, sandboxes use IPv6 networking. Your server must bind to:: (IPv6 all interfaces), not just 0.0.0.0 or 127.0.0.1.
Flask (Python)
Express (Node.js)
FastAPI (Python)
Go HTTP server
Exposing a service
Usesandbox.expose(port) to get the public URL:
Port requirements
- Port must be a positive integer
- No default port; you must specify it explicitly
- Common ports: 3000 (Node), 5000 (Flask), 8000 (FastAPI), 8080 (Go)
Complete example
Checking server readiness
Multiple services
Expose multiple ports from the same sandbox:Troubleshooting
Connection refused
If you get connection refused errors:- Check IPv6 binding: Ensure your app binds to
::, not0.0.0.0 - Verify process is running: Use
pgreporps aux - Check logs: Read server logs for startup errors
- Wait for readiness: Some servers take time to start
Missing publicAccessUrlTemplate
Ifexpose() throws an error about missing template:
Port already in use
Best practices
- Always bind IPv6: Use
::as the host in your server configuration - Use background mode: Start servers with
{ background: true } - Redirect logs: Capture stdout/stderr to files for debugging
- Wait for readiness: Poll or sleep before calling
expose() - Handle errors: Wrap
expose()in try-catch and check for template - Clean up: Kill background processes before terminating sandbox