Skip to content

Releases: Glasden/NextSkin

NextSkin 0.7.2

Choose a tag to compare

@github-actions github-actions released this 25 Oct 20:29

修订版:修了在 Windows 上实测一键升级时发现的几个问题(切换失败后站点可能一直停着、杀毒软件让准备失败、回滚以后更新页一直在等),另外后台发通知可以搜索选择收件人,注册和重设密码页加了密码强度指示。安装和升级步骤见安装。

运行环境

Node ≥ 24,推荐 Node 26;Next 16.4.2。
镜像:ghcr.io/glasden/nextskin:0.7.2(linux/amd64、linux/arm64)。
校验:sha256sum -c SHA256SUMS,另附 SHA256SUMS.sig,用发布公钥校验的方法见安装。

安全修复

代码上没有。Windows 上把实例放在 C 盘根下(例如 C:\nextskin)、用 NSSM 以 LocalSystem 运行的,目录默认继承"Authenticated Users:修改",本机任何账户都能改程序、读 .env。请照 Windows 部署页用 icacls 收紧目录权限。

迁移

无。核心没有新迁移,官方插件也没有。

不兼容的部署变化

无。没有新的环境变量,Node 下限没有变。

变化

  • 修复:一键升级切换失败、版本指针又写不回去时,站点一直停着。Windows 上 releases\current.json 被杀毒软件或别的程序占着超过几秒时,切换失败后的恢复写不了指针,旧版本也不再启动,只能手动重启服务。现在照样把原来的版本起来;指针没写回去时,结果里写明重启服务之前要把 current.json 改成指向哪个版本。升级和回滚都是这样。
  • 修复:Windows 上准备升级时,解压完报"管理操作失败"。杀毒软件会扫刚解压的发行包,扫完之前目录改不了名。原来最多等约 4.5 秒,实测卡巴斯基要 5 秒多;现在最多等约 55 秒。
  • 修复:后台回滚以后一直停在"正在回到 …"。服务器的钟比浏览器慢一秒多时(Windows 上常见),页面认不出回滚的结果,五分钟后才提示去服务器上看。现在看结果有没有变,不再比时间。
  • 修复:没有权限连接管理进程时被当成"没在运行"。在没提升的 PowerShell 里对以 LocalSystem 运行的 Windows 服务执行命令行,原来 releases 显示"管理进程:未运行",import blessing-skin 会照常开始导入(服务其实在跑)。现在报"没有权限连接管理进程",并提示用管理员身份打开 PowerShell。别的系统上没有权限连接控制通道时也一样。
  • 管理操作的意外错误带上系统错误码,例如"管理操作失败(EPERM rename),请检查目录权限和发行目录",仍不带路径。
  • 启动器强制结束核心时记一条日志:核心 30 秒内没收尾完,或者又按了一次 Ctrl+C,日志里会记"强制结束",不再看起来像核心崩了。
  • 后台发通知:指定用户改成搜索选择。按 uid、昵称搜(能看到用户邮箱的管理员还能按邮箱搜),选中的用户显示成可以删除的小卡片,最多 50 个;从用户详情页点进来时已经选好这个用户。原来要先去用户列表查 uid,再一行一个填进文本框。
  • 修复:后台发完通知,标题框马上标红报"必填"。
  • 注册和重设密码页加了密码强度指示。只是提示,弱密码照样能提交。
  • 表单的校验提示(没填、格式不对、太短、超出范围)改用站点的文案,原来跟随浏览器的语言,可能和页面对不上。
  • 后台的验证码设置说明写明 reCAPTCHA 的私密密钥在 Google Cloud 控制台里叫"旧版密钥",以及去哪里找。
  • 文档:Windows 部署页补上实测结果,包括 Ctrl+C、关窗口和 NSSM 的停止顺序,nssm stop 会先返回,服务的命令行要以管理员身份运行;反向代理页补上全站 CSP 下 Cloudflare 的 Bot Fight Mode、Web Analytics 的实测结果。

