Ports
Expose services running in your sandbox via public preview URLs. See Preview URLs concept for details.
Expose a port and get a preview URL.
const response = await sandbox.exposePort(port: number, options?: ExposePortOptions): Promise<ExposePortResponse>Parameters:
port- Port number to expose (1024-65535)options(optional):name- Friendly name for the port
Returns: Promise<ExposePortResponse> with port, exposedAt (preview URL), name
await sandbox.startProcess("python -m http.server 8000");const exposed = await sandbox.exposePort(8000);
console.log("Available at:", exposed.exposedAt);// https://8000-abc123.example.com
// Multiple services with namesawait sandbox.startProcess("node api.js");const api = await sandbox.exposePort(3000, { name: "api" });
await sandbox.startProcess("npm run dev");const frontend = await sandbox.exposePort(5173, { name: "frontend" });await sandbox.startProcess('python -m http.server 8000');const exposed = await sandbox.exposePort(8000);
console.log('Available at:', exposed.exposedAt);// https://8000-abc123.example.com
// Multiple services with namesawait sandbox.startProcess('node api.js');const api = await sandbox.exposePort(3000, { name: 'api' });
await sandbox.startProcess('npm run dev');const frontend = await sandbox.exposePort(5173, { name: 'frontend' });Remove an exposed port and close its preview URL.
await sandbox.unexposePort(port: number): Promise<void>Parameters:
port- Port number to unexpose
await sandbox.unexposePort(8000);await sandbox.unexposePort(8000);Get information about all currently exposed ports.
const response = await sandbox.getExposedPorts(): Promise<GetExposedPortsResponse>Returns: Promise<GetExposedPortsResponse> with ports array (containing port, exposedAt, name)
const { ports } = await sandbox.getExposedPorts();
for (const port of ports) { console.log(`${port.name || port.port}: ${port.exposedAt}`);}const { ports } = await sandbox.getExposedPorts();
for (const port of ports) {console.log(`${port.name || port.port}: ${port.exposedAt}`);}Connect to WebSocket servers running in the sandbox. Use this when your Worker needs to establish WebSocket connections with services in the sandbox.
Common use cases:
- Route incoming WebSocket upgrade requests with custom authentication or authorization
- Connect from your Worker to get real-time data from sandbox services
For exposing WebSocket services via public preview URLs, use exposePort() with proxyToSandbox() instead. See WebSocket Connections guide for examples.
const response = await sandbox.wsConnect(request: Request, port: number): Promise<Response>Parameters:
request- Incoming WebSocket upgrade requestport- Port number (1024-65535, excluding 3000)
Returns: Promise<Response> - WebSocket response establishing the connection
import { getSandbox } from "@cloudflare/sandbox";
export default { async fetch(request, env) { if (request.headers.get("Upgrade")?.toLowerCase() === "websocket") { const sandbox = getSandbox(env.Sandbox, "my-sandbox"); return await sandbox.wsConnect(request, 8080); }
return new Response("WebSocket endpoint", { status: 200 }); },};import { getSandbox } from "@cloudflare/sandbox";
export default { async fetch(request: Request, env: Env): Promise<Response> { if (request.headers.get('Upgrade')?.toLowerCase() === 'websocket') { const sandbox = getSandbox(env.Sandbox, 'my-sandbox'); return await sandbox.wsConnect(request, 8080); }
return new Response('WebSocket endpoint', { status: 200 }); }};- Preview URLs concept - How preview URLs work
- Commands API - Start background processes
Was this helpful?
- Resources
- API
- New to Cloudflare?
- Directory
- Sponsorships
- Open Source
- Support
- Help Center
- System Status
- Compliance
- GDPR
- Company
- cloudflare.com
- Our team
- Careers
- © 2025 Cloudflare, Inc.
- Privacy Policy
- Terms of Use
- Report Security Issues
- Trademark