A Cloudflare-native storage aggregation panel with WebDAV, multi-drive support, file preview, sharing, audit logs, and admin controls.
简体中文 · Deployment · WebDAV · GitHub Actions
CList turns Cloudflare Workers + D1 into a lightweight cloud storage aggregation service. It gives you a single web UI and WebDAV endpoint for S3-compatible storage, WebDAV servers, OneDrive, Google Drive, Aliyun Drive, and Baidu Netdisk.
It is designed for small personal data centers, public download mirrors, private file hubs, and edge-hosted storage dashboards where running a traditional server is overkill.
flowchart LR
Browser[Web UI] --> Worker[Cloudflare Worker]
WebDAV[WebDAV Client] --> Worker
Worker --> D1[(Cloudflare D1)]
Worker --> S3[S3 Compatible]
Worker --> DAV[WebDAV Upstream]
Worker --> OD[OneDrive]
Worker --> GD[Google Drive]
Worker --> AD[Aliyun Drive]
Worker --> BD[Baidu Netdisk]
- Multi-storage file browser with public and private permission controls
- WebDAV server endpoint for desktop sync tools, mobile file managers, and CLI clients
- S3-compatible storage support, including custom endpoint and base path
- Drive integrations for OneDrive, Google Drive, Aliyun Drive, and Baidu Netdisk
- File upload, download, folder creation, rename, move, copy, and delete workflows
- Preview support for common text, markdown, code, image, audio, video, and document files
- Public share links with token-based access
- Storage statistics with visual charts for total size, file count, folder count, and file type distribution
- Audit logs for admin actions and file operations
- Cloudflare D1 persistence and Workers edge deployment
- GitHub Actions deployment guide for repeatable releases
| Backend | Browse | Upload | Rename / Move | Notes |
|---|---|---|---|---|
| S3 compatible | Yes | Yes | Yes | Works with R2-like and S3-compatible endpoints |
| WebDAV upstream | Yes | Yes | Yes | Also exposed through CList's own WebDAV server |
| OneDrive | Yes | Yes | Yes | Supports online refresh API or custom OAuth app |
| Google Drive | Yes | Yes | Yes | Supports online refresh API or custom OAuth app |
| Aliyun Drive | Yes | Yes | Yes | Uses Aliyun Open API style token refresh |
| Baidu Netdisk | Yes | Yes | Yes | Supports refresh token based access |
git clone https://github.com/ooyyh/Cloudflare-Clist.git
cd Cloudflare-Clist
npm installnpx wrangler login
npx wrangler d1 create clistKeep the returned database_id; it is used in the next step.
Create your production config from the example:
cp wrangler.jsonc.example wrangler.jsoncThen copy the D1 database_id returned by Wrangler into wrangler.jsonc.
Recommended production shape:
Use Cloudflare Dashboard or Wrangler secrets/vars for runtime values. Keeping keep_vars: true avoids overwriting Dashboard-managed variables during deploys.
npx wrangler d1 migrations apply clist --remotenpm run build
npx wrangler deploy| Variable | Required | Example | Description |
|---|---|---|---|
DB |
Yes | D1 binding | Cloudflare D1 database binding |
ADMIN_USERNAME |
Yes | admin |
Admin login username |
ADMIN_PASSWORD |
Yes | change-me |
Admin login password |
SITE_TITLE |
No | CList |
Site title shown in the UI |
SITE_ANNOUNCEMENT |
No | Welcome |
Announcement text shown to visitors |
CHUNK_SIZE_MB |
No | 10 |
Browser upload chunk size |
WEBDAV_ENABLED |
No | true |
Enables the WebDAV server endpoint |
WEBDAV_USERNAME |
No | webdav |
WebDAV username; falls back to admin username |
WEBDAV_PASSWORD |
No | secret |
WebDAV password; falls back to admin password |
When WEBDAV_ENABLED is set to "true", CList exposes storage backends through WebDAV:
https://your-domain.example/dav/0/ # all storages
https://your-domain.example/dav/{storageId}/ # one storage
Important details:
- WebDAV URLs should end with a trailing slash.
- Use Basic Auth with
WEBDAV_USERNAME/WEBDAV_PASSWORD. - Desktop clients such as Windows WebDAV, macOS Finder, Cyberduck, RaiDrive, NetDrive, and many mobile file managers can connect directly.
- CList supports
OPTIONS,PROPFIND,GET,HEAD,PUT,DELETE,MKCOL,COPY, andMOVE.
More details: docs/webdav.md
CList follows the OpenList-style driver flow for cloud drive token refresh:
- Online refresh API is enabled by default for OneDrive, Google Drive, Aliyun Drive, and Baidu Netdisk.
- Existing OpenList-style
api_url_addressvalues are accepted alongside CList'sapi_address. - If no local
client_idandclient_secretare configured, CList automatically falls back to the online refresh API. - Refreshed tokens are persisted into storage state so repeated browsing does not require re-login.
npm run devUseful checks:
npm run build
npm run typecheck
npx wrangler deploy --dry-runapp/
components/ React components
lib/ storage clients, auth, audit, utilities
routes/ React Router routes and API endpoints
workers/
app.ts Cloudflare Worker entry
migrations/ D1 migrations
docs/ deployment and WebDAV docs
public/ static assets
- GitHub Issues: ooyyh/Cloudflare-Clist/issues
- Author: @ooyyh
- Email: laowan345@gmail.com
CList is released under the MIT License.
{ "$schema": "node_modules/wrangler/config-schema.json", "name": "clist", "main": "./workers/app.ts", "compatibility_date": "2025-04-04", "keep_vars": true, "d1_databases": [ { "binding": "DB", "database_name": "clist", "database_id": "your-d1-database-id", "migrations_dir": "./migrations" } ] }