已知的限制

  • 管理进程里的修复(上面前四条)要等升级到 0.7.2、再重启一次服务后才生效:升级用的是在用版本的管理进程。Windows 上从 0.7.1 准备升级时报"管理操作失败",多半是杀毒软件还没扫完,再点一次"准备升级"。
  • 0.6.0 的更新页查到新版本后,先刷新一下页面,再点"准备升级到 0.7.2"(0.7.0 修了这个问题,但 0.6.0 的后台没有这个修复)。
  • 验证码服务商的官方测试密钥返回固定的主机名,过不了主机名核对,后台测试会显示"没有通过"。测试请用真实密钥。
  • 三家验证码共用一对站点密钥和私密密钥,换服务商要重新填写。
  • 在全站 CSP 下,Turnstile 的挂件会在浏览器控制台报 connect-src 拦下了 data:。这条报错来自 Cloudflare 自己的 iframe 的 CSP,和站点无关,不影响验证。
  • 已经在真实环境里实测过:宝塔、1Panel、MCSManager、systemd(权限分离)、Windows 控制台和 NSSM 下的一键升级和回滚;全站 CSP 下的三家验证码、Cloudflare 的 Bot Fight Mode 和 Web Analytics。还没实测:Docker 里导入、systemd 单元的开机自启、宝塔和 1Panel 申请免费证书。

NextSkin 0.7.1

Choose a tag to compare

@github-actions github-actions released this 25 Oct 11:44

修订版,修两个在真实环境里实测时发现的问题:第三方登录插件的客户端密钥清不掉,hCaptcha 在子域名上的站点验证一律不通过。另外放宽了更新清单的解析,为以后给版本条目加字段做准备。安装和升级步骤见安装。

运行环境

Node ≥ 24,推荐 Node 26;Next 16.4.2。
镜像:ghcr.io/glasden/nextskin:0.7.1(linux/amd64、linux/arm64)。
校验:sha256sum -c SHA256SUMS,另附 SHA256SUMS.sig,用发布公钥校验的方法见安装。

安全修复

无。

迁移

无。核心没有新迁移,官方插件也没有。

不兼容的部署变化

无。没有新的环境变量,Node 下限没有变。

变化

  • 修复:插件设置里必填的机密项清不掉。在第三方登录插件的设置页点"清除客户端密钥",会报"请求的格式不对"。现在可以清除了。清除后插件的设置不完整,登录页不再显示这个登录方式,和刚装好还没填时一样。只保存、不清除时,仍要求所有必填项都填上。
  • 修复:hCaptcha 在子域名上验证不通过。hCaptcha 核对时报的是注册域名:站点在 skin.example.com 上,它报 example.com。这和站点地址的主机名对不上,所以挑战过了也提示"验证码没有通过"。现在对 hCaptcha,只要报来的域名是站点地址的主机名本身或它的上级域名就算对上,报 not-provided 也放行。Turnstile 和 reCAPTCHA 仍要求主机名完全一致。
    • 代价:同一注册域名下的别的站点如果用了同一个站点密钥,那边解出来的令牌这里也认。最好给每个站点单独申请站点密钥。
  • 后台的验证码测试会写出主机名。服务商判定通过、但主机名对不上时,测试结果会同时写出站点地址的主机名和服务商报来的主机名,日志里也记一条警告。
  • 放宽更新清单的解析:读取时忽略版本条目、签名和清单顶层多出来的字段。以后给版本条目加字段(例如"是否含安全修复"),0.7.1 及以后的站点照样能看到新版本。

已知的限制

  • 0.6.0 的更新页查到新版本后,先刷新一下页面,再点"准备升级到 0.7.1"(0.7.0 修了这个问题,但 0.6.0 的后台没有这个修复)。
  • 验证码服务商的官方测试密钥返回固定的主机名,过不了主机名核对,后台测试会显示"没有通过"。测试请用真实密钥。
  • 三家验证码共用一对站点密钥和私密密钥,换服务商要重新填写。
  • 在全站 CSP 下,Turnstile 的挂件会在浏览器控制台报 connect-src 拦下了 data:。这条报错来自 Cloudflare 自己的 iframe 的 CSP,和站点无关,不影响验证。
  • 已经在真实环境里实测过:宝塔、1Panel、MCSManager 下的一键升级;四个第三方登录插件的账号标识和邮箱验证状态;全站 CSP 下的 Turnstile。还没实测:Windows 控制台和 NSSM 下的一键升级、systemd 以 root 运行管理进程时的权限分离;全站 CSP 下的 hCaptcha 和 reCAPTCHA、Cloudflare 的 Bot Fight Mode 和 Web Analytics;部署文档里其余标了"未实测"的条目。

NextSkin 0.7.0

Choose a tag to compare

@github-actions github-actions released this 24 Oct 16:46

