AstraHub 星链插件
将 Halo 站点接入AstraHub 星链网络,把站点加入面向独立博客生态的协作图谱,与全网博主形成可联动、可检索、可探索的关系网络,目前typecho、WordPress生态已可接入。
注意
用心看完:https://www.aobp.cn/archives/AstraHub
AstraHub地址:https://astra.aobp.cn/
群聊:

介绍
AstraHub 是一个面向独立博客生态的星链协作系统。它不是单纯的友链展示页,而是把博客之间原本分散、孤立的友链关系、节点身份和公开动态组织成一个可联动、可检索、可探索的博客关系网络。
在这个系统里,每一个接入的博客都不只是"挂一个名字"。系统会基于站点信息、友链数据、公开动态和图谱关系,把博客之间的连接结构组织起来,形成全博客的关系图谱。加入的人越多,这个生态的价值就越高。你可以看到谁和谁互相关联,谁拥有你感兴趣的友链资源,哪些博客处在同一个圈层,哪些节点之间存在高频连接。
它的价值不只在"换友链"。当接入节点逐渐增多之后,系统会持续放大博客之间的发现效率:你不仅能找到更多合适的友链对象,还能沿着节点关系、标签与星团结构,快速定位与你兴趣接近的博客与创作者圈层。
特色
-
连接价值
把原本分散的独立博客连接起来,形成真实可见的博客关系网络。你不再是一个孤岛,每一条友链都成为图谱中的一条边,被全网共同读取、共同放大。 -
发现价值
不再一个个博客手动寻找友链或圈层,而是直接从图谱、标签和节点关系中发现你想要的博客与创作者。沿着"朋友的朋友"快速触达更多与你气质相近的人。 -
曝光价值
当加入生态的人越来越多,每个博客都会获得更高的可见度,出现在更多关系链、动态流和检索结果中。 -
交换友链新范式
告别一个个跑到对方网站找入口、填表单、等回信的旧流程。在 AstraHub 里看到心仪的博客,直接发起友链申请,对方在自己后台一键审核通过,双向友链同步生效,整个换链过程不超过 1 分钟。 -
关系图谱
内置交互式星链图谱,把站点之间的友链与圈层关系可视化展现。一眼看清谁在你的圈层里、谁处在网络枢纽位置、哪些节点之间存在高频连接。 -
圈层归属
系统会根据站点信息、内容主题与标签,把博客自动归入对应星团(圈层)。同圈层的博主可以彼此可见、相互发现,比逛友链页一个个翻效率高出几个数量级。 -
迁移无忧
换服务器、换域名后,插件支持重新登舱恢复站点身份,原有的友链关系与圈层归属全部保留,博客搬家不会让你与圈友失联。 -
主题嵌入
附带前端组件galaxy-link-widget,Halo 主题加一行引用即可在侧边栏或页脚展示圈友列表,不需要改动主题代码。
系统要求
- Halo
>= 2.23.0 - Node.js
>= 18(构建时) - Java
>= 21(构建时)
安装
方式一:Halo 应用市场(推荐)
打开 Halo 控制台 → 插件 → 应用市场,搜索 AstraHub 星链 一键安装。
方式二:手动安装
- 从 Releases 下载最新的
.jar文件 - 在 Halo 控制台 → 插件 → 上传插件,选择刚下载的 jar 文件
- 启用插件
配置
启用插件后,在 设置 → 星链接入配置 中填写:
- 尚未注册:点击接入星链,进行注册
- 如已注册:站点搬家或换域名后,使用「重新登舱」恢复在网络中的身份
- 站点名称 / 站点简介 / RSS 地址:登舱时会自动从 Halo 系统设置中拉取,也可手动覆盖
主题适配
AstraHub 星图库采用 REST API + WebSocket 的方式对外提供数据。 适配样式展示
插件状态探测
主题页面建议先请求状态接口,用于判断 AstraHub 插件是否已启用、星图库数据是否可用。
const statusRes = await fetch('/apis/anonymous.astrahub.halo.run/v1alpha1/star-gallery/-/status', {
method: 'GET',
credentials: 'same-origin',
headers: {
Accept: 'application/json',
},
});
if (!statusRes.ok) {
// 插件未安装、未启用,或接口不可用
}
const status = await statusRes.json();
if (!status.available) {
// 插件已启用,但星图库数据尚不可用
}
返回示例:
{
"available": true,
"generatedAt": "2026-06-28T00:00:00Z",
"relationCount": 64
}
获取星图库快照
状态可用后,请求完整快照接口。
const snapshotRes = await fetch('/apis/anonymous.astrahub.halo.run/v1alpha1/star-gallery/-/snapshot', {
method: 'GET',
credentials: 'same-origin',
headers: {
Accept: 'application/json',
},
});
const snapshot = await snapshotRes.json();
快照主要字段:
snapshot.profile// 本站 / 本星系信息snapshot.sectors// 星系联盟卡片snapshot.posts// 星际资讯
星系成员分页
每个星系卡片会提供 planetsUrl,主题可以直接请求该地址获取星系成员。
const planetsRes = await fetch(`${sector.planetsUrl}?page=1&pageSize=24`, {
method: 'GET',
credentials: 'same-origin',
headers: {
Accept: 'application/json',
},
});
const planets = await planetsRes.json();
返回示例:
{
"items": [],
"page": 1,
"pageSize": 24,
"total": 98,
"hasMore": true
}
实时更新
主题可选接入 WebSocket。当 AstraHub 同步到新数据时,前台可以自动刷新星图库。
const protocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const ws = new WebSocket(
`${protocol}//${location.host}/apis/anonymous.astrahub.halo.run/v1alpha1/astrahub/ws/star-gallery`
);
ws.addEventListener('message', (event) => {
const snapshot = JSON.parse(event.data);
// 使用新的 snapshot 重新渲染页面
});
星际资讯按钮建议
posts 中推荐按以下字段处理:
post.url// 文章类资讯的原文地址post.siteUrl// 星球 / 站点地址post.type// 资讯类型
推荐逻辑:
const isArticle = ['rss', 'article', 'post'].includes(
String(post.type || '').toLowerCase()
);
if (isArticle && post.url) {
// 显示:打开原文
// 跳转:post.url
}
if (!isArticle && post.siteUrl) {
// 显示:定位星球
// 跳转:post.siteUrl
}
插件未启用提示
如果状态接口请求失败,主题可提示:
需要安装或启动 AstraHub 星链插件
请在 Halo 后台启用 AstraHub 星链插件,并同步星图库数据。
适配主题样式展示

开发
本地开发
# 拉取代码
git clone https://github.com/atangccc/Astrahub.git
cd Astrahub
# 安装前端依赖
./gradlew pnpmInstall
# 启动 Halo 开发环境(带插件热加载)
./gradlew haloServer
构建 JAR
./gradlew clean build -x test
构建产物位于 build/libs/PluginAstraHub-<version>.jar。
许可
本项目采用 AGPL-3.0 许可证。
AGPL-3.0 是一个 copyleft 许可,使用本项目(包括通过网络服务对外提供功能)必须保持开源并使用相同协议。
联系与支持
- 问题反馈:GitHub Issues
- 作者主页:https://www.aobp.cn/

