
Copyparty, a single-file Python server, delivers lightning-fast, protocol-agnostic file sharing with unlimited size, resumable uploads, and built-in deduplication. Run it anywhere with Python or Docker and share securely.
Copyparty: One-File Python Server for Lightning-Fast, Multi-Protocol File Sharing
Published by Brav
Table of Contents
TL;DR
- Fast, resumable uploads that stay fast even over long distances.
- One file, no dependencies, runs on any platform with Python or Docker.
- Supports HTTP, HTTPS, WebDAV, FTP, TFTP, mDNS, SSDP – you get a full file server for all the protocols you need.
- Unlimited file size, terabyte-scale uploads, and built-in deduplication.
- Share files with short-lived links, passwords, and fine-grained permissions.
Why this matters
I used to wrestle with slow uploads on a home NAS and a corporate server that only spoke FTP. When I needed to drop a 30 GB video over a 3 Mbps link, the upload would stall or restart entirely. I also had a handful of legacy Windows clients that required WebDAV, and a Raspberry Pi that only had a lightweight SSH session. Copyparty solves all of that: it is a single file, runs anywhere Python lives, and speaks the protocols you actually use. Copyparty — GitHub (2023)
Core concepts
Copyparty is literally one Python file – no compiled binaries, no complex dependencies – so I can drop it onto a new machine and run it with a single command. The server speaks every protocol you expect from a file server: HTTP/HTTPS for browsers, WebDAV for office clients, FTP/FTPS for legacy systems, TFTP for simple config pushes, and zeroconf (mDNS/SSDP) for auto-discovery on the LAN. It also supports unlimited file size: I can upload a 4 TB disk image without hitting a hard limit, because uploads are chunked and each chunk is sent over its own TCP connection. The server automatically checksums each chunk, so any corrupted part is retried without user intervention.
Deduplication is a hidden gem: when you upload a file that already exists, Copyparty can create a symlink to the existing copy instead of storing another copy. By default this is turned off, so you can enable it when disk space is a premium. Policies let you clamp disk usage, file age, and per-time-window throughput – great for a shared media folder that shouldn’t blow up on a home network. Shares are just URLs that can be read-only, read-write, or write-only, have a default one-day lifetime, and may be protected with a password. There’s no telemetry and no auto-updater, so you stay in full control of when you upgrade. Copyparty — GitHub (2023)
The web UI is a full-featured file manager: thumbnails, image viewer, video player, music player, markdown editor, log viewer, and hotkeys. I can batch-rename files by tag or search by audio tag right in the browser. The CLI uploader mimics rsync and can sync a folder to the server automatically.
How to apply it
Download the single file – curl -O https://copyparty.github.io/copyparty-sfx.py and make it executable (chmod +x copyparty-sfx.py). Copyparty — GitHub (2023)
Run the server – ./copyparty-sfx.py –port 8080. It will drop you into a web UI on http://localhost:8080. Copyparty — GitHub (2023)
Map a volume – in the UI or by editing the config file, point a folder on your host to a URL path. Copyparty — GitHub (2023)
Upload files – drag files into the browser or use the CLI cp-upload. The upload shows progress for each chunk; if the network drops, the upload resumes automatically. Copyparty — GitHub (2023)
Set policies – from the control panel choose “Policies” and set max file size, max disk usage, or max files per hour. Copyparty — GitHub (2023)
Create a share – pick a folder, choose read-only, and set a password if desired. The share URL will live for 24 hours by default. Copyparty — GitHub (2023)
Use mobile – install the Android “Copyparty” app from the Play Store to upload from your phone with a single tap. Copyparty — GitHub (2023)
Pitfalls & edge cases
Windows symlink permissions – Windows only allows symlink creation when the user has admin rights or “Create symbolic links” privilege. I had to enable that in the Security Settings before deduplication worked. Copyparty — GitHub (2023)
Manual updates – because there’s no auto-updater, I run git pull or download the latest release whenever a security fix lands. The project is very responsive – all CVEs were fixed within 24 hours, the worst in 2 hours. Copyparty — Releases (2025)
CPU load on large uploads – each chunk is hashed with SHA-256. On a low-spec CPU, uploading a multi-TB disk image can spike CPU usage. If you hit that, reduce the number of parallel chunks with the –chunk-size and –max-parallel flags. Copyparty — Wiki (Performance) (2023)
mDNS/SSDP on Windows – these zeroconf protocols require the “WLAN AutoConfig” service to be running. I had to enable it manually before the server was discoverable. Copyparty — GitHub (2023)
No telemetry – while this is a pro for privacy, it also means I have to manually check for updates. My habit now is to watch the releases page and run a quick ./copyparty-sfx.py –version against the latest tag. Copyparty — GitHub (2023)
Quick FAQ
Q: How does Copyparty handle authentication for shared links? A: Shared links can be protected with an optional password or tied to a specific account. The server checks the password before delivering the file. Copyparty — GitHub (2023)
Q: What are the security implications of generating random passwords per file? A: The random “volflag” password is a one-time token that makes the link hard to guess. It’s safe for temporary sharing but not meant for long-term public access. Copyparty — GitHub (2023)
Q: How does the command line uploader synchronize new and modified files? A: The CLI uploader has a –sync mode that compares timestamps and sizes, then uploads only changed chunks – just like rsync. Copyparty — GitHub (2023)
Q: Are there any limitations on the number of concurrent uploads? A: The server can open a TCP connection for each chunk, so many files can be uploaded in parallel. The real limit is your CPU, disk I/O, and network bandwidth. Copyparty — GitHub (2023)
Q: How does Copyparty manage file names that are not valid UTF-8? A: The server normalizes names on the fly and will encode them in the filesystem’s native encoding. You can enable strict mode to reject non-UTF-8 names. Copyparty — GitHub (2023)
Q: What is the default policy for file overwrite behavior? A: By default, uploading a file with an existing name overwrites it unless you enable the “overwrite” flag or set a policy to block it. Copyparty — GitHub (2023)
Q: How does Copyparty’s discovery via mDNS/SSDP work on different OSes? A: The server advertises itself on the LAN using both protocols. Clients that support mDNS (e.g., macOS) or SSDP (e.g., Windows) can discover it automatically. Copyparty — GitHub (2023)
Q: How can users enable automatic updates safely? A: There’s no auto-updater, but you can script git pull or download the latest copyparty-sfx.py and replace the file. Copyparty — Releases (2025)
Q: What is the performance impact of chunked uploads on low-bandwidth connections? A: Chunked uploads reduce memory usage and allow you to resume after a drop. On low-bandwidth links, you can reduce the chunk size or number of parallel uploads to keep the pipe from saturating. Copyparty — Wiki (Performance) (2023)
Conclusion
Copyparty gives you a full-featured file server in a single script. If you need a quick, lightweight solution that runs on any platform and supports the protocols you actually use, give it a try. Start by downloading the copyparty-sfx.py file, run it, and experiment with the web UI. Turn on policies to keep the disk tidy, enable deduplication if you’re saving space, and use the share feature to send a 100 GB video to a colleague with a one-day link. Keep an eye on the releases page for security patches – the maintainers react fast, and you have full control over when you upgrade.
Actionable next steps:
- Grab the single-file script.
- Run it on a server or a Raspberry Pi.
- Map a folder and start uploading.
- Review the policies page and enable the ones you need.
- Share a folder with a friend and test the one-day link.
- Stay on top of updates – check the releases page every week.
Happy file-sharing!