后台多了诊断页:在一页里看站点的健康状况和日志;出问题时可以下载一份脱敏的诊断包,附在问题报告里。ADR-0062 到这一版全部做完。安装和升级步骤见安装。

运行环境

Node ≥ 24,推荐 Node 26;Next 16.4.2。
镜像:ghcr.io/glasden/nextskin:0.7.0(linux/amd64、linux/arm64)。
校验:sha256sum -c SHA256SUMS,另附 SHA256SUMS.sig,用发布公钥校验的方法见安装。

安全修复

无。

迁移

无。核心没有新迁移,官方插件也没有。

不兼容的部署变化

无。没有新的环境变量,Node 下限没有变。

变化

  • 诊断页(后台 → 诊断,只有超级管理员能看,ADR-0062)
    • 健康摘要:版本和运行方式(经管理进程、经启动器、直接运行)、数据库的版本和迁移状态(核心和插件有没有没跑的迁移)、数据目录的剩余空间和日志占用、24 小时内丢掉的日志记录数、plugin host 的状态、后台任务的排队数和死信、最近一次升级的结果。plugin host 不正常时页头会给出提示。
    • 日志:从新到旧浏览 data/logs/ 里的记录,可以按最低级别、来源(启动器、核心、plugin host、插件)和关键字筛选,往前一页页翻。停在第一页时每 5 秒取一次新的记录。页面上显示的是原文。
  • 诊断包:在诊断页点"导出诊断包",下载一个 zip。里面有健康摘要、设置(机密只记有没有设)、NEXTSKIN_* 环境变量的名字(不含值)、插件的状态、后台任务的统计和最近一条错误、最近的日志(最多 10 MB)。
    • 脱敏:令牌、密码、Cookie、连接串里的密码换成 [redacted],邮箱和公网 IP 换成 <邮箱1>、<IP1> 这样的编号,安装目录、数据目录、家目录换成占位符。
    • 每次导出记一条审计。
  • 修复:更新页。点"立即检查"查到新版本后,下面的一键升级面板还写着"已经是最新版本",要刷新页面才出现升级按钮;从没检查过时,这块也会说"已经是最新版本"。

已知的限制

  • 上面这个更新页的修复从 0.7.0 起才生效。在 0.6.0 的后台查到 0.7.0 之后,先刷新一下页面,再点"准备升级到 0.7.0"。

  • 诊断包的脱敏是按规则认的。第三方库用少见的格式打印的机密可能认不出来,发给别人之前最好翻一遍。

  • 设了 NEXTSKIN_LOG_FILE=off 的站点,诊断页看不到日志,诊断包里也没有。

  • 0.6.0 列出的其余限制照旧:宝塔、1Panel、Windows 上的一键升级,以及 systemd 以 root 运行管理进程的整个升级过程,还没在真实环境里实测;全站 CSP 下三家验证码和 Cloudflare Web Analytics 是否正常、部署文档里标了"未实测"的条目、四个第三方登录插件的账号标识和邮箱验证状态,也都还没在真实环境里核对。

NextSkin 0.6.0

Choose a tag to compare

@github-actions github-actions released this 24 Oct 14:29

站点自己把日志存进数据目录、按大小轮换,每种部署方式的日志都在 data/logs/;终端里每行带上了时间、级别和来源。这是第一个能从 0.5.0 一键升级上来的版本。安装和升级步骤见安装。

运行环境

Node ≥ 24,推荐 Node 26;Next 16.4.2。
镜像:ghcr.io/glasden/nextskin:0.6.0(linux/amd64、linux/arm64)。
校验:sha256sum -c SHA256SUMS,另附 SHA256SUMS.sig,用发布公钥校验的方法见安装。

安全修复

无。

迁移

无。核心没有新迁移,官方插件也没有。

