diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 4a7f486..e1b4dc6 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -132,7 +132,7 @@ jobs:
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
with:
tagName: v__VERSION__ # 自动替换为 src-tauri/tauri.conf.json(即 package.json)里的版本号
- releaseName: "Frpilot v__VERSION__"
+ releaseName: "FrpcPilot v__VERSION__"
releaseBody: ${{ steps.changelog.outputs.body }}
releaseDraft: true # 先创建草稿,手动确认后再发布
prerelease: false
diff --git a/README.md b/README.md
index 332a2e3..e61bee4 100644
--- a/README.md
+++ b/README.md
@@ -1,63 +1,40 @@
-# Frpilot
+
-> 一个基于 **Tauri 2 + Vue 3 + TypeScript** 的 [frp](https://github.com/fatedier/frp) 可视化客户端,帮你用图形界面管理 frpc 版本、服务器与隧道,从此告别手写 `frpc.toml`。
+# FrpcPilot
-Frpilot 已从「应用骨架」成长为可用的一体化客户端:下载 frpc、配置服务器、编排隧道、一键启动并实时查看日志,全部在同一个窗口里完成,并内置应用内自动更新。
+**frp 可视化桌面客户端 —— 告别手写 `frpc.toml`**
+
+下载 frpc、配置服务器、编排隧道、一键启动并实时查看日志,全部在同一个窗口里完成。
+
+[](https://github.com/SparksFly91/FrpcPilot/releases)
+[](./LICENSE)
+[](#-下载安装)
+[](https://v2.tauri.app/)
+[](https://vuejs.org/)
+[](https://github.com/SparksFly91/FrpcPilot/pulls)
+
+
---
-## ✨ 已实现功能
+## 🏷️ 关于「FrpcPilot」这个名字
-### Frpc 版本管理
+> **FrpcPilot = Frpc + Pilot**(领航员)
-- 在线拉取 Frp 官方版本列表,支持「所有架构 frpc / frps」开关,按平台与架构筛选
-- 一键下载并自动解压,实时显示下载 / 解压进度与状态
-- 导入本地已有的 `frpc` / `frps`
-- 删除已下载版本、复制下载直链
+- **Frpc** —— 取自 [frp](https://github.com/fatedier/frp) 的客户端组件 `frpc`,也是本项目服务的核心对象;
+- **Pilot** —— 飞行员 / 领航员。frp 本身足够强大,却总离不开手写 `frpc.toml` 与敲命令启动;FrpcPilot 想做你的「frpc 领航员」,把这些繁琐的配置与命令行统统收进图形界面,带你稳稳起飞。
-### 服务器管理
+一句话:**让 frpc 起飞,你只管掌舵。** ✈️
-- frps 服务器的新增 / 编辑 / 删除
-- 服务器地址、端口、鉴权 Token、传输协议、TLS 开关、备注
-- 置顶与排序;启用开关(**同一时间仅允许启用一台**服务器)
+---
-### 隧道管理
+## 📖 项目简介
-- 覆盖 **TCP / UDP / HTTP / HTTPS / STCP / XTCP / SUDP / TCPMUX** 等代理类型
-- 本地 IP / 端口、远程端口、自定义域名、子域名、URL 前缀
-- 高级配置:密钥、加密、压缩、带宽限制、Proxy Protocol、健康检查、负载均衡
-- 启用 / 置顶 / 排序
+**FrpcPilot** 是一个基于 **Tauri 2 + Vue 3 + TypeScript** 的 [frp](https://github.com/fatedier/frp) 图形化客户端。它把原本需要手工编辑 `frpc.toml` 的繁琐流程,变成「点几下就能跑起来」:在线下载 frpc、管理 frps 服务器与隧道、一键启动内网穿透,并实时回显运行日志。
-### 一键启动与实时日志
+得益于 Tauri 的轻量内核,应用体积小、内存占用低;后端使用 Rust + SQLite 本地持久化,数据完全保存在你自己的电脑上,不经过任何第三方服务。
-- 仪表盘选择 frpc 版本后「一键启动 / 停止」
-- 自动依据所选版本、已启用的服务器与隧道生成 `frpc.toml` 并拉起独立进程
-- 通过 `frpc-log` / `frpc-exit` 事件实时回显运行日志与进程退出信息
-
-### 仪表盘
-
-- 系统信息:主机名 / 系统 / 架构 / IP 地址
-- 服务器与隧道数量统计
-- 侧边栏常驻 CPU 占用、内存占用与运行状态指示点(🟢 运行正常 · 🔴 运行异常 · 🟡 未启动)
-
-### 应用内自动更新
-
-- 启动时静默检查,支持手动检查更新
-- 更新弹窗以 **Markdown** 渲染更新说明,展示下载进度
-- 支持「忽略该版本」、一键更新,安装完成后自动重启
-
-### 关于页面
-
-- 项目介绍、技术栈标签、使用流程指引
-- 开源地址一键跳转、当前版本信息与「检查更新」入口
-
-### 界面与体验
-
-- **自定义标题栏**:Windows / macOS 双套方案,窗口可拖拽移动;顶部栏集成语言 / 主题 / 检查更新 / GitHub / 设置与窗口控制按钮
-- **macOS 特化**:还原原生红绿灯,隐藏冗余的最小化 / 关闭按钮,禁用 macOS 下不需要的最大化
-- **明暗主题**:跟随切换,Tailwind 暗色变体与 Ant Design Vue 暗色算法同步,选择持久化
-- **悬浮磨砂玻璃**:侧边栏、内容区与卡片统一为圆角 + `backdrop-filter` 半透明面板
-- **国际化**:内置简体中文 / English,语言选择持久化,Ant Design Vue 组件语言包联动
+> 当前版本 **v1.2.1**,已支持 Windows / macOS(Apple Silicon)/ Linux 三平台,并内置应用内自动更新。
---
@@ -71,29 +48,105 @@ Frpilot 已从「应用骨架」成长为可用的一体化客户端:下载 fr
| --- | --- |
|  |  |
-| 设置 · 外观 | 设置 · 关于 |
+| 设置 · 常规 | 设置 · 外观 |
| --- | --- |
-|  |  |
+|  |  |
+
+
+
+
+
+---
+
+## ✨ 功能特性
+
+### 📊 仪表盘
+- 一屏总览:服务器数量、隧道数量,以及主机名 / 系统 / 架构 / IP 地址等系统信息
+- 选择 frpc 版本后「**一键启动 / 停止**」,运行状态实时联动
+- **实时日志**:通过事件流回显 frpc 运行日志(保留最近 500 行,支持一键清空)
+- 侧边栏常驻 **CPU / 内存占用** 与运行状态指示(🟢 运行正常 · 🔴 运行异常 · 🟡 未启动)
+
+### 🖥️ 服务器管理
+- frps 服务器的新增 / 编辑 / 删除
+- 支持服务器地址、端口、鉴权 Token、传输协议、TLS 开关与备注
+- 置顶与排序;启用开关(**同一时间仅允许启用一台**服务器)
+
+### 🔀 隧道管理
+- 覆盖 **TCP / UDP / HTTP / HTTPS / STCP / XTCP / SUDP / TCPMUX** 等代理类型
+- 本地 IP / 端口、远程端口、自定义域名、子域名、URL 前缀
+- 高级配置:密钥、加密、压缩、带宽限制、Proxy Protocol、健康检查、负载均衡
+- 统一管理启用 / 置顶 / 排序
+
+### 📦 Frpc 下载管理
+- 在线拉取 frp 官方版本列表,按平台与架构筛选,支持「所有架构 frpc / frps」开关
+- 一键下载并自动解压,实时显示下载 / 解压进度与状态(支持镜像加速)
+- 导入本地已有的 `frpc` / `frps`,删除已下载版本、复制下载直链
+- **页面级缓存**:应用运行期间仅首次进入时拉取版本列表,避免重复请求触发限流,需要更新时手动点击「刷新」
+
+### 🚀 一键启动与进程管理
+- 依据所选版本、已启用的服务器与隧道,自动生成 `frpc.toml` 并拉起独立进程
+- 通过 `frpc-log` / `frpc-exit` 事件实时推送日志与进程退出信息
+- 应用退出时自动结束 frpc 子进程,避免残留后台进程
+
+### 🗂️ 系统托盘
+- 常驻托盘菜单:**显示窗口 / 启动穿透 / 停止穿透 / 退出**
+- 左键单击直达主窗口,右键展开菜单;菜单随运行状态与界面语言自动联动
+- 「退出」会先停止正在运行的穿透,再退出整个应用
+
+### 🔔 关闭行为
+- 关闭窗口时可选「**最小化到系统托盘**」或「**直接退出**」
+- 支持「每次询问」与「保持以上选择」两种策略,也可在「设置 - 常规」中随时修改
+
+### 🎨 界面与体验
+- **自定义标题栏**:Windows / macOS 双套方案,窗口可拖拽移动;macOS 还原原生红绿灯
+- **明暗主题**:一键切换,Tailwind 暗色变体与 Ant Design Vue 暗色算法同步
+- **磨砂玻璃视觉**:侧边栏、内容区与卡片统一为圆角 + `backdrop-filter` 半透明面板,透明度可调
+- **窗口背景**:内置 9 张背景图,可自由挑选,保持原始比例自适应
+- **国际化**:内置简体中文 / English,语言选择持久化并与组件库语言包联动
+
+### 🔄 应用内自动更新
+- 启动时静默检查更新,支持手动检查
+- 更新弹窗以 **Markdown** 渲染更新说明并展示下载进度
+- 支持「忽略该版本」、一键更新,安装完成后自动重启
+
+### ⚙️ 设置中心
+- **常规**:关闭行为、应用语言
+- **外观**:主题模式、背景图片、磨砂玻璃透明度(卡片 / 弹窗,实时预览)
+- **关于**:项目介绍、技术栈、使用流程、开源地址与版本信息
+
+---
+
+## 📥 下载安装
+
+前往 [**Releases**](https://github.com/SparksFly91/FrpcPilot/releases/latest) 下载对应平台的安装包:
+
+| 平台 | 安装包 |
+| --- | --- |
+| Windows | `.exe`(NSIS 安装程序) |
+| macOS(Apple Silicon) | `.dmg` / `.app` |
+| Linux | `.deb` / `.AppImage` |
+
+装好后打开应用即可,后续版本会在应用内自动检查并更新。
---
## 🧱 技术栈
-| 分类 | 选型 |
-| ---------- | --------------------------------------------------------------------- |
-| 桌面框架 | [Tauri 2](https://v2.tauri.app/)(Rust 后端) |
-| 前端框架 | Vue 3(`
-
-
- {{ t('menu.dashboard') }}
-
-```
-
-新增语言:在 `src/i18n/locales/` 添加 JSON,并在 `src/i18n/index.ts` 的 `messages` 与 `languageOptions` 中注册。
+1. 在 `src/i18n/locales/zh-CN.json` 与 `en-US.json` 中按相同层级添加 key(两份文件需保持一致)。
+2. 组件内使用 `const { t } = useI18n()`,模板中写 `{{ t("menu.dashboard") }}`。
+3. 新增语言:在 `src/i18n/locales/` 添加 JSON,并在 `src/i18n/index.ts` 的 `messages` 与 `languageOptions` 中注册。
### 新增侧边栏菜单项与页面
@@ -212,34 +261,24 @@ const { t } = useI18n()
3. 在 `src/layout/aside/Aside.vue` 的 `menuItems` 中追加一项(`key` = 路由路径)。
4. 在语言包中补充对应 `menu.*` 文案。
-### 明暗主题
+> 若希望页面在切换路由后保留状态(如避免重复请求),在该路由的 `meta` 中设置 `isCache: true`,并在页面组件上用 `defineOptions({ name })` 声明与路由 `name` 一致的组件名。
-- 主题状态在 `src/stores/app.ts`(`isDark` / `toggleDark`),由 `useDark` 在 `` 上切换 `.dark` 类名并持久化。
-- Tailwind 使用 class 策略:在 `src/assets/main.css` 中已声明 `@custom-variant dark`。
-- Ant Design Vue 主题在 `src/App.vue` 中通过 `a-config-provider` 的 `theme.algorithm` 联动。
+### 主题与磨砂玻璃
-### 磨砂玻璃样式
-
-`src/assets/main.css` 中的 `.glass-panel`(面板)与 `.glass-card`(卡片)为通用毛玻璃样式,直接加类名即可(已含暗色适配)。
-
-### Markdown 渲染
-
-更新日志、说明类富文本统一使用 `src/components/MarkdownBlock.vue`(内部调用 `src/utils/markdown.ts` 的 `renderMarkdown`)。渲染关闭了原始 HTML,并把链接点击接管到系统浏览器打开。
+- 主题状态在 `src/stores/app.ts`(`isDark` / `toggleDark`),由 `useDark` 在 `` 上切换 `.dark` 类名并持久化;Ant Design Vue 主题通过 `a-config-provider` 的 `theme.algorithm` 联动。
+- `src/assets/main.css` 中的 `.glass-panel`(面板)与 `.glass-card`(卡片)为通用毛玻璃样式,直接加类名即可(已含暗色适配与透明度变量)。
### 窗口控制与权限
- 前端封装:`src/utils/window.ts`(`minimizeWindow` / `toggleMaximizeWindow` / `closeWindow` / `startDragging` 等),在非 Tauri 环境(浏览器)下自动空转。
-- 自定义标题栏依赖无边框窗口(`src-tauri/tauri.conf.json` 中 `decorations: false`),拖拽区域通过 `data-tauri-drag-region` 实现。
-- **窗口圆角(8px)**:Windows 11 由系统 DWM 自动裁切;macOS 的无边框窗口系统不会裁圆角,因此:
- - `src-tauri/tauri.macos.conf.json` 中把窗口设为 `transparent: true`(**Tauri 2.12.1+ 无需再开启 `macOSPrivateApi`**);
- - `src/assets/main.css` 中在 `html.is-macos` 下把背景从 `` 移到 `#app`,由 `#app` 裁出 8px 圆角,并让 `html`/`body` 透明以透出桌面;
- - `src/main.ts` 在挂载前根据 UA 给 `` 打上 `is-macos` 标记。
- - ⚠️ 平台配置文件按 **JSON Merge Patch** 合并,且**数组整体替换**,因此 `tauri.macos.conf.json` 里必须完整重复 `app.windows` 的字段;**修改基础配置的窗口参数时,记得同步这份文件**。
-- 相关权限在 `src-tauri/capabilities/default.json` 中声明(`core:window:*`、`updater:default`、`process:default` 等)。**新增窗口 / 插件 API 调用时需同步补充对应权限**,否则会报 `not allowed` 错误。
+- 自定义标题栏依赖无边框窗口(`decorations: false`),拖拽通过 `data-tauri-drag-region` 实现。
+- **窗口圆角(8px)**:Windows 11 由系统 DWM 自动裁切;macOS 无边框窗口需在 `tauri.macos.conf.json` 中设 `transparent: true`,并在样式上由 `#app` 裁出圆角。
+ - ⚠️ 平台配置按 **JSON Merge Patch** 合并且**数组整体替换**,`tauri.macos.conf.json` 需完整重复 `app.windows` 字段;修改基础窗口参数时记得同步。
+- 相关权限在 `src-tauri/capabilities/default.json` 中声明。**新增窗口 / 插件 API 调用时需同步补充对应权限**,否则会报 `not allowed`。
### 发布与自动更新
-- 版本号取自 `package.json` 的 `version`(`src-tauri/tauri.conf.json` 引用之),`src-tauri/Cargo.toml` 保持一致。
+- 版本号取自 `package.json` 的 `version`(`src-tauri/tauri.conf.json` 引用之)。
- 推送 `v*` tag 会触发 `.github/workflows/release.yml`:构建 **Windows x64 / macOS Apple Silicon / Linux x64** 产物,签名生成更新产物与 `latest.json`,并自动从 `docs/CHANGELOG.md` 提取对应版本说明作为 Release 正文。
- 发布前请在 `docs/CHANGELOG.md` 中补上 `## v<版本号>` 段落。
@@ -247,12 +286,25 @@ const { t } = useI18n()
## 🗺️ 路线图
-- frpc 配置文件的导入 / 导出与校验
-- frps 服务端信息的集中管理与状态检测
-- 日志持久化与导出
-- 系统托盘 / 开机自启 / 关闭到托盘
-- 主题跟随系统
-- 更多语言与自定义背景
+- [x] 系统托盘与关闭到托盘
+- [ ] 开机自启
+- [ ] 主题跟随系统
+- [ ] frpc 配置文件的导入 / 导出与校验
+- [ ] frps 服务端信息的集中管理与状态检测
+- [ ] 日志持久化与导出
+- [ ] 更多语言与更多内置背景
+
+---
+
+## 🤝 参与贡献
+
+欢迎提交 Issue 与 Pull Request!
+
+- 提交前请确保 `pnpm build`(类型检查 + 前端构建)通过。
+- 遵循现有代码风格与目录结构;涉及新功能时请同步补充 i18n 中英文文案。
+- Bug 反馈建议附上操作系统、应用版本与复现步骤。
+
+如果 FrpcPilot 对你有帮助,欢迎点一个 ⭐ **Star** 支持一下~
---
@@ -270,4 +322,4 @@ const { t } = useI18n()
## 📄 License
-本项目基于 [Apache License 2.0](LICENSE) 开源。
+本项目基于 [Apache License 2.0](./LICENSE) 开源。
diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md
index fa6f89b..b197876 100644
--- a/docs/CHANGELOG.md
+++ b/docs/CHANGELOG.md
@@ -1,9 +1,27 @@
# 更新日志
-本文件记录 Frpilot 各版本的更新内容。
+本文件记录 FrpcPilot 各版本的更新内容。
---
+## v1.2.1(2026-10-16)
+
+### 🔄 项目更名
+
+- 项目正式更名为 **FrpcPilot**:应用名称、安装包与可执行文件名、窗口标题、系统托盘提示、GitHub 仓库地址等全部由 `Frpilot` 更新为 `FrpcPilot`。
+- 构建与包标识同步调整:npm 包名改为 `frpcpilot`,Rust crate 改为 `frpcpilot` / `frpcpilot_lib`,Tauri `identifier` 改为 `FrpcPilot`。
+- 本地标识同步调整:本地存储键前缀改为 `frpcpilot:`,系统托盘 id 改为 `frpcpilot-tray`,数据库文件改为 `frpcpilot.db`。
+ - ⚠️ 由于 Tauri `identifier` 变更,应用数据目录随之变化,升级到本版本后需要**重新配置服务器与隧道**等本地数据。
+
+### 📝 文档
+
+- 重写 README,面向 GitHub 重新组织:新增项目徽章、项目简介、**「FrpcPilot」名称由来的介绍**、界面预览、下载安装、功能特性、开发指南与参与贡献等章节。
+- 更新界面截图,并新增「设置 · 常规」页面预览。
+
+### 🧱 工程
+
+- 应用版本升级至 **v1.2.1**。
+
## v1.2.0(2026-10-16)
### ✨ 新增功能
diff --git a/docs/Frpilot开发提示词.md b/docs/FrpcPilot开发提示词.md
similarity index 96%
rename from docs/Frpilot开发提示词.md
rename to docs/FrpcPilot开发提示词.md
index ac72100..a30c905 100644
--- a/docs/Frpilot开发提示词.md
+++ b/docs/FrpcPilot开发提示词.md
@@ -1,4 +1,4 @@
-# Frpilot开发提示词
+# FrpcPilot开发提示词
## 背景
@@ -16,7 +16,7 @@
- 在locales目录中写多语言翻译json文件,初步支持中文和英文
2. TitleBar页面开发
- 开发不同操作系统类型的自定义titlebar
- - Windows系统的TitleBar最左侧显示Frpilot标题,右侧显示语言切换、明暗切换、设置、最小化、关闭,按照顺序展示;
+ - Windows系统的TitleBar最左侧显示FrpcPilot标题,右侧显示语言切换、明暗切换、设置、最小化、关闭,按照顺序展示;
- Mac系统的TitleBar最左侧显示红绿灯操作,右侧显示语言切换、明暗切换、设置、最小化、关闭,按照顺序展示;
3. Layout页面布局开发
- Aside侧边栏开发,在Aside.vue文件里面编写,左侧菜单初步暂定为仪表盘、服务器、隧道列表、Frpc下载
@@ -178,4 +178,14 @@ Layout布局content区域的磨砂玻璃卡片圆角样式我要改动一下:
- 使用keep-alive缓存页面组件,避免每次进入都会去请求GitHub,避免触发限流
- 不需要做持久化缓存,只需要在应用运行时生效即可
-- 应用运行时只有在第一次进入Frpc下载页面的时候采取请求GitHub,后面再切换回Frpc下载页面的时候,因为缓存了组件,所以不必再次获取GitHub,需要刷新的时候由用户手动点击刷新按钮
\ No newline at end of file
+- 应用运行时只有在第一次进入Frpc下载页面的时候采取请求GitHub,后面再切换回Frpc下载页面的时候,因为缓存了组件,所以不必再次获取GitHub,需要刷新的时候由用户手动点击刷新按钮
+
+### 4. 修改
+
+#### 4.1 项目名称修改
+
+- 项目名称修改成了FrpcPilot,软件包构建相关的名称也改成这个
+- 界面标题栏相关的也修改成FrpcPilot
+- 其他与项目名称有关的也修改一下
+
+先扫描一下有哪些需要修改的,列一个清单出来,经过我的确认之后再开始修改
diff --git a/docs/snipastes/frpc下载.webp b/docs/snipastes/frpc下载.webp
index 8a160ac..c1fef75 100644
Binary files a/docs/snipastes/frpc下载.webp and b/docs/snipastes/frpc下载.webp differ
diff --git a/docs/snipastes/仪表盘.webp b/docs/snipastes/仪表盘.webp
index eab11ce..4aa54b2 100644
Binary files a/docs/snipastes/仪表盘.webp and b/docs/snipastes/仪表盘.webp differ
diff --git a/docs/snipastes/关于.webp b/docs/snipastes/关于.webp
index f968188..5add6b1 100644
Binary files a/docs/snipastes/关于.webp and b/docs/snipastes/关于.webp differ
diff --git a/docs/snipastes/服务器.webp b/docs/snipastes/服务器.webp
index c638388..174629c 100644
Binary files a/docs/snipastes/服务器.webp and b/docs/snipastes/服务器.webp differ
diff --git a/docs/snipastes/设置.webp b/docs/snipastes/设置.webp
index fbcfb35..c4b9447 100644
Binary files a/docs/snipastes/设置.webp and b/docs/snipastes/设置.webp differ
diff --git a/docs/snipastes/设置·常规.webp b/docs/snipastes/设置·常规.webp
new file mode 100644
index 0000000..1080813
Binary files /dev/null and b/docs/snipastes/设置·常规.webp differ
diff --git a/docs/snipastes/隧道列表.webp b/docs/snipastes/隧道列表.webp
index 5c302b3..2780738 100644
Binary files a/docs/snipastes/隧道列表.webp and b/docs/snipastes/隧道列表.webp differ
diff --git a/index.html b/index.html
index c55222d..d64dff4 100644
--- a/index.html
+++ b/index.html
@@ -4,7 +4,7 @@
- Frpilot
+ FrpcPilot
diff --git a/package.json b/package.json
index 909ddc5..4f3668a 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
- "name": "frpilot",
+ "name": "frpcpilot",
"private": true,
- "version": "1.2.0",
+ "version": "1.2.1",
"type": "module",
"scripts": {
"dev": "vite",
diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock
index 15ff43d..43d0fcc 100644
--- a/src-tauri/Cargo.lock
+++ b/src-tauri/Cargo.lock
@@ -1267,7 +1267,7 @@ dependencies = [
]
[[package]]
-name = "frpilot"
+name = "frpcpilot"
version = "0.1.0"
dependencies = [
"chrono",
diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml
index a91c0dd..f1dbfc7 100644
--- a/src-tauri/Cargo.toml
+++ b/src-tauri/Cargo.toml
@@ -1,5 +1,5 @@
[package]
-name = "frpilot"
+name = "frpcpilot"
version = "0.1.0"
description = "一个基于 Tauri 2 + Vue 3 + TypeScript 的 [frp](https://github.com/fatedier/frp) 可视化客户端,帮助用户快速配置 frpc 版本、服务器与隧道。"
authors = ["SparksFly"]
@@ -11,7 +11,7 @@ edition = "2024"
# The `_lib` suffix may seem redundant but it is necessary
# to make the lib name unique and wouldn't conflict with the bin name.
# This seems to be only an issue on Windows, see https://github.com/rust-lang/cargo/issues/8519
-name = "frpilot_lib"
+name = "frpcpilot_lib"
crate-type = ["staticlib", "cdylib", "rlib"]
[workspace]
diff --git a/src-tauri/src/commands/frp.rs b/src-tauri/src/commands/frp.rs
index 290866e..25a52f3 100644
--- a/src-tauri/src/commands/frp.rs
+++ b/src-tauri/src/commands/frp.rs
@@ -29,7 +29,7 @@ macro_rules! frp_fields {
fn http_client() -> Result {
reqwest::Client::builder()
- .user_agent("Frpilot/0.1 (+https://github.com/fatedier/frp)")
+ .user_agent("FrpcPilot/0.1 (+https://github.com/fatedier/frp)")
.connect_timeout(Duration::from_secs(15))
.build()
}
diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs
index fd0a151..5fccdbc 100644
--- a/src-tauri/src/main.rs
+++ b/src-tauri/src/main.rs
@@ -2,5 +2,5 @@
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
fn main() {
- frpilot_lib::run()
+ frpcpilot_lib::run()
}
diff --git a/src-tauri/src/models.rs b/src-tauri/src/models.rs
index ae70298..1c03f88 100644
--- a/src-tauri/src/models.rs
+++ b/src-tauri/src/models.rs
@@ -329,7 +329,7 @@ pub struct FrpcLogEvent {
pub time: Option,
/// 日志级别:INFO / WARN / ERROR / DEBUG / TRACE
pub level: String,
- /// 来源:stdout / stderr / system(system 为 Frpilot 自身补充的日志)
+ /// 来源:stdout / stderr / system(system 为 FrpcPilot 自身补充的日志)
pub source: String,
/// 日志内容
pub message: String,
diff --git a/src-tauri/src/services/config.rs b/src-tauri/src/services/config.rs
index c573750..fb7413f 100644
--- a/src-tauri/src/services/config.rs
+++ b/src-tauri/src/services/config.rs
@@ -12,9 +12,9 @@ use crate::models::{Server, Tunnel};
pub fn generate_frpc_config(server: &Server, tunnels: &[Tunnel]) -> String {
let mut out = String::new();
- out.push_str("# 该文件由 Frpilot 自动生成,请勿手动修改(重新启动 Frpc 会覆盖此文件)\n\n");
+ out.push_str("# 该文件由 FrpcPilot 自动生成,请勿手动修改(重新启动 Frpc 会覆盖此文件)\n\n");
- // 日志:输出到控制台,由 Frpilot 采集并实时展示
+ // 日志:输出到控制台,由 FrpcPilot 采集并实时展示
// 关闭 ANSI 颜色,避免日志中混入 `\x1b[1;34m` 之类的转义码
out.push_str("log.to = \"console\"\n");
out.push_str("log.level = \"info\"\n");
diff --git a/src-tauri/src/services/db.rs b/src-tauri/src/services/db.rs
index 4c02249..84e4773 100644
--- a/src-tauri/src/services/db.rs
+++ b/src-tauri/src/services/db.rs
@@ -5,7 +5,7 @@ pub async fn init_pool(app: &AppHandle) -> Result {
// 数据库文件路径
let app_dir = app.path().app_data_dir().expect("无法获取APP数据目录");
std::fs::create_dir_all(&app_dir).unwrap();
- let db_path = app_dir.join("frpilot.db");
+ let db_path = app_dir.join("frpcpilot.db");
// 初始化数据库连接池
let options = SqliteConnectOptions::new()
.filename(&db_path)
diff --git a/src-tauri/src/services/runner.rs b/src-tauri/src/services/runner.rs
index 840ece6..2846596 100644
--- a/src-tauri/src/services/runner.rs
+++ b/src-tauri/src/services/runner.rs
@@ -1,7 +1,7 @@
//! Frpc 进程管理。
//!
//! 通过 `std::process::Command` 直接拉起 frpc 可执行文件(**刻意绕开 plugin-shell**):
-//! - frpc 与主进程互相独立,frpc 异常退出不会影响 Frpilot 本体;
+//! - frpc 与主进程互相独立,frpc 异常退出不会影响 FrpcPilot 本体;
//! - Windows 下使用 `CREATE_NO_WINDOW` 启动,避免弹出黑色控制台窗口;
//! - stdout / stderr 通过管道读取,按行解析后以 `frpc-log` 事件实时推送给前端;
//! - 后台守护线程轮询子进程状态,退出时推送 `frpc-exit` 事件。
diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json
index 6989ef7..0911fa8 100644
--- a/src-tauri/tauri.conf.json
+++ b/src-tauri/tauri.conf.json
@@ -1,8 +1,8 @@
{
"$schema": "https://schema.tauri.app/config/2",
- "productName": "Frpilot",
+ "productName": "FrpcPilot",
"version": "../package.json",
- "identifier": "Frpilot",
+ "identifier": "FrpcPilot",
"build": {
"beforeDevCommand": "pnpm dev",
"devUrl": "http://localhost:1420",
@@ -12,7 +12,7 @@
"app": {
"windows": [
{
- "title": "Frpilot",
+ "title": "FrpcPilot",
"width": 1100,
"height": 720,
"minWidth": 900,
@@ -42,8 +42,8 @@
"active": true,
"dialog": false,
"endpoints": [
- "https://ghproxy.net/https://github.com/SparksFly91/Frpilot/releases/latest/download/latest.json",
- "https://github.com/SparksFly91/Frpilot/releases/latest/download/latest.json"
+ "https://ghproxy.net/https://github.com/SparksFly91/FrpcPilot/releases/latest/download/latest.json",
+ "https://github.com/SparksFly91/FrpcPilot/releases/latest/download/latest.json"
],
"pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IEU0REVGMTREODFFOTI2MUEKUldRYUp1bUJUZkhlNU1qRmlPQm5xSmdQd24waFltVmNtTjlUallYVmdva1VGNkp5bTVGcVlsZUgK"
}
diff --git a/src-tauri/tauri.macos.conf.json b/src-tauri/tauri.macos.conf.json
index 0765e33..fcb0e56 100644
--- a/src-tauri/tauri.macos.conf.json
+++ b/src-tauri/tauri.macos.conf.json
@@ -3,7 +3,7 @@
"app": {
"windows": [
{
- "title": "Frpilot",
+ "title": "FrpcPilot",
"width": 1100,
"height": 720,
"minWidth": 900,
diff --git a/src/api/updater.ts b/src/api/updater.ts
index 387a2f1..a1fba4c 100644
--- a/src/api/updater.ts
+++ b/src/api/updater.ts
@@ -2,7 +2,7 @@ import type { Update } from "@tauri-apps/plugin-updater"
import { isTauri } from "@/utils/window"
/** 项目 GitHub 仓库地址(与 tauri.conf.json 中 updater 端点保持一致) */
-export const PROJECT_GITHUB_URL = "https://github.com/SparksFly91/Frpilot"
+export const PROJECT_GITHUB_URL = "https://github.com/SparksFly91/FrpcPilot"
/**
* 检查是否有可用更新。
diff --git a/src/components/WindowsTitleBar.vue b/src/components/WindowsTitleBar.vue
index bd63903..f8c80e1 100644
--- a/src/components/WindowsTitleBar.vue
+++ b/src/components/WindowsTitleBar.vue
@@ -9,7 +9,7 @@
alt=""
draggable="false"
/>
- Frpilot
+ FrpcPilot
diff --git a/src/composables/useTray.ts b/src/composables/useTray.ts
index 370b550..f350607 100644
--- a/src/composables/useTray.ts
+++ b/src/composables/useTray.ts
@@ -6,7 +6,7 @@ import { useWindowStore } from "@/stores/window"
import { isTauri } from "@/utils/window"
/** 托盘图标固定 id(便于热更新 / 重载时清理残留的旧图标) */
-const TRAY_ID = "frpilot-tray"
+const TRAY_ID = "frpcpilot-tray"
/** 是否已初始化,避免重复创建托盘 */
let initialized = false
@@ -125,7 +125,7 @@ async function createTray() {
await TrayIcon.new({
id: TRAY_ID,
icon: icon ?? undefined,
- tooltip: "Frpilot",
+ tooltip: "FrpcPilot",
menu,
// 左键点击直接显示窗口,右键才弹出菜单
showMenuOnLeftClick: false,
diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json
index 6d7bee4..a44985e 100644
--- a/src/i18n/locales/en-US.json
+++ b/src/i18n/locales/en-US.json
@@ -1,6 +1,6 @@
{
"app": {
- "name": "Frpilot",
+ "name": "FrpcPilot",
"description": "A visual client for frpc"
},
"titlebar": {
@@ -35,11 +35,11 @@
"quit": "Quit"
},
"closeDialog": {
- "title": "Close Frpilot",
+ "title": "Close FrpcPilot",
"tray": "Minimize to system tray",
- "trayDesc": "Keep Frpilot running in the background; reopen it from the system tray",
+ "trayDesc": "Keep FrpcPilot running in the background; reopen it from the system tray",
"exit": "Quit directly",
- "exitDesc": "Stop the tunnel and exit Frpilot completely",
+ "exitDesc": "Stop the tunnel and exit FrpcPilot completely",
"behavior": "Close behavior",
"ask": "Ask every time",
"askDesc": "Show this dialog on every close and let you choose",
@@ -69,7 +69,7 @@
"clear": "Clear",
"mock": "Mock data",
"logEmpty": "No logs yet. Live logs will appear here once Frpc starts.",
- "logReady": "Frpilot is ready. Waiting for Frpc to start.",
+ "logReady": "FrpcPilot is ready. Waiting for Frpc to start.",
"logStarted": "Frpc {version} started",
"logStopped": "Frpc stopped",
"logStartFailed": "Failed to start Frpc: {message}"
@@ -255,10 +255,10 @@
}
},
"about": {
- "title": "About Frpilot",
+ "title": "About FrpcPilot",
"subtitle": "A lightweight, friendly visual client for frp",
"introTitle": "Introduction",
- "intro": "Frpilot is a visual client for frp built with Tauri 2 + Vue 3 + TypeScript. Manage frpc versions, servers and tunnels through a friendly GUI — and say goodbye to hand-writing frpc.toml.",
+ "intro": "FrpcPilot is a visual client for frp built with Tauri 2 + Vue 3 + TypeScript. Manage frpc versions, servers and tunnels through a friendly GUI — and say goodbye to hand-writing frpc.toml.",
"flowTitle": "How to use",
"flow": {
"step1Title": "Download frpc",
diff --git a/src/i18n/locales/zh-CN.json b/src/i18n/locales/zh-CN.json
index 077210a..ab568e6 100644
--- a/src/i18n/locales/zh-CN.json
+++ b/src/i18n/locales/zh-CN.json
@@ -1,6 +1,6 @@
{
"app": {
- "name": "Frpilot",
+ "name": "FrpcPilot",
"description": "Frpc 可视化客户端"
},
"titlebar": {
@@ -35,11 +35,11 @@
"quit": "退出"
},
"closeDialog": {
- "title": "关闭 Frpilot",
+ "title": "关闭 FrpcPilot",
"tray": "最小化到系统托盘",
- "trayDesc": "保持 Frpilot 在后台运行,可从系统托盘随时打开",
+ "trayDesc": "保持 FrpcPilot 在后台运行,可从系统托盘随时打开",
"exit": "直接退出",
- "exitDesc": "停止穿透并完全退出 Frpilot",
+ "exitDesc": "停止穿透并完全退出 FrpcPilot",
"behavior": "关闭行为",
"ask": "每次询问",
"askDesc": "每次关闭都弹出此对话框,由你选择关闭方式",
@@ -69,7 +69,7 @@
"clear": "清空",
"mock": "模拟数据",
"logEmpty": "暂无日志,启动 Frpc 后将在此显示实时日志",
- "logReady": "Frpilot 已就绪,等待启动 Frpc",
+ "logReady": "FrpcPilot 已就绪,等待启动 Frpc",
"logStarted": "已启动 Frpc {version}",
"logStopped": "已停止 Frpc",
"logStartFailed": "启动 Frpc 失败:{message}"
@@ -255,10 +255,10 @@
}
},
"about": {
- "title": "关于 Frpilot",
+ "title": "关于 FrpcPilot",
"subtitle": "轻量、顺手的 frp 可视化桌面客户端",
"introTitle": "项目介绍",
- "intro": "Frpilot 是一个基于 Tauri 2 + Vue 3 + TypeScript 打造的 frp 可视化客户端,帮你用图形界面管理 frpc 版本、服务器与隧道,从此告别手写 frpc.toml。",
+ "intro": "FrpcPilot 是一个基于 Tauri 2 + Vue 3 + TypeScript 打造的 frp 可视化客户端,帮你用图形界面管理 frpc 版本、服务器与隧道,从此告别手写 frpc.toml。",
"flowTitle": "使用流程",
"flow": {
"step1Title": "下载 frpc",
diff --git a/src/stores/app.ts b/src/stores/app.ts
index 3c6e423..c41fc18 100644
--- a/src/stores/app.ts
+++ b/src/stores/app.ts
@@ -16,11 +16,11 @@ export type RunStatus = "running" | "error" | "stopped"
*/
export const useAppStore = defineStore("app", () => {
// 语言(持久化到 localStorage)
- const language = useStorage("frpilot:language", "zh-CN")
+ const language = useStorage("frpcpilot:language", "zh-CN")
// 明暗主题:useDark 会在 上切换 .dark 类名
const isDark = useDark({
- storageKey: "frpilot:theme",
+ storageKey: "frpcpilot:theme",
selector: "html",
attribute: "class",
valueDark: "dark",
@@ -29,7 +29,7 @@ export const useAppStore = defineStore("app", () => {
const toggleDark = useToggle(isDark)
// 窗口背景图片(持久化)
- const background = useStorage("frpilot:background", DEFAULT_BACKGROUND)
+ const background = useStorage("frpcpilot:background", DEFAULT_BACKGROUND)
const backgroundUrl = computed(() => getBackgroundUrl(background.value))
// 把背景图同步到 (整窗背景,避免元素高度误差造成的上下留白)
@@ -46,8 +46,8 @@ export const useAppStore = defineStore("app", () => {
})
// 磨砂玻璃透明度(0 - 100,数值越大越透明,持久化)
- const cardTransparency = useStorage("frpilot:card-transparency", 55)
- const modalTransparency = useStorage("frpilot:modal-transparency", 38)
+ const cardTransparency = useStorage("frpcpilot:card-transparency", 55)
+ const modalTransparency = useStorage("frpcpilot:modal-transparency", 38)
/** 透明度百分比 → 背景 alpha(越大越透明,alpha 越小;并做范围兜底) */
function alphaFromTransparency(value: number) {
diff --git a/src/stores/update.ts b/src/stores/update.ts
index 0471c86..911be62 100644
--- a/src/stores/update.ts
+++ b/src/stores/update.ts
@@ -20,7 +20,7 @@ export interface UpdateInfo {
*/
export const useUpdateStore = defineStore("update", () => {
/** 用户选择「忽略该版本」后持久化的版本号,静默检查时不再提示 */
- const ignoredVersion = useStorage("frpilot:ignored-update", "")
+ const ignoredVersion = useStorage("frpcpilot:ignored-update", "")
const checking = ref(false)
const installing = ref(false)
diff --git a/src/stores/window.ts b/src/stores/window.ts
index cb36358..4a58f4b 100644
--- a/src/stores/window.ts
+++ b/src/stores/window.ts
@@ -24,9 +24,9 @@ export const useWindowStore = defineStore("window", () => {
/** 关闭确认对话框是否打开 */
const closeConfirmOpen = ref(false)
/** 记住的关闭方式(弹窗默认选中项;「保持以上选择」时直接生效,持久化) */
- const closeChoice = useStorage("frpilot:close-choice", "tray")
+ const closeChoice = useStorage("frpcpilot:close-choice", "tray")
/** 关闭行为:每次询问 / 保持以上选择(持久化,默认每次询问) */
- const closeBehavior = useStorage("frpilot:close-behavior", "ask")
+ const closeBehavior = useStorage("frpcpilot:close-behavior", "ask")
/** 是否正在退出(停止穿透 + 退出软件) */
const quitting = ref(false)
diff --git a/src/views/Download.vue b/src/views/Download.vue
index 81eaef4..63fb604 100644
--- a/src/views/Download.vue
+++ b/src/views/Download.vue
@@ -72,9 +72,9 @@ const loading = ref(false)
const importing = ref(false)
/** 是否展示所有架构的 Frpc */
-const showAllArchFrpc = useStorage("frpilot:frp:allArchFrpc", false)
+const showAllArchFrpc = useStorage("frpcpilot:frp:allArchFrpc", false)
/** 是否作为 frp 下载器展示所有架构的 Frps */
-const showAllArchFrps = useStorage("frpilot:frp:allArchFrps", false)
+const showAllArchFrps = useStorage("frpcpilot:frp:allArchFrps", false)
/** 后端返回的全部发行包(含所有架构) */
const allReleases = ref([])
diff --git a/src/views/setting/About.vue b/src/views/setting/About.vue
index 17f1584..e4813f1 100644
--- a/src/views/setting/About.vue
+++ b/src/views/setting/About.vue
@@ -29,7 +29,7 @@
-
SparksFly91 / Frpilot
+
SparksFly91 / FrpcPilot
{{ PROJECT_GITHUB_URL }}