{
"owner" : { "github" : "jn-aman" },
"description" : "a focus timer",
"records" : {
"CNAME" : "jn-aman.github.io"
}
}
Free subdomains for apps · open source · zero servers
your-app-name .is-my.app
Your app deserves a real URL. Point it at wherever it already runs, or hand us an open-source repo and we build and ship it. One JSON file. One pull request. Live.
How it works
One file.
One PR.
Live.
- Schema is valid
- Owner matches PR author @jn-aman
- pomodoro is available
- Target jn-aman.github.io resolves
$ dig +short pomodoro.is-my.app jn-aman.github.io. 185.199.108.153 $ curl -sI https://pomodoro.is-my.app | head -1 HTTP/2 200 live on the edge in 38s
Two ways to use it
Point it. Or ship it.
Point
Your app already runs on GitHub Pages, Vercel, Netlify, Cloudflare Pages or your own box? Add a CNAME, A, AAAA, MX or TXT record and it resolves in under a minute.
"records": { "CNAME": "you.github.io" }
- Bring any host
- Email and verification records
- Optional Cloudflare proxy
Deploy
No hosting at all? Give us your app's public GitHub repo, a build command and an output folder. We build it in an isolated container and serve it from Cloudflare's edge. Push to your branch and it redeploys.
"deploy": { "repo": "you/site", "build": "npm run build", "output": "dist" }
- Any static framework
- Automatic HTTPS
- Auto redeploy on push
Recipes
Wherever your app runs, one file.
No servers to rent. No bills to pay. No forms to fill. Just a JSON file, a pull request, and a real address for the app you just shipped.
Claim a name
Name your app. We will write the PR.
Reference
The whole API is one file.
| Key | Type | What it does |
|---|---|---|
owner.github | string | Your GitHub username. Must match the author of the pull request. |
description | string | One line about your app, shown on this site. |
| records point it | ||
records.CNAME | string | Host to alias to. Cannot be mixed with other types. |
records.A | string[] | Public IPv4 addresses, up to 10. |
records.AAAA | string[] | Public IPv6 addresses, up to 10. |
records.MX | array | Mail servers, as hostnames or { target, priority }. |
records.TXT | string | string[] | Verification and SPF values. |
proxied | boolean | Serve through Cloudflare for free HTTPS and caching. |
| deploy ship it | ||
deploy.repo | string | Public repo as owner/name. Required. |
deploy.branch | string | Branch to build. Default main. |
deploy.build | string | Build command. Empty means the files are already static. |
deploy.output | string | Folder with the built app. Default . |
deploy.root | string | Folder the build runs in, for monorepos. |
deploy.node | string | Node.js version for the build. Default 22. |
What the bot checks
- App names use
a-z,0-9and hyphens, up to 63 characters. - Up to 5 apps per GitHub account. The account must be 14 days old.
- Nested names like
api.my-appare DNS only, and need you to ownmy-app. - Hosted apps and
proxiedneed a top-level name. - Builds get 15 minutes, 20,000 files and 25 MiB per file. Static output only.
- Use either
recordsordeploy, never both.
$ gh repo fork jn-aman/is-my.app --clone $ cd is-my.app && git switch -c pomodoro $ cat > domains/pomodoro.json <<'EOF' { "owner": { "github": "you" }, "records": { "CNAME": "you.github.io" } } EOF $ npm run validate 6 domain file(s) checked: 0 error(s), 0 warning(s) $ git add domains && git commit -m "Claim pomodoro" $ gh pr create --fill ✓ validated, auto-merged, live in about a minute
$ curl -s https://is-my.app/domains.json \ | jq '.domains[] | select(.kind == "deploy")' { "name": "tetris", "owner": "jn-aman", "description": "Tetris in the browser", "kind": "deploy", "target": "jn-aman/tetris" }
The full registry as JSON, rebuilt on every merge. Build a badge, a bot or a directory on top of it.
The registry
00 apps and counting.
Questions
Good questions.
Is it actually free?
Yes. DNS runs on Cloudflare's free plan and builds run on GitHub Actions, which is free for public repositories. There is nothing to bill you for.
How fast does it go live?
Valid pull requests merge themselves. DNS is written within a minute of the merge. Hosted apps take as long as your build, usually one or two minutes.
My app is on Vercel, Netlify or GitHub Pages. Anything special?
Add your-app-name.is-my.app as a custom domain on your host first, then point a CNAME at the target it gives you. The recipes have the exact file for each host.
What can the deploy mode build?
Any app that produces static files: Vite, React, Svelte, Astro, Next static export, Hugo, Jekyll, plain HTML. Builds run in a node container with no secrets, get 15 minutes, up to 20,000 files and 25 MiB per file. We check your branch every hour and redeploy when it moves.
Do I get HTTPS?
Always. In deploy mode Cloudflare issues the certificate for you. In point mode your host issues it, just like any custom domain.
How many apps can I have?
Up to five apps per GitHub account, plus nested DNS records under them. Your account needs to be at least two weeks old.
Can I use a nested name like api.my-app?
Yes, for DNS records, as long as you own my-app. Hosted apps and the Cloudflare proxy need a top-level name, because Cloudflare's free certificate covers one level of subdomain.
What is not allowed?
Phishing, malware, spam, impersonation, anything illegal. Names that break the rules are removed without notice. Read the terms.