不兼容的部署变化

  • 终端里的日志格式变了(ADR-0062)。每行是 2026-10-24 20:15:03.123 WARN core/mail …:本机时区的时间、级别、来源和模块、消息、字段。启动器的行不再带 [nextskin] 前缀,来源一栏写 launcher。warn 及以上写 stderr,其余写 stdout。按前缀或原来的文字过滤日志的脚本要改。
  • 数据目录里多了 logs/:nextskin.log 加轮换出来的 nextskin.1.log……,默认最多约 50 MB。systemd 和 Docker 本来就存了一份,不想再存的设 NEXTSKIN_LOG_FILE=off,代价是之后的诊断页看不到日志。
  • Windows 用 NSSM 做成服务的:建议删掉 AppStdout、AppStderr 两项,否则 data/nextskin.log 会再存一份、而且不轮换。见 windows.md。
  • Docker Compose:示例的 compose.yaml 给容器的日志设了上限(json-file,10 MB × 3 份)。照它部署的可以把 logging 一段抄过去,Docker 默认的 json-file 不轮换。
  • 插件的 debug 日志默认不再输出,排查时设 NEXTSKIN_LOG_LEVEL=debug。插件给的字段放在记录的 fields 下。
  • 命令行命令的日志一律写 stderr,stdout 只有命令的输出;update、rollback、releases 执行期间管理进程的日志也只写 stderr。
  • 新的环境变量都可选:NEXTSKIN_LOG_LEVEL(默认 info)、NEXTSKIN_LOG_FORMAT(text 或 json)、NEXTSKIN_LOG_FILE(off 关掉文件)。Node 下限没有变。

变化

  • 结构化日志(ADR-0062):核心、命令行、插件的日志改用 Pino,每条记录带时间、级别、来源、模块和字段。NEXTSKIN_LOG_FORMAT=json 时终端里每行一条 JSON,给 journald、Docker 后面再接日志系统的人用。
  • 日志文件和轮换
    • 由启动器拉起时,核心的记录、Next 自己打印的内容、崩溃时的堆栈和启动器自己的行都写进 data/logs/nextskin.log(一行一条 JSON,POSIX 上只有运行服务的用户能读),重启后接着写。
    • 后台"设置 → 高级"新增两项:单个文件的上限(1–100 MB,默认 10)、连同当前文件一共留几份(2–20,默认 5),保存后一分钟内生效。
    • 写盘跟不上或写不进去(磁盘满)时丢掉记录、记下条数,恢复后补一条说丢了多少,不拖住站点。
    • Next 和第三方库打印的原始内容里,Cookie、Authorization 头、令牌形状的串和连接串里的密码写进日志之前换成 [redacted]。
  • 文档:部署说明、文档站的安装页和 FAQ 写明了"日志在哪"。

已知的限制

  • ADR-0062 的诊断页(在后台看健康摘要和日志)和脱敏的诊断包还没做,在下一个版本。
  • 从 0.5.0 一键升级到这一版,是一键升级第一次在真实站点上用到。宝塔、1Panel、Windows 上的一键升级,以及 systemd 以 root 运行管理进程的整个升级过程,还没在真实环境里实测。
  • 0.5.0 列出的其余限制照旧:全站 CSP 下三家验证码和 Cloudflare Web Analytics 是否正常、部署文档里标了"未实测"的条目、四个第三方登录插件的账号标识和邮箱验证状态,都还没在真实环境里核对。

NextSkin 0.5.0

Choose a tag to compare

@github-actions github-actions released this 24 Oct 09:37

站点能自己发现新版本,用发行包部署的可以在后台一键升级、回滚。这一版的发行包换了目录布局,从 0.4 升级照旧覆盖解压,细节见下面的"不兼容的部署变化"。安装和升级步骤见安装。

运行环境

Node ≥ 24,推荐 Node 26;Next 16.4.2。
镜像:ghcr.io/glasden/nextskin:0.5.0(linux/amd64、linux/arm64)。
校验:sha256sum -c SHA256SUMS;从这一版起另附 SHA256SUMS.sig,用发布公钥校验的方法见安装。

安全修复

无。

迁移

无。核心没有新迁移,官方插件也没有。

不兼容的部署变化

  • 发行包的目录布局变了(ADR-0061)。根目录的 nextskin.mjs 现在是管理进程,程序放在 releases/<版本>/ 里,releases/current.json 记着在用的和上一个版本;data/、.env 的位置不变。启动命令照旧是 node nextskin.mjs start,面板和 systemd 的配置不用改也能运行。
  • 从 0.4 及更早的版本升级:停服务 → 备份 data/ 和 .env → 把 0.5.0 的 ZIP 覆盖解压到原目录 → 启动。第一次启动时管理进程用新版本预检、启动,通过健康检查后删掉根目录旧的 server/、cli/;失败时以 78 退出(面板和 systemd 不会反复重启),旧程序还在。这一次没有可回滚的上一个版本,要回到 0.4 照部署文档。
  • systemd:想用一键升级,把单元文件里的 User=nextskin、Group=nextskin 换成 Environment=NEXTSKIN_RUN_AS=nextskin:管理进程以 root 运行、只用来换版本,站点照旧降到 nextskin 运行。不换也能运行,只是只检测、不一键升级。见 systemd.md。
  • 不想要管理进程:设 NEXTSKIN_MANAGER=off,进程模型和 0.4 一样,只检测、不一键升级。镜像里设了它。
  • 环境变量、Node 下限都没有变。

