Skip to main content

Domains

A domain is how people on the internet reach something running in your lab. By the end of this page you will have added one and attached it to a lab, served over HTTPS.

Two kinds of domain

Platform subdomainCustom domain
Looks likemyshop.selfmade.onewww.example.com
DNSCreated for youYou create an A record at your DNS provider first
PlanEvery planPaid plans only
LimitShown in the page header (5 by default)Limited; you see a message when you reach it
HTTPS certificateAutomaticAutomatic, once the A record is correct

Platform subdomains come from zones the platform offers — for example selfmade.one, selfmade.fun or zeal.ninja. The list you see in the dropdown is the current one.

1. Add a domain

Go to Connectivity → My Domains and click Add New Domain.

The Add Domain dialog with the Choose DNS Provider dropdown open, a subdomain typed in, and the preview message below showing the resulting https:// address.
  1. Under Choose DNS Provider, pick a platform zone — or Custom Domain for a name you own.
  2. Type the name. For a platform zone, type only the part before the zone, for example myshop or vscode.yourname. For a custom domain, type the full name.
  3. Click Verify and Add.

Names must be at least 3 characters and use only letters, digits, dots and hyphens.

Custom domains: point the A record first

A custom domain is checked when you add it. Before you click Verify and Add, create an A record for the name at your DNS provider, pointing at the labs' public IP address.

To find that address, click the ? button next to Add New Domain on the My Domains page.

Type Name Value
A www <labs-public-ip>

DNS changes can take a while to spread. If adding fails with the A-record message below, wait and try again.

Names inside platform zones cannot be custom

You cannot add something.selfmade.one as a custom domain. Choose that zone from the dropdown instead.

2. Attach it to a lab

A domain does nothing until a lab uses it. Open the lab, go to Preferences, and find Public Exposure.

SettingChoose
Expose to Web (port 80)Public, 80 exposed over 443 — whatever your lab serves on port 80 is published over HTTPS
Choose DomainsOne or more of your domains

Then click Save Preferences and Apply & Redeploy now.

Nothing changes until the lab is redeployed

Domain settings show Saved here, applied on the next redeploy. The lab keeps serving its old setup until you redeploy it. You can also set all of this in the Redeploy dialog.

Your app needs to listen on port 80 inside the lab for this option. To publish a different port, or several, see Publishing ports.

If you choose Public but have no domains, the dialog says No DNS entries to take you public. Please add Domains to continue.

A domain for VS Code in the browser

Labs with VS Code in the browser also have Domain for VS Code Web. Leave the default, or pick one of your platform subdomains to open the editor on a name you choose. Custom domains are not offered here.

The domain card

On the cardMeaning
selfmade / customPlatform subdomain or your own
verified / unverifiedWhether the DNS currently points at the labs. Checked automatically, periodically and at every deploy — there is no button.
in use / not in useWhether a lab is serving it
SSL badgeOpens the SSL Manager for this domain's certificate
Common Name, A Record, ServiceThe full name, where it points, and what is using it

The only action is Delete. A lab's own Domains tab lists the domains that lab is serving.

Rules to know

  • One domain, one lab. A domain can be served by only one running lab at a time. Remove it from the other lab (or stop that lab) first.
  • A domain can appear once per lab. You cannot use the same name for two ports of the same lab.
  • Only your own domains. If a lab somehow carries a domain that is registered to someone else, the platform detaches it and redeploys the lab — otherwise the certificate for all of that lab's domains would fail.

Errors

MessageWhat to do
The domain name is not available or already registered.Someone has it. Choose another name.
The domain name you are trying is invalid.Use letters, digits, dots and hyphens; at least 3 characters.
We cannot verify your ownership to domain since the A records are not right…Your custom domain's A record is missing or points elsewhere. Fix it at your DNS provider and wait for it to spread.
You need to upgrade your plan to add custom domainsCustom domains need a paid plan. See Plans and limits.
DNS Service is currently busy. Try again after sometime.A temporary problem. Try again in a few minutes.
Domain '…' is already attached to your running instance '…'.Remove it from that lab, or stop that lab, then redeploy this one.
…is not registered on this platform. Add it under Domains first.Add the domain on My Domains before choosing it on a lab.
Add New Domain is greyed outYou are at your limit. Delete a domain you no longer use.

Do it with an AI assistant

You can also do this by asking an AI assistant connected to your account — see Connect an AI assistant to set one up.

AskWhat the assistant does
“Register myapp on one of the platform's domains”Checks which zones you already use with list_domains, then add_domain
“Add shop.example.com — the A record is set”add_domain
“Put myapp on my essentials lab”Confirms the domain is verified with list_domains, reads the lab's current domains with lab_info, then configure_lab_routing and redeploys
“Is my domain attached to a lab yet?”list_domains
Point the A record first

A domain you own is checked the moment it is added. If its A record does not already point at the platform, it is refused outright — not added as pending — so set the record, wait for it to propagate, then ask. Attaching a domain saves routing; it goes live only when the lab is redeployed.

Next