{"id":40465364,"url":"https://github.com/hanxi/cups-web","last_synced_at":"2026-05-19T04:01:20.893Z","repository":{"id":331183765,"uuid":"1125337635","full_name":"hanxi/cups-web","owner":"hanxi","description":"把家用 USB 打印机变成随时可访问的网络打印服务","archived":false,"fork":false,"pushed_at":"2026-04-24T15:29:41.000Z","size":12336,"stargazers_count":237,"open_issues_count":1,"forks_count":35,"subscribers_count":3,"default_branch":"master","last_synced_at":"2026-04-24T16:44:46.698Z","etag":null,"topics":["cups","cups-docker","cups-printserver","docker","nas","printer"],"latest_commit_sha":null,"homepage":"https://github.com/hanxi/cups-web","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hanxi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-12-30T14:49:44.000Z","updated_at":"2026-04-24T16:40:44.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/hanxi/cups-web","commit_stats":null,"previous_names":["hanxi/cups-web"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/hanxi/cups-web","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hanxi%2Fcups-web","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hanxi%2Fcups-web/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hanxi%2Fcups-web/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hanxi%2Fcups-web/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hanxi","download_url":"https://codeload.github.com/hanxi/cups-web/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hanxi%2Fcups-web/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32256221,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-25T04:23:17.126Z","status":"ssl_error","status_checked_at":"2026-04-25T04:21:53.360Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cups","cups-docker","cups-printserver","docker","nas","printer"],"created_at":"2026-01-20T18:07:42.972Z","updated_at":"2026-05-12T05:02:33.164Z","avatar_url":"https://github.com/hanxi.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"# 🖨️ CUPS Web — 网页打印管理\n\n\u003cdiv align=\"center\"\u003e\n\n[![GitHub Release](https://img.shields.io/github/v/release/hanxi/cups-web?style=flat-square\u0026logo=github\u0026color=blue)](https://github.com/hanxi/cups-web/releases)\n[![Docker Pulls](https://img.shields.io/docker/pulls/hanxi/cups-web?style=flat-square\u0026logo=docker)](https://hub.docker.com/r/hanxi/cups-web)\n[![Docker Image Size](https://img.shields.io/docker/image-size/hanxi/cups-web/latest?style=flat-square\u0026logo=docker\u0026color=066da5)](https://hub.docker.com/r/hanxi/cups-web)\n[![GitHub Stars](https://img.shields.io/github/stars/hanxi/cups-web?style=flat-square\u0026logo=github)](https://github.com/hanxi/cups-web/stargazers)\n[![GitHub Forks](https://img.shields.io/github/forks/hanxi/cups-web?style=flat-square\u0026logo=github)](https://github.com/hanxi/cups-web/network/members)\n[![GitHub Issues](https://img.shields.io/github/issues/hanxi/cups-web?style=flat-square\u0026logo=github)](https://github.com/hanxi/cups-web/issues)\n[![GitHub Last Commit](https://img.shields.io/github/last-commit/hanxi/cups-web?style=flat-square\u0026logo=github)](https://github.com/hanxi/cups-web/commits)\n[![GitHub Downloads](https://img.shields.io/github/downloads/hanxi/cups-web/total?style=flat-square\u0026logo=github\u0026color=success)](https://github.com/hanxi/cups-web/releases)\n[![License](https://img.shields.io/github/license/hanxi/cups-web?style=flat-square\u0026color=blue)](LICENSE)\n\n[![Go Version](https://img.shields.io/github/go-mod/go-version/hanxi/cups-web?style=flat-square\u0026logo=go)](https://golang.org)\n[![Vue 3](https://img.shields.io/badge/Vue-3.5-4FC08D?style=flat-square\u0026logo=vue.js)](https://vuejs.org)\n[![Vite](https://img.shields.io/badge/Vite-7-646CFF?style=flat-square\u0026logo=vite)](https://vitejs.dev)\n[![Nuxt UI](https://img.shields.io/badge/Nuxt%20UI-v4-00DC82?style=flat-square\u0026logo=nuxt.js)](https://ui.nuxt.com)\n[![Tailwind CSS](https://img.shields.io/badge/Tailwind-v4-38B2AC?style=flat-square\u0026logo=tailwind-css)](https://tailwindcss.com)\n[![CUPS](https://img.shields.io/badge/CUPS-IPP-orange?style=flat-square)](https://www.cups.org)\n[![SQLite](https://img.shields.io/badge/SQLite-WAL-003B57?style=flat-square\u0026logo=sqlite)](https://www.sqlite.org)\n\n🏠 [GitHub](https://github.com/hanxi/cups-web) • 🐳 [Docker Hub](https://hub.docker.com/r/hanxi/cups-web) • 📖 [开发文档](AGENTS.md) • 💬 [微信群](https://github.com/hanxi/cups-web/issues/36) • 💰 [赞赏支持](https://afdian.com/a/imhanxi)\n\n\u003c/div\u003e\n\n基于 CUPS 的网页版打印管理工具。通过浏览器上传文件、远程提交打印任务，支持多用户管理与打印记录追踪，适合家庭和小型办公室使用。\n\n## 📸 界面预览\n\n\u003cdiv align=\"center\"\u003e\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"screenshots/print1.png\" width=\"400\" alt=\"文件上传\"\u003e\u003cbr/\u003e\u003cb\u003e文件上传\u003c/b\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"screenshots/print2.png\" width=\"400\" alt=\"打印机选择\"\u003e\u003cbr/\u003e\u003cb\u003e打印机选择\u003c/b\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"screenshots/preview.png\" width=\"400\" alt=\"预览\"\u003e\u003cbr/\u003e\u003cb\u003e实时预览\u003c/b\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"screenshots/admin.png\" width=\"400\" alt=\"管理后台\"\u003e\u003cbr/\u003e\u003cb\u003e管理后台\u003c/b\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\n## ✨ 功能特性\n\n### 打印能力\n\n- **多格式支持**：PDF、图片（JPG/PNG/GIF/HEIC）、Office 文档（doc/docx/xls/xlsx/ppt/pptx）、OFD、纯文本\n- **自动转换**：Office 文档通过 LibreOffice 转 PDF；OFD 通过内置 Java 转换器（基于 ofdrw）转 PDF；文本/图片在服务端渲染为 PDF\n- **多图片合并打印**：一次选择多张图片自动合并为一份 PDF\n- **打印选项**：份数、单双面、彩色/黑白、纸张大小、纸张类型、页面方向、页码范围、缩放、镜像打印\n- **实时预览**：支持 PDF 预览、纸张方向的可视化预览、页数估算\n\n### 内置打印机驱动\n\n`hanxi/cups` 镜像出厂即预装了一批常见品牌的打印机驱动，免去用户在容器里手动 `apt install` 或翻官网下载 `.deb` 的麻烦。除非另行说明，下面列出的驱动都同时覆盖 `linux/amd64` + `linux/arm64` + `linux/arm/v7`（少数厂商无 ARM 二进制的会标注）。\n\n**通用驱动包**（apt 安装）：\n\n- `printer-driver-all`：Debian 维护的驱动 meta 包，包含 splix、c2050、m2300w、ptouch 等数十种小众驱动\n- `printer-driver-cups-pdf`：虚拟 PDF 打印机，无实体打印机也可调试\n- `printer-driver-escpr`：Epson ESC/P-R 标准款（覆盖大部分 Epson 喷墨老机型）\n- `printer-driver-foo2zjs`：ZjStream / Hiperc / OAKT 协议机型（部分 HP / Konica / Minolta 老款激光机）\n- `printer-driver-brlaser`：Brother 老款激光机（HL-L2300D、HL-1110、DCP-7055 等，[issue #32](https://github.com/hanxi/cups-web/issues/32)）\n- `printer-driver-gutenprint`：覆盖 Epson / Canon / HP / Lexmark 等大量老机型；**仅 amd64 / arm64**（trixie armhf 上游未提供 binary）\n- `foomatic-db-compressed-ppds` + `openprinting-ppds`：Foomatic / OpenPrinting 海量 PPD 库\n- `hplip` + `hpijs-ppds` + `hp-ppd`：HP 全系打印/扫描套件（LaserJet、OfficeJet、DeskJet、Envy 等）\n- `ipp-usb` + CUPS 内置 driverless 模型：把 USB 直连的 IPP Everywhere / AirPrint / Mopria 打印机自动识别为网络打印机（新款 Brother DCP-T425W、HP Tango、Canon PIXMA TS 系列等大多走这条路）\n\n**厂商专有驱动**（脚本另行下载/编译）：\n\n| 驱动 | 版本 | 架构覆盖 | 适用机型 |\n| --- | --- | --- | --- |\n| Epson ESC/P-R 2（源码编译） | 1.2.39 | amd64 / arm64 / armv7 | 新款 Epson 喷墨：ET-18100、L8050、L8160、WF-7840 等（含无边距打印，[issue #30](https://github.com/hanxi/cups-web/issues/30)） |\n| Epson 国行专有驱动（`epson-inkjet-printer-201601w` + `epson-printer-utility`） | 1.0.1 / 1.2.2 | **仅 amd64** | Epson 中国区早期机型 L380、L455 等（原厂墨水检测/尺寸预设更完整） |\n| Canon UFR II / UFRII LT 官方驱动（`cnrdrvcups-ufr2-uk`） | 6.30-1.07 | amd64 / arm64 | i-SENSYS LBP/MF、imageCLASS、imageRUNNER (iR)、imagePRESS (iPR) 等所有走 UFR II / UFRII LT 协议的 Canon 激光机（[issue #34](https://github.com/hanxi/cups-web/issues/34)） |\n| 柯尼卡美能达 bizhub 3000MF 黑白激光驱动（`bizhub3000mfpdrvchn`） | 1.0.0-1 | amd64 / arm64 | Konica Minolta bizhub 3000MF 多功能一体机（[issue #35](https://github.com/hanxi/cups-web/issues/35)） |\n\n\u003e 💡 表中标注为「仅 amd64」或「amd64 / arm64」的驱动，在未覆盖的架构（如树莓派 armv7）上会被脚本静默 `skip`，不影响其他驱动的使用。如果你的打印机不在以上列表中，仍可访问 CUPS 管理界面（\u003chttp://localhost:631\u003e）通过自带的 PPD 库或上传自定义 PPD 添加。\n\n### 用户与权限\n\n- **多用户系统**：支持 `admin` / `user` 两种角色\n- **默认管理员**：首次启动自动创建 `admin/admin`，`admin` 账号受保护无法被删除或重命名\n- **打印记录**：完整保存每次打印的文件、页数、份数、双面/彩色选项、状态等\n\n### 管理后台\n\n- **用户管理**：创建、编辑、删除用户；修改角色与联系信息\n- **打印记录查询**：可按用户名、时间范围过滤\n- **数据保留策略**：按天数自动清理过期打印记录和对应文件（每小时巡检一次）\n\n### 安全\n\n- **Session 认证**：基于 Gorilla `securecookie`（加密 + 签名），密钥自动生成并持久化到数据库\n- **CSRF 防护**：对所有非 GET/HEAD/OPTIONS 请求校验 `X-CSRF-Token`\n- **密码安全**：bcrypt 加密存储\n\n## 🛠️ 技术栈\n\n- **后端**：Go 1.26 · Gorilla Mux · SQLite（`modernc.org/sqlite`，纯 Go 实现，无需 CGO）\n- **打印协议**：[OpenPrinting/goipp](https://github.com/OpenPrinting/goipp)（IPP）\n- **前端**：Vue 3 · Vite 7 · [Nuxt UI v4](https://ui.nuxt.com/) · Tailwind CSS v4 · Vue Router（hash 模式）\n- **文档转换**：LibreOffice（Office → PDF）· [ofdrw](https://github.com/ofdrw/ofdrw)（OFD → PDF，Java 17）\n- **打印服务**：[CUPS](https://www.cups.org/)\n\n## 🚀 快速开始\n\n提供两种部署方式：\n\n- [Docker 部署](#docker-部署)（推荐，一键拉起 CUPS + Web）\n- [二进制部署](#二进制部署)（适合已有 CUPS 服务的场景）\n\n---\n\n## Docker 部署\n\n### 前置要求\n\n- Docker 与 Docker Compose\n- USB 打印机（若使用本地打印机）\n\n### 1. 创建 `docker-compose.yml`\n\n```yaml\nservices:\n  cups:\n    image: hanxi/cups:latest\n    user: root\n    environment:\n      - CUPSADMIN=${CUPSADMIN}\n      - CUPSPASSWORD=${CUPSPASSWORD}\n    ports:\n      - \"631:631\"\n    devices:\n      - /dev/bus/usb:/dev/bus/usb\n    volumes:\n      - ./.etc:/etc/cups\n    restart: unless-stopped\n\n  web:\n    image: hanxi/cups-web:latest\n    user: root\n    environment:\n      - CUPS_HOST=cups:631\n    volumes:\n      - ./.data:/data\n      - ./.uploads:/uploads\n    ports:\n      - \"1180:8080\"\n    depends_on:\n      - cups\n    restart: unless-stopped\n```\n\n也可直接下载仓库内的 `docker-compose.yml`：\n\n```bash\nwget https://raw.githubusercontent.com/hanxi/cups-web/master/docker-compose.yml\n```\n\n### 2. 配置环境变量\n\n在同目录创建 `.env`：\n\n```bash\nCUPSADMIN=admin\nCUPSPASSWORD=your_cups_password\n```\n\n### 3. 启动服务\n\n```bash\ndocker-compose up -d\n```\n\n### 4. 配置打印机\n\n访问 CUPS 管理界面：\u003chttp://localhost:631\u003e，使用 `.env` 中的账号登录并添加打印机。\n\n\u003e ⚠️ **重要**：添加打印机后，必须在 CUPS 管理后台将其设为 **Shared（共享）** 状态，否则 Web 端无法发现该打印机。\n\n### 5. 访问 Web\n\n浏览器打开 \u003chttp://localhost:1180\u003e，使用默认账号登录：\n\n- 用户名：`admin`\n- 密码：`admin`\n\n\u003e ⚠️ **首次登录请立即修改默认密码**。\n\n---\n\n## 二进制部署\n\n适合已有 CUPS 服务的场景。\n\n### 1. 下载二进制\n\n从 [GitHub Releases](https://github.com/hanxi/cups-web/releases) 下载对应平台的二进制：\n\n| 平台 | 架构 | 文件名 |\n| --- | --- | --- |\n| Linux | amd64 | `cups-web-linux-amd64` |\n| Linux | arm64 | `cups-web-linux-arm64` |\n| Linux | armv7 | `cups-web-linux-armv7` |\n| Linux | loong64 | `cups-web-linux-loong64` |\n| macOS | amd64 | `cups-web-darwin-amd64` |\n| macOS | arm64 | `cups-web-darwin-arm64` |\n| Windows | amd64 | `cups-web-windows-amd64.exe` |\n\n```bash\nwget https://github.com/hanxi/cups-web/releases/latest/download/cups-web-linux-amd64\nchmod +x cups-web-linux-amd64\n```\n\n### 2. 配置并运行\n\n```bash\nexport CUPS_HOST=localhost:631\nexport DB_PATH=./data/cups-web.db\nexport UPLOAD_DIR=./uploads\nexport LISTEN_ADDR=:8080\n\n./cups-web-linux-amd64\n```\n\n或使用命令行参数（优先级高于环境变量）：\n\n```bash\n./cups-web-linux-amd64 -addr :8080\n```\n\n\u003e ⚠️ **OFD 打印仅在 Docker 镜像中开箱即用**。二进制部署若需支持 OFD，需要另行安装 Java 17 并把 `ofd-converter.jar` 放到 `/ofd-converter.jar`（或手动改源码中的路径）。\n\n### 3. 访问 Web\n\n浏览器打开 \u003chttp://localhost:8080\u003e，使用 `admin/admin` 登录。\n\n---\n\n## ⚙️ 配置说明\n\n### 环境变量\n\n| 变量名 | 说明 | 默认值 |\n| --- | --- | --- |\n| `LISTEN_ADDR` | Web 服务监听地址 | `:8080` |\n| `DB_PATH` | SQLite 数据库路径 | `data/cups-web.db` |\n| `UPLOAD_DIR` | 上传文件目录 | `uploads` |\n| `CUPS_HOST` | CUPS 服务地址（`host` 或 `host:port`） | `localhost` |\n\n### 命令行参数\n\n| 参数 | 说明 |\n| --- | --- |\n| `-addr` | 监听地址，优先级高于 `LISTEN_ADDR` |\n\n### CUPS 容器环境变量\n\n| 变量名 | 说明 |\n| --- | --- |\n| `CUPSADMIN` | CUPS 管理员用户名（**必填**） |\n| `CUPSPASSWORD` | CUPS 管理员密码（**必填**） |\n\n### 默认端口\n\n- CUPS：`631`\n- Web：容器内 `8080`，`docker-compose.yml` 默认映射到宿主机 `1180`\n\n### 数据持久化目录\n\nDocker 默认卷映射：\n\n- `./.data` → 数据库\n- `./.uploads` → 上传的原始文件与转换后 PDF\n- `./.etc` → CUPS 配置\n\n---\n\n## 📖 使用指南\n\n### 支持的文件格式\n\n| 类型 | 扩展名 | 处理方式 |\n| --- | --- | --- |\n| PDF | `.pdf` | 直接打印 |\n| 图片 | `.jpg` `.jpeg` `.png` `.gif` `.heic` | 转换为 PDF（支持多张合并） |\n| Office | `.doc` `.docx` `.xls` `.xlsx` `.ppt` `.pptx` | 通过 LibreOffice 转换 |\n| OFD | `.ofd` | 通过 ofdrw 转换 |\n| 文本 | `.txt` `.md` `.html` | 服务端渲染为 PDF |\n\n### 打印流程\n\n1. 选择打印机\n2. 上传文件（支持多图）\n3. 预览转换后的 PDF、调整打印参数\n4. 确认提交，系统自动落库并下发到 CUPS\n\n### 管理员功能\n\n- **用户管理**：创建、编辑、删除；默认 `admin` 账号不可删除、不可改名、角色固定\n- **打印记录**：查看全站记录，按用户名/日期过滤，下载原始文件\n- **系统设置**：数据保留天数（`0` 表示永久保留）\n\n---\n\n## 🔧 进阶配置\n\n### 使用 HTTPS\n\n通过反向代理（例如 Nginx）提供 HTTPS：\n\n```nginx\nserver {\n    listen 443 ssl;\n    server_name example.com;\n\n    ssl_certificate     /path/to/cert.pem;\n    ssl_certificate_key /path/to/key.pem;\n\n    location / {\n        proxy_pass http://localhost:1180;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n}\n```\n\n### 修改端口\n\n编辑 `docker-compose.yml`：\n\n```yaml\nservices:\n  web:\n    ports:\n      - \"你的端口:8080\"\n```\n\n### 数据备份\n\n```bash\ncp ./.data/cups-web.db /backup/location/\ntar -czf uploads-backup.tar.gz ./.uploads/\ntar -czf cups-config-backup.tar.gz ./.etc/\n```\n\n---\n\n## ❓ 常见问题\n\n### 忘记管理员密码怎么办？\n\n删除数据库文件后重启即可重置为默认 `admin/admin`（**会丢失全部数据**）：\n\n```bash\ndocker-compose down\nrm ./.data/cups-web.db\ndocker-compose up -d\n```\n\n### Web 端看不到打印机？\n\n1. 检查打印机是否在 CUPS 中正常列出（\u003chttp://localhost:631\u003e）\n2. 确认打印机设置为 **Shared**\n3. 容器化部署时确认 `CUPS_HOST` 指向正确的 CUPS 服务地址\n4. 重启 CUPS：`docker-compose restart cups`\n\n### Office / OFD 转换失败？\n\n- 转换有 **60 秒超时**，复杂文档可能超时\n- 确认文档本身未损坏；可尝试本地先另存为 PDF 再上传\n- 查看日志：`docker-compose logs -f web`\n\n### 上传文件一直堆积占空间？\n\n在「管理后台 → 系统设置」中设置「数据保留天数」为大于 0 的值，维护任务每小时巡检一次，自动清理过期记录与文件。\n\n### 如何查看日志？\n\n```bash\ndocker-compose logs -f web\ndocker-compose logs -f cups\n```\n\n---\n\n## 🤝 贡献\n\n欢迎提 Issue 和 Pull Request。开发者文档请参阅 [AGENTS.md](AGENTS.md)。\n\n## 📈 Star History\n\n\u003cdiv align=\"center\"\u003e\n\n[![Star History Chart](https://api.star-history.com/svg?repos=hanxi/cups-web\u0026type=Date)](https://www.star-history.com/#hanxi/cups-web\u0026Date)\n\n如果这个项目对你有帮助，欢迎点击右上角的 ⭐ **Star** 让更多人发现它！\n\n\u003c/div\u003e\n\n## 💖 支持项目\n\n如果这个项目对你有帮助，欢迎通过以下方式支持：\n\n### ⭐ Star 项目\n\n点击右上角的 ⭐ Star 按钮，让更多人发现这个项目。\n\n### 💰 赞赏支持\n\n- [💝 爱发电](https://afdian.com/a/imhanxi) — 持续支持项目发展\n- 扫码请作者喝杯奶茶 ☕\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://i.v2ex.co/7Q03axO5l.png\" alt=\"赞赏码\" width=\"300\"\u003e\n\u003c/p\u003e\n\n感谢你的支持！❤️\n\n## 📄 许可证\n\n本项目采用 MIT 许可证，详见 [LICENSE](LICENSE)。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhanxi%2Fcups-web","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhanxi%2Fcups-web","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhanxi%2Fcups-web/lists"}