Gathio 1.6.7 介绍与选型指南
Gathio 1.6.7 是一款联邦化、隐私优先、免注册的自毁式活动页托管平台(Node.js 22 + MongoDB 7.0),本文基于 Ubuntu 24.04 + Docker Compose 实测环境介绍其定位、架构、功能与快速上手,并给出与 Rallly、Hi.Events 等同类活动管理组件的选型对比。
Gathio 1.6.7 介绍与选型指南
目标:回答「Gathio 是什么、由哪些部分构成、能做什么、不能做什么、什么场景该选它」,所有结论与回显均已在 Ubuntu 24.04.5 LTS + Docker Compose(Gathio 1.6.7 + MongoDB 7.0,宿主端口 8153)环境实测验证。
一、环境信息
本文实测环境如下,后续所有命令与回显均产生于该环境:
- 操作系统:Ubuntu 24.04.5 LTS(
VERSION_ID="24.04") - 运行时:Docker 29.9.2(build a82e528)、Docker Compose v5.6.1
- Gathio:
ghcr.io/lowercasename/gathio:1.6.7(镜像 449MB,内置 Node.js v22.23.3),宿主端口8153→ 容器端口3000 - MongoDB:
mongo:7.0(镜像 1.18GB,服务端db version v7.0.45),仅容器网络内 27017,不映射宿主端口 - 部署目录:
/opt/gathio(compose 项目名gathio),数据卷gathio_mongodb_data_db - 上游信息:GitHub
lowercasename/gathio,许可证 GPL-3.0,旗舰实例 gath.io,文档站 docs.gath.io
💡 说明:Gathio 官方镜像标签跟随发布版本号(如
1.6.7、1.6.6),容器内package.json的engines要求 Node.js >= 22,镜像已自带运行时,宿主无需安装 Node。
二、软件概述
本节给出 Gathio 的准确定位与技术栈。需要特别强调:Gathio 不是短链接服务,而是一款活动页托管平台——这一误判在选型时会造成方向性错误,下文详述。
2.1 产品定位
Gathio 的官方自我描述(package.json 与镜像 OCI label 一致)是:
A simple, federated, privacy-first event hosting platform.
即「简单、联邦化、隐私优先的活动托管平台」。其核心形态是:
- 自毁式活动页:为一次聚会、活动生成一个可分享页面,活动结束后按
delete_after_days(默认 7 天)自动删除,不留历史数据; - 免注册:参加者(RSVP)与评论都不需要账号,凭链接即可操作;主办凭 URL 中的编辑令牌(
?e=<editToken>)或邮件 magic link 管理; - 联邦化:基于 ActivityPub,每个活动页本身是一个联邦「Person」角色,可被 Mastodon 等 Fediverse 实例关注,RSVP 与讨论可跨实例发生。
官方旗舰实例为 https://gath.io,任何人可直接体验;自托管则得到同功能的私有实例。
2.2 技术栈与许可
| 维度 | 实测值 |
|---|---|
| 语言/运行时 | TypeScript 编译产物,Node.js v22.23.3(docker exec gathio-app node --version → v22.23.3) |
| Web 框架 | Express 4.19 |
| ODM/数据库驱动 | Mongoose 5.13.22(依赖 mongodb 3.7.4 驱动) |
| 存储 | MongoDB 7.0.45(容器内 mongod --version 实测输出 db version v7.0.45) |
| 许可证 | GPL-3.0-or-later |
| 界面语言 | i18n locales:de / en / ja / nn / pt(无中文,界面默认英文) |
| 版本节奏 | releases.atom 实测:v1.6.7(2026-09-07)、v1.6.6(2026-09-02)、v1.6.5(2026-08-15)、v1.6.4(2026-08-13)、v1.6.3(2026-07-07),约每月 1~2 版 |
2.3 类目纠偏:Gathio 与短链接服务无关
本组件在批次规划阶段曾被误归入「短链接/重定向服务(Go + MongoDB)」候选,实测证伪:Gathio 无短链创建、无 301/302 重定向表、非 Go 语言;其活动链接(如 /S2sofpxwAkFeLKw_cH2tk)是 nanoid 生成的活动页路由,不是短链跳转。误判来源是抓取 awesome-selfhosted 页面时把页面栏目名「Shorteners」误当成了组件类目——Gathio 实际收录在 awesome-selfhosted 的 Polls and Events 类目,条目描述为 "Self-destructing, shareable, no-registration event pages"(2026-11-01 拉取核对)。
如果你真正需要的是短链接/重定向服务,应看这三个同类组件的选型篇:《Shlink 5.1.8 介绍与选型指南》、《YOURLS 1.10.6 介绍与选型指南》、《Chhoto URL 介绍与选型指南》。它们与 Gathio 是完全不同的赛道:短链服务解决「长 URL 变短 + 跳转统计」,Gathio 解决「一次活动的报名页 + 讨论 + 到期即焚」。
💡 技术拓展:「活动/日程协作」类目下业界常见方案对比——
方案类型 代表组件 核心诉求 日程投票(找时间) Rallly、Framadate、Bitpoll 多人对候选日期投票,定出活动时间 活动页托管(通知+RSVP) Gathio、Pigeon 类 发一个活动链接,参加者免注册 RSVP/评论 票务与活动管理 Hi.Events、Alf.io 售票、检票、订单,面向公开活动运营 社区活动日历 Gancio 一个实例聚合展示多个本地活动 Gathio 属第二类:不做投票选时间、不卖票,只做「一次活动的轻量页面 + 自动销毁」。
三、核心架构
本节拆解 Gathio 的组件构成、数据模型、接口面与两个关键机制(自毁调度、ActivityPub 联邦),全部依据容器内代码与实测回显。
3.1 组件构成与启动链路
Gathio 是典型的「Node 应用 + MongoDB」两容器架构:
gathio-app:Entrypointdocker-entrypoint.sh,Cmdnpm run start(即node dist/start.js),WorkingDir/app;gathio-db:mongo:7.0,通过 composelinks获得 DNS 别名mongo,应用以mongodb://mongo:27017/gathio连接;- 三个宿主 bind mount:
config → /app/config(配置)、static → /app/static(静态页 Markdown)、images → /app/public/events(活动封面图);MongoDB 数据用命名卷gathio_mongodb_data_db。
全新启动的实测日志(docker logs gathio-app):
> gathio@1.6.7 start
> node dist/start.js
You have not configured this Gathio instance to send emails! This means that event creators will not receive emails when their events are created, which means they may end up locked out of editing events. Consider setting up an email service.
Welcome to gathio! The app is now running on http://localhost:3000
Mongoose connection open!
首行的邮件警告是 mail_service = "none"(默认值)时的固定提示:不配邮件时主办创建收不到含编辑令牌的邮件,存在「丢失编辑权」风险,生产部署应配置 SMTP(见部署篇配置说明)。
3.2 数据模型
数据库 gathio 共三个集合:events(活动)、eventgroups(活动群组)、logs(操作审计)。实测创建 2 个活动、1 个群组后的计数与审计:
docker exec gathio-db mongosh --quiet gathio --eval 'printjson({events:db.events.countDocuments({}),groups:db.eventgroups.countDocuments({}),logs:db.logs.countDocuments({})})'
{ events: 2, groups: 1, logs: 8 }
docker exec gathio-db mongosh --quiet gathio --eval 'db.logs.find({},{_id:0,process:1,status:1}).sort({timestamp:-1}).limit(8).toArray()'
[ { status: 'success', process: 'addEventComment' },
{ status: 'success', process: 'addEventAttendee' },
{ status: 'success', process: 'provisionEventAttendee' },
{ status: 'success', process: 'createEventGroup' },
{ status: 'success', process: 'provisionEventAttendee' },
{ status: 'success', process: 'createEvent' },
{ status: 'success', process: 'createEvent' },
{ status: 'success', process: 'startup' } ]
活动文档字段全表(Object.keys(db.events.findOne({name:"Test2"})) 实测输出):
_id,timezone,usersCanAttend,showUsersList,usersCanComment,firstLoad,showOnPublicList,
approveRegistrations,id,type,name,location,start,end,description,creatorEmail,hostName,
viewPassword,editPassword,editToken,eventGroup,activityPubActor,activityPubEvent,
activityPubMessages,publicKey,privateKey,customQuestions,attendees,comments,followers,__v
要点:id 为 nanoid 21 位活动 ID(含下划线),editToken 为 32 位小写字母数字编辑令牌;publicKey/privateKey 是该活动作为联邦角色的 RSA 密钥对;attendees/comments/customQuestions 为内嵌数组(无独立集合)。mongorestore 实测还显示三个 unique sparse 索引:comments.id_1、comments.replies.id_1、activityPubMessages.id_1——评论与联邦消息在数组内按 id 唯一寻址。
3.3 接口面
从 /app/dist 路由代码提取并实测确认的接口分三组(挂载全部在根路径,无前缀):
| 组 | 代表路由 | 说明 |
|---|---|---|
| Web 页面 | GET /、/about、/new、/:eventID、/group/:id、/events、/export/event/:id、/group/:id/feed.ics | 服务端渲染页面与日历文件 |
| 表单/管理 POST | POST /event、PUT /event/:id、POST /event/:id/attendee、POST /attendee/provision?eventID=、POST /group、POST /import/event、POST /post/comment/:id、POST /deleteevent/:id/:editToken、POST /magic-link/event/create | 全部 application/x-www-form-urlencoded 或 multipart,无 Token 认证,凭 editToken |
| ActivityPub | GET /.well-known/nodeinfo、/.well-known/webfinger、`/:eventID/featured | followers |
⚠️ 注意:Gathio 没有独立的 REST JSON API 设计,写接口本质是 HTML 表单的 POST 端点(返回 302 跳转而非 JSON),也没有
/healthz健康检查路由(实测GET /healthz→ 404)。监控与自动化要按「HTTP 状态码 + 页面可达」思路设计。
3.4 自毁调度机制
/app/dist/routes.js:23 实测源码:schedule.scheduleJob 注册 cron 表达式 59 23 * * *——每天 23:59(容器本地时区,官方镜像默认 UTC)扫描并删除 end <= now - delete_after_days 的活动文档与封面图文件,同时向关注者广播 ActivityPub Delete。delete_after_days = 0 时跳过(永不自动删除)。审计日志 process 为 deleteOldEvents。
💡 技术拓展:「到期自动删除」在自托管组件中有几种常见实现取向——
取向 代表 特点 应用内 cron(Gathio) Gathio、Pastebin 类 零外部依赖,但删除时点受容器时区影响 MongoDB TTL 索引 各类 Node 应用 数据库层自动过期,精度到秒,需 BSON Date 字段 外部调度(systemd timer/crontab) 备份/清理脚本 与业务解耦,可审计 Gathio 选第一种与其「隐私优先、数据少留一天是一天」的定位一致;运维时务必注意它按容器时区(UTC)而非活动所在时区执行。
3.5 ActivityPub 联邦
is_federated = true(默认)时,每个活动注册一个联邦 Person actor。实测三件套(本机 domain = "localhost:8153"):
curl -s http://localhost:8153/.well-known/nodeinfo
{"links":[{"rel":"http://nodeinfo.diaspora.software/ns/schema/2.2","href":"https://localhost:8153/.well-known/nodeinfo/2.2"}]}
curl -s "http://localhost:8153/.well-known/webfinger?resource=acct:_0nu7QEITrI8SXhvQhEzc@localhost:8153"
{"subject":"acct:_0nu7QEITrI8SXhvQhEzc@localhost:8153","links":[{"rel":"self","type":"application/activity+json","href":"https://localhost:8153/_0nu7QEITrI8SXhvQhEzc"}]}
带 Accept: application/activity+json 请求 GET /:eventID 返回 actor 文档(type: Person,preferredUsername 即活动 ID,summary 含描述/地点/起止时间)。行为层面(官方 FEDERATION.md 与 docs.gath.io):Mastodon 搜索关注活动账号后,可收到 RSVP 投票私信、时间线更新并自动转发活动讨论;Friendica 加联系人可把活动落入本地日历。
⚠️ 注意:nodeinfo/webfinger 的
href一律按https://<domain>生成(上面实测可见https://localhost:8153)。Gathio 自身不终结 TLS,domain必须配置为公网 HTTPS 域名(Nginx/Caddy 反代 TLS),否则外部实例回访失败、联邦名存实亡。
四、功能特性
本节按功能域逐项给出实测操作与回显,验证「官方宣称的功能在 1.6.7 上真实可用」。
4.1 创建活动与编辑权模型
创建活动的全部必填/常用字段实测(form-urlencoded POST):
curl -s -X POST http://localhost:8153/event \
--data-urlencode "eventName=Friday Night Board Games" \
--data-urlencode "eventLocation=Community Center, 12 Maple Street" \
--data-urlencode "eventStart=2026-11-06T19:00" \
--data-urlencode "eventEnd=2026-11-06T22:00" \
--data-urlencode "timezone=Asia/Shanghai" \
--data-urlencode "eventDescription=Board games and snacks. Bring your favorites!" \
--data-urlencode "creatorEmail=admin@example.com" \
--data-urlencode "hostName=Admin" \
--data-urlencode "joinCheckbox=true" \
--data-urlencode "interactionCheckbox=true"
{"eventID":"fIq03J9LxoYkIRUgV2d90","editToken":"gn2vlvt3bn1x9hq3mhikarixyj465n7t","url":"/fIq03J9LxoYkIRUgV2d90?e=gn2vlvt3bn1x9hq3mhikarixyj465n7t"}
响应直接给出活动页 URL 与编辑令牌(?e= 段)。PUT /event/:id 携带正确 editToken 实测返回 200 且字段更新(logs 记 editEvent success);携带错误 editToken 实测返回 403 Forbidden、内容不变——编辑权完全由 URL 令牌守护。无账号体系下,主办还可通过 POST /magic-link/event/create(仅 creatorEmail 字段)申请邮件登录链接免密找回编辑权(实测 mail_service=none 时返回 200 但不发信)。
4.2 RSVP:两段式出席登记
参加登记分两步,实测完整链路:
# 第一步:占位,拿移除密码(niceware 三词式口令)
curl -s -X POST "http://localhost:8153/attendee/provision?eventID=_0nu7QEITrI8SXhvQhEzc"
{"removalPassword":"tzarevna-minxish-testicle"}
# 第二步:正式登记(人数 2)
curl -s -i -X POST http://localhost:8153/event/_0nu7QEITrI8SXhvQhEzc/attendee \
--data-urlencode "removalPassword=tzarevna-minxish-testicle" \
--data-urlencode "attendeeName=zhangsan" \
--data-urlencode "attendeeEmail=zhangsan@example.com" \
--data-urlencode "attendeeNumber=2"
HTTP/1.1 302 Found
Location: /_0nu7QEITrI8SXhvQhEzc?p=tzarevna-minxish-testicle
DB 落库验证(mongosh 实测):
attendees: [ { number: 1, status: 'provisioned', approved: true, visibility: 'public' },
{ name: 'zhangsan', number: 2, status: 'attending', approved: true, visibility: 'private' } ]
要点:provision 即产生 status:'provisioned' 占位记录(第一步做一半也是实测可观察的);?p=<密码> 是参加者日后撤销 RSVP 的凭证;maxAttendees 满员时实测返回 403 Not enough spots available.。活动若勾选「RSVP 需批准」(approveRegistrations),未批准者页面显示 "Location hidden",批准后才见地点并双方收邮件——这是隐私敏感活动(如家庭住址聚会)的关键特性。
4.3 评论与回复
curl -s -i -X POST http://localhost:8153/post/comment/_0nu7QEITrI8SXhvQhEzc \
--data-urlencode "commentContent=Can I bring a friend?" \
--data-urlencode "commentAuthor=Lisi"
HTTP/1.1 302 Found
docker exec gathio-db mongosh --quiet gathio --eval 'const e=db.events.findOne({name:"Test2"}); printjson(e.comments.map(c=>({author:c.author,content:c.content})))'
[ { author: 'Lisi', content: 'Can I bring a friend?' } ]
字段名必须精确:实测用 comment/commentName 会返回 200 但评论不入库,ValidationError 记入 logs 集合(无前端报错,极易踩坑)。评论长度受 max_comment_length(默认 5000)限制;回复嵌套在 comments[].replies。联邦开启且活动可见性为 public/unlisted 时,Fediverse 上的 @提及会转为评论。
4.4 ICS 导出/导入与群组订阅
单活动导出(GET /export/event/:id,实测 text/calendar):
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//sebbo.net//ical-generator//EN
NAME:Test2
X-WR-CALNAME:Test2
BEGIN:VEVENT
UID:@_0nu7QEITrI8SXhvQhEzc@localhost:8153
DTSTART;TZID=Asia/Shanghai:20261107T100000
外部 .ics 导入(POST /import/event,multipart 字段 icsImportControl,必须 type=text/calendar):
curl -s -o /dev/null -w "HTTP %{http_code}\n" -X POST http://localhost:8153/import/event \
-F "icsImportControl=@import.ics;type=text/calendar"
HTTP 200
docker exec gathio-db mongosh --quiet gathio --eval 'const e=db.events.findOne({name:"Imported From ICS"}); printjson({id:e.id,name:e.name})'
{ id: 'quuqOXXj7FB6LrjPEnjiR', name: 'Imported From ICS' }
mimetype 不对(curl -F 默认 octet-stream)实测 500,堆栈为 multer fileFilter Only ICS files are allowed.。群组功能(POST /group,必填 eventGroupName/eventGroupDescription/creatorEmail)实测:
curl -s -X POST http://localhost:8153/group \
--data-urlencode "eventGroupName=Weekly Game Nights" \
--data-urlencode "eventGroupDescription=Recurring board game meetups" \
--data-urlencode "creatorEmail=admin@example.com"
{"id":"d7TXnYd8K7EJ0aRtadUnX","editToken":"cmb956rehwqhk3oqmkl92m8ayv80tayg","url":"/group/d7TXnYd8K7EJ0aRtadUnX?e=cmb956rehwqhk3oqmkl92m8ayv80tayg"}
群组页 GET /group/:id → 200,其聚合日历 GET /group/:id/feed.ics → 200 text/calendar,可让参加者把「每周例会」一次性订阅进本地日历。
4.5 删除与其余特性
curl -s -o /dev/null -w "HTTP %{http_code} Location:%{redirect_url}\n" \
-X POST http://localhost:8153/deleteevent/fIq03J9LxoYkIRUgV2d90/gn2vlvt3bn1x9hq3mhikarixyj465n7t
HTTP 302 Location:http://localhost:8153/
其余实测/官方确认的特性:活动封面图上传(Jimp 缩放 920px、质量 80,存 /app/public/events/<id>.jpg)、自定义问题(customQuestions)、公开/私有活动与浏览密码(viewPassword)、creator_email_addresses 白名单(空数组=任何人可建活动,实测默认 [] 可用)、show_public_event_list(false 时 GET /events 实测 404)、静态页扩展([[static_pages]] 块 + static/privacy-policy.md,实测 GET /privacy → 200)、实例描述定制(static/instance-description-en.md 生效——带 locale 后缀,无后缀文件名不生效,实测坑点)。
五、快速开始(最小可用示例)
本节在干净环境走通「起服务 → 建活动 → RSVP → 看页面」最小闭环,配置细节留给部署篇。
5.1 起服务
/opt/gathio/docker-compose.yml(最小版):
volumes:
mongodb_data_db:
services:
gathio:
container_name: gathio-app
image: ghcr.io/lowercasename/gathio:1.6.7
links:
- mongo
environment:
- NODE_ENV=production
ports:
- 8153:3000
volumes:
- ./config:/app/config
- ./static:/app/static
- ./images:/app/public/events
restart: unless-stopped
mongo:
container_name: gathio-db
image: mongo:7.0
volumes:
- mongodb_data_db:/data/db
restart: unless-stopped
准备配置(从镜像拷出示例再改 domain/mongodb_url):
mkdir -p /opt/gathio/config /opt/gathio/static /opt/gathio/images
docker run --rm ghcr.io/lowercasename/gathio:1.6.7 cat /app/config/config.example.toml > /opt/gathio/config/config.toml
# 编辑 config.toml:domain = "localhost:8153",[database] mongodb_url = "mongodb://mongo:27017/gathio"
cd /opt/gathio && docker compose up -d
Network gathio_default Creating
Volume gathio_mongodb_data_db Creating
Volume gathio_mongodb_data_db Created
Network gathio_default Created
Container gathio-db Creating
Container gathio-db Created
Container gathio-app Creating
Container gathio-app Created
Container gathio-db Starting
Container gathio-db Started
Container gathio-app Starting
Container gathio-app Started
5.2 验证
curl -s -o /dev/null -w "HTTP %{http_code}\n" http://localhost:8153/
HTTP 200
创建与 RSVP 的最小命令见 4.1/4.2 节(逐条实测可用),活动页 GET /<eventID> → 200 即闭环完成。资源占用实测(docker stats --no-stream,空闲态):
gathio-app 0.00% 100MiB / 15.57GiB
gathio-db 0.27% 74.76MiB / 15.57GiB
两容器合计约 175MB 内存,1 核 2GB 的小机型即可承载个人/小团队实例。
六、适用场景与限制
6.1 适合的场景
- 私人聚会/小型活动:生日派对、桌游夜、社区活动——发一个链接即可收 RSVP 与讨论,活动结束后数据自动销毁,符合「隐私优先」诉求;
- Fediverse 社区:活动即联邦账号,Mastodon 用户直接关注/转发,无需引入微信/邮件群;
- 周期性活动订阅:群组 +
feed.ics让参加者本地日历自动更新; - 对参加者数量敏感的活动:RSVP 批准制 + 地点隐藏,避免住址在批准前外泄;
- 临时替代活动行/Meetup:不想把活动留在第三方平台账号体系里的场景。
6.2 限制与不适合的场景
| 限制 | 实测依据 | 影响 |
|---|---|---|
| 无账号体系 | 全部写接口凭 URL 内 editToken | 编辑令牌丢失且未配邮件 magic link = 永久失去主办管理权 |
| 自毁机制 | scheduleJob("59 23 * * *"),按容器 UTC 时区 | 活动数据到期即失,不适合需要长期归档/回顾的活动 |
| 无健康检查端点 | GET /healthz → 404 | 监控只能用 HTTP 状态码/页面可达性 |
| 无 REST API 设计 | 写接口返回 302 而非 JSON | 集成需按表单 POST + 重定向解析,无官方 API 文档面 |
| 联邦要求公网 HTTPS | nodeinfo href 固定 https:// 前缀 | 本地/内网 HTTP 部署时联邦功能不可用 |
| 单实例架构 | 无多实例/HA 官方方案 | 高可用需自行在应用层外解决(见运维篇) |
| 界面语言 | locales 仅 de/en/ja/nn/pt | 无中文界面,面向中文用户需接受英文 UI |
| 票务缺失 | 功能面核对 | 售票/检票/订单场景应选 Hi.Events、Alf.io 等 |
七、同类选型对比
对比对象取 awesome-selfhosted「Polls and Events / Booking and Scheduling」类目中与 Gathio 用途相近的活跃组件;星标/推送时间来自 2026-11-01 api.github.com 实测查询,许可证/技术栈来自 awesome-selfhosted 条目(2026-11-01 拉取)。
| 组件 | 定位 | 技术栈 | 许可证 | Stars | 最近推送 | 免注册 RSVP | 联邦 | 自动销毁 | 票务 |
|---|---|---|---|---|---|---|---|---|---|
| Gathio 1.6.7 | 自毁式活动页 | Nodejs/Docker (TS+MongoDB) | GPL-3.0 | 467 | 2026-09-30 | ✅ | ✅ ActivityPub | ✅ 默认 7 天 | ❌ |
| Rallly | 日程投票(Doodle 替代) | TypeScript/Nodejs/Docker | AGPL-3.0 | 5334 | 2026-11-01 | ✅(投票) | ❌ | ❌ | ❌ |
| Hi.Events | 活动管理+票务 | PHP/Docker | AGPL-3.0* | 4106 | 2026-10-30 | ❌(购票制) | ❌ | ❌ | ✅ |
| Bitpoll | 日期投票 | Python/Docker (Django) | GPL-3.0 | 318 | 2026-09-16 | ✅ | ❌ | ❌ | ❌ |
| Gancio | 社区活动日历聚合 | Nodejs | AGPL-3.0 | —(托管 framagit) | — | ✅ | ✅ ActivityPub | ❌ | ❌ |
| Framadate | 日程投票 | PHP | CECILL-B | —(托管 framagit) | — | ✅ | ❌ | ❌ | ❌ |
* Hi.Events 仓库 license 字段 GitHub API 实测返回 NOASSERTION(自定义混合许可),选型商用前需核对 LICENSE 文件。
解读与选型建议:
- 按「要解决什么」分流:还没定时间 → Rallly/Bitpoll/Framadate(投票找日期);时间已定、要一个通知+报名页 → Gathio;要卖票/检票/订单管理 → Hi.Events/Alf.io;要做本地社区长期活动日历 → Gancio。Gathio 与 Rallly 甚至互补:Rallly 定完时间,用 Gathio 发活动页。
- 按量化维度看:Gathio 星标(467)明显小于 Rallly/Hi.Events,但版本节奏活跃(近 3 个月 5 个 release)、38 个 open issues 对一个单人维护(creator Raphael,Ko-Fi 捐赠制)的项目属正常水位;GPL-3.0 与 Rallly 的 AGPL-3.0 对自托管使用者都无碍,区别在再分发义务。
- Gathio 的不可替代点:免注册 + ActivityPub 联邦 + 到期自毁三者同时具备,同类中独一份;如果你的诉求恰好是这三条,没有更贴合的开源选择。
- Gathio 的劝退点:需要长期留存活动数据、需要中文界面、需要 REST API 集成、需要票务的,直接排除。
八、参考链接
- Gathio 仓库:https://github.com/lowercasename/gathio(GPL-3.0,查询日 2026-11-01)
- 官方文档站:https://docs.gath.io/(configuration / installation / federation 章节)
- 旗舰实例:https://gath.io/
- 联邦技术规格:仓库
FEDERATION.md - awesome-selfhosted「Polls and Events」类目:https://github.com/awesome-selfhosted/awesome-selfhosted
- 同类组件:Rallly https://github.com/lukevella/rallly、Hi.Events https://github.com/HiEventsDev/Hi.Events、Bitpoll https://github.com/fsinfuhh/Bitpoll、Gancio https://framagit.org/les/gancio
- 站内短链类目选型(区分赛道用):《Shlink 5.1.8 介绍与选型指南》、《YOURLS 1.10.6 介绍与选型指南》、《Chhoto URL 介绍与选型指南》