How to Connect Your Domain to Your App (with Free HTTPS)
Every app on Chajio Cloud gets a free web address with HTTPS the moment it deploys. When you are ready for your own domain, connecting it takes two DNS records and one click, and the HTTPS certificate is issued and renewed for you. This guide explains each step, and what to check when something doesn’t go through.
On this page
What you need
- An app that has deployed at least once. If you haven’t got that far, start with the guide for your framework: React, Next.js, Python or Node.js.
- A domain, and access to its DNS settings. That’s usually wherever you bought it, or a DNS service like Cloudflare if you moved it there. Need one? Search for a domain.
- A plan that includes custom domains. Each app can have one custom domain.
First, choose www or the root domain
Decide which name your app will answer on, because the DNS record differs:
- A subdomain, such as
www.example.comorapp.example.com, uses a CNAME record. It’s the simplest option and works with every DNS provider. - The root domain,
example.com, can’t use a CNAME, a rule of DNS itself. It needs an A record, or an ALIAS or ANAME record if your provider offers one. Cloudflare handles this for you if you add a CNAME at the root.
Since an app has one custom domain, most people connect www.example.com and have their DNS provider or registrar forward example.com to it. Many providers call this URL forwarding or a redirect rule.
Step 1: Add the domain
Open your project, go to the Domains tab, type your domain under Custom domain, for example www.example.com, and click Add domain. Enter just the name: no https:// and no path.
Step 2: Add two DNS records
The dashboard now shows two records, each with copy buttons. Add both where your domain’s DNS is managed. For www.example.com they look like this, with your own values in place of the placeholders:
| Type | Name | Value | What it does |
|---|---|---|---|
| TXT | _chajio-challenge.www.example.com | your token | Proves the domain is yours |
| CNAME | www.example.com | the target shown | Sends visitors to your app |
For a root domain the second record is an A record instead, and the dashboard explains what to point it at. Always copy the values from your dashboard; they are specific to your domain.
Entering the name in your DNS provider
The dashboard shows each record’s full name. Some DNS providers want the full name; many want only the part before your domain, because they add the domain themselves:
Full name What to type in the "Name" or "Host" field
_chajio-challenge.www.example.com → _chajio-challenge.www
www.example.com → www
example.com → @If you’re not sure, look at an existing record in the same account: if it shows www rather than www.example.com, type the short form.
Remove old records for the same name
If the name already has records, for example an old A or AAAA record for www from a previous host, delete them. A name with a CNAME can’t have other records, and a leftover AAAA record would send some visitors to the old server.
Step 3: Verify
Back on the Domains tab, click Verify. The dashboard checks each record and ticks it off:
- Ownership: the TXT record was found, so your domain is connected to your app.
- Routing: your domain points at your app.
- HTTPS: a certificate is issued, usually in under a minute.
When all three are done, your app is live at https://www.example.com. Visitors who type http:// are redirected to HTTPS, and the certificate renews itself well before it expires. Your free address keeps working alongside your domain.
New DNS records can take anywhere from a few minutes to a few hours to be visible everywhere, depending on your provider. If Verify doesn’t find them yet, wait a little and try again; the dashboard also re-checks on its own.
Keep the TXT record
Leave the _chajio-challenge record in place after you’re connected. Chajio Cloud re-checks it from time to time to confirm the domain is still yours. A brief DNS hiccup is ignored, but if the record stays missing for about a week, the domain is disconnected from your app.
Using Cloudflare
Cloudflare’s proxy (the orange cloud) works. The dashboard recognises it and shows the routing record as proxied, so you can leave it on. One setting matters: under SSL/TLS, set the encryption mode to Full (strict). The Flexible mode makes Cloudflare contact your app over plain HTTP, which is redirected to HTTPS, which Cloudflare fetches over HTTP again: a redirect loop.
Checking your records yourself
Online DNS lookup tools will show what the world currently sees for your records. On a Mac or Linux computer you can also ask directly:
dig TXT _chajio-challenge.www.example.com +short
dig CNAME www.example.com +shortThe first should print your token and the second the target from your dashboard.
Common problems
Verify can’t find the TXT record
Give it a few minutes, then check the record’s name. The most common slip is a doubled domain, such as _chajio-challenge.www.example.com.example.com, from typing the full name into a provider that adds the domain itself.
“Ownership verified, but the domain does not point here yet”
The TXT record is fine, but the CNAME or A record is missing, points somewhere else, or competes with an old record for the same name. Fix the routing record; the dashboard picks it up on the next check.
HTTPS stays pending
A certificate can only be issued once visitors to your domain reach your app, so this almost always means the routing record isn’t in place yet. Behind Cloudflare, switch the record to DNS only (grey cloud) until HTTPS shows as issued, then turn the proxy back on. If your domain has CAA records, which restrict who can issue certificates for it, contact support and we’ll tell you what to add.
The browser shows “too many redirects”
You’re behind Cloudflare with SSL/TLS set to Flexible. Switch it to Full (strict).
“Custom domains are not included” in your plan
Your plan doesn’t include custom domains. Upgrading to a plan that does unlocks the Domains tab.
The domain is already in use
A domain can be connected to one app at a time. Remove it from the other project first. If it isn’t yours to remove, contact support.
Changing or removing a domain
To switch domains, remove the current one on the Domains tab and add the new one. Your app stays reachable at its free address throughout, so nothing goes offline while you make the change.
Learning path
Deploy your first app
- 1
Deploy your app
- 2
- 3
- 4
Keep reading
How to Deploy a React App
Take a React app built with Vite or Create React App from your GitHub repository to a live HTTPS address, with environment variables, your own domain and automatic deploys on every push.
How to Deploy a Next.js App
Deploy a full Next.js app, with server rendering, API routes and middleware, straight from GitHub. Covers public and server-side variables, databases and connecting your domain.
How to Deploy a Node.js App (Express, Fastify or NestJS)
Deploy a Node.js API or server from GitHub, JavaScript or TypeScript. The two lines of code every app needs, choosing a Node version, and shutting down cleanly for seamless updates.
How to Deploy a Python App (Flask, FastAPI or Django)
Get a Flask, FastAPI or Django app live from GitHub. What to put in your repository, how to tell the platform how to start your app, and the Django settings that trip people up.
Find your domain
Search .co.ke, .ke, .com and more, and connect it to your site in minutes.