Tech
htmx 4.0 最痛的变更是作者故意的:废掉隐式继承,用一次升级痛换几十年的明白
2026年8月29日 · 保罗·格雷厄姆《黑客与画家》~1 min read
破坏性变更的公告,一般写得跟道歉信似的:没办法,麻烦大家改代码。2026 年 8 月 28 日 htmx 4.0 的公告反着来:升级里最疼的那条,作者明说是故意的。他亲手废了自己当年设计的隐式继承,让全体老用户回去改模板,理由就一条:显式的代码,过几年还看得明白。
30 秒读懂
htmx 4.0 于 2026-08-28 正式发布,Hacker News 帖约 484 分、120 条评论;新增 <hx-partial> 与 morphing swap。
最大的破坏性变更:属性不再隐式往子元素传,想传必须显式写 :inherited;官方自己承认这条升级负担最大。
作者把一半成本扛在自己身上:npm 的 latest 停在 2.x 直到 2027 年初,CDN 用户不会被动升级,另配官方升级检查工具。
《黑客与画家》那笔账:程序首先是写给人读的;htmx 4 把方便从写的人手里拿走,还给以后读代码的人。
1 变更
htmx 4.0 发布,最疼的一刀是作者照着自己当年的图纸砍的
这个大版本的疼,是设计出来的。
底层从 XMLHttpRequest 整个迁到 fetch(),给流式 HTML 铺路;加了 <hx-partial> 标签和 morphing swap。Hacker News 上约 484 分、120 条评论,热评里有人认真发问「为什么跳过了版本 3?」(从 2 直接跳到 4,社区里早成梗了)。真让老用户倒吸凉气的是另一条:属性隐式继承,废了。原来在父元素上写一个 hx-* 属性,子子孙孙自动继承,这套模仿 CSS 的设计从初版就在;4.0 起,想继承,必须显式写 :inherited。作者 Carson Gross 在蒙大拿州立大学教书,讲 hypermedia 讲了多年,公告里把话挑明:这条升级负担最大,换的是长期可读性。
⚡ 为什么值得看: 大版本一般靠新功能哄人迁移,htmx 4 倒好,卖点之一是「拿走一个用了多年的便利」。框架作者主动给用户制造升级痛,这种事少见,值得看他这笔账怎么算。
2 机制
隐式继承省的是写代码那一秒,收的是读代码那十年
这份方便到底方便了谁,得拆开算。
隐式继承写起来是真爽:表单外层写一个 hx-target,里头十个按钮全归它管,一行顶十行。账在几个月后才到。另一个人盯着其中一个按钮,想知道请求结果到底往哪儿放,元素身上啥都没有,只能一层层往上翻祖先节点,在脑子里拼出「这属性是从哪儿传下来的」。多半那人就是你自己,细节却忘光了。写的人省一秒,读的人回回都得交钱,而代码被读的次数远多过被写。
旧办法
hx-target 写在父级,悄悄管住全体子孙。元素自己一身清爽,行为却来自三层外的祖宗,读的人全靠翻。
新办法
想往下传,写 hx-target:inherited,一眼看出「这里有东西在往下发」;没带这个后缀的属性,只管自家。
打个比方
隐式继承像装修走暗线还不留图纸:墙面清爽了,哪天一盏灯不亮,不知道该凿哪面墙,只能顺着感觉敲。显式继承等于每根线都走明线槽、在墙上标清走向,看着没那么利落,可师傅一抬头就知道电从哪儿来。
HTMX 4 MOVES THE COST OF 'CONVENIENT' FROM READERS BACK TO WRITERS HTMX 3 · IMPLICIT INHERITANCE HTMX 4 · EXPLICIT :INHERITED Parent element hx-target="#out" child A child B child C attribute written once, silently applied below write: 1 second · read: guess every time Parent element hx-target:inherited="#out" child A child B child C declared at the source — visible right there write: +10 keystrokes · read: one glance npm 'latest' stays on 2.x until early 2027 — the author absorbs half the migration pain himself implicit flow — reader reconstructs explicit flow — declared by writer Source: the htmx 4.0 official release announcement (2026-08-28). Implicit attribute inheritance is abolished in favor of an explicit :inherited marker, and the npm 'latest' tag stays on 2.x until early 2027 as a bridge. Reading: the one second the writer saved was repaid by every reader who had to guess — htmx 4 sends the bill back to the writer.
3 书框架
好设计是简朴的,品味看你决定让谁掏钱
这笔账,《黑客与画家》二十多年前就算过。
保罗·格雷厄姆在书里说:程序写出来是给人看的,顺带能在机器上跑。按这个标准,隐式继承其实是写给机器的:机器不在乎属性从哪儿来,反正查得到,吃亏的只有人。书里列了好设计的十四条标准,头一条是简单,而简单常意味着做减法。htmx 4 干的就是减法,砍掉的不是烂代码,是一个运转正常、用户还挺喜欢的聪明设计。
核心 htmx 4 把成本从未来的读者挪回今天的作者:官方承认隐式继承废除是升级负担最大的一条,同时把 npm latest 停在 2.x 直到 2027 年初、配上升级检查工具,等于自己垫了一半的账 。
Carson Gross 有个口号叫 100-year web services:把 Web 服务当能维护一百年的东西来造。一个服务真要活几十年,写它的那几个月和读它、修它的那几十年,分量不在一个级别;为读的人优化,就是为寿命里占大头的那段优化。
4 另一面
升级税是真的,作者先把枷锁套在了自己身上
得说实话:这波迁移对存量项目不轻松,作者也没装轻松。
模板里每个靠继承吃饭的属性都得排查补后缀,这活儿没法全自动。其余几条,各有各的改法:
变更 老用户要做什么 官方给的缓冲
隐式继承废除 逐个属性补 :inherited 升级检查工具帮你扫
事件统一为 htmx:phase:action 监听器全部改名:htmx:beforeRequest → htmx:before:request 命名从此有统一规律,学一次管全部
历史缓存去掉 localStorage 接受后退变成重新请求 可选的 sessionStorage 扩展
大版本本身 自己定什么时候升 npm latest 停在 2.x 直到 2027 年初,CDN 用户不会被动升级
最见诚意的是最后一行。npm 的 latest 是上游手里最顺手的一根杠杆,指针一动,全世界的构建跟着动。这杠杆的分量我掂过:2021 年一个小工具的构建说挂就挂,上游一个 npm 小包的作者删库跑路,打包机上恰好有缓存才没停摆,打那以后 node_modules 定期拷进一块移动硬盘,贴纸上就俩字:别笑。上游翻车从来不跟你商量;htmx 这回反着来,把杠杆主动搁下,latest 不指向最新版,升不升、什么时候升,你自己定。另外两条逻辑一致:localStorage 方案被砍,因为第三方 JS 改 DOM 会把缓存弄脏,与其存可能已脏的快照,不如老实重新请求;事件改名,是把几十个零散名字换成一条规律。说白了都是同一个动作:把暗坑换成明规矩。
口径:分数与评论数取自发稿时的 Hacker News 快照,还会继续变;本文没有列全 4.0 的变更,细节以 four.htmx.org 官方公告为准。
5 落点
每个「省事」都在偷偷收费,先弄清收的是谁的钱
这个判据不光框架作者用得上。
写代码还是做产品,每个省事的默认值背后都蹲着一个收费对象。下回再想加一个,先过三问:省的是谁的事,写的人还是读的人?账什么时候到期,下周还是三年后?将来要把这个便利收回去,迁移费付不付得起?htmx 4 的答卷是:为了读的人,成本现在付,作者垫一半。这账适不适合你,我替你答不了:你那项目能活到值得这么算的那天吗?作者赌的是一百年,才下得了这刀;你写的要是下个季度就下线的活动页,那份省事,随便用。
取材声明:本文框架取材自保罗·格雷厄姆《黑客与画家》;htmx 4.0 事实来自其官方发布公告与 Hacker News 讨论,细节以原公告为准。
技术
htmx 4.0 最痛的变更是作者故意的:废掉隐式继承,用一次升级痛换几十年的明白
2026年8月29日 · 保罗·格雷厄姆《黑客与画家》约 5 分钟
破坏性变更的公告,一般写得跟道歉信似的:没办法,麻烦大家改代码。2026 年 8 月 28 日 htmx 4.0 的公告反着来:升级里最疼的那条,作者明说是故意的。他亲手废了自己当年设计的隐式继承,让全体老用户回去改模板,理由就一条:显式的代码,过几年还看得明白。
30 秒读懂
htmx 4.0 于 2026-08-28 正式发布,Hacker News 帖约 484 分、120 条评论;新增 <hx-partial> 与 morphing swap。
最大的破坏性变更:属性不再隐式往子元素传,想传必须显式写 :inherited;官方自己承认这条升级负担最大。
作者把一半成本扛在自己身上:npm 的 latest 停在 2.x 直到 2027 年初,CDN 用户不会被动升级,另配官方升级检查工具。
《黑客与画家》那笔账:程序首先是写给人读的;htmx 4 把方便从写的人手里拿走,还给以后读代码的人。
1 变更
htmx 4.0 发布,最疼的一刀是作者照着自己当年的图纸砍的
这个大版本的疼,是设计出来的。
底层从 XMLHttpRequest 整个迁到 fetch(),给流式 HTML 铺路;加了 <hx-partial> 标签和 morphing swap。Hacker News 上约 484 分、120 条评论,热评里有人认真发问「为什么跳过了版本 3?」(从 2 直接跳到 4,社区里早成梗了)。真让老用户倒吸凉气的是另一条:属性隐式继承,废了。原来在父元素上写一个 hx-* 属性,子子孙孙自动继承,这套模仿 CSS 的设计从初版就在;4.0 起,想继承,必须显式写 :inherited。作者 Carson Gross 在蒙大拿州立大学教书,讲 hypermedia 讲了多年,公告里把话挑明:这条升级负担最大,换的是长期可读性。
⚡ 为什么值得看: 大版本一般靠新功能哄人迁移,htmx 4 倒好,卖点之一是「拿走一个用了多年的便利」。框架作者主动给用户制造升级痛,这种事少见,值得看他这笔账怎么算。
2 机制
隐式继承省的是写代码那一秒,收的是读代码那十年
这份方便到底方便了谁,得拆开算。
隐式继承写起来是真爽:表单外层写一个 hx-target,里头十个按钮全归它管,一行顶十行。账在几个月后才到。另一个人盯着其中一个按钮,想知道请求结果到底往哪儿放,元素身上啥都没有,只能一层层往上翻祖先节点,在脑子里拼出「这属性是从哪儿传下来的」。多半那人就是你自己,细节却忘光了。写的人省一秒,读的人回回都得交钱,而代码被读的次数远多过被写。
旧办法
hx-target 写在父级,悄悄管住全体子孙。元素自己一身清爽,行为却来自三层外的祖宗,读的人全靠翻。
新办法
想往下传,写 hx-target:inherited,一眼看出「这里有东西在往下发」;没带这个后缀的属性,只管自家。
打个比方
隐式继承像装修走暗线还不留图纸:墙面清爽了,哪天一盏灯不亮,不知道该凿哪面墙,只能顺着感觉敲。显式继承等于每根线都走明线槽、在墙上标清走向,看着没那么利落,可师傅一抬头就知道电从哪儿来。
「方便」收谁的费:htmx 4 把成本从读代码的人移回写代码的人 HTMX 3 · 隐式继承 HTMX 4 · 显式 :inherited 父元素 hx-target="#out" 子元素 A 子元素 B 子元素 C 属性写一次,悄悄作用于下面的子元素 写时 1 秒,读时每次都要猜 父元素 hx-target:inherited="#out" 子元素 A 子元素 B 子元素 C 继承在源头声明,就写在眼前 写时多敲 10 个字符,读时一眼看到 npm latest 停在 2.x 直到 2027 年初——作者自己扛下一半迁移之痛 隐式流向——读者脑内重建 显式流向——写者明确声明 来源:htmx 4.0 官方发布公告(2026-08-28)。隐式属性继承被废除,改为显式 :inherited 标记;npm latest 停在 2.x 至 2027 年初。解读:写代码的人省下的一秒,过去由每个读代码的人加倍偿还——htmx 4 把这笔账退回给写的人。
3 书框架
好设计是简朴的,品味看你决定让谁掏钱
这笔账,《黑客与画家》二十多年前就算过。
保罗·格雷厄姆在书里说:程序写出来是给人看的,顺带能在机器上跑。按这个标准,隐式继承其实是写给机器的:机器不在乎属性从哪儿来,反正查得到,吃亏的只有人。书里列了好设计的十四条标准,头一条是简单,而简单常意味着做减法。htmx 4 干的就是减法,砍掉的不是烂代码,是一个运转正常、用户还挺喜欢的聪明设计。
核心 htmx 4 把成本从未来的读者挪回今天的作者:官方承认隐式继承废除是升级负担最大的一条,同时把 npm latest 停在 2.x 直到 2027 年初、配上升级检查工具,等于自己垫了一半的账 。
Carson Gross 有个口号叫 100-year web services:把 Web 服务当能维护一百年的东西来造。一个服务真要活几十年,写它的那几个月和读它、修它的那几十年,分量不在一个级别;为读的人优化,就是为寿命里占大头的那段优化。
4 另一面
升级税是真的,作者先把枷锁套在了自己身上
得说实话:这波迁移对存量项目不轻松,作者也没装轻松。
模板里每个靠继承吃饭的属性都得排查补后缀,这活儿没法全自动。其余几条,各有各的改法:
变更 老用户要做什么 官方给的缓冲
隐式继承废除 逐个属性补 :inherited 升级检查工具帮你扫
事件统一为 htmx:phase:action 监听器全部改名:htmx:beforeRequest → htmx:before:request 命名从此有统一规律,学一次管全部
历史缓存去掉 localStorage 接受后退变成重新请求 可选的 sessionStorage 扩展
大版本本身 自己定什么时候升 npm latest 停在 2.x 直到 2027 年初,CDN 用户不会被动升级
最见诚意的是最后一行。npm 的 latest 是上游手里最顺手的一根杠杆,指针一动,全世界的构建跟着动。这杠杆的分量我掂过:2021 年一个小工具的构建说挂就挂,上游一个 npm 小包的作者删库跑路,打包机上恰好有缓存才没停摆,打那以后 node_modules 定期拷进一块移动硬盘,贴纸上就俩字:别笑。上游翻车从来不跟你商量;htmx 这回反着来,把杠杆主动搁下,latest 不指向最新版,升不升、什么时候升,你自己定。另外两条逻辑一致:localStorage 方案被砍,因为第三方 JS 改 DOM 会把缓存弄脏,与其存可能已脏的快照,不如老实重新请求;事件改名,是把几十个零散名字换成一条规律。说白了都是同一个动作:把暗坑换成明规矩。
口径:分数与评论数取自发稿时的 Hacker News 快照,还会继续变;本文没有列全 4.0 的变更,细节以 four.htmx.org 官方公告为准。
5 落点
每个「省事」都在偷偷收费,先弄清收的是谁的钱
这个判据不光框架作者用得上。
写代码还是做产品,每个省事的默认值背后都蹲着一个收费对象。下回再想加一个,先过三问:省的是谁的事,写的人还是读的人?账什么时候到期,下周还是三年后?将来要把这个便利收回去,迁移费付不付得起?htmx 4 的答卷是:为了读的人,成本现在付,作者垫一半。这账适不适合你,我替你答不了:你那项目能活到值得这么算的那天吗?作者赌的是一百年,才下得了这刀;你写的要是下个季度就下线的活动页,那份省事,随便用。
取材声明:本文框架取材自保罗·格雷厄姆《黑客与画家》;htmx 4.0 事实来自其官方发布公告与 Hacker News 讨论,细节以原公告为准。
テクノロジー
htmx 4.0 最痛的变更是作者故意的:废掉隐式继承,用一次升级痛换几十年的明白
2026年8月29日 · 保罗·格雷厄姆《黑客与画家》約 5 分
破坏性变更的公告,一般写得跟道歉信似的:没办法,麻烦大家改代码。2026 年 8 月 28 日 htmx 4.0 的公告反着来:升级里最疼的那条,作者明说是故意的。他亲手废了自己当年设计的隐式继承,让全体老用户回去改模板,理由就一条:显式的代码,过几年还看得明白。
30 秒读懂
htmx 4.0 于 2026-08-28 正式发布,Hacker News 帖约 484 分、120 条评论;新增 <hx-partial> 与 morphing swap。
最大的破坏性变更:属性不再隐式往子元素传,想传必须显式写 :inherited;官方自己承认这条升级负担最大。
作者把一半成本扛在自己身上:npm 的 latest 停在 2.x 直到 2027 年初,CDN 用户不会被动升级,另配官方升级检查工具。
《黑客与画家》那笔账:程序首先是写给人读的;htmx 4 把方便从写的人手里拿走,还给以后读代码的人。
1 变更
htmx 4.0 发布,最疼的一刀是作者照着自己当年的图纸砍的
这个大版本的疼,是设计出来的。
底层从 XMLHttpRequest 整个迁到 fetch(),给流式 HTML 铺路;加了 <hx-partial> 标签和 morphing swap。Hacker News 上约 484 分、120 条评论,热评里有人认真发问「为什么跳过了版本 3?」(从 2 直接跳到 4,社区里早成梗了)。真让老用户倒吸凉气的是另一条:属性隐式继承,废了。原来在父元素上写一个 hx-* 属性,子子孙孙自动继承,这套模仿 CSS 的设计从初版就在;4.0 起,想继承,必须显式写 :inherited。作者 Carson Gross 在蒙大拿州立大学教书,讲 hypermedia 讲了多年,公告里把话挑明:这条升级负担最大,换的是长期可读性。
⚡ 为什么值得看: 大版本一般靠新功能哄人迁移,htmx 4 倒好,卖点之一是「拿走一个用了多年的便利」。框架作者主动给用户制造升级痛,这种事少见,值得看他这笔账怎么算。
2 机制
隐式继承省的是写代码那一秒,收的是读代码那十年
这份方便到底方便了谁,得拆开算。
隐式继承写起来是真爽:表单外层写一个 hx-target,里头十个按钮全归它管,一行顶十行。账在几个月后才到。另一个人盯着其中一个按钮,想知道请求结果到底往哪儿放,元素身上啥都没有,只能一层层往上翻祖先节点,在脑子里拼出「这属性是从哪儿传下来的」。多半那人就是你自己,细节却忘光了。写的人省一秒,读的人回回都得交钱,而代码被读的次数远多过被写。
旧办法
hx-target 写在父级,悄悄管住全体子孙。元素自己一身清爽,行为却来自三层外的祖宗,读的人全靠翻。
新办法
想往下传,写 hx-target:inherited,一眼看出「这里有东西在往下发」;没带这个后缀的属性,只管自家。
打个比方
隐式继承像装修走暗线还不留图纸:墙面清爽了,哪天一盏灯不亮,不知道该凿哪面墙,只能顺着感觉敲。显式继承等于每根线都走明线槽、在墙上标清走向,看着没那么利落,可师傅一抬头就知道电从哪儿来。
「便利」のツケは誰が払う——htmx 4 はコストを読む人から書く人へ戻した HTMX 3 · 暗黙の継承 HTMX 4 · 明示 :inherited 親要素 hx-target="#out" 子要素 A 子要素 B 子要素 C 属性は一度書くだけで、下の要素に静かに効く 書く時 1 秒、読む時は毎回推測 親要素 hx-target:inherited="#out" 子要素 A 子要素 B 子要素 C 継承は書いた場所で宣言、その場で見える 書く時 +10 文字、読む時は一目で分かる npm の latest は 2027 年初めまで 2.x のまま——移行の痛みの半分は作者が自ら背負う 暗黙の流れ——読者が頭の中で再構築 明示の流れ——書き手が宣言 出典:htmx 4.0 公式リリース発表(2026-08-28)。暗黙の属性継承は廃止され、明示的な :inherited 記法に。npm の latest は 2027 年初めまで 2.x のまま。解釈:書く人が節約した 1 秒は、読む人全員が払わされてきた——htmx 4 はその請求書を書く人へ返した。
3 书框架
好设计是简朴的,品味看你决定让谁掏钱
这笔账,《黑客与画家》二十多年前就算过。
保罗·格雷厄姆在书里说:程序写出来是给人看的,顺带能在机器上跑。按这个标准,隐式继承其实是写给机器的:机器不在乎属性从哪儿来,反正查得到,吃亏的只有人。书里列了好设计的十四条标准,头一条是简单,而简单常意味着做减法。htmx 4 干的就是减法,砍掉的不是烂代码,是一个运转正常、用户还挺喜欢的聪明设计。
核心 htmx 4 把成本从未来的读者挪回今天的作者:官方承认隐式继承废除是升级负担最大的一条,同时把 npm latest 停在 2.x 直到 2027 年初、配上升级检查工具,等于自己垫了一半的账 。
Carson Gross 有个口号叫 100-year web services:把 Web 服务当能维护一百年的东西来造。一个服务真要活几十年,写它的那几个月和读它、修它的那几十年,分量不在一个级别;为读的人优化,就是为寿命里占大头的那段优化。
4 另一面
升级税是真的,作者先把枷锁套在了自己身上
得说实话:这波迁移对存量项目不轻松,作者也没装轻松。
模板里每个靠继承吃饭的属性都得排查补后缀,这活儿没法全自动。其余几条,各有各的改法:
变更 老用户要做什么 官方给的缓冲
隐式继承废除 逐个属性补 :inherited 升级检查工具帮你扫
事件统一为 htmx:phase:action 监听器全部改名:htmx:beforeRequest → htmx:before:request 命名从此有统一规律,学一次管全部
历史缓存去掉 localStorage 接受后退变成重新请求 可选的 sessionStorage 扩展
大版本本身 自己定什么时候升 npm latest 停在 2.x 直到 2027 年初,CDN 用户不会被动升级
最见诚意的是最后一行。npm 的 latest 是上游手里最顺手的一根杠杆,指针一动,全世界的构建跟着动。这杠杆的分量我掂过:2021 年一个小工具的构建说挂就挂,上游一个 npm 小包的作者删库跑路,打包机上恰好有缓存才没停摆,打那以后 node_modules 定期拷进一块移动硬盘,贴纸上就俩字:别笑。上游翻车从来不跟你商量;htmx 这回反着来,把杠杆主动搁下,latest 不指向最新版,升不升、什么时候升,你自己定。另外两条逻辑一致:localStorage 方案被砍,因为第三方 JS 改 DOM 会把缓存弄脏,与其存可能已脏的快照,不如老实重新请求;事件改名,是把几十个零散名字换成一条规律。说白了都是同一个动作:把暗坑换成明规矩。
口径:分数与评论数取自发稿时的 Hacker News 快照,还会继续变;本文没有列全 4.0 的变更,细节以 four.htmx.org 官方公告为准。
5 落点
每个「省事」都在偷偷收费,先弄清收的是谁的钱
这个判据不光框架作者用得上。
写代码还是做产品,每个省事的默认值背后都蹲着一个收费对象。下回再想加一个,先过三问:省的是谁的事,写的人还是读的人?账什么时候到期,下周还是三年后?将来要把这个便利收回去,迁移费付不付得起?htmx 4 的答卷是:为了读的人,成本现在付,作者垫一半。这账适不适合你,我替你答不了:你那项目能活到值得这么算的那天吗?作者赌的是一百年,才下得了这刀;你写的要是下个季度就下线的活动页,那份省事,随便用。
取材声明:本文框架取材自保罗·格雷厄姆《黑客与画家》;htmx 4.0 事实来自其官方发布公告与 Hacker News 讨论,细节以原公告为准。