
Homi 1.0 发布:可自托管的离线家庭管理应用
来源标题:Show Homi, a self-hosted offline-first family organizer
Homi 1.0 是一款自托管的家庭管理应用,安装在自己的服务器上后数据完全留在本地硬件,断网也能继续使用。它整合了共享家庭日历、账本、购物清单、备餐计划、公告板和可显示在大屏上的 Family Board 仪表盘,采用服务端权威架构,核心与各功能模块通过模块 SDK 分离管理。目前核心、日历、账本和购物清单已投入日常家庭使用,项目以 AGPL-3.0 协议发布。
以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
Homi 是一个自托管的家庭组织工具。把它跑在你自己的服务器上,一家人就能共用一个家庭日历、一个支票簿、一份购物清单、一个膳食计划、一块公告板,以及一个大屏 Family Board 仪表盘——全都装在一个可安装、离线也能用的应用里。家庭数据始终留在你自己的硬件上。
底层上,Homi 是一个自托管、以服务端为权威的家庭平台。Core 提供身份、家庭、权限、离线同步、响应式外壳,以及一个公开的模块 SDK。家庭功能都是独立打包的模块,通过受管生命周期安装,而不是被编译进 Core。
项目状态:Homi 1.0。Core、Calendar、Chequebook 和 Shopping List 已在日常家庭使用中,干净机器安装也能通过。Homi 以 AGPL-3.0 发布;详见 changelog 和 roadmap。
Homi 家庭仪表盘及未来大屏 Family Board 的设计方向参考图。这不是当前 Web 应用的截图。
Homi 移动端手机伴侣的设计方向参考图。这不是当前 Web 应用的截图。
这些是真实的 Homi 界面,配以虚构的示例数据。
更多发布细节和已知限制见 release notes;每一处变更都列在 changelog 中。
基于 Better Auth 的账号与家庭成员/权限 以 PostgreSQL 为后端的权威数据,带审计的变更/outbox 记录 可安装的移动优先 PWA,具备按账号和家庭隔离的离线同步 Core 自有的 Dashboard、Modules 弹出式启动器、Settings(含 Manage modules)、跨所有已启用模块的通用 Search,以及 Add 界面 独立模块包、不可变的版本/摘要注册表、事务性迁移、回滚、启用/禁用、setup、assets、jobs、同步适配器、设置,以及 Family Board 贡献 公开的 @homi/module-sdk、@homi/ui,以及起始模块模板 Calendar 0.6.24、Chequebook 0.1.30、Shopping List 0.4.1、Noticeboard 0.1.5、Meal Planner 0.1.0,以及 K.I.S.S. 0.4.3(一个私密的伴侣模块) 通知收件箱,以及为每个模块的提醒提供的可选设备推送通知(Web Push) 可按成员设置 Family Board 卡片样式,在 Settings → Manage modules 中选择(例如 Shopping 的列表或按商店计数) Family Board 网格,每位成员可拖拽卡片并通过边角调整大小来排布,手机和宽屏各有独立布局 管理员可在应用内添加家庭成员,支持自助修改密码,以及管理员重置密码(下次登录时须设置新密码) 受门控的跨模块 broker 通信,当 provider 不可用时给出安装/启用指引 可编辑的家庭 Chequebook 分类,以及双向的循环 Calendar/Chequebook 条目 失效关闭的 Ed25519 签名 GitHub 模块目录校验
架构
Core 掌管平台策略和共享控件。模块通过公开契约声明导航、上下文 Search/Add 操作、setup/settings、权限、同步实体、jobs、Home 卡片和 broker 能力。模块不得导入 Core/Web 私有代码,也不得导入其他模块。
安装与家庭使用是分开的:
模块迁移失败时,会在一个 PostgreSQL 事务中回滚其候选 schema/data 和注册表提升。先前已应用的 artifact/版本保持生效。完整数据库备份仍是灾难恢复层。
Docker 与 Compose v2 Node.js 24 pnpm 12 标准部署中 PostgreSQL 由 Compose 提供
本地构建与校验
corepack enable pnpm install --frozen-lockfile pnpm build pnpm typecheck pnpm --filter @homi/core module-directory:validate
将 .env.example 复制为 .env,分别替换每个密钥占位符,设置公开的 HTTPS origin,并在有可用签名模块目录时配置它。仅当目录或模块发布资源为私有时才需要 GitHub token。默认的 Web/Core 主机端口为 loopback 上的 3100/3101;在同一主机上运行多个独立 Compose 项目时,可修改 HOMI_WEB_PORT、HOMI_CORE_PORT 和 HOMI_BIND_ADDRESS。Core 镜像始终打上 homi-core 标签,因此同一主机上第二个项目执行 docker compose build 会替换第一个项目的 Core 镜像;请改用不同标签构建测试副本。
docker compose build
docker compose up -d db
docker compose --profile maintenance run --rm migrate
read -rsp "Initial Homi password: " HOMI_BOOTSTRAP_PASSWORD && echo
export HOMI_BOOTSTRAP_PASSWORD
docker compose --profile maintenance run --rm
-e HOMI_BOOTSTRAP_EMAIL=owner@example.com
-e HOMI_BOOTSTRAP_PASSWORD
-e HOMI_BOOTSTRAP_NAME="Household Owner"
-e HOMI_BOOTSTRAP_HOUSEHOLD="Our Home"
-e HOMI_BOOTSTRAP_LOCALE=en-CA
-e HOMI_BOOTSTRAP_TIME_ZONE=America/Toronto
bootstrap
unset HOMI_BOOTSTRAP_PASSWORD
docker compose --profile maintenance run --rm module-admin install /app/packages/calendar
docker compose --profile maintenance run --rm module-admin install /app/packages/chequebook
docker compose up -d module-manager core web
请把 bootstrap 身份、locale 和 IANA 时区替换为该家庭的真实值。bootstrap 命令仅在 Homi 尚无账号时可用,它会一并创建第一个用户、家庭、关联的家庭成员和 Household Administrator 角色。第二次尝试会失效关闭,而不会创建另一个 owner。
这两个模块安装刻意与 Core 镜像生命周期分离。在 Homi 的 Modules 界面中按家庭启用已安装的模块。
Shopping List 未打包进 Core 镜像。用 pnpm --filter @homi/shopping build 构建它,将 packages/shopping 中的 homi.module.json、package.json、dist、migrations 和 locales 复制到一个空目录,然后按 Module installer operations 中所述安装该目录。签名模块目录目前提供的是较早的 Shopping List 0.2.2。
(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。