变化

  • 更新检测(ADR-0061)
    • 站点每天读一次 https://dl.nextskin.org/releases/v1.json:一份 Ed25519 签过名的版本清单,请求不带站点的任何信息(没有查询参数、Cookie 和自定义头)。验签不过的条目一律不认。
    • 有新版本时后台概览和新的"更新"页(/admin/updates)提示,每位超级管理员收到一条通知,同一个版本只通知一次。
    • 后台"设置 → 高级 → 检测更新"能关掉。
  • 一键升级和回滚(发行包部署,ADR-0061)
    • 后台"更新"页(只有超级管理员能进):先准备,下载 ZIP(先试 dl.nextskin.org,再试 GitHub)、核对签名和 SHA-256、解压,用新版本对着在用的库预检,站点照常运行;看过预检结果(迁移有几个、不兼容的插件、失败时会怎样)再升级,站点停几秒到三十多秒。
    • 新版本没通过健康检查时:没有迁移就换回旧版本;SQLite 有迁移时先自动备份,失败时连库一起换回去。MySQL、PostgreSQL 有迁移时要先自己备份、在后台勾选确认;迁移失败而库没变时换回旧版本,迁移已经提交而新版本没起来时不自动回滚,更新页写明怎么做。
    • 升级以后能回到上一个版本:后台一键,或 node nextskin.mjs rollback。SQLite 有迁移时用升级前的备份换回库,升级以后的写入会丢失,要确认。MySQL、PostgreSQL 有迁移时只能停着服务回滚:停服务 → 用备份恢复数据库 → node nextskin.mjs rollback --yes → 启动。
    • 手动升级照旧可用:覆盖解压新的 ZIP 再启动,管理进程按同一条流程预检、迁移、启动,失败时同样回到旧版本。
    • Docker 镜像不做一键升级:更新页照样提示新版本,升级照旧换标签。
  • 命令行
    • 新增 update(--check、--to、--backup-confirmed、status)、rollback、releases;服务运行时交给管理进程,服务停着时自己执行同一条流程,最后不启动服务。
    • doctor、migrate 加了 --json。migrate 和核心启动时一并执行已启用的官方插件新增的迁移,SQLite 的迁移前备份也覆盖它们。
  • 发行包签名:SHA256SUMS.sig 和版本清单的条目都由发布环境里的私钥签名,公钥内置在站点里,也放在文档站的 https://docs.nextskin.org/release-keys/2026-10.pem。

已知的限制

  • 一键升级要从 0.5.0 升到下一个版本时才第一次在真实站点上用到。宝塔、1Panel、Windows 上的一键升级,以及 systemd 单元文件以 root 运行管理进程的整个升级过程,都还没在真实环境里实测;部署文档里标了"未实测"。
  • 全站 CSP 还没在真实网络上核对:三家验证码(Turnstile、hCaptcha、reCAPTCHA)和 Cloudflare 的 Web Analytics 自动注入在这条策略下是否正常。用验证码的站点升级后请试一次登录,遇到问题请反馈。
  • 部署文档里其余标了"未实测"的条目(宝塔和 1Panel 的反向代理、Windows 上的 Ctrl+C 和做成服务、Docker 里导入)还没在真实环境里核对过。
  • 四个第三方登录插件返回的账号标识和邮箱验证状态,还没用真实账号逐家核对。

NextSkin 0.4.0

Choose a tag to compare

@github-actions github-actions released this 23 Oct 16:33

配色主题来了:站长在后台启用,用户在用户中心挑。插件可以在用户中心首页和后台概览放挂件。插件开发文档多了一页带截图的插槽一览。安装和升级步骤见安装。

运行环境

Node ≥ 24,推荐 Node 26;Next 16.4.2。
镜像:ghcr.io/glasden/nextskin:0.4.0(linux/amd64、linux/arm64)。

安全修复

无。

迁移

有:0047_add_users_theme,给 users 表加一列可空的 theme,记用户挑的主题。不改已有的数据。

升级之前先备份。SQLite 有要执行的迁移时会先自动备份到 data/backups/;MySQL、PostgreSQL 要自己备份。升级以后不能直接换回 0.3.0:回退要先恢复升级前备份的数据库,见升级与回退。

