File sharing server with WebDAV support
Project description
X-wing
A self-contained file sharing server with WebDAV support. Works out of the box or integrates with LDAPGate for corporate LDAP/AD authentication.
Features
- WebDAV server — mount as a drive on Windows, macOS, and Linux using native WebDAV clients
- Resumable uploads — chunked uploads with session recovery; supports large files (up to 10 GB by default)
- Browser-based file browser — drag-and-drop upload, directory creation, zip download, file delete
- In-browser text editor — CodeMirror-powered editor for common text and code file types
- WebDAV COPY / MOVE — server-side file and directory copy/move via
Destinationheader - Per-user access control — YAML config grants each user independent
read,write, anddeletepermissions; reloaded at runtime without restart - Optional LDAP / AD authentication — via LDAPGate
- Single self-contained wheel — no external CDN dependencies; fonts embedded as base64 WOFF2
Install
pip install xwing
For LDAP/AD authentication:
pip install 'xwing[ldap]'
Usage
xwing serve --root /path/to/serve
Opens the file browser at http://127.0.0.1:8989 and launches your default browser.
Options
--root PATH Root directory to serve. [required]
--host TEXT Bind host. [default: 127.0.0.1]
--port INTEGER Bind port. [default: 8989]
--open / --no-open Open browser on startup. [default: open]
--max-upload-gb FLOAT Max upload size in GB. [default: 10]
--max-chunk-mb INTEGER Max size per chunk in MB. [default: 100]
--max-chunks INTEGER Max chunks per upload session. [default: 10000]
--session-ttl-minutes INT Upload session expiry in minutes. [default: 60]
--require-auth Require authentication header (403 if missing).
--users-config FILE Path to YAML file with per-user permissions.
--user-header TEXT Header to read username from. [default: X-Forwarded-User]
--reload Auto-reload on code changes (dev only).
--ldap-config FILE Path to LDAPGate YAML config to enable LDAP authentication.
WebDAV Mount Examples
Linux (DAVfs2):
sudo mount.davfs http://localhost:8989 /mnt/xwing -o username=<user>
macOS:
open http://localhost:8989
# Or mount: Finder → Go → Connect to Server → http://localhost:8989
Windows (native WebDAV):
net use Z: \\localhost@8989\DavWWWRoot /persistent:yes
Resumable Upload (Chunked)
For large files, use the chunked upload API:
# 1. Init session
curl -X POST http://localhost:8989/_upload/init \
-H "Content-Type: application/json" \
-d '{"filename": "big.iso", "total_chunks": 100, "dir": "/"}'
# 2. Upload each chunk
curl -X PUT http://localhost:8989/_upload/<session_id>/<chunk_index> \
--data-binary @chunk.part
# 3. Complete
curl -X POST http://localhost:8989/_upload/<session_id>/complete
Chunk size and session limits are configurable via --max-chunk-mb, --max-chunks, and --session-ttl-minutes.
Access Control
By default all users are read-only. Pass --users-config to grant write or delete access per user.
xwing serve --root /data --users-config users.yaml
users.yaml — compact format:
users:
alice: rwd # read + write + delete
bob: rw # read + write, no delete
charlie: r # read only
"*": r # fallback for any unlisted user (omit to deny unlisted users)
users.yaml — verbose format:
users:
alice:
read: true
write: true
delete: true
Verbose field defaults when omitted: read: true, write: false, delete: false. Values must be true or false.
Permission levels:
| Flag | Grants |
|---|---|
r |
Browse directories, download files (GET, HEAD, PROPFIND) |
w |
Upload files, create directories, copy (PUT, MKCOL, COPY) |
d |
Delete and move files (DELETE, MOVE) |
The config file is reloaded automatically when it changes on disk — no restart needed.
LDAP / Active Directory Authentication
X-wing supports two modes for LDAP/AD auth:
Mode 1 — Standalone proxy: Run LDAPGate as a reverse proxy in front of xwing. Authenticated requests get an X-Forwarded-User header that xwing reads.
Browser → LDAPGate → xwing
ldapgate serve --config ldapgate.yaml
xwing serve --root /data --require-auth --users-config users.yaml
Mode 2 — Built-in middleware: Inject LDAPGate directly into xwing as FastAPI middleware:
pip install 'xwing[ldap]'
xwing serve --root /data --ldap-config ldapgate.yaml --users-config users.yaml
See the LDAPGate README for config file documentation.
Development
Requires uv.
git clone https://github.com/anudeepd/xwing
cd xwing
uv sync
uv run xwing serve --root .
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file xwing-0.3.0.tar.gz.
File metadata
- Download URL: xwing-0.3.0.tar.gz
- Upload date:
- Size: 583.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.12 {"installer":{"name":"uv","version":"0.10.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"CachyOS Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bec7bafc510118131d324e0718465a6af6eba5507cd23f7fa02babac428e0e4f
|
|
| MD5 |
4a430452d40f68d10986b1578d38eb47
|
|
| BLAKE2b-256 |
be86294d756c40142954cdbf8b4dfbf48730e9e487732a9e51fd05d52d40a92d
|
File details
Details for the file xwing-0.3.0-py3-none-any.whl.
File metadata
- Download URL: xwing-0.3.0-py3-none-any.whl
- Upload date:
- Size: 574.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.12 {"installer":{"name":"uv","version":"0.10.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"CachyOS Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8bd899cd18322726a182934852fe4964c6ce538c88752008acfd855360ffcbae
|
|
| MD5 |
6116c7f0ecf71c415a67359b5bf9f3cc
|
|
| BLAKE2b-256 |
fb214dcb99e3ce2785797bcbfefd16ecc6802324f27c8e24b2df0e9af37b53b0
|