DracPanel
English summary: DracPanel is an unofficial Dracula/Alucard-themed desktop
web UI for sing-box. It keeps the upstream
native-API dashboard and adds a local management module (service control,
subscriptions, eBPF policy, JSON config editor) through sing-box-panel. One
UI entry, one panel token, and the native API secret is bootstrapped and cached
automatically.
Latest update: 2026-10-18 — DNS tools, connection history/export/grouping,
traffic history, latency history with optional auto-test, and the DracPanel
rename. See CHANGELOG.md.
Unofficial fork. This project is built on top of
SagerNet/sing-box-dashboard
(GPL-3.0-or-later). It is not affiliated with or endorsed by SagerNet or the sing-box
project. See NOTICE and LICENSE.

这是什么
一个 sing-box Web 面板,交互与视觉以 FlClash
为参照重新设计:
- 以官方 sing-box-dashboard 源码为底版做深度定制,保留 React 19 + Vite +
TypeScript + Connect RPC 的架构和对原生 gRPC API 的完整封装;上游遗留的
桌面宿主页面(Tailscale/USB-IP/OpenVPN/终端/报告等)已从 Web 构建移除。 - 双配色方案:默认 FlClash 风格的中性 Material 配色(暗/亮/纯黑 AMOLED,
种子色生成强调色阶),原 Dracula/Alucard 配色保留为可选方案,覆盖所有页面、
管理模块、CodeMirror 编辑器和图表。 - 信息架构对齐 FlClash:仪表板 / 代理 / 配置 / 请求 / 连接 / DNS / 日志 /
规则 / 测速 / 工具 / 设置 / 系统;桌面端侧栏,手机端底部导航栏。 - 保留管理模块(现“系统”页):服务启停/重启/重载、eBPF 分应用策略、配置
编辑(校验 → 备份 → 原子替换 → 重启 → 失败回滚);订阅管理独立为“配置”页。 - 直连模式:没有特权 panel 时,可在登录页选择“直连 sing-box 内核”,直接
管理一个 sing-box API 服务(订阅与服务控制在该模式下不可用,界面如实标注)。 - 全球连接实时地图:仪表板按目标城市聚合实时连接,Canvas 绘制动态弧线;
GeoIP 只通过本机 panel 的/api/geoip查询。 - 一个浏览器入口:
http://127.0.0.1:9096/。原生 API 仅作为内部 RPC
(9091),自带 dashboard 已关闭;如果 panel 配置了zashboard_dir,
zashboard 仍在/dash/作为可选回退。
功能
- 仪表板 / 代理 / 配置 / 请求 / 连接 / DNS / 日志 / 规则 / 测速 / 工具 /
设置 / 系统(信息架构对齐 FlClash) - 仪表板卡片化:核心状态(运行状态/运行时间/版本 + 面板模式下的
启动/停止/重启)、上下行速率、模式切换、内存、连接数、出口 IP、TUN 状态、
系统接管状态、当前配置、代理组快切、实时连接表、流量/连接历史、全球连接
地图;卡片可增删排序 - 四模式顶栏下拉:走原生
SetClashMode,切换后立即生效 - 原生 API:节点切换、URLTest、连接流、日志流、实时流量、NetworkQuality/STUN
- 代理:节点搜索、按名称/延迟排序、隐藏不可用节点;节点延迟历史与
可选自动 URLTest(关闭 / 5 / 15 / 30 分钟) - 配置:订阅添加/更新/定时/删除、流量与到期信息、写入配置(走 panel
校验/备份/重启/回滚事务) - 请求:由实时连接流派生的近期请求台账(内核不保留历史请求日志,页面
如实标注),搜索、状态过滤、详情 - 连接:暂停刷新、任意字段排序、按 host/process/outbound/rule/source
分组、来源 IP/TCP/UDP/隐藏链过滤、CSV/JSON 导出、关闭筛选结果、
目标 GeoIP 详情 - 日志:级别过滤、日志类型过滤、隐藏正则、保留条数、暂停与导出
- DNS:一级页面;按需查询、查询历史、会话查询记录(如实标注数据来源)、
DNS/FakeIP 缓存清理;直连模式下 Clash API 地址来自服务器条目 - 规则:从实时配置派生(原生 API 没有规则 RPC),支持关键词/
action/outbound 过滤与排序,展示 route/DNS 规则、规则集、final - 工具:连通性测试、NetworkQuality/STUN
- 连接表窗口化虚拟滚动(不再截断 500 条)
- 全球连接地图:GeoIP 城市聚合、动态贝塞尔弧线、30 条上限、亮暗主题跟随;
无连接/缺少 GeoIP 数据库时优雅降级 Ctrl+1…8切换八个主页面;⌘K 命令面板;主题/配色/强调色/最后页面持久化- 44px 顶栏:logo、运行状态灯、版本、模式下拉、亮暗、刷新
- 窄屏自动降级:≤600px 底部导航栏(FlClash NavigationBar 风格)、
601–900px 侧栏抽屉(带滑动手势)、无横向溢出
Roadmap / 计划
按当前优先级排列,都是已经在做或刚做完的事。没有日期承诺,顺序会随真实
使用情况调整。
- 规则集在线更新:规则页现在只能从实时配置读出规则集列表
(tag / type / format / path),没有更新入口。 - fa / ru 界面文案母语校对:新增文案已四语登记,但 fa / ru 仍需母语校对。
新增文案的登记规则见 CONTRIBUTING.md。 - 端到端冒烟测试接入:
scripts/smoke-dist.mjs已能就地起服务校验 dist 的
资源引用;浏览器级验收目前由artifacts/下的 CDP 脚本承担,尚未接入 CI。 - 覆盖率提升:
pnpm test:coverage已可用,当前用例集中在纯逻辑模块
(src/lib、src/api),继续补视图层与交互路径。
功能截图
2026-10 FlClash 风格改造后的截图在
artifacts/screenshots/flclash/(新信息架构、
flclash 配色、四个视口、亮暗主题)。下表是 2026-10-17 验收时 Dracula 配色的
存档截图,页面名称以当时为准。旧截图来自已经验收的本机实例;最后两张是
TrafficMap组件的合成连接预览
(不是线上流量),用于展示地图布局。订阅流量/自动更新、系统日志、集成卡和
真实地图需要安装sing-box-panel 0.1.0-8和新版 UI 后显示。
![]() |
![]() |
| 概览 · Dracula | 概览 · Alucard |
![]() |
![]() |
| 管理 · 运行状态 | 管理 · 订阅 |
![]() |
![]() |
| 管理 · 配置编辑器 | 窄屏布局 |
![]() |
![]() |
| 全球连接地图预览 · Dracula(合成数据) | 全球连接地图预览 · Alucard(合成数据) |
架构
Browser
│
▼
127.0.0.1:9096 DracPanel(React 静态产物,由 sing-box-panel 的 ui_dir 提供)
├─ /api/* sing-box-panel 管理 API(同源,X-Panel-Token)
├─ 127.0.0.1:9091 sing-box 原生 API(Connect / gRPC-Web,仅 RPC,dashboard 关闭)
└─ 127.0.0.1:9090 Clash API(zashboard 回退和面板遗留节点接口)
为什么 UI 由 panel ui_dir 提供
构建产物放在 /usr/local/share/dracpanel-ui,由 sing-box-panel 在
9096 提供,而不是放在 /var/lib/sing-box/dashboard 由原生 API 的/dashboard/ 提供:
- 管理 API 与 UI 同源,不需要给 panel 再加 CORS;
- 原生 API 支持 CORS 白名单,9096 可以安全访问 9091;
- 最终只有一个浏览器入口(9096),9091 只做内部 RPC;
- 如果 panel 配置了
zashboard_dir,zashboard 继续在/dash/作为回退;install.sh不修改该字段。
原生 API 的 services.api 显式配置了access_control_allow_origin = ["http://127.0.0.1:9096", "http://localhost:9096"],
没有 * 兜底;dashboard.enabled = false。
登录与密钥引导
- 登录只需 panel token(
/var/lib/sing-box-panel/token)。 - 校验后从
/api/config读取一次完整配置,提取services[type=api]的
secret 和端口,写入 dashboard 的 server 列表并连接原生 API。 - 配置的 mtime 和字节数会一起缓存:普通刷新只请求
/api/state,不重复
拉全量配置;只有配置真的变化后才重新同步一次。配置里的//、/* */
注释和 trailing comma 会被正确解析(sing-box 接受它们)。 - 核心停止时,登录闸门先显示 Dracula 风格的服务恢复界面,再尝试同步
原生 API;因此即使配置暂时读不出来,启动/重启按钮也不会被错误页挡住。
配置应用/重启后DaemonApi.reconnectNow()自动恢复数据流,不整页刷新。 - 点击“锁定面板”会清除 panel token、原生 API secret 缓存和托管服务器条目,
并让其他已打开的面板标签页刷新回登录页。它防的是误操作和他人顺手使用
当前浏览器,不是本机同用户进程或恶意扩展的安全边界。
页面与快捷键
| Page | 说明 |
|---|---|
| 仪表板 | 核心状态卡片(状态/运行时间/版本/服务控制)、流量、内存、连接数、模式、出口 IP、TUN、系统接管、当前配置、代理组快切、实时连接表、历史曲线、全球连接地图 |
| 代理 | 策略组、节点切换、搜索/排序、延迟历史、健康巡检、自动测速 |
| 配置 | 订阅管理(添加/更新/定时/删除、流量与到期、写入配置) |
| 请求 | 由实时连接流派生的近期请求台账(如实标注)、搜索、过滤、详情 |
| 连接 | 实时连接、搜索、排序/分组/过滤、暂停、导出、批量关闭 |
| DNS | 按需查询、查询历史、会话记录、DNS/FakeIP 缓存清理 |
| 日志 | 原生日志流、级别/类型过滤、隐藏正则、搜索、暂停、导出 |
| 规则 | 配置派生的路由/DNS 规则、搜索/过滤/排序、规则集、final、可视化编辑 |
| 测速 | 分组 URLTest、网络质量/STUN 入口 |
| 工具 | 连通性测试、NetworkQuality/STUN |
| 设置 | 偏好(外观/配色/语言)、服务器、上游链接、非官方声明 |
| 系统 | 服务运行状态、eBPF、配置编辑器、通知 |
Ctrl+1 仪表板 · Ctrl+2 代理 · Ctrl+3 连接 · Ctrl+4 日志 ·Ctrl+5 规则 · Ctrl+6 测速 · Ctrl+7 设置 · Ctrl+8 系统 · ⌘K 命令面板
管理模块
- 运行状态:启动/停止/重启/重载(panel API),PID/启动时间/配置路径,
原生实时流量;显示配置读取错误、journalctl -u sing-box系统日志、
Clash API/密钥和按可用性显示的备用入口(zashboard 自动填密钥、MetaCubeXD、
官方 dashboard)。核心停止时该页面仍然可用。 - 订阅:添加 URL、全量更新、单条更新、写入配置、删除;支持按订阅设置
自动更新间隔,展示Subscription-Userinfo的已用流量/总量/到期时间,
以及当前托管节点、托管组、未支持协议和逐条更新失败信息。写入仍走 panel
的校验/备份/重启/回滚事务。 - eBPF:策略模式、应用列表、UID 选择、能力预检;预检结果按
PASS/FAIL/UNKNOWN 和 findings 展示,应用行显示可执行文件和运行进程数。 - 配置:CodeMirror JSON5 编辑器(Dracula 语法色)、本地 sing-box Schema
补全、应用前的字段级/行级 Diff、校验、应用并重启、备份列表、恢复和下载。
应用失败由 panel 自动回滚。配置可以带注释/trailing comma,panel 与原生 API
都按 sing-box 实际支持的子集解析。
订阅管理已独立为“配置”页(信息架构对齐 FlClash);上述 panel 侧能力和全球
连接地图需要配套的 sing-box-panel 0.1.0-8,包括POST /api/subscriptions/<id>/schedule、GET /api/subscriptions/managed、GET /api/config/backups/<name>、GET /api/geoip?ip=...、/api/logs 和/api/state 的可用性/egress_ip 字段。
面板能力契约
UI 登录后会优先读取 /api/state.features(可选,字符串数组)。如果后端
提供该字段,UI 以它为准;没有该字段时,UI 会一次性探测下列端点,并在
管理页禁用不支持的控件、显示“升级到 0.1.0-8”的提示,而不是等用户点击后
才收到 404:
subscriptions.schedule、subscriptions.managed、subscriptions.userinfo、config.backup.download、logs、clash.version、geoip。
后端可以在 /api/state 里增加 "api_version": 8 和同名的 features
数组来跳过探测。探测只访问同源 panel,不访问外部服务。
配置编辑器的补全来自随 UI 打包的 public/sing-box.schema.json,取自
https://sing-box.sagernet.org/schema.json(2026-10-11);加载和补全都只
访问同源静态资源。升级 sing-box 后应同步更新该文件;过新/过旧的字段仍以
后端 sing-box check 为准。
主题
- flclash(默认):中性 Material 风格表面,暗色
#121214系、亮色#f2f2f0系,另有纯黑 AMOLED 变体(设置或主题菜单中开启);默认强调色为
FlClash 参考截图的橙色,另有 8 个预设 + 任意自定义色(OKLCH 色阶派生,
见src/lib/tonalPalette.ts) - dracula:原 Dracula(暗
#282a36系)/ Alucard(亮#fffbeb系)配色,
老用户自动沿用,新装默认 flclash - 两种配色 × 亮暗 × AMOLED 通过
data-palette/data-theme/data-amoled三个根属性组合,全部走globals.css设计令牌;index.html内联脚本在首帧前应用,无主题闪烁 - CodeMirror:属性/字符串/数字/布尔/注释/错误分别映射到状态色
- PWA / Service Worker 已关闭,升级/回滚不会被旧缓存挡住
更多截图见 artifacts/README.md(含验收记录)。
环境要求
- Linux + systemd;基础管理功能在 CachyOS(Arch 系)的
sing-box-panel 0.1.0-6+sing-box v1.14.3-reF1nd上验证;订阅/备份/
GeoIP 端点来自本地构建的sing-box-panel 0.1.0-8(已通过 dry-run 集成
测试,需单独重新打包安装) - sing-box 1.14+,支持
services.api/ Connect API - 面板需要
python-maxminddb;GeoIP 城市库推荐由deploy/install.sh
下载的 DB-IP City Lite(也可配置自备的 GeoLite2/DB-IP mmdb) - Node.js 22+(验证使用 24.22.0)、pnpm 11、Git
- 已安装
sing-box-panel,并准备好它的--configsystemd drop-in deploy/install.sh假定 panel 监听127.0.0.1:9096、二进制位于/usr/bin/sing-box-panel、UI 目录为/usr/local/share/dracpanel-ui;不同发行版/目录结构请先阅读脚本再运行
构建
git clone https://github.com/emoeem/dracpanel.git
cd dracpanel
npx --yes pnpm@11.13.1 install --frozen-lockfile --trust-lockfile
npx --yes pnpm@11.13.1 generate # protobuf + 图标
./node_modules/.bin/tsc -b
./node_modules/.bin/vite build
--trust-lockfile用于跳过 pnpm 11 对 lockfile 每个条目的供应链元数据校验;
仓库使用的是上游固定 lockfile。网络条件好时可以省略。
src/gen/ 是生成文件,按上游约定不提交;pnpm generate 会生成它。
部署
sudo ./deploy/install.sh # 配置 + UI + GeoIP 数据
sudo ./deploy/install.sh --ui-only # 只更新 UI,不改配置、不重启核心
sudo ./deploy/install.sh --rotate-secret # 显式轮换原生 API secret
sudo ./deploy/install.sh --refresh-geoip # 重新下载 DB-IP 城市库
脚本会(一次 sudo):
- 备份
/etc/sing-box/config.json(时间戳,600); - 添加/更新
services[type=api]:127.0.0.1:9091、9096-only CORS 白名单、
私有网络、dashboard 关闭。默认保留已有 secret,只有首次安装或显式--rotate-secret才生成新的;secret 在生成后不会输出; - 确认 panel 配置(
/etc/sing-box-panel/panel.json)和 systemd drop-in,
改动前先备份; - 安装
sing-box-config-perm.path(配置变更后chmod 600,并用stat -c %a复核),改动前先备份; - 把旧 UI 移到
...legacy-<timestamp>,在新目录复制完成后一次性切换; - 下载 DB-IP City Lite 到
/usr/share/GeoIP/dbip-city-lite.mmdb,校验
SHA-256 后解压;下载/校验失败只警告,/api/geoip返回 503,不影响其余
安装; - 重启服务并等待就绪(失败自动回滚 config、panel 配置、drop-in、path unit
和 UI)。
配置可以包含 //、/* */ 注释和 trailing comma;安装器会先把它们归一化
为严格 JSON 再写入。重写后的 config.json 不再保留注释,原文件保存在/etc/sing-box/backups/config.json.bak.*-dracpanel。--ui-only 完全跳过配置
步骤,适合只更新前端。
脚本不会修改 /usr/bin 或 /usr/share 下由包管理的文件;GeoIP 数据写入/usr/share/GeoIP。
订阅自动更新/Userinfo、备份下载和全球连接地图需要配套的
sing-box-panel 0.1.0-8;deploy/install.sh只部署 UI,不构建或安装面板包。仍使用 0.1.0-6 时,
UI 会探测到缺失端点并禁用相应控件、提示升级;其余管理功能不受影响。
首次登录
sudo cat /var/lib/sing-box-panel/token
打开 http://127.0.0.1:9096/,输入 token。原生 API secret 会自动引导并缓存,
不需要再输第二个密钥。
安全
- panel API 与 UI 同源,使用
X-Panel-Token; - 原生 API 只监听
127.0.0.1:9091,CORS 白名单仅 9096/localhost:9096; - 9091 的 dashboard 已关闭(
/dashboard/= 404); - panel 写配置时是 0644,
sing-box-config-perm.path会立即恢复 600 并复核;
这是兜底,不是最终的权限保证。后端应直接以 0600 创建临时文件再原子替换;
修复属于配套sing-box-panel包,不在本仓库的安装脚本里; - 静态产物不含任何 token/secret;登录后 secret 存在本机 localStorage;
- 仅支持本机使用:入口固定为
http://127.0.0.1:9096(或http://localhost:9096),原生 API 地址写死为127.0.0.1:9091,CORS
也只允许这两个 Origin。从局域网 IP、反向代理或 HTTPS 打开时原生连接会
失败,这是设计约束,不是待配置项; - 如果
services.api.secret为空,管理页会显示警告:sing-box 会关闭原生
API 鉴权,本机其他进程可直接控制核心。正常安装会生成非空 secret; - 下载的配置备份包含
services.apisecret、Clash secret 和出站密码,应按
敏感文件保存;它和当前配置一样只通过 panel token 鉴权; - 威胁模型:panel 以 root 身份写配置、重启服务,登录令牌和原生 secret
都存在浏览器 localStorage。锁定面板会清 token、API 缓存和托管服务器
条目,并让其他标签页刷新回登录页,但它只防误操作/他人顺手使用当前浏览器,
不防本机同用户进程、恶意浏览器扩展或 XSS。需要更强隔离时,应使用独立
的桌面用户/浏览器 profile; - 仓库中的验收截图来自真实本机实例;连接、测速、订阅测试、eBPF 截图中的
真实目标、节点名、应用名,以及设置页的本机源码路径已像素化。新增截图前
仍需先脱敏。
全球连接地图与 GeoIP
- 概览页底部的“全球连接”卡片从
api.connections快照对比出新建/关闭连接,
取connection.destination的 IP(域名或无 IP 时跳过,不做 DNS 解析),
通过本机 panel 的GET /api/geoip?ip=...得到城市坐标。浏览器不会向
panel 以外的地址发地理查询。 - 目标按 1° 网格聚类,同一格合并为一条弧线并显示
×N;并发弧线最多 30 条,
超出淘汰最旧。前端有 500 条 LRU 和 pending 去重,300+ 连接不会逐连接重复
查询同一 IP。 - 本机原点优先级:panel 配置/探测的
egress_ip→ 第一个连接的source公网 IP → 成都回退(见代码中的 TODO)。 - 数据源:DB-IP City Lite(MMDB,CC BY 4.0)。上游为
https://db-ip.com;安装脚本从版本固定的 jsDelivr/npm 镜像dbip-city-lite@1.0.18下载.mmdb.gz,校验.gz和.mmdb的
SHA-256 后解压到/usr/share/GeoIP/dbip-city-lite.mmdb。
Attribution: IP Geolocation by DB-IP (https://db-ip.com),许可:
https://creativecommons.org/licenses/by/4.0/。 - panel 默认先找
/usr/share/GeoIP/GeoLite2-City.mmdb,再回退到/usr/share/GeoIP/dbip-city-lite.mmdb;可以用 panel.json 的geoip_database指定自备库。需要python-maxminddb。 egress_ip是静态出口 IP;egress_ip_probe_url是可选的探测 URL
(默认空,不产生外部请求)。如果启用,panel 只向该 URL 发一次 GET 并缓存,
不包含任何连接目的地信息。- GeoIP 查询只在 panel 进程内存中完成:不记录查询 IP、不落盘、不向第三方
发送。缺库/缺依赖时/api/geoip返回 503,卡片显示一次missing GeoIP database, see README,不会逐连接重试。
验收
真实环境(非 mock)验收结果摘要:
| 项目 | 结果 |
|---|---|
| 四个自定义模式 | 顶栏切换,Clash API 逐一复核,已复位 Rule |
| 重启 / eBPF 应用 / 停止 / 启动 | 33/33;PID 变化,页面未整页刷新,RPC 自动恢复 |
| 配置编辑器应用/恢复 | log.level warn → info → warn,服务健康,无整页刷新 |
| 订阅 | 本地 mock 源添加/更新/删除,已删除;未写入测试节点 |
| secret 引导缓存 | 首次登录读一次完整配置;刷新只请求 /api/state |
| 连接虚拟滚动 | 56 条连接仅渲染 14 个 DOM 行 |
| CORS / 9091 | 9096 允许,非白名单无 ACAO;/dashboard/ 404 |
| 配置权限 | 600;模拟 644 后被 path unit 复核回 600 |
| 回滚演练 | UI + 配置回滚均通过并恢复 |
| 包完整性 | pacman -Qkk sing-box-panel:51 文件,0 变化 |
完整截图和记录见 artifacts/README.md。
回滚
完整步骤见 DEPLOYMENT.md。核心是:
# 恢复 sing-box 配置(移除 9091 API)
sudo cp -a /etc/sing-box/backups/config.json.bak.<timestamp>-dracpanel /etc/sing-box/config.json
sudo chmod 600 /etc/sing-box/config.json
sudo systemctl restart sing-box
# 恢复旧 UI
sudo rm -rf /usr/local/share/dracpanel-ui
sudo mv /usr/local/share/dracpanel-ui.legacy-<timestamp> /usr/local/share/dracpanel-ui
sudo systemctl restart sing-box-panel
zashboard 回退入口 http://127.0.0.1:9096/dash/ 取决于 panel 的zashboard_dir 配置;install.sh 不设置该字段。如果 panel 配置把zashboard_dir 指向一个空目录(例如 no-zashboard),该链接会 404,不影响
Dracula UI 本身。
限制
- 原生 API 没有规则 RPC;规则页只能从实时配置派生,不是“内核实际命中规则”的
实时日志,且配置读写依赖 panel(直连模式下规则页如实显示不可用)。 - 内核不提供历史请求日志;请求页由实时连接流派生,重启后记录消失(页面有
明确说明)。 - 内核不提供 DNS 查询日志;DNS 页只记录用户在本页面发起的查询。
- WebDAV 备份未实现(panel 后端不在本仓库,无法新增服务端点);备份/恢复
走 panel 的本地配置备份。 - 直连模式下没有特权 panel:订阅管理、服务控制、配置编辑、eBPF、GeoIP
不可用,相关卡片隐藏或显示说明;Clash API 地址需在服务器条目中填写。 Global模式保留在配置中供 zashboard 回退使用,但新 UI 只展示配置实际
提供的模式。- 订阅的“写入配置”使用与配置应用相同的 panel 事务;验收中未把测试节点写入
真实配置。 - 全球连接地图不做 DNS 解析;只有
destination是公网 IP 的连接会出现弧线,
内网/保留地址或无 IP 的连接会被跳过。缺少 mmdb 时地图只显示提示。 deploy/install.sh是针对本机 systemd/panel 布局的部署脚本,不是通用安装器。
目录
├── src/ React 源码(官方 dashboard + FlClash 风格改造)
├── public/ 图标等静态资源
├── proto/ StartedService protobuf
├── docs/ 架构与适配层边界说明
├── artifacts/ 验收脚本、截图、验收记录
├── deploy/ 一次性部署脚本、回滚演练脚本
├── NOTICE 上游/主题/非官方声明
├── LICENSE GPL-3.0-or-later(完整文本)
├── README-UPSTREAM.md 上游原始 README(保留)
└── DEPLOYMENT.md 构建、部署、安全、回滚细节
许可证与致谢
- 本项目基于 SagerNet/sing-box-dashboard,
遵循 GPL-3.0-or-later;完整许可证文本见 LICENSE,
版权与关联声明见 NOTICE。 - Dracula / Alucard 色板来自 Dracula Theme。
- 图标来自 Material Design Icons(Apache-2.0)。
- 上游许可证明确要求衍生作品不得使用原名或暗示官方关联;本项目使用
“DracPanel for sing-box” 并明确声明非官方。

















