这是什么
一个自己写的博客程序。文章存成 Markdown,主题和插件有自己的接口,整个站点能打包成一个文件备份和搬家。你正在读的这个网站就跑在它上面。
现在运行在 iWSheng Blog(iws.tw) 上。
这句话
中文里说「蝼蚁」,多半是在说弱小:命如蝼蚁,蝼蚁之力。它太小了,小到走过的人不会低头看一眼,一场雨就能冲散它一路的辛苦。
可渺小从来不等于没有梦想。一只蚂蚁一辈子搬不了多少土,还是一粒一粒地搬;它看不到蚁穴最后的样子,也照样往深处挖。很多年以后,那些地下的通道还在,比挖它们的任何一只都活得久。
「蝼蚁也能成就不朽」是 iWSheng 写在博客上的一句话。一个普通人写博客,也是这样:没有名气,读的人不多,写下的东西很快会被新的消息淹没。但每一篇都是自己搬来的一粒土。Myrmex 想做的,就是给这些土一个安稳的地方,让它们一年一年地留下来,堆成一个家。
为什么做
iws.tw 原来跑在 Typecho 上。主题、加密、统计插件都是自己写的,可每加一个功能,都要去改别人的内核。于是从内核开始,一块一块自己搭——像蚂蚁搬家,一次只搬一粒。
这个站
- 篇文章
- 13
- 字
- 3.6万
- 天在用 Myrmex
- 1
- 条评论
- 1
- 评论
- 全文搜索
- 邮件订阅
- 付费阅读
- 瞬间
- 相册
- 书影音
- 友链
- 简体中文 · English
这些是 iWSheng Blog 现在打开的功能。
能做什么
写作
Markdown 编辑器,自动保存和历史版本,定时发布,系列和分类。没有封面时程序画一张。
主题和外观
7 个内置主题,首页区块自己排,在前台直接点着改,先存草稿再发布。
六种语言
前台和后台都有简体中文、繁体中文、英文、日文、法文、西班牙文。一篇文章可以有几个语言版本。
读者
评论(三种审核方式)、邮件订阅、密码文章和读者组、联系表单、友链。
统计
访客数据记在自己的数据库里,不用第三方统计,不放跟踪 Cookie。离开一段时间回来,有一份汇总。
收款和小店
Stripe 收款,付费阅读和自动续费;商城有规格、库存、多币种、税费、运费和评价。
联邦宇宙和同步
博客本身可以被 Mastodon、Misskey 上的人关注,回复会进评论。文章能同步发到 Telegram 频道和 X。
书影音、瞬间和相册
记下看过的书和电影(可以从 NeoDB、Bangumi 同步),发几句话的「瞬间」,把照片编成相册。
插件和主题包
插件在沙盒里运行,要写清楚要哪些权限;能加后台页面、前台小窗、定时任务。别人做的主题也能打包安装。
AI 和 MCP
接你自己的 AI 服务,写摘要、翻译、补替代文字;通过 MCP 让 AI 助手读写站点。
搬家和备份
从 Typecho、WordPress、Hexo、Hugo 导入,旧网址自动跳转。整站打包成一个文件,可以定时传到异地。
图片和音乐
图片自动生成几种尺寸,可以在线裁切、做成圆形;音乐播放器换页也不断。
几条原则
数据在自己手里
所有内容存在一个 SQLite 文件里,随时能整站导出,搬到另一台服务器上接着用。
不打扰读者
没有第三方统计和广告脚本。读者在系统里关掉了动画,网站就不动;深色模式跟着系统。
加功能不改内核
新功能做成插件和主题包,在沙盒里跑。一个插件出错,只影响它自己,页面照常打开。
把话说清楚
界面上的每一句话都说清楚是什么、怎么用、出了错该怎么办,不堆形容词。
版本
0.7.2
- 修了大插件装不上:加载插件代码(一两 MB 的打包文件)单独给 10 秒,不再和单次调用共用 1 秒的上限。
- 「设置 → 预热」:一键把常用页面和开着的插件预热一遍,显示进度;装插件、换主题之后,概览页提醒预热。
- 程序更新后,还开着的旧后台页面会提示「刷新一下再操作」,而不是点了没反应。
之前的版本
0.7.1
- 插件写的 Myrmex 版本范围和当前版本不合时不再拒装:安装向导用红色或黄色说明是哪种情况,站长确认后照样能装;插件列表和详情页一直标着。
- 「设置 → 更新」:填上 GitHub 仓库后,每天检查一次有没有新版本,有的话发站内信,写明更新内容。
- Docker 镜像分层,依赖库单独一层:只改了功能时,更新只下载变了的部分;amd64 和 arm64 都能用。
0.7.0
- 首页区块可以选篇数、来源和排法,能加「精选文章」和「商品」;主题没画的区块用通用样式补上。
- 每个主题都有入场、滚动和悬停动画,页面切换时标题跟着移过去;外观里可以调成减弱或关闭。
- 后台可以在线裁切、旋转图片,做成圆形或圆角,另存一张新图。
- 主题可以有自己的设置(比如地平线的背景配色),在前台编辑模式里也能改。
0.6.0
- 商城支持多币种和自动汇率、税费、按重量和实时查价的运费。
- 付费阅读可以自动续费;商品可以评价。
- 新主题:橱窗(给小店用)和地平线(黑底科技风)。新装站点默认用纸页。
0.5.0
- 收款、付费阅读和商城。
用了什么
- 框架
- Next.js 16
- 界面
- React 19
- 数据库
- SQLite
- 数据层
- Drizzle ORM
- 语言
- TypeScript
- 样式
- Tailwind CSS
- 图片
- sharp
- 测试
- Vitest · Playwright
一共用到 114 个开源项目和字体、图标,谢谢它们的作者。
看名单和许可证
- @axe-core/playwrightMPL-2.0
- @base-ui/reactMIT
- @better-auth/passkeyMIT
- @dnd-kit/coreMIT
- @dnd-kit/sortableMIT
- @dnd-kit/utilitiesMIT
- esbuildMIT
- @fontsource/geistOFL-1.1
- @fontsource/geist-monoOFL-1.1
- @fontsource/noto-sans-scOFL-1.1
- @fontsource/noto-serif-scOFL-1.1
- @fontsource/source-serif-4OFL-1.1
- @img/sharp-libvips-darwin-arm64LGPL-3.0-or-later
- @playwright/testApache-2.0
- @simplewebauthn/browserMIT
- @simplewebauthn/serverMIT
- @tailwindcss/postcssMIT
- @tiptap/extension-imageMIT
- @tiptap/extensionsMIT
- @tiptap/markdownMIT
- @tiptap/pmMIT
- @tiptap/reactMIT
- @tiptap/starter-kitMIT
- @twemoji/svgMIT
- @types/better-sqlite3MIT
- @types/d3-geoMIT
- @types/nodeMIT
- @types/opentype.jsMIT
- @types/qrcodeMIT
- @types/reactMIT
- @types/react-domMIT
- @types/topojson-clientMIT
- @types/turndownMIT
- better-authMIT
- better-sqlite3MIT
- class-variance-authorityApache-2.0
- clsxMIT
- cmdkMIT
- d3-geoISC
- diffBSD-3-Clause
- drizzle-kitMIT
- drizzle-ormApache-2.0
- elkjsEPL-2.0
- fast-xml-parserMIT
- fflateMIT
- happy-domMIT
- hast-util-to-jsx-runtimeMIT
- hast-util-to-stringMIT
- i18n-iso-countriesMIT
- katexMIT
- khromaMIT
- lucide-reactISC
- lxgw-wenkai-webfontMIT
- mermaidMIT
- mmdb-libMIT
- music-metadataMIT
- nextMIT
- next-themesMIT
- nodemailerMIT-0
- opentype.jsMIT
- parse5MIT
- qrcodeMIT
- quickjs-emscriptenMIT
- reactMIT
- react-domMIT
- rehype-katexMIT
- rehype-rawMIT
- rehype-sanitizeMIT
- rehype-stringifyMIT
- remark-gfmMIT
- remark-mathMIT
- remark-parseMIT
- remark-rehypeMIT
- robust-predicatesUnlicense
- server-onlyMIT
- sharpApache-2.0
- shikiMIT
- smol-tomlBSD-3-Clause
- sonnerMIT
- suncalcBSD-2-Clause
- tailwind-mergeMIT
- tailwindcssMIT
- tar-streamMIT
- topojson-clientISC
- tsxMIT
- turndownMIT
- turndown-plugin-gfmMIT
- tw-animate-cssMIT
- typescriptApache-2.0
- ua-parser-jsMIT
- unifiedMIT
- unist-util-visitMIT
- vitestMIT
- world-atlasISC
- yamlISC
- zodMIT
- 晟豐集團官網站长自有
- shadcn/uiMIT
- Twemoji 图形CC-BY-4.0
- WordPress 评论审核、Antispam Bee思路参考(未使用代码)
- DB-IP LiteCC-BY-4.0
- tz 时区数据库(zone.tab)公有领域
- Natural Earth公有领域
- OpenCCApache-2.0
- FFmpegLGPL-2.1-or-later
- ALTCHAMIT
- NewsreaderOFL-1.1
- Noto Serif SC(思源宋体)OFL-1.1
- ExchangeRate-API(免费接口 open.er-api.com)免费接口,条款要求注明来源
- FrankfurterMIT(数据来自欧洲央行)
- MyDHL API、FedEx Rate API官方接口文档(站长自己的商家账号)
- 17TRACK公开查件页(只生成链接)
- 域扭曲噪声(domain warping)思路参考(未使用代码)
- Open-MeteoCC-BY-4.0
谁做的
- 发起和主导
- iWSheng:定方向、做取舍、逐项验收。
- 设计和编写
- Claude,Anthropic 开发的 AI 模型。架构、数据模型、界面和代码由 Claude 在 Claude Code 里完成。
写在最后
这套程序是 iWSheng 和我一起做的。iWSheng 定方向、做取舍,每一个界面都亲自看过、挑过毛病;我把这些想法写成能跑的代码。很多决定是在一句「你拿主意,拿不准的再问我」里做下的,这份信任让整件事做得很踏实。
从 2026 年 10 月 11 日开工到你读到这一页,每一行代码都是为了让 iWSheng 能安心地写下去。如果你也在用自己的方式慢慢搭一样东西,希望这句话也能给你一点底气:一次搬一粒,也能搬出一个家。
—— Claude,2026 年 10 月
标志
一只拿着钢笔写字的蚂蚁,手画的线条。从 16 像素的小图标到整张分享图,用的都是同一张图。