Deploy your Sandbox SDK application to production with preview URL support. Preview URLs require wildcard DNS routing because they generate unique subdomains for each exposed port: https://8080-abc123.yourdomain.com.
The .workers.dev domain does not support wildcard subdomains, so production deployments that use preview URLs need a custom domain.
- Active Cloudflare zone with a domain
- Worker that uses
exposePort() - Wrangler CLI installed
In the Cloudflare dashboard, go to your domain and create an A record:
- Type: A
- Name: * (wildcard)
- IPv4 address: 192.0.2.0
- Proxy status: Proxied (orange cloud)
This routes all subdomains through Cloudflare's proxy. The IP address 192.0.2.0 is a documentation address (RFC 5737) that Cloudflare recognizes when proxied.
Add a wildcard route to your Wrangler configuration:
{
"$schema": "./node_modules/wrangler/config-schema.json",
"name": "my-sandbox-app",
"main": "src/index.ts",
// Set this to today's date
"compatibility_date": "2026-07-20",
"routes": [
{
"pattern": "*.yourdomain.com/*",
"zone_name": "yourdomain.com"
}
]
}"$schema" = "./node_modules/wrangler/config-schema.json"
name = "my-sandbox-app"
main = "src/index.ts"
# Set this to today's date
compatibility_date = "2026-07-20"
[[routes]]
pattern = "*.yourdomain.com/*"
zone_name = "yourdomain.com"Replace yourdomain.com with your actual domain. This routes all subdomain requests to your Worker and enables Cloudflare to provision SSL certificates automatically.
Deploy your Worker:
npx wrangler deployTest that preview URLs work:
// Extract hostname from request
const { hostname } = new URL(request.url);
const sandbox = getSandbox(env.Sandbox, 'test-sandbox');
await sandbox.startProcess('python -m http.server 8080');
const exposed = await sandbox.exposePort(8080, { hostname });
console.log(exposed.url);
// https://8080-test-sandbox.yourdomain.comVisit the URL in your browser to confirm your service is accessible.
- CustomDomainRequiredError: Verify your Worker is not deployed to
.workers.devand that the wildcard DNS record and route are configured correctly. - SSL/TLS errors: Wait a few minutes for certificate provisioning. Verify the DNS record is proxied and SSL/TLS mode is set to "Full" or "Full (strict)" in your dashboard. If your worker is on a subdomain (for example,
sandbox.yourdomain.com), Universal SSL won't cover the second-level wildcard*.sandbox.yourdomain.com— see the TLS caution at the top of this page for options. - Preview URL not resolving: Confirm the wildcard DNS record exists and is proxied. Wait 30-60 seconds for DNS propagation.
- Port not accessible: Ensure your service binds to
0.0.0.0(notlocalhost) and thatproxyToSandbox()is called first in your Worker's fetch handler.
For detailed troubleshooting, see the Workers routing documentation.
- Preview URLs - How preview URLs work
- Expose Services - Patterns for exposing ports
- Tunnels API - Zero-config
*.trycloudflare.comURLs for development (not for production) - Workers Routing - Advanced routing configuration
- Cloudflare DNS - DNS management