不兼容的部署变化

无。环境变量、Node 下限、启动方式都没有变。

变化

  • 配色主题(ADR-0057、0058)
    • 后台新增"主题"页(/admin/themes),超级管理员设站点默认的主题、决定启用哪些。插件带来的主题默认不启用,看过和站点相配再开。
    • 用户中心新增"主题"页,用户挑一套配色存进账号,换了设备也一样;可以选"跟随站点默认"。亮暗模式照旧按设备记。没登录的访客、没挑过的用户,或者挑的主题被停用、插件被卸载了,看到的都是站点默认的那套,再不行就是钻石青。
    • 官方插件"更多配色"提供钴蓝、洋红和高对比三套。高对比用直角、粗边框和静止时就带阴影的卡片,亮色下荧光色只用在色块上。
    • 主题只能换颜色和几种固定的结构(圆角或直角、细或粗的边框、平的或带阴影的卡片),不能写 CSS。插件的主题在构建、安装和加载时都要过对比度检查。
  • 插件挂件(ADR-0059)
    • 插件可以在用户中心首页(公告下面)和后台概览(站点的几个数字下面)放统计或 Markdown 的挂件,每个插件在每处最多两个。挂件的数据限时 3 秒,插件出问题时只显示"没能加载",首页最多慢 3 秒。
    • 官方插件"分享注册链接"在用户中心首页显示双方各得几分、最新的一条链接(带复制按钮)和经链接注册了几人;"邀请码"在后台概览显示可用、已使用、已过期的个数。插件启用以后才有。
    • 后台"这个插件会做什么"列出插件的主题和挂件,命令行 plugin install 的确认也列出挂件。
  • 插件 API:随 @nextskin/plugin-sdk 升到 1.0.0-rc.7。
    • 新增 ui.themes(配色主题,rc.5)、主题的 structure 和色块颜色 accent-fill、accent-fill-fg(rc.6)、ui.widgets(挂件,rc.7),见文档站的配色主题和挂件。
    • 用 rc.5 及以后的 SDK 构建的插件只能装在 0.4.0 及以后的版本上;用旧版 SDK 构建的插件照常能装。

已知的限制

  • 全站 CSP 还没在真实网络上核对:三家验证码(Turnstile、hCaptcha、reCAPTCHA)和 Cloudflare 的 Web Analytics 自动注入在这条策略下是否正常。用验证码的站点升级后请试一次登录,遇到问题请反馈。
  • 部署文档里标了"未实测"的条目(宝塔和 1Panel 的反向代理、Windows 上的 Ctrl+C 和做成服务、Docker 里导入)还没在真实环境里核对过。
  • 四个第三方登录插件返回的账号标识和邮箱验证状态,还没用真实账号逐家核对。

NextSkin 0.3.0

Choose a tag to compare

@github-actions github-actions released this 23 Oct 00:29

窄屏上的页头和导航重做,头像改成 BS 那样帽子层立体的正视图。文档站上线:docs.nextskin.org,安装和升级步骤见安装。

运行环境

Node ≥ 24,推荐 Node 26;Next 16.4.2。
镜像:ghcr.io/glasden/nextskin:0.3.0(linux/amd64、linux/arm64)。

安全修复

无。

迁移

没有新迁移。从 0.1.x 直接升到 0.3.0 的站点会执行 0.2.0 的 0046_create_notifications:升级之前先备份,回退要先恢复升级前备份的数据库,见升级与回退。

不兼容的部署变化

无。环境变量、Node 下限、启动方式都没有变。

变化

  • 窄屏布局
    • 页头在窄屏上只占一行:放不下站点名时只显示站点图标,最左边多一个"打开导航"按钮,点开从左边滑出全站导航。点链接、按 Esc、点遮罩或往左滑都能关上。
    • 用户中心和后台在窄屏上,左侧的分区导航收进同一个侧边栏,不再是横着滚动的一排。
    • 后台"设置"的分区在窄屏上换成选择框。
    • 昵称很长时,页头的用户菜单截断显示,不再把页面撑宽;菜单比屏幕高时可以在菜单里滚动。
    • 修复:对话框里的下拉选项、提示被对话框盖住,比如创建 OAuth 应用时看不到"类型"的选项。
  • 头像(ADR-0056)
    • 改成 BS 用户菜单里那样的正视图:帽子层按游戏里的膨胀量伸出脸外,头发、头盔看着是立体的。半透明的帽子像素按透明度叠加。
    • 按显示尺寸和设备像素比出图,高分屏上更清楚。
    • 渲染器版本升到 3,头像、人物图的地址都变了,升级后第一次请求时重新生成;旧版本的出图缓存启动时自动删掉。反向代理、CDN 缓存的旧图不会再被请求,不用手动清。
    • OpenID Connect 的 picture 改成 144×144 的头像,原来普通皮肤只有 8×8。

