{"id":13425006,"url":"https://github.com/saltbo/zpan","last_synced_at":"2026-06-07T03:04:43.807Z","repository":{"id":38363077,"uuid":"211444856","full_name":"saltbo/zpan","owner":"saltbo","description":"A self-hosted cloud disk base on the cloud storage./ 一个基于云存储的网盘系统，用于自建私人网盘或企业网盘。","archived":false,"fork":false,"pushed_at":"2025-04-20T13:14:17.000Z","size":39921,"stargazers_count":1894,"open_issues_count":35,"forks_count":241,"subscribers_count":38,"default_branch":"master","last_synced_at":"2025-05-09T22:22:37.217Z","etag":null,"topics":["cloud","cloud-disk","cloud-storage","disk","oss","qiniuyun","s3","upyun"],"latest_commit_sha":null,"homepage":"https://zpan.space","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/saltbo.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","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},"funding":{"github":["saltbo"],"patreon":"saltbo","open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2019-09-28T04:39:57.000Z","updated_at":"2025-05-08T06:38:21.000Z","dependencies_parsed_at":"2024-03-17T05:42:38.658Z","dependency_job_id":"e8c3734f-1d0a-4331-ae54-e0a3763653e8","html_url":"https://github.com/saltbo/zpan","commit_stats":{"total_commits":289,"total_committers":12,"mean_commits":"24.083333333333332","dds":"0.22837370242214527","last_synced_commit":"3cee67e426642c415760a8d02ab9b2978d154328"},"previous_names":[],"tags_count":22,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saltbo%2Fzpan","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saltbo%2Fzpan/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saltbo%2Fzpan/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saltbo%2Fzpan/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/saltbo","download_url":"https://codeload.github.com/saltbo/zpan/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254094458,"owners_count":22013581,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["cloud","cloud-disk","cloud-storage","disk","oss","qiniuyun","s3","upyun"],"created_at":"2024-07-31T00:01:01.833Z","updated_at":"2026-06-07T03:04:43.788Z","avatar_url":"https://github.com/saltbo.png","language":"Go","funding_links":["https://github.com/sponsors/saltbo","https://patreon.com/saltbo"],"categories":["Go","TypeScript"],"sub_categories":[],"readme":"# ZPan\n\n**The open-source, S3-native file hosting platform.**\n\n[![CI](https://github.com/saltbo/zpan/actions/workflows/ci.yml/badge.svg)](https://github.com/saltbo/zpan/actions/workflows/ci.yml)\n[![codecov](https://codecov.io/gh/saltbo/zpan/graph/badge.svg)](https://codecov.io/gh/saltbo/zpan)\n[![Release](https://github.com/saltbo/zpan/actions/workflows/release.yml/badge.svg)](https://github.com/saltbo/zpan/actions/workflows/release.yml)\n[![GitHub Release](https://img.shields.io/github/v/release/saltbo/zpan)](https://github.com/saltbo/zpan/releases/latest)\n[![Docker Image](https://img.shields.io/badge/ghcr.io-saltbo%2Fzpan-blue)](https://ghcr.io/saltbo/zpan)\n[![License](https://img.shields.io/github/license/saltbo/zpan.svg)](https://github.com/saltbo/zpan/blob/master/LICENSE)\n\n\u003e A restrained S3 web drive for image hosting, file sharing, and direct-to-object-storage workflows.\n\n## What is ZPan?\n\nZPan is a lightweight file hosting platform built on top of S3-compatible storage. Files upload directly from the client to S3 through presigned URLs, bypassing server bandwidth entirely. The server is the control plane: auth, metadata, shares, quotas, teams, WebDAV, tool integrations, and admin operations.\n\nThe product boundary is intentional: ZPan is an S3-native web drive, not a wrapper around every consumer cloud drive and not a full groupware suite. You bring an S3-compatible bucket; ZPan gives it a clean web UI, public sharing, image-hosting APIs, and deployment options that do not require a VPS or NAS.\n\n**Core scenarios:**\n\n- **S3 web drive** — Manage files, folders, previews, trash, quotas, and team workspaces on top of your own object storage\n- **Image hosting** — Upload via PicGo, PicList, uPic, ShareX, Flameshot, or API and get a stable URL instantly\n- **File sharing** — Publish share links with password, expiration, download limits, direct links, and save-to-drive flows\n- **Personal homepage** — Give each user a public `/u/username` page for curated shared files and folder-style browsing\n- **External access** — Mount files through WebDAV and run downloader workers for remote-download workflows\n\n## Why ZPan?\n\n**S3 only, by design.** ZPan does not chase every net-disk provider or build a cloud-drive nesting layer. The storage contract stays simple and durable: S3-compatible buckets such as Cloudflare R2, AWS S3, Backblaze B2, MinIO, RustFS, Tigris, and other S3-compatible services.\n\n**Serverless native.** ZPan is built around Cloudflare Workers, D1, Hono, and web-standard APIs, with Docker and other runtimes as additional deployment targets. You can run a real file-hosting control plane without owning a VPS, keeping a NAS online, or proxying uploads through a long-running server.\n\n**Direct transfer path.** Uploads and downloads use presigned object-storage URLs whenever possible. That keeps server bandwidth low, avoids a central file-transfer bottleneck, and lets object storage do the heavy lifting.\n\n**Practical file workflows.** ZPan includes a web file manager, public sharing, image-hosting configuration, API keys, WebDAV access, teams, quotas, remote-download tasks, file previews, and admin controls without turning into a provider-aggregation platform.\n\n**Deployable downloader workers.** Remote download does not have to run inside the main ZPan instance. You can deploy the downloader together with ZPan for a simple setup, or run it separately in an environment with better network access and fewer source-site restrictions, then let ZPan import the completed files into object storage.\n\n## Product Boundaries\n\nZPan is a good fit when you want:\n\n- A restrained S3-backed web drive instead of a storage-provider zoo\n- A self-hosted image bed and file-sharing app backed by your own bucket\n- Cloudflare-native deployment without maintaining a VPS or NAS\n- Browser-to-S3 transfers instead of app-server file proxying\n- Tool integrations for screenshot, publishing, WebDAV, remote download, and API-driven workflows\n\nZPan is not trying to be:\n\n- A real-time document co-editing suite like Nextcloud Office\n- A general-purpose cloud-drive aggregator like AList\n- A local server directory browser like File Browser\n\n## How ZPan Compares\n\nMost self-hosted file projects start from either server files, desktop sync, collaboration, or many-provider aggregation. ZPan starts from S3-compatible object storage and a serverless-friendly control plane.\n\n| Capability | **ZPan** | [Cloudreve](https://docs.cloudreve.org/en/) | [AList](https://alist-repo.github.io/docs/guide/drivers/) | [Nextcloud](https://nextcloud.com/files/) | [Seafile](https://www.seafile.com/en/features/) | [File Browser](https://github.com/filebrowser/filebrowser) |\n|------------|----------|------------|--------|-----------|---------|--------------|\n| S3-native product focus | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |\n| S3-compatible storage backend | ✅ | ✅ | ✅ | ✅ | ⚠️ | ❌ |\n| Direct browser-to-object-storage path | ✅ | ⚠️ | ⚠️ | ❌ | ❌ | ❌ |\n| Cloudflare Workers native | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |\n| No VPS/NAS required | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |\n| PicGo/ShareX image-hosting workflow | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |\n| Per-user public file homepage | ✅ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ❌ |\n| Remote download workflow | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |\n| Separately deployable downloader/node | ✅ | ✅ | ⚠️ | ❌ | ❌ | ❌ |\n| Multi net-disk aggregation | ❌ | ❌ | ✅ | ⚠️ | ❌ | ❌ |\n| Server local directory as primary file root | ❌ | ⚠️ | ⚠️ | ⚠️ | ❌ | ✅ |\n| Real-time document co-editing | ❌ | ❌ | ❌ | ✅ | ⚠️ | ❌ |\n| Dedicated sync clients | Planned | ❌ | ❌ | ✅ | ✅ | ❌ |\n| Team/workspace model | ✅ | ⚠️ | ❌ | ✅ | ✅ | ❌ |\n| WebDAV access | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |\n| Share links | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |\n| Docker deployment | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |\n\nLegend: ✅ first-class or core capability; ⚠️ partial, edition-dependent, or not the product's main focus; ❌ not a core capability.\n\n## Deploy\n\n### Cloudflare Workers (Recommended)\n\nDeploy via GitHub Actions with zero server management. Free tier covers personal use.\n\n1. **Fork** this repository\n2. In your fork, go to **Settings → Secrets and variables → Actions** and add:\n   - `CLOUDFLARE_ACCOUNT_ID` — found on the [Cloudflare dashboard](https://dash.cloudflare.com/) sidebar\n   - `CLOUDFLARE_API_TOKEN` — create one [here](https://dash.cloudflare.com/profile/api-tokens) with **Workers Scripts:Edit**, **D1:Edit**, and **R2 Storage:Edit** permissions (R2 scope is needed to auto-provision the avatar/logo bucket)\n3. Go to the **Actions** tab, select **Deploy to Cloudflare Workers**, and click **Run workflow**\n\nAfter initial setup, the workflow runs automatically every time you sync your fork with the latest release.\n\n### AWS Lambda\n\nDeploy via GitHub Actions using SAM. Lambda Function URL provides HTTPS with no API Gateway needed.\n\n1. **Fork** this repository\n2. In your fork, go to **Settings → Secrets and variables → Actions** and add:\n   - `TURSO_DATABASE_URL` and `TURSO_AUTH_TOKEN` — from [Turso](https://turso.tech) (free, no credit card)\n   - `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AWS_REGION`\n3. Go to the **Actions** tab, select **Deploy to AWS Lambda**, and click **Run workflow**\n\nSee [docs/deploy/aws-lambda.md](docs/deploy/aws-lambda.md) for full setup instructions and IAM permissions.\n\n### Docker\n\n**Quick start** — pull the pre-built image and bring your own S3 storage:\n\n```bash\ncurl -O https://raw.githubusercontent.com/saltbo/zpan/master/deploy/docker-compose.yml\ndocker compose up -d\n```\n\n**With RustFS** (self-hosted S3-compatible storage, no external dependencies):\n\n```bash\ncurl -O https://raw.githubusercontent.com/saltbo/zpan/master/deploy/docker-compose.rustfs.yml\ndocker compose -f docker-compose.rustfs.yml up -d\n```\n\nAfter startup:\n\n1. Open the RustFS console at `http://localhost:9001` (admin / admin123) and create a bucket (e.g. `zpan-bucket`)\n2. Open ZPan at `http://localhost:8222`, register a user (first user gets admin role)\n3. Go to **Admin → Storage** and add the RustFS storage:\n   - **Endpoint**: `http://localhost:9000` (must be reachable from your browser, not the Docker internal hostname)\n   - **Bucket**: the bucket name you created in step 1\n   - **Region**: `us-east-1`\n   - **Access Key / Secret Key**: `admin` / `admin123`\n\n\u003e **Important:** The storage endpoint must be accessible from the **client browser**, since files upload directly to S3 via presigned URLs. Use `http://localhost:9000` for local development, or your server's public URL for production.\n\n## Documentation\n\n- [Roadmap](V2_ROADMAP.md)\n- [Contributing](CONTRIBUTING.md)\n\n## v1\n\nLooking for ZPan v1 (Go version)? See the [v1 branch](https://github.com/saltbo/zpan/tree/v1).\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for details.\n\nThank you to all the people who contributed to ZPan!\n\n\u003ca href=\"https://github.com/saltbo/zpan/graphs/contributors\"\u003e\u003cimg src=\"https://opencollective.com/zpan/contributors.svg?width=890\" /\u003e\u003c/a\u003e\n\n## License\n\nZPan is under the GNU Affero General Public License v3.0. See the\n[LICENSE](LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsaltbo%2Fzpan","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsaltbo%2Fzpan","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsaltbo%2Fzpan/lists"}