CoreBunch/Instatic
摘要
Instatic是一个自托管的、MIT许可的CMS,它将可视化编辑器、内容引擎和发布器集成在单个Bun服务器中,输出干净语义化的HTML/CSS,无需框架运行时。
查看缓存全文
缓存时间: 2026/06/30 17:27
CoreBunch/Instatic 源代码:https://github.com/CoreBunch/Instatic
Instatic
拥有你的网站。热爱构建它。
一个自托管的 CMS,其中的可视化编辑器、内容引擎和发布器都运行在一个 Bun 服务器中——而它生成的页面干净到可以直接查看源代码。
发行版(https://github.com/corebunch/instatic/releases) 许可证:MIT 运行时:Bun (https://bun.sh) TypeScript (https://www.typescriptlang.org/)
在 YouTube 上观看 Instatic 的介绍视频。
一个现代网站通常意味着组装一个技术栈:一个无头 CMS、一个框架、一个主机、一个表单服务、一个分析供应商、一个图片 CDN——每个都有自己的账单、控制面板和凌晨两点的故障。Instatic 则正好相反。一个 Bun 服务器承载了所有东西——画布编辑器、内容引擎、媒体、认证、表单、插件和发布器——你可以将它运行在任何你喜欢的地方,后端由 SQLite 或 Postgres 支撑。
而另一端输出的东西,正是大多数构建者默默妥协的部分:简洁的语义 HTML 和紧凑的 CSS,页面上没有留下编辑器的任何机制。没有框架运行时,没有构建器属性,没有 div 汤。网站的加载速度就像静态文件一样,因为大多数情况下,它确实就是静态文件。
MIT 许可证。自托管。完全属于你。
一键部署
Railway 是让 Instatic 上线最快的方式。选择一个模板,点击按钮,等待大约两分钟。就这样。它会自动生成密钥,挂载存储卷,并设置健康检查。你甚至不用打开终端。
一分钟上线,未经剪辑。
| 提供商 | 数据库 | 适用场景 | 部署 |
|---|---|---|---|
| Railway · 推荐 | SQLite | 单个网站——博客、作品集、小型企业 | 部署 → (https://railway.com/deploy/instatic-cms-sqlite?referralCode=Zm9bVJ&utm_medium=integration&utm_source=template&utm_campaign=generic) |
| Railway | Postgres | 多个作者、托管备份、可扩展 | 部署 → (https://railway.com/deploy/instatic-cms-postgres?referralCode=Zm9bVJ&utm_medium=integration&utm_source=template&utm_campaign=generic) |
| Render | — | — | 即将推出 |
| Fly.io | — | — | 即将推出 |
| DigitalOcean | — | — | 即将推出 |
对于大多数网站来说,SQLite 是合适的默认选择。当你有一个团队的作者或需要托管数据库备份时,再考虑 Postgres。
更新只需重新部署
当新的 Instatic 版本可用时,通过重新部署最新的镜像来更新。你的数据库和上传文件保留在挂载的存储卷上,因此应用容器可以替换,而无需从头重建整个网站。
更喜欢自己的硬件?Instatic 是一个单一的 Docker 镜像:
INSTATIC_IMAGE=ghcr.io/corebunch/instatic:latest docker compose -f compose.prod.yml -f compose.sqlite.yml up -d
关于 VPS、Postgres、HTTPS(Caddy)、Render 和备份的完整指南,请查看 docs/deployment。
一个工具,贯穿网站整个生命周期
大多数工具只做一件事,然后把剩下的交给你。你在一个地方设计,在另一个地方构建,在其他地方保存内容,然后再从第四个地方接入分析。Instatic 做所有事情。以下是盒子里的实际内容。
🎨 设计
编辑器是一个真正的画布,而不是一个带有预览窗格的表单。你可以将多个断点框架并排放置,并同时编辑它们。更改桌面端,移动端框架会在同一视图中实时响应。当你想要在真实环境中工作时,切换到实时模式,然后在单个全尺寸页面上进行原地编辑。
其他人没有的部分:Core Framework (https://coreframework.com) 是内置的。它是数千名 WordPress 专业人士每天都在使用的设计令牌引擎,在这里它是一个核心系统,而不是一个需要你安装并祈祷的插件。
- 颜色令牌自动生成自己的色阶。 定义一个品牌颜色,就能自动获得全套调整后的 tints 和 shades。
- 流体且数学化的字体比例。 一个随视口缩放的单一坡度,代替了需要同步维护的四十个手动选择的字号。
- 间距比例 确保每个页面和每个断点保持相同的节奏。
- 一个工具类生成器 将锁定的、生成的类输出到一个小的
framework.css中。没有臃肿,没有重复规则,没有你不想要的东西。
你的整个设计系统以数据形式存在。更改一个令牌,每个使用它的页面都会更新。
🧱 构建
- 模块 是构建块:容器、文本、图像、按钮、视频、列表、链接、SVG、表单。将它们拖到画布上,并按你想要的方式嵌套。
- 可视组件 是具有类型化参数和命名插槽的可重用片段。参数可以是字符串、数字、布尔值、颜色、图像、URL、富文本、枚举或整个内容插槽。编辑一次组件,网站上的每个实例都会更新。引用自身的组件在发生之前就被阻止了,所以没有什么会自己吃掉自己的尾巴。
- 模板 处理共享的框架。整个站点一个布局,每种文章类型单独布局,以及一个你可以自己设计的真实 404 页面。内容流入一个出口,因此页眉和页脚只需编写一次,就能包裹所有内容。
- 循环 对集合重复布局:你的文章、页面、媒体,或任何插件作为源暴露的内容。给循环几个变体,它会在运行时交替使用。适用于文章列表、产品网格、图库。
- 属于你的 CMS 的表单。 使用语义字段构建表单,提交结果将存入你自己的数据表中。Instatic 可以读取你放置的字段,并为你创建匹配的数据表。无需第三方表单服务,无需嵌入,无需为联系表单按月付费。
- 一个真正能编辑页面的人工智能代理。 描述你想要的内容,它会在画布上构建出真实、可编辑的节点,而不是截图或一堆代码。它使用语义 HTML 构建结构,使用 CSS 构建样式,并通过与你粘贴标记时相同的导入管道完成。底层有 28 个工具。使用你自己的模型:Claude、OpenAI、OpenRouter 或本地 Ollama。你的密钥,你的模型,你的账单。
- 可靠的导入。 粘贴原始 HTML,获得可编辑的节点。或者丢弃整个静态网站——HTML、CSS、图片、字体——超级导入会将其转换为页面、样式规则、设计令牌和媒体。每个冲突都会在写入前展示给你,并且整个导入可以一键撤销。
🗂 管理
- 一个统一的内容模型。 页面、文章、组件、自定义集合以及你发明的任何结构化表格都存储在同一个地方:
data_tables和data_rows。没有隐藏在一个角落的特殊“页面”表。模式、原始行、导入、导出和表单提交都在一个一致的位置。 - 一个数据工作区,你可以设计自己的集合。 在
/admin/data,你可以创建自定义文章类型和自定义数据表,拥有自己的字段,然后在电子表格风格的网格中处理行:搜索、排序、过滤、批量发布、批量导出。自定义文章类型带有真正的工作流——草稿、定时发布、已发布——以及已发布副本的版本历史。纯数据表是简单的网格,你可以指向任何东西:表单的提交、产品目录、轻量级 CRM、推荐列表。而你创建的每个表都是循环可以渲染的内容源。定义一个“团队”表一次,然后在关于页面上循环它,完成。 - 一个用于写作的内容工作区。 专注于文章和集合的表面,加上实时模式,让作者在网站真实设计中编辑,而不是在灰色的文本区域中。
- 一个像文件管理器一样工作的媒体工作区。 文件夹和智能文件夹、批量操作、使用跟踪(让你知道文件实际用在哪里)、替换工作流,以及当你超出本地磁盘时可插拔的存储适配器。
- 真实的访问控制,而不是装饰性的。 基于 36 种能力构建的角色、基于令牌的会话、TOTP 双因素认证(密钥加密存储)、重复失败后的账户锁定与退避策略,以及在执行危险操作(如删除用户或退出所有设备)前的逐步提升提示。
- ⌘K 搞定一切。 一个覆盖整个管理后台的模糊命令面板。无需鼠标即可跳转到任何地方,执行任何操作。
- 草稿保持草稿状态。 未发布的编辑永远不会泄露给访客。你没有发布的内容,他们看不到。
📊 分析
- 一个你自己布置的仪表盘。 一个 12 列的网格,包含可拖动、调整大小和重新排列的磁贴小部件。在自定义模式中添加你关心的内容,布局会按用户保存。插件可以在同一个网格中提供自己的小部件。
- 一个不会遗忘的审计日志。 每个有意义的管理操作都会记录一行:登录、内容更改、角色编辑、插件生命周期。它是追加写入的,因此是真实的谁在何时做了什么记录,而不是任何人都可以悄悄重写的东西。
- 属于你自己的表单数据。 提交内容保存在你自己的表中。查询、导出、基于它们构建。没有中间商。 这是最年轻的支柱,也是我们目前最努力推动的部分。第一方、尊重隐私的分析是下一步。请参见路线图。
🔌 扩展
每个 CMS 都有插件。这里的区别在于它们的运行位置。一个 Instatic 插件是一个带有清单的 zip 包,它在 QuickJS-WASM 沙箱 中运行。没有文件系统。没有环境变量。根本没有任何网络连接,除非站点所有者逐个主机授予权限。插件不能读取你的秘密或向外传输数据,因为沙箱从来没有给它钥匙。经典的“一个插件搞垮了我的网站并通过电子邮件将数据库发送给了陌生人”的故事在这里不会发生。
在那个沙箱内部,SDK 非常有能力。一个插件可以添加:
- HTTP 路由和它自己的管理页面
- 存储和定时后台任务
- 循环数据源,这样你的内容循环可以从任何地方拉取数据
- 画布模块——编辑器中出现的新块
- 媒体存储适配器和前端资源
- 安装、激活及之后的生命周期钩子
快,因为几乎没什么可加载的
一个已发布的 Instatic 页面基本上就是磁盘上的一个文件。无需启动框架,无需水合步骤,在常见路径上没有数据库往返。浏览器下载语义 HTML 和一个紧凑的样式表,就完成了。访客和内容之间几乎没有东西,所以页面感觉瞬间加载。
这种速度不是你需要调整的设置。它源于发布的工作原理,分为三个你无需担心的层次:
- 静态页面在发布时直接烘焙到磁盘,并以原子方式交换。访客得到的是一个文件,而不是一次渲染。
- 真正变化的路由 命中一个内存缓存,每次发布时完全清除,因此没有人会看到过时的页面。
- 少数真正针对每个访客的部分 会被自动检测,并由一个约 0.7 kB 的运行时惰性加载。比这个段落还小。
另一端输出的是纯 HTML 和紧凑的 CSS,一路到底。没有编辑器参与:你的公共页面上没有 React,没有编辑器运行时,标记中没有框架。而且因为它只是 HTML 和 CSS,没有任何东西可以绑架你的网站——你可以阅读它,在任何地方托管它,或者带走并离开。
完整设计:发布器。
快速开始
你需要 Bun (https://bun.sh)。除此之外不需要别的。默认的开发设置运行在 SQLite 上,因此无需启动额外的服务。
git clone https://github.com/corebunch/instatic.git
cd instatic
bun install
bun run dev
打开 http://localhost:5173。第一次访问会引导你创建你的网站和所有者账户。
想看看它实际发布后的样子?bun run start 会构建管理后台,并从 Bun 服务器的 http://localhost:3001/admin 提供服务。
备份,一句话总结: 备份数据库(Postgres 转储或 SQLite 文件)和上传文件夹,你就备份了整个网站——详情。
背后的团队
我们是 Motion.page (https://motion.page) 和 Core Framework (https://coreframework.com) 背后的团队——成千上万人用来谋生构建网站的工具,主要是在 WordPress 世界。我们花了多年时间让其他平台更易用。在某个时刻,一个明显的问题挥之不去:如果底层的东西一开始就是正确的呢?没有需要绕过的遗留问题,没有不允许触碰的标记,没有依赖于将你的网站留在我们能看到的地方的商业模式。
所以我们构建了 Instatic。并且我们将 Core Framework 带了过来,作为核心系统集成,因此我们的用户已经依赖的颜色色调、字体比例、间距和工具类都成为产品的一部分——而不是一个你安装后祈祷能用的附加组件。
早期,有意为之
这里是诚实的部分:这是 0.0.x 版本。上面的一切——画布、Core Framework、通用内容模型、沙箱化插件、AI 代理、表单、循环、模板、媒体、MFA、审计日志、一键部署、干净的发布器——是起点,而不是终点。
即将到来:
- 真正的分析。 第一方且尊重隐私,以完善分析支柱。
- 更大的模块和插件生态系统。 更多的第一方块,更多的 SDK 接口,更多的示例可供复制。
- 更锐利的 AI 代理。 更多工具,对你实际网站的更深认知。
- 一切更紧凑。 我们有意停留在 1.0 之前。这是丢弃坏主意并保持架构干净的最便宜时机。API 和工作流在 1.0 之前仍可能变动。如果这让你紧张,请等待 1.0——没有恶意。如果你更愿意帮助塑造未来二十年网站所有权的样子,现在是好位置。
对于开发者
一个 Bun 服务器。一个基于 Vite 构建的 React 管理后台。一个发布器,生成的页面你会乐意是自己写的。
| 运行时 | Bun,用于服务器和工具 |
| 语言 | 全栈 TypeScript |
| 管理后台应用 | React 19(开启 React 编译器)、Vite、Zustand + Mutative、CodeMirror、dnd-kit |
| 服务器 | Bun.serve 加手写路由器 |
| 数据库 | SQLite 或 Postgres —— 一个 DbClient 接口,由 DATABASE_URL 选择 |
| 验证 | 在每个未类型化的边界使用 TypeBox;模式是真理之源 |
| 插件 | QuickJS-WASM 沙箱,所有者授予的权限 |
| AI | 基于原始 HTTP/SSE 的供应商无关驱动,无供应商 SDK |
| 输出 | 语义 HTML、紧凑 CSS、烘焙的静态文件加上自动检测的动态空洞 |
代码库是有观点的,并且这些观点在代码中强制执行。架构规则位于 src/__tests__/architecture/ 作为实际测试,因此保持输出整洁的结构不会悄悄腐烂。
bun run build # tsc -b && vite build
bun test
bun run lint
深入探索:文档索引 · 架构 · 编辑器 · 服务器 · 发布器 · 插件系统
致谢
Instatic 的界面使用了 Gerrit Halfmann 的 Pixelarticons (https://pixelarticons.com/)。感谢 Gerrit 提供了一套真正独特的图标集,并允许我们在开源项目中使用它。
许可证
MIT。参见 LICENSE。没有分级,没有开源核心的星号,没有“联系销售”。
相似文章
TryGhost/Ghost
Ghost 是一个开源、无头 Node.js CMS,专为专业出版而设计。它可以自托管或通过 Ghost(Pro) 托管服务使用。
完全在浏览器中的容器构建
一个完全在浏览器中使用客户端代码构建容器的Web应用程序,展示了自定义容器工具的强大功能。用户可以选择基础镜像、运行Shell脚本,并将生成的镜像导出为tar文件。
Embedist
Embedist是一款开源的AI原生嵌入式开发环境工具,在Product Hunt上发布,专为从事嵌入式系统开发的工程师设计。
Show HN: Inkwell – 电子墨水屏设备的RSS阅读器
Inkwell 是一个自托管的 RSS/Atom 阅读器,它将文章以静态 HTML 形式呈现,针对 Kindle 等电子墨水屏设备的内置浏览器进行优化,并通过后台预处理实现快速加载。
用机器重建我的博客,为机器服务·
作者重建了博客,加入了完整的结构化数据标记(JSON-LD、微格式),并配备了一个由提示词引导的AI协作写作助手,该提示词避免了常见的LLM模式,同时通过CI验证防止数据损坏。