已知的限制

  • 全站 CSP 还没在真实网络上核对:三家验证码(Turnstile、hCaptcha、reCAPTCHA)和 Cloudflare 的 Web Analytics 自动注入在这条策略下是否正常。用验证码的站点升级后请试一次登录,遇到问题请反馈。
  • 部署文档里标了"未实测"的条目(宝塔和 1Panel 的反向代理、Windows 上的 Ctrl+C 和做成服务、Docker 里导入)还没在真实环境里核对过。
  • 四个第三方登录插件返回的账号标识和邮箱验证状态,还没用真实账号逐家核对。

NextSkin 0.2.0

Choose a tag to compare

@github-actions github-actions released this 22 Oct 16:51

站内通知、后台的失败任务页,全站加上了内容安全策略(CSP)。部署步骤见部署文档。

运行环境

Node ≥ 24,推荐 Node 26;Next 16.4.2。
镜像:ghcr.io/glasden/nextskin:0.2.0(linux/amd64、linux/arm64)。

安全修复

  • 登录、注册等页面的脚本还没加载完时就点提交,浏览器会把表单的内容(包括密码)拼进本站页面的地址里提交,密码会留在地址栏、浏览器历史和反向代理的访问日志里。网速慢、脚本加载慢时才会碰上。现在表单一律按 POST 提交,脚本没加载完时只是把页面重新打开一次。建议检查反向代理的访问日志里有没有带 password= 的请求,有的话删掉这些日志。
  • 全站页面加上内容安全策略:页面只执行带本次请求 nonce 的脚本,即使哪里漏了转义,注入进页面的脚本也不会运行(ADR-0053)。

迁移

有:0046_create_notifications,新建站内通知的三张表,不改已有的表。

升级之前先备份。SQLite 在迁移前会自动备份到 data/backups/;MySQL、PostgreSQL 要自己备份。升级以后不能直接换回 0.1.x:回退要先恢复升级前备份的数据库,步骤见升级和回退。

不兼容的部署变化

  • 站点不能再嵌进别的网站的 iframe:全站发 X-Frame-Options: DENY 和 frame-ancestors 'none',原来只有授权页这样做。
  • 会改写页面脚本的 CDN 功能要关掉:比如 Cloudflare 的 Rocket Loader、邮箱地址混淆,它们插入或改写的脚本不带 nonce,会被浏览器拦下。Cloudflare 的 Bot Fight Mode 可以照常开。反向代理和 CDN 也不要去掉页面的 Content-Security-Policy 头,或者另加一条 CSP。详见部署文档的CDN 和内容安全策略。

环境变量、Node 下限、启动方式都没有变。

变化

  • 站内通知(ADR-0052)
    • 页头的铃铛显示未读数,点开是最近 5 条未读通知;用户中心有"通知"页,可以标为已读、删除、全部标为已读。
    • 举报有了结果、有人提交新举报、管理员下架或删除了材质、管理员修改了账号、角色或 OAuth 应用,都会发站内通知;没配邮件的站点也有。
    • 后台新增"通知"页,管理员可以给全部用户、普通用户、管理员或指定用户发通知,群发可以撤回。新权限 notifications.send 给管理员和超级管理员。通知默认保留 365 天,在设置里改。
    • 插件 API 随 @nextskin/plugin-sdk 升到 1.0.0-rc.4,新增能力 notifications.send。用到这个能力的插件只能装在 0.2.0 及以后的版本上。
  • 后台的失败任务页(ADR-0051):发送失败的邮件这类重试多次仍然失败的后台任务,超级管理员可以在 /admin/failed-jobs 查看原因、重试或删除。邮件失败时显示 SMTP 的错误类别。后台概览会提示有多少失败的任务。
  • 内容安全策略(ADR-0053):见上面的"安全修复"和"不兼容的部署变化"。
  • 插件的 Markdown 页面里,代码块右上角有复制按钮。
  • 修复:窄屏上,页头会盖住从它打开的菜单和弹出层。

