Skip to content
Console →
Website →
Asking an AI? Paste this URL https://keelson.dev/llms.txt

App URLs and domains

Web apps and static sites receive a dedicated URL that you can share after deployment. You can also use a domain your company manages.

The standard URL has this format. A slug is an identifier used in URLs and other settings.

https://<workspace-slug>--<app-slug>.keelson.run

For workspace slug acme and slug: dashboard in keelson.yaml, the URL is https://acme--dashboard.keelson.run. Keelson manages the HTTPS certificate.

Find the URL on the app page in the console, in your agent’s deployment report, or with keelson status.

Knowing the URL is not enough. A visitor must be signed in to the workspace and have permission to view the app. If IP restrictions are configured, they must also connect from an allowed network.

Share the app URL directly with App Users. They cannot open the console, so they cannot look it up there. Copy it using one of the methods above and send it to them by chat or email.

Owners and Admins can change an app’s URL after creation. Use Public URL in the app’s console settings.

The old URL stops working and does not redirect to the new one. Share the new URL with users and update bookmarks and external service settings. Before saving, select the checkbox confirming that you understand the impact.

  • The old URL is reserved for 30 days so another app cannot take it. Requests to it receive 410 Gone during that period. It is released automatically after 30 days.
  • Use the console or keelson apps rename <new_slug> to change the URL. The slug in keelson.yaml identifies the deployment target; changing it alone does not change the URL. Without an explicit --app, the next deployment looks for an app matching the new slug and can no longer update the original app. If you also change the app’s identifier in the console, update keelson.yaml to match before deploying again.

You can also change the workspace slug in settings, but existing app URLs stay the same. To use the new workspace slug in those URLs, update each app’s public URL individually.

The Team plan lets you use a company subdomain such as app.example.com. You need permission to change the domain’s DNS settings. If a colleague manages your domain, send them the values Keelson provides.

  • Available on Team: up to 10 domains per workspace and one domain per app.
  • Subdomains only. Root domains such as example.com and email domains are not supported. To send email from your domain, see Send from your own domain.
  • Authentication, permissions, and IP restrictions also apply through custom domains.

Follow these steps:

  1. An Owner or Admin registers the domain in the app settings or with keelson domains add <hostname> [--app <slug>]. Keelson shows the CNAME target to configure.
  2. At your DNS provider, point the subdomain’s CNAME to that target. In production, the target is custom-origin.keelson.run. Use the value shown in the console or CLI.
  3. Check that the domain is active in the console or with keelson domains verify <hostname> [--app <slug>]. Activation may take a few minutes.

Keelson automatically verifies ownership, issues the HTTPS certificate, and configures serving.

Use this when your app needs to create links to itself, such as links in emails. You can ask your agent to configure it.

Keelson supplies the standard app URL in KEELSON_APP_URL. The request’s Host header contains an internal hostname, so use KEELSON_APP_URL for absolute URLs in emails, redirects, or og:url.

import os
base_url = os.environ["KEELSON_APP_URL"] # e.g. https://acme--dashboard.keelson.run

This variable is not set during local development. Use KEELSON_MODE to detect whether the app is running on Keelson.

Changing the public URL does not immediately update the environment of a running app. Redeploy apps that use KEELSON_APP_URL, then check that email links and redirects use the new URL.

Setting a custom domain does not change KEELSON_APP_URL: it still contains the standard URL. To use the custom domain in email links and similar places, ask your agent to store it as an app configuration value. See Environment variables and secrets.