By default, a app is available at a domain generated by The following resources will help you take your application live on your custom domain.

Summary of steps 

This short section gives a basic typical example. See the Step by step guide for more complex cases.

Set your domain 

Now, add a single domain to your project for

Using the CLI type:

platform domain:add

You can also use the management console for that.

As soon as you do, will no longer serve at all. Instead, {default} in routes.yaml will be replaced with anywhere it appears when generating routes to respond to.

You can still access the original internal domain by running platform environment:info edge_hostname -e <BRANCH_NAME>.

Configure your DNS provider 

On your DNS provider, you would create two CNAMEs: should be an ALIAS/CNAME/ANAME to should be a CNAME to


Here’s what will now happen under the hood. Assume for a moment that all caches everywhere are empty. An incoming request for will result in the following:

  1. Your browser asks the DNS network for’s DNS A record (the IP address of this host). It responds with “it’s an alias for” (the CNAME), which itself resolves to the A record with IP address (or whatever the actual address is). By default DNS requests by browsers are recursive, so there is no performance penalty for using CNAMEs.
  2. Your browser sends a request to for domain
  3. Your router responds with an HTTP 301 redirect to (because that’s what routes.yaml specified).
  4. Your browser looks up and, as above, gets an alias for, which is IP
  5. Your browser sends a request to for domain Your router passes the request through to your application which in turn responds with whatever it’s supposed to do.

On subsequent requests, your browser knows to connect to for domain and skip the rest. The entire process takes only a few milliseconds.