12,000 人抢注 1 个子域名:5 年 75K commits,0 行运行时代码的 is-a.dev 怎么做到的
一句话总结
is-a-dev/register 是一个用「GitHub PR 即域名注册」+「dnscontrol 编译时编排」实现的 0 美元、0 运行时代码的免费子域名公共服务,5 年承载 13,000 贡献者、12,000+ 注册记录、近 75,000 次 commit,是「开发者免费地皮」赛道的成熟公共物品。
值得关注的理由
- 极致架构反常识:服务 12,000+ 用户的子域名系统,仓库里 0 行运行时代码(99.9% 是 JSON 数据),没有数据库、没有后台、没有 daemon。
- 可复用的工程范式:把「PR 流程」当成「用户态数据」注册中心——任何「低频写、强审计、用户自助」的注册表都适用。
- 奇高的 fork:star = 2.14:1(22,345 forks vs 10,419 stars):罕见的数据信号,说明用户必须 fork 才能提交注册,真实用户基数通过 fork 体现。
项目展示
README 媒体
— 类型: hero
— 类型: 基础设施背书
官网媒体
未额外取得(docs.is-a.dev 直连 403,已用 JINA reader 兜底;无独立 hero 截图)。
筛选说明
- 总共发现 6 个媒体元素,筛选后保留 2 个
- 排除了 3 个 badge / 状态图标
- 缺少动态 demo / 架构图(数据型仓库的天然限制)
项目画像
| 维度 | 数据 |
|---|---|
| GitHub | https://github.com/is-a-dev/register |
| Star / Fork | 10,419 / 22,345(fork:star ≈ 2.14:1,极反常) |
| Watcher | 30 |
| Open PR | 113(Open Issue = 0,关闭率极高) |
| 代码行数 | 117,204 行(JSON 99.9%,SVG 0.1%) |
| 文件数量 | 12,325(其中 JSON 12,318) |
| 项目年龄 | 68 个月(首次提交 2020-10-04) |
| 总 commits | 74,975 |
| 近 365 天 commits | 26,699(月均 ~2,225) |
| 贡献者 | 13,029 人(Top 1 占比 5.7%,典型长尾) |
| 依赖 | 0 运行时 + 2 开发依赖(ava + fs-extra) |
| License | GNU General Public License v3.0 |
| 开发阶段 | 密集开发(近 30 天 3,514 commit) |
| 开发模式 | 职业项目(周末占比 29.6%,深夜占比 18.2%) |
| 热度定位 | 大众热门(heat_level 最高档) |
| 质量评级 | 代码优秀 / 文档良好 / 测试充分 / CI 完善 |
作者视角:为什么存在这个项目
创始人/作者背景
is-a-dev 是 2020-10-04 由 William Harrison(@wdhdev) 在 Australia 创建的开源组织。William 仍是组织下最核心的代码贡献者(2,543 commits,5.7% 占比,兼具 Trusted + Admin 双重身份)。组织下 20 个公开仓库呈「单核心 + 多辅助」结构:register(10.4k★,数据平面)+ discord-bot(运营平面)+ raw-api(查询平面)+ docs(文档站)+ dnscontrol-action(CI 模板)——一个完整的三层架构,靠 Cloudflare 赞助 DNS + GitHub 免费协作 两层免费基础设施撑起来。
问题判断
作者观察到的痛点不是「没有人提供免费域名」,而是**「免费子域名服务的注册流程从未被工程化」**:
- 付费域名(Namecheap / Porkbun):对学生 / 刚起步的开发者不友好(信用卡 + 续费 + 隐私设置 + DNS 面板学习曲线)。
- 现存免费子域名(js.org / thedev.me / is-not.cool):注册体验不一致(邮件申请 / 表单 / 维护者手动改),没有 PR 流程、没有审计、没有 diff、没有回滚。
- GitHub Pages 默认域(
username.github.io):品牌辨识度低、不易迁移、不能映射多级项目。 - 真正缺的是「用开发者最熟悉的 GitHub PR 流程做域名注册 / 撤销 / 迁移 / 审计的统一入口」。
时机:2020 年 GitHub Student Pack 流行 + Cloudflare 推出 Project Alexandria 赞助开发者社区 + dnscontrol 工具成熟——三重红利叠加,作者入场。
解法哲学
核心信条是**「DNS zone file 就是代码」**——一种极端的简单性信仰:
- 不要后台:0 数据库、0 管理面板、0 任何「服务」代码。
- 不要状态机:注册 / 撤销 / 修改都是 PR,GitHub 帮你做权限 / 审计 / 回滚 / 通知。
- 不要钱:Cloudflare 赞助 DNS + GitHub 免费私有 repo / Actions / Pages + dnscontrol 是 Stack Exchange 出品现成工具。
- 不要重复造轮子:用
dnscontrol的D(ZONE, REGISTRAR, PROVIDER, RECORDS)DSL 编译 12,000+ JSON 为 zone 变更,整个系统只在 PR 合并时跑一次。
这是一套 「把分布式问题降级为单仓 + Git + 一个 Zonefile 生成器」 的思路——本质和 GitHub 内部「treat your data as code」哲学同源。
战略意图
看组织下三个活跃仓库的分工,可以推断出完整服务架构:
| 仓库 | 角色 |
|---|---|
is-a-dev/register(本仓,10.4k★) | 数据平面(SoR):12k+ 用户注册记录,PR 即注册 |
is-a-dev/discord-bot | 运营平面:社区管理 / abuse 处理 / Discord 通知 |
is-a-dev/raw-api | 查询平面:把 SoR 编译成 v2.json → raw.is-a.dev |
战略上走的是 「self-service public utility」 路线:用户自助注册、机器自助查询、运营通过 Issue + Discord 处理违规。Cloudflare 平台层 + GitHub 协作层 + dnscontrol 编排层——三件事都不需要自己写代码。这是 「less software, more leverage」 的极致实践。无明显商业化意图,纯公共物品。
核心价值提炼
创新之处
-
PR-as-Registry(PR 即注册中心) — 新颖度 4/5,实用性 5/5,可迁移性 5/5
- 把「用户注册一个公共资源」完全外包给 GitHub PR 流程——审核、合并、回滚、审计、权限、stale-bot 全部由 GitHub 免费提供。
- 整个 is-a-dev 服务 0 行应用代码。
-
三层校验矩阵(schema 单元测试 + DNSControl 编译 + Copilot LLM 评审) — 新颖度 3/5,实用性 5/5,可迁移性 4/5
- L1 AVA 5 个 test 文件覆盖 JSON / schema / IP / 嵌套 / owner / proxy
- L2
dnscontrol check验证 zone 一致性 - L3
.github/copilot-instructions.md让 LLM 按「剧本」(含 8 条 verbatim 错误消息)自动回复 PR 评审 - 三层互相正交,让 12k PR/月 80% 自动处理。
-
_zone-updatedTXT 内嵌时间戳 — 新颖度 4/5,实用性 4/5,可迁移性 5/5dnsconfig.js末尾无条件TXT(「_zone-updated」, Date.now())——把「zone 最后更新时间」嵌入 DNS 协议本身。- 外部监控器只需查一次 TXT 记录就能知道 zone 是否新鲜,零成本 SLA 探针。
-
disallowed-cnames.json防套娃(识别赞助商利益冲突) — 新颖度 4/5,实用性 3/5,可迁移性 3/5- 禁止用户 CNAME 到
*.cfargotunnel.com/*.workers.dev——Cloudflare 既是赞助商又是潜在滥用通道,设计者主动识别了这种利益冲突。 - 这是少见的「上游平台供应链风险」主动防御。
- 禁止用户 CNAME 到
-
嵌套子域强制父域 + 同 owner(用文件系统树做权限隐喻) — 新颖度 3/5,实用性 4/5,可迁移性 4/5
domains/docs.shockbs.json自动要求domains/shockbs.json存在 + owner 一致;父域有 NS 记录时豁免(控制权切给子域自己)。- 用 Git 目录的隐含树结构做权限代理——零代码。
-
「192.0.2.1 + URL 记录」实现保留子域黑洞 — 新颖度 3/5,实用性 4/5,可迁移性 4/5
reserved.json的 149 个子域全部指向192.0.2.1(RFC 5737 TEST-NET-1 标准黑洞 IP)同时挂URL: https://is-a.dev/reserved——DNS 解析黑洞 + 浏览器跳到说明页。
可复用的模式与技巧
| 模式 | 适用场景 |
|---|---|
| PR-as-Registry | 任何「低频写、强审计、用户自助」的注册表:邮箱别名、API key、Bot 邀请、Feature Flag 名单、hackathon team 注册、企业内公共脚本命名空间 |
| dnscontrol DSL 编译时编排 | 大量 DNS 记录(>1000 条)、多 provider 灾备、声明式 DNS-as-code |
| 三层 CI 校验矩阵(schema + 领域工具 + LLM 评审) | 高 PR 量 + 复杂业务规则 + 模板合规的开源治理项目 |
192.0.2.1 + URL 黑洞 | 任何「需要保留字 + 给用户教育」的平台 |
| 静态 raw API 跨仓推送(小文件聚合 + 独立仓托管 + GH Pages) | 无服务器场景下的轻量级只读 API |
_*-updated TXT 内嵌时间戳 | 任何「需要外部 SLA 观测」的服务 |
| CODEOWNERS 路径级自治 | 把「代码治理」和「人」的矩阵直接表达在文件里 |
关键设计决策
决策 1:Git-as-a-CMS(PR 即注册)
- 问题:传统域名注册需要 DB + 支付 + KYC + 管理面板,对一个免费服务来说工程量过重。
- 方案:每个用户提交一个
domains/<name>.json,通过 PR 流程完成「申请 → 审核 → 合并 → DNS 发布」全闭环。 - Trade-off:
- (+) 0 行运行时代码 / 0 服务器 / 0 数据库 / Git 自带版本控制 + diff + revert + 审计
- (+) GitHub PR review 工作流直接复用为「域名注册审核工作流」——免费获得 5,000+ PR/月免费额度(开源项目)、CODEOWNERS 自动指派、Stale Bot 自动关单
- (-) fork:star = 2.14:1(22,345 forks vs 10,417 stars)极反常——说明用户必须 fork 才能提交 PR,本质上是把「注册门槛」从 DNS 操作转嫁到 Git 知识门槛
- (-) 13,000 贡献者各自提交 1 条 JSON 的长尾 → 治理复杂度高(spam / abuse / 域名回收是核心痛点)
- 可迁移性:高。
决策 2:dnscontrol 编译时编排(无运行时服务)
- 问题:12k+ JSON 文件不能手工 push 到 Cloudflare。
- 方案:
dnsconfig.js是一个 dnscontrol 脚本,遍历./domains/*.json,编译时生成 zone file + 调 Cloudflare API 推送。无 cron、无 daemons。 - Trade-off:
- (+) 整个系统只在 PR 合并时跑一次(GitHub Actions on push to main)—— 0 持续成本
- (+)
D(domainName, registrar, dnsProvider, records, ignored)DSL 让「保留名」 / 「内部名」 / 「TXT 校验」全部声明式 - (-) Cloudflare 单点依赖(Issue #14153 60 条评论在评估迁移)
- 可迁移性:高(dnscontrol 支持 30+ DNS provider,迁移到 Route53 / DNSimple / Gandi 几乎零代码改动)。
决策 3:嵌套子域强制父域存在 + 同 owner
- 问题:用户可能
docs.shockbs.json但忘了建shockbs.json,DNS 残缺;或blog.alice.json用bob当 owner,破坏「嵌套即信任链」语义。 - 方案:
tests/domains.test.js两条规则:嵌套子域的每一级父域必须存在;嵌套子域的 owner.username 必须与最右端父域一致(除非父域有 NS 记录切出)。 - Trade-off:用 Git 仓的目录隐含树结构做权限代理——零代码。
- 可迁移性:高。
竞品格局与定位
竞品对比矩阵
| 维度 | is-a-dev/register | js-org/js.org | open-domains/register | thedev-me/register |
|---|---|---|---|---|
| Stars | 10,419 | 5,762 | 2,588 | 137 |
| 社区 | 通用(13k 贡献者) | 仅 JS 社区 | 通用 | 小众 |
| 注册流程 | 自动化 PR + AI 评审 | 半自动(人工改 _domains.js) | 手动为主 | 邮件申请 |
| DNS Provider | Cloudflare(dnscontrol 编译) | 单一 | 多 TLD | 单一 |
| DNS 记录类型 | A/AAAA/CAA/DS/MX/NS/SRV/TLSA/TXT/URL 全覆盖 | 基础 | 基础 | 基础 |
| 测试覆盖 | 5 个 .test.js(AVA 框架) | 几乎无 | 几乎无 | 无 |
| AI 评审 | 独创(copilot-instructions.md) | 无 | 无 | 无 |
| 规模(注册量) | 12,000+ | ~5,000 | <1,000 | <500 |
| 运营年限 | 5.7 年 | 10+ 年 | 较新 | 较新 |
差异化护城河
- 规模 + 自动化深度 + 治理成熟度——三层 CI 矩阵、PR-as-Registry、AI 评审剧本、嵌套子域树规则、保留词治理表,注册流程工程化是真护城河。
- dnscontrol 抽象——单一工具横跨多 provider,未来迁移成本极低。
- 14,500+ 月 commit 形成的「活文档」——任何潜在用户能直接
git clone看到所有规则和示例。
竞争风险
- Cloudflare 单点依赖(Issue #14153)—— 5 年后 Cloudflare 政策变化 / 取消 Project Alexandria 是最大商业变量。
- fork:star 2.14:1 长尾治理——13k 贡献者质量参差,spam / phishing / 商业滥用的运营成本是隐藏炸弹。
- js.org 老牌效应——开发者社区认知一旦形成,迁移成本极低,但新用户拉新更倾向「听过名字的」。
生态定位
「个人开发者最熟悉的 Git 流程 × Cloudflare 全球 DNS × 0 美元基础设施」——是 dev-portfolio 场景的「准公共物品」,类似早期 github.io / herokuapp.com 的「开发者免费地皮」角色。
套利机会分析
- 信息差:本仓 star 数在 free subdomain 赛道已是第一,但 PR-as-Registry 这一模式本身在国内 / 中文社区几乎无人讨论;可以拆解为「自托管 Git-as-CMS」通用方案,覆盖企业内部 / 黑客松 / 教学场景。
- 技术借鉴:
- 把 dnscontrol 引入企业内部自建 DNS 管理(>1000 条记录)。
- 把三层 CI 矩阵搬到自己高频 PR 的开源项目(LLM 评审剧本直接借鉴
copilot-instructions.md的 verbatim 文案套路)。 - 把「小文件聚合 → 独立仓 → GitHub Pages」模式搬到自己做轻量级只读 API 的场景。
- 生态位:「开发者免费地皮」这个细分几乎被它独占,且有先发 + 规模 + 工程化三重壁垒。
- 趋势判断:在 Cloudflare 继续赞助的前提下,未来 3 年仍是该赛道事实标准。唯一变量是 Cloudflare 政策变化(已有关注 Issue)。
风险与不足
- 单点商业依赖:完全依赖 Cloudflare 赞助的 Project Alexandria。
dnsconfig.js虽抽象但仍需重写 provider 适配才能迁。 - 运营治理复杂度:13k 长尾贡献者 + 22k fork 几乎必然引入 spam / phishing / 商业滥用,Issue 列表里 #14802(phishing 67 评论)、#26018(商业滥用 49 评论)说明这是持续痛点。
- fork:star 2.14:1 是双刃剑:拉新门槛低(fork 即用),但用户教育成本高(很多人 fork 后不知道怎么提 PR)。
- 缺失项:无 CHANGELOG、无 linter/formatter 配置(对极简仓可接受)、核心业务文档(嵌套规则 / 保留字 / 验证流程)外站到
docs.is-a.dev,本仓 README 引用但不内嵌——对 fork / 学习者门槛略高。 - 0 行运行时代码反过来是风险:任何需要「运行时行为」的功能(rate limit / 实时验证 / 软删除过渡期)都难以引入。
行动建议
- 如果你要用它:直接 fork + 提 PR 即可,参考
.github/PULL_REQUEST_TEMPLATE.md的 7 项 checklist + 嵌套子域的父域规则。注意disallowed-cnames.json(不能指向*.cfargotunnel.com)。 - 如果你要学它:重点研读 4 个文件:
dnsconfig.js(137 行,dnscontrol DSL 范式)tests/records.test.js(5 个 test 文件中信息密度最高).github/copilot-instructions.md(LLM 评审剧本,verbatim 文案套路)util/reserved.json+disallowed-cnames.json+internal.json(治理表设计)
- 如果你要 fork 它:
- 想做「子域名服务变种」:换 DNS provider(Route53 / DNSimple)即可,dnscontrol 抽象已就位。
- 想做「PR-as-Registry 通用平台」:抽象掉 domain 概念,换成 email alias / API key / webhook registry。
- 想做「中文开发者社区版」:补 i18n(README + copilot 剧本 + ToS)即可,其他基础设施全复用。
知识入口
| 资源 | 链接 |
|---|---|
| DeepWiki | 已收录(2025-04-20 索引) |
| Zread.ai | 未收录(403 拒绝) |
| 关联论文 | 无(工程型项目,无学术对应) |
| 在线 Demo | https://is-a.dev(域名解析结果可作为活 demo) |
| 配套文档站 | https://docs.is-a.dev |
| 配套查询 API | https://raw.is-a.dev(`v2.json`) |
分析日期:2026-06-06
分析方法:三阶段 Orchestrator-Worker(Phase 1 网络分析 + Phase 2 元分析 + Phase 3 内容分析)
关键数据来源:tmp/repo-facts-register.json(由 src/scripts/collect_repo_facts.py 一次性采集)