已知的限制

  • 全站 CSP 还没在真实网络上核对:三家验证码(Turnstile、hCaptcha、reCAPTCHA)和 Cloudflare 的 Web Analytics 自动注入在这条策略下是否正常。用验证码的站点升级后请试一次登录,遇到问题请反馈。
  • 部署文档里标了"未实测"的条目(宝塔和 1Panel 的反向代理、Windows 上的 Ctrl+C 和做成服务、Docker 里导入)还没在真实环境里核对过。
  • 四个第三方登录插件返回的账号标识和邮箱验证状态,还没用真实账号逐家核对。

NextSkin 0.1.2

Choose a tag to compare

@github-actions github-actions released this 22 Oct 01:28

插件可以按昵称搜索用户,修好了皮肤卡片的两处显示问题。部署步骤见部署文档。

运行环境

Node ≥ 24,推荐 Node 26;Next 16.4.2。
镜像:ghcr.io/glasden/nextskin:0.1.2(linux/amd64、linux/arm64)。

安全修复

无。

迁移

无。照部署文档换包或换镜像标签即可,库不用动;有问题也能直接换回 0.1.1。换回之后,已经装上、用到 ctx.users.searchByNickname 的插件照常运行,只是调用这个方法的地方会出错。

不兼容的部署变化

无。

变化

  • 插件按昵称搜索用户(ADR-0050):插件 API 随 @nextskin/plugin-sdk 升到 1.0.0-rc.3,新增 ctx.users.searchByNickname。申请了"读用户"能力的插件可以按昵称搜索用户(包含即可,英文字母不分大小写,每页最多 100 个),后台表格的搜索框不用再把自己的记录全部读出来再筛。按 SDK 1.0.0-rc.3 构建的插件只能装在 0.1.2 及以后的版本上。
  • 修复:鼠标移上皮肤卡片时偶尔闪一下白。现在抬手的拼图解码完,才换掉静止的图。
  • 修复:光标快速滑过卡片时,人物会左右滑动。

已知的限制

  • 部署文档里标了"未实测"的条目(宝塔和 1Panel 的反向代理、Windows 上的 Ctrl+C 和做成服务、Docker 里导入)还没在真实环境里核对过。
  • 四个第三方登录插件返回的账号标识和邮箱验证状态,还没用真实账号逐家核对。

NextSkin 0.1.1

Choose a tag to compare

@github-actions github-actions released this 21 Oct 22:17

皮肤改成 BS 皮肤库那样的 3D 出图,命令行也能管理插件。部署步骤见部署文档。

运行环境

Node ≥ 24,推荐 Node 26;Next 16.4.2。
镜像:ghcr.io/glasden/nextskin:0.1.1(linux/amd64、linux/arm64)。

安全修复

无。

迁移

无。照部署文档换包或换镜像标签即可,库不用动;有问题也能直接换回 0.1.0。

不兼容的部署变化

无。

变化

  • 皮肤改成 3D 出图(ADR-0048):和 BS 皮肤库一样,人物斜着站、略微俯视,鼠标移上去会抬手。材质卡片、衣柜、角色卡、上传页并排显示背面和正面,领奖台和插图只显示正面。出图地址改成 /render/v2/…;升级后第一次启动时自动清掉旧版的出图缓存,之后按需重新出图,所以刚升级时第一次打开皮肤库会慢一些。
  • 命令行管理插件(ADR-0049):node nextskin.mjs plugin list、plugin install <插件包>、plugin enable|disable <id>、plugin uninstall <id>,服务运行时也能用,运行中的服务最多 5 秒后跟上。安装、升级和卸载先列出影响再确认,脚本里加 --yes。
  • 仪表盘的展台显示角色的皮肤,原来只画剪影。
  • 没设头像的用户显示站点标志的图形,不再是空白。
  • 修复:从 BS 导入的、边长超过 1024 的材质(例如大披风)出不了图,3D 预览也打不开。
  • SQLite 下的互斥操作改用库文件旁边 nextskin.sqlite-locks/ 目录里的锁文件,命令行和服务两个进程之间也互斥。

已知的限制

  • 部署文档里标了"未实测"的条目(宝塔和 1Panel 的反向代理、Windows 上的 Ctrl+C 和做成服务、Docker 里导入)还没在真实环境里核对过。
  • 四个第三方登录插件返回的账号标识和邮箱验证状态,还没用真实账号逐家核对。