lzwcc/ ui-motion-lab
No.P02 · Project · 2026.10.19在线访问
作品 / 项目

Niwa:一方安静的新标签页

我给自己写的浏览器新标签页扩展:随节气和时辰变化的山水,快捷方式和小组件自由摆放。没有服务器,数据只存在自己的浏览器里。已上架 Edge 扩展商店,MIT 开源。

原创WXT / React / TypeScript / Remotion约 2 分钟

Niwa(庭)是我写的浏览器新标签页扩展,Edge 和 Chrome 都能用。

之前用的新标签页扩展一更新就被浏览器停用,每次都得手动重新打开;想在新标签页看课程表做不到,天气也换不成自己信得过的接口。于是自己写了一个。打开新标签页是一片随季节和时辰变化的山水,深色模式叫「夜庭」,月亮按当天真实的月相画。

Niwa 的新标签页:时间和节气、搜索框,下面是天气、便签、日程、庭等小组件和网站快捷方式Niwa 的新标签页:时间和节气、搜索框,下面是天气、便签、日程、庭等小组件和网站快捷方式

它有什么

时间旁边写着今天的节气和七十二候,下面一行小字是这一候在元代吴澄《月令七十二候集解》里的原文。原文取自维基文库,繁体转简体时出错的几个字逐一校对过。

快捷方式和小组件放在同一张网格里,可以拖到任意位置、留空、竖着叠,快捷方式还能收进文件夹。拖动参照手机桌面:指针停稳了,别的格子才让位,划过去的格子不会动。小组件有 10 种:日程(订阅 iCal 地址,或者直接把课程表的 .ics 文件拖进去)、天气、便签、世界时钟、计时器、热榜、RSS、收藏夹、历史,还有一方小小的「庭」,你打开的天数越多,里面长出的石头、青苔、树和灯笼就越多。Codex 生成的宠物也能导入进来,浮在页面上。

它没有服务器,不收集、不上传任何数据。打开新标签页本身不联网,只有在你用到订阅日历、查天气这类功能时,才直接请求对应的网站;安装时不申请敏感权限,用到时再问。

宣传片

下面这段 21 秒的视频也是写代码做出来的:用 Remotion(用 React 写视频)把扩展的截图分层做成动画,庭那一段直接用了扩展里的组件。配乐是用代码合成的五声音阶,每个格子弹出、庭每长一次,都对着一个音。

怎么做的

用 WXT、React 和 TypeScript 写,约 1.1 万行。拖放规则写成纯函数,单元测试用字母画出网格,每条都写明期望的摆放;页面测试用无头 Edge 跑真实的构建产物,21 组测试覆盖文件夹、备份恢复、日历导入、计时器等。

导入 Codex 宠物时,图片格式怎么处理、动画怎么省内存,以及每个标签页实测多占多少内存,写在博客里:把 Codex 宠物放进新标签页:格式、动画和内存实测。