dif.sh
集成在代码库中的 Markdown 功能开关管理工具
产品简介
dif.sh 是一款将功能开关(Feature Flag)和 A/B 测试直接嵌入代码库的开发者工具。它的核心理念是:功能开关和实验不需要独立的 SaaS 控制台,一切都在代码仓库里,以 Markdown 文件的形式存在。每个功能开关或实验都是一个独立的 .md 文件,与代码一起版本化管理,随代码审查流程发布和归档。coding agent 在每次启动时自动读取 dif/context.json,将所有活跃的实验和开关加载到上下文里,不需要再手动查阅独立平台。
核心功能
Markdown 文件驱动
每个功能开关或实验都是 experiments/active/ 目录下的一个 .md 文件,包含开关状态、负责人、适用场景、分桶权重、实验假设、决策记录等完整信息。文件格式统一,版本化管理,PR 可审查,diff 可对比。
Coding Agent 自动上下文
每次 dif build 会自动生成 dif/context.json,列出所有活跃开关、实验变体和近期实验结论。coding agent 启动时自动读取这个文件,将实验状态像 CLAUDE.md 一样带入工作上下文,无需人工同步。
冲突检测与 CI 集成
dif build 在编译时解析排斥图(exclusion graph),如果两个活跃实验会分桶到同一用户,构建直接失败,报错信息精确到冲突的两个实验 ID。拦截发生在 CI,不发生在生产环境。
灵活的分桶与人群定向
支持按国家、用户计划、访问类型等属性声明人群条件,属性值在运行时注入,无需在代码里硬编码用户列表。一次声明,多次复用,排除规则和包含规则可组合使用。
实验结论管理
dif conclude 命令将已结束实验归档到 dif/experiments/concluded/,自动生成决策块摘要,并将结论追加到所在界面的 surfaces 日志中,为下一个实验提供历史背景。
数据分析集成
添加 Dif Cloud Key 后,dif.track() 自动计算提升度,无需在代码里写 Join 逻辑。也可以使用 dif init --events custom,将事件转发到 Segment、Amplitude 或数据仓库,完全自建分析链路。
多语言 SDK 支持
提供 TypeScript / Node.js、Python、Go、Ruby 等多语言 SDK,跨技术栈团队均可使用,同一文件格式跨语言共享。
特色优势
dif.sh 最大的差异化在于把实验元数据当成代码来处理,而不是当成数据库记录。这带来了三个显著优势:第一,开关状态和实验结论随代码一起走 Git 流程,审计和回滚逻辑与代码变更完全对齐;第二,coding agent 在每次工作时自动感知当前所有实验状态,不需要产品经理手动同步到文档;第三,所有历史实验结论都积累在 surfaces 目录中,形成团队知识资产,新成员可以快速了解每个界面做过的实验和学到的结论。
应用场景
电商Checkout流程优化:在不同地域用户间进行结账按钮文案实验,dif.conclude 自动归档结论并保留决策依据。
SaaS 定价页灰度发布:通过 audience 定向在特定用户群测试新定价策略,配合 staged rollout 分阶段放量。
机器学习模型切换:在生产环境中用功能开关控制不同模型版本的分桶比例,结合 dif.build 的冲突检测防止多实验重叠。
Marketing 活动落地页测试:创意团队提交 Markdown 文件,engineering review 后自动在代码中生效,全程无需平台切换。
适用人群
后端和前端工程师、产品经理、增长团队、DevOps 工程师,以及在 AI 编程工作流中使用 coding agent 的开发者。
出品方
dif.sh 由独立开发团队维护,GitHub 仓库位于 github.com/dif-sh/dif,核心贡献者来自工程化实验领域。
更新动态
持续维护中,最新版本强化了 self-host 部署选项和 CLI 多语言输出格式支持。
评论与建议
登录 后参与评论或提建议