Getting Started
Setup
- Fork the
mmdevs.orgrepository. - Create a branch.
git switch -c your_branch
- Install dependencies
npm install
- Install Git hooks
npm run hooks:install
Subdomains
Register
You can request a new subdomain using one of the following methods:
- Add a registration JSON file to the
subdomains/directory. - Run
npx mmsd <sub_domain>in your terminal. ThemmsdCLI creates<sub_domain>.jsonin thesubdomains/directory. (Recommended)
Using mmsd CLI
We recommend using the mmsd CLI, which becomes available after the initial setup. It checks whether your requested subdomain is available and, if available, creates the registration JSON file with a single command.
For details about mmsd-cli, see the examples.
npx mmsd <your_requested_domain>
# replace <your_requested_domain> with subdomain name
References
Your request file must be JSON and match this structure:
{
"$schema": "../schema/mmdevs.json",
"sub_domain": "example",
"cname_value": "example.github.io",
"request_type": "register",
"cfp": false
}
- Full example and detailed notes: example.jsonc
- Validation is enforced by: JSON Schema
Field reference
sub_domain(required) The name part of<sub_domain>.mmdevs.org.cname_value(required) Must be one of the supported CNAME targets.request_type(required) One of:register,update,remove.cfp(optional) Cloudflare proxy flag. In current validation flow, this is treated asfalse.
Supported CNAME targets
Only these targets are accepted:
- GitHub Pages user domain:
<username>.github.io - Vercel default CNAME:
cname.vercel-dns.com - Vercel project CNAME:
<code>.vercel-dns-<number>.com
Notes
If you are not using the
mmsdCLI:
- File extension must be
.json.- Filename should match
sub_domain. Example:sub_domain: "foo"->subdomains/foo.json.
Update
To update the cname_value of your registered subdomain, edit your .json file in the subdomains directory.
You must be the owner of that subdomain.
Do not change the sub_domain field when updating <your_subdomain>.json (that means you must not change the subdomain name).
Steps
-
Find and edit the existing
<your_subdomain>.jsonfile insubdomains/directory. -
Update
cname_valuein<your_subdomain>.jsonwith supported CNAME targets. -
Set
request_typetoupdatein<your_subdomain>.json.
Example
{
"$schema": "../schema/mmdevs.json",
"sub_domain": "phowa",
"cname_value": "cname.vercel-dns.com", // Change from "phowa.github.io" to "cname.vercel-dns.com"
"request_type": "update", // Change from "register" to "update"
}
Remove
To remove your registered subdomain, update request_type in your .json file in the subdomains/ directory.
MMDEVS.ORG records your github_user_login and github_user_id when you register a subdomain, so you must submit the removal request as that same user.
Steps
-
Find and edit the existing
<your_subdomain>.jsonfile insubdomains/directory. -
Set
request_typetoremovein<your_subdomain>.json.
Example
{
"$schema": "../schema/mmdevs.json",
"sub_domain": "phowa",
"cname_value": "phowa.github.io",
"request_type": "remove", // Change from "register" or "update" to "remove"
}
Push to branch
Run the local helper script in your terminal:
npm run commit
The commit helper will:
- Ask for a request type (
Register,Update,Remove).
Select a number for commit type:
1) Register
2) Update
3) Remove
Enter number:
- Ask for a commit message (it is recommended to use your requested subdomain name).
Select a number for commit type:
1) Register
2) Update
3) Remove
Enter number: 1
Enter commit message:
-
Create a commit with this format:
<Type> : <name>.mmdevs.org. -
Automatically push to your current branch.
-
Using
npm run commitwith the<Type> : <name>.mmdevs.orgcommit format helps maintainers review and approve requests more easily.
Open pull request
PR Template
- [ ] I have read and accepted the [Terms and Conditions](https://docs.mmdevs.org/tnc)
- [ ] There is reasonable content on the page
Host repo of my page is <repo_url>
The site content can be seen at <site_url>
Guide
No additional actions are required. Just complete the following:
-
Mark the first checkbox as
[x]. Example: “- [x] I have read and accepted the Terms and Conditions” -
Mark the second checkbox as
[x]. Example: “- [x] There is reasonable content on the page” -
Replace
repo_urlinside<>with your host repository URL. Example: “Host repo of my page is<https://github.com/{owner}/{repo}>” -
Replace
site_urlinside<>with your page URL. Example: “The site content can be seen at<https://example.com>”
Notes
- Full example and detailed notes: Raw PR Template
Hosting Providers
GitHub Pages
If you have not already done so, sign in to GitHub and set up your GitHub Pages site by following their instructions.
Follow our registration guide to request your subdomain.
Publishing
- Add a file named CNAME with the content
<sub_domain>.mmdevs.orgat source branch/source directory. - For details on configuring the publishing source for your GitHub Pages site, see the docs.
CNAME
<your_subdomain>.mmdevs.org
- A CNAME file will not be processed when publishing a site via a workflow.
- Add
<sub_domain>.mmdevs.orgas a custom domain at the following example URL. - More details are available in GitHub Docs.
example URL
https://github.com/{user_name}/{repo}/settings/pages
Vercel
-
Follow our registration guide to request your subdomain.
- Use
cname.vercel-dns.comor the newer<code>.vercel-dns-017.comtarget shown by Vercel (example:d1d4fc829fe7bc7c.vercel-dns-017.com). - See Adding and configuring a custom domain in the Vercel docs.
Validation process
Automated checks
- Pull request template/format checks.
- Contributor location checks.
- JSON/request validation for changed files.
Maintainer review
- Verify site/repository ownership and content.
- Approve valid requests.
- Merge and apply DNS updates.