Files
FnDepot/README.md
T
2025-11-30 18:04:52 +08:00

150 lines
6.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# FnDepot 应用源构建规范
> **版本**: 1.0.0
> **最后更新**: 2025-11-30
## 1. 概述 (Overview)
FnDepot 是运行于 FNOS 上的去中心化第三方应用管理器。本文档详细定义了 FnDepot 应用源(Repository)的构建规范、目录结构及元数据标准。开发者需严格遵循本规范,以确保应用源能被 FnDepot 客户端正确解析、索引及分发。
## 2. 仓库规范 (Repository Standards)
为了保证解析效率与编写方便,项目在制作时大量采用了飞牛官方开发文档的键名,方便开发者识别。应用源仓库必须满足以下硬性条件:
| 项目 | 要求 | 说明 |
| :--- | :--- | :--- |
| **托管平台** | GitHub | 目前仅支持 GitHub 托管的仓库。 |
| **仓库可见性** | Public | 仓库必须设为公开,私有仓库无法被客户端索引。 |
| **仓库命名** | FnDepot | **[强制]** 仓库名称必须严格命名为 `FnDepot`(大小写敏感)。 |
| **分支策略** | main | 客户端默认拉取默认分支的内容。 |
## 3. 目录结构 (Directory Structure)
FnDepot 采用扁平化的目录结构。仓库根目录必须包含全局索引文件 `fnpack.json`,每个应用拥有独立的子目录。
```text
FnDepot/ # [Root] 仓库根目录
├── fnpack.json # [Core] 全局元数据索引文件
├── {app_name}/ # [Dir] 应用目录 (名称即为 Unique ID)
│ ├── ICON.PNG # [Asset] 应用图标 (强制全大写)
│ ├── {app_name}.fpk # [Bin] 安装包 (文件名须与目录名一致)
│ ├── README.md # [Doc] 应用详情文档 (Markdown)
│ └── Preview/ # [Asset] 预览图目录
│ ├── 01.png
│ └── 02.jpg
└── ... (其他应用目录)
```
### 3.1 命名约定
* **应用唯一标识 (`app_name`)**
* 仅允许使用 **小写字母 (a-z)**、**数字 (0-9)** 和 **连字符 (-)**
* 应用目录名称必须与 `fnpack.json` 中的键名(Key)完全一致。
* **大小写敏感**:Linux 文件系统对大小写敏感,请严格遵守文件名规范(特别是 `ICON.PNG`)。
## 4. 元数据规范 (fnpack.json)
`fnpack.json` 是应用源的核心数据库,位于仓库根目录。它是一个标准的 JSON 对象,其键(Key)为应用的 `app_name`
### 4.1 数据结构
```json
{
"unique-app-id": {
"display_name": "String",
"version": "String",
"desc": "String",
"labels": "String",
"author": "String",
"author_url": "String",
"bug_report_url": "String",
"install_type": "Enum",
"size": "String",
"history": {
"version_number": "String"
}
}
}
```
### 4.2 字段定义表
| 字段 | 类型 | 必填 | 描述与约束 |
| :--- | :--- | :---: | :--- |
| **Key** | String | ✅ | 应用唯一标识。必须与应用文件夹名称完全一致。 |
| `display_name` | String | ✅ | 客户端展示的应用名称(UI 显示用)。 |
| `version` | String | ✅ | 当前版本号(建议遵循 SemVer 规范,如 1.0.0)。 |
| `desc` | String | ✅ | 应用简介。支持使用 `\n` 进行换行控制。 |
| `labels` | String | ✅ | 分类标签。多个标签使用半角逗号 `,` 分隔(无空格)。 |
| `download_url` | String | 可选 | 下载地址。建议 Release 发布后填写;若 fpk 小于 100MB 可不填写。 |
| `author` | String | ✅ | 开发者或维护团队名称。 |
| `author_url` | String | ✅ | 开发者主页/仓库链接 (HTTP/HTTPS)。 |
| `bug_report_url` | String | ✅ | 问题反馈链接 (HTTP/HTTPS)。 |
| `install_type` | String | ✅ | 安装目标路径类型。`"系统空间"``"存储空间"`。 |
| `size` | String | ✅ | 安装包体积。仅填写数字,单位默认为 **MB**。 |
| `history` | Object | ✅ | 版本更新记录。<br>**Key**: 版本号; **Value**: 更新日志内容。 |
## 5. 资源文件规范 (Assets Specification)
### 5.1 图标 (ICON.PNG)
* **路径**: `/{app_name}/ICON.PNG`
* **格式**: PNG
* **尺寸**: 建议 256x256
* **注意**: 文件名必须为 **`ICON.PNG`**(全大写),否则客户端无法获取。
### 5.2 安装包 (.fpk)
* **路径**:
* **模式1**fpk < 100MB):`/{app_name}/{app_name}.fpk`
* **模式2**fpk ≥ 100MB):通过 Release 发布
* **格式**: FNOS 标准安装包格式 (.fpk)
* **注意**: 文件名必须严格匹配 `{app_name}.fpk`
### 5.3 预览图 (Preview/)
* **路径**: `/{app_name}/Preview/`
* **支持格式**: `.png`, `.jpg`, `.jpeg`, `.webp`
## 6. 完整配置示例 (Configuration Example)
```json
{
"fntermx": {
"display_name": "FntermX 终端",
"desc": "专为飞牛 NAS 打造的现代化 Web 终端\n支持 SSH 连接与会话管理",
"labels": "工具,终端,SSH,DevOps",
"version": "1.0.8",
"author": "EWEDL",
"author_url": "https://github.com/EWEDLCM",
"bug_report_url": "https://github.com/EWEDLCM/FntermX/issues",
"install_type": "系统空间",
"size": "15",
"history": {
"v1.0.8": "性能优化与 Bug 修复",
"v1.0.7": "新增深色模式支持",
"v1.0.0": "Initial Release"
}
}
}
```
## 7. 维护与更新 (Maintenance)
FnDepot 客户端包含自动同步机制。开发者只需对 GitHub 仓库进行常规的 Git 操作即可完成发布:
1. **更新二进制文件**:替换对应的 `.fpk` 文件。
2. **更新元数据**:修改 `fnpack.json` 中的 `version` 字段并追加 `history` 记录。
3. **推送 (Push)**:将更改推送到 GitHub 的默认分支。
客户端会在同步源信息时检测到 `version` 字段变更,正确响应状态。
## 8. 法律与免责声明 (Disclaimer)
* **责任限制**:FnDepot 仅提供分发协议与索引服务。应用开发者需对其提交的代码安全性、稳定性及版权合规性负全部责任。
* **安全合规**:严禁在应用源中包含恶意代码、后门程序或未经授权的侵权内容。违规仓库将被 FnDepot 索引服务拉黑并公示。
* **数据安全**:开发者应在文档中明确告知用户应用的权限要求及潜在风险。
***
*FnDepot Protocol Version 1.0*