KISS = Keep It Simple, Stupid。不是口号——而是每个决策的过滤器。
大多数框架"支持"Web 标准。KISS 就是 Web 标准。
你的代码不依赖 KISS 的抽象。把它换掉,你的 Hono/Lit/Vite 代码 依然能跑。
纯 ESM,零 CJS 仅 Vite,无第二个构建工具 不在输出上打补丁
KISS 不发明东西。它以最小开销连接现有标准工具。
框架 = 1 个 Vite 插件(连接器,不是新抽象)。
零交互页面:0 KB KISS 运行时。单个 Island:~6 KB(Lit 本身)。
复用 Hono/Vite/Lit 生态 新依赖需要 ADR
KISS 推荐 Lit,但你可以用别的。你可以不用 Lit 就用 @kissjs/core 做 SSR。 你也可以不用 KISS 就用 Lit。
Package Islands 自动探测——无需手动注册。只需从你的包
export 一个 islands 数组,KISS 就能找到。
Lit 不是强制 peerDependency 无强制验证方案 零配置 Island 发现
纯 ESM 输出运行在任何支持 ESM 的运行时:Deno、Node、Bun、Cloudflare Workers。
无平台特定硬编码 deno.json 是开发工具,不是运行时依赖
KISS 默认零 JS。按组件选择加入。没有 SPA——这是架构,不是疏忽。
| 层级 | 内容 | JS 大小 |
|---|---|---|
| 0 | HTML + DSD(声明式 Shadow DOM) | 0 KB |
| 1 | 部分 Islands 带懒 Hydration | ~6 KB / island |
没有层级 2 SPA,没有层级 3 实时,没有层级 4 CSR。这不是缺憾——这是 KISS 架构 S 约束定义的边界。
五大哲学支柱描述如何做决策。KISS 架构(K·I·S·S)约束定义 什么框架强制执行。
| 哲学支柱 | 架构约束 | 关系 |
|---|---|---|
| Web 标准优先 | 全部四个(K·I·S·S) | 标准是每个约束的基础 |
| 最小化增强 | I(隔离) | 最小 JS = 只有 Islands 获得 JS |
| 无框架绑定 | I(隔离) | Web Components = 零框架绑定 |
| 无运行时绑定 | S(静态) | 纯静态文件 = 无运行时依赖 |
| 渐进增强 | K + S(知识 + 语义) | 构建时知识 + 语义基线 |
每个特性必须通过能力阶梯。低层优先,始终如此:
| 层级 | 技术 | 仅在何时使用 |
|---|---|---|
| L0 | HTML5 语义 | 结构、内容、导航 |
| L1 | CSS | 视觉、布局、动画、响应式 |
| L2 | 平台 APIs | Clipboard、IntersectionObserver、matchMedia |
| L3 | Hono / Vite / Lit | 路由、构建、组件封装 |
| L4 | 自定义代码 | Island hydration、RPC、插件逻辑 |
跳过一层 = 违反设计哲学。参见 KISS 架构 获取完整决策树。
每次提交前,问自己:
1. 新依赖? → 是否违反"最小化增强"?
2. 修改了构建?→ 是否违反"Web 标准优先"?
3. 新抽象? → 你在重新发明轮子吗?
4. 平台代码? → 是否违反"无运行时绑定"?
5. 强制选择? → 是否违反"无框架绑定"?
6. 添加了 JS? → 低层能做吗?
7. 破坏了 Shadow DOM? → 有 DSD 兼容的替代方案吗?任何"是"都需要一份 ADR(架构决策记录)。
| 框架 | HTTP | UI | 构建 | DSD | Jamstack | 全标准 |
|---|---|---|---|---|---|---|
| Next.js | 自定义 | React | Webpack | — | 部分 | 0/3 |
| Astro | 自定义 | 任意 | ESM | — | 是 | 1/3 |
| Fresh | 自定义 | Preact | ESM | — | 否 | 1/3 |
| KISS | Fetch API | Web Components | ESM | ✓ | 是 | 3/3 |