docs/versus.md
copyparty compared against all similar software i've bumped into
there is probably some unintentional bias so please submit corrections
currently up to date with awesome-selfhosted but that probably won't last
█ = absolutely╱ = partially• = maybe? = nope<&Kethsar> copyparty is very much bloat ed, so yeah
the table headers in the matrixes below are the different softwares, with a quick review of each software in the next section
the softwares,
C = copypartyh2 = hfs2 🔥h3 = hfs3nc = nextcloudsf = seafilerc = rclone, specifically rclone serve webdav .df = dufscs = chibisafekb = kodboxfb = filebrowserfg = filegatorsg = sftpgoaz = arozossome softwares not in the matrixes,
symbol legend,
█ = absolutely╱ = partially• = maybe? = nope| feature / software | C | h2 | h3 | nc | sf | rc | df | cs | kb | fb | fg | sg | az |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| intuitive UX | ╱ | █ | █ | █ | █ | █ | █ | █ | █ | █ | █ | ||
| config GUI | █ | █ | █ | █ | █ | █ | █ | █ | █ | ||||
| good documentation | █ | █ | █ | █ | █ | █ | █ | ╱ | ╱ | ||||
| runs on iOS | ╱ | ╱ | |||||||||||
| runs on Android | █ | █ | █ | █ | |||||||||
| runs on WinXP | █ | █ | █ | ||||||||||
| runs on Windows | █ | █ | █ | █ | █ | █ | █ | ╱ | █ | █ | █ | █ | ╱ |
| runs on Linux | █ | ╱ | █ | █ | █ | █ | █ | █ | █ | █ | █ | █ | █ |
| runs on Macos | █ | █ | █ | █ | █ | █ | █ | █ | █ | █ | █ | ||
| runs on FreeBSD | █ | █ | • | █ | █ | █ | • | █ | █ | █ | |||
| runs on Risc-V | █ | █ | █ | █ | • | █ | |||||||
| runs on SGI IRIX | █ | • | |||||||||||
| runs on aarch64-BE | █ | • | • | • | • | ||||||||
| portable binary | █ | █ | █ | █ | █ | █ | █ | █ | |||||
| zero setup, just go | █ | █ | █ | ╱ | █ | █ | ╱ | █ | |||||
| android app | ╱ | █ | █ | ||||||||||
| iOS app | ╱ | █ | █ |
zero setup = you can get a mostly working setup by just launching the app, without having to install any software or configure whateverC/copyparty remarks:
h2/hfs2 runs on linux through winerc/rclone must be started with the command rclone serve webdav . or similarcs/chibisafe has undocumented windows supportsg/sftpgo:
pkg in sftpgoaz/arozos has partial windows supportthe thing that copyparty is actually kinda good at
| feature / software | C | h2 | h3 | nc | sf | rc | df | cs | kb | fb | fg | sg | az |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| download folder as zip | █ | █ | █ | █ | ╱ | █ | █ | █ | ╱ | █ | ╱ | ||
| download folder as tar | █ | ||||||||||||
| upload | █ | █ | █ | █ | █ | █ | █ | █ | █ | █ | ╱ | █ | █ |
| parallel uploads | █ | █ | █ | • | █ | █ | █ | █ | |||||
| resumable uploads | █ | █ | █ | █ | █ | ╱ | |||||||
| upload segmenting | █ | █ | █ | █ | █ | █ | █ | ╱ | █ | ||||
| upload acceleration | █ | █ | █ | ||||||||||
| upload verification | █ | █ | █ | █ | |||||||||
| upload deduplication | █ | █ | █ | ||||||||||
| upload a 999 TiB file | █ | █ | █ | • | █ | █ | ╱ | ╱ | |||||
| CTRL-V from device | █ | █ | |||||||||||
| race the beam ("p2p") | █ | ||||||||||||
| "tail -f" streaming | █ | ||||||||||||
| keep last-modified time | █ | █ | █ | █ | █ | █ | |||||||
| upload rules | ╱ | ╱ | ╱ | ╱ | ╱ | ╱ | ╱ | ╱ | ╱ | ╱ | |||
| ┗ max disk usage | █ | █ | █ | █ | █ | █ | █ | ||||||
| ┗ max filesize | █ | █ | █ | █ | █ | ||||||||
| ┗ max items in folder | █ | ╱ | |||||||||||
| ┗ max file age | █ | █ | |||||||||||
| ┗ max uploads over time | █ | ╱ | |||||||||||
| ┗ compress before write | █ | ||||||||||||
| ┗ randomize filename | █ | █ | █ | ||||||||||
| ┗ mimetype reject-list | ╱ | • | ╱ | ╱ | • | ||||||||
| ┗ extension reject-list | ╱ | █ | • | ╱ | ╱ | • | |||||||
| ┗ upload routing | █ | ||||||||||||
| checksums provided | █ | █ | █ | ╱ | |||||||||
| cloud storage backend | ╱ | ╱ | ╱ | █ | █ | █ | ╱ | ╱ | █ | █ | ╱ |
upload segmenting = files are sliced into chunks, making it possible to upload files larger than 100 MiB on cloudflare for example
upload acceleration = each file can be uploaded using several TCP connections, which can offer a huge speed boost over huge distances / on flaky connections -- like the good old download accelerators except in reverse
upload verification = uploads are checksummed or otherwise confirmed to have been transferred correctly
CTRL-V from device = press CTRL-C in Windows Explorer (or whatever) and paste into the webbrowser to upload it
race the beam = files can be downloaded while they're still uploading; downloaders are slowed down such that the uploader is always ahead
tail -f = when viewing or downloading a logfile, the connection can remain open to keep showing new lines as they are added in real time
upload routing = depending on filetype / contents / uploader etc., the file can be redirected to another location or otherwise transformed; mitigates limitations such as sharex#3992
checksums provided = when downloading a file from the server, the file's checksum is provided for verification client-side
cloud storage backend = able to serve files from (and write to) s3 or similar cloud services; ╱ means the software can do this with some help from rclone mount as a bridge
C/copyparty can reject uploaded files (based on complex conditions), for example by extension or mimetype
sf/seafile download-as-zip is not streaming; it creates the full zipfile before download can start, and fails on big folders
fg/filebrowser remarks:
fg/filegator download-as-zip is not streaming; it creates the full zipfile before download can start
sg/sftpgo:
az/arozos download-as-zip is not streaming; it creates the full zipfile before download can start, and fails on big folders
| feature / software | C | h2 | h3 | nc | sf | rc | df | cs | kb | fb | fg | sg | az |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| serve https | █ | █ | █ | █ | █ | █ | █ | █ | █ | █ | █ | █ | |
| serve webdav | █ | █ | █ | █ | █ | █ | █ | █ | |||||
| serve ftp (tcp) | █ | █ | █ | █ | |||||||||
| serve ftps (tls) | █ | █ | █ | ||||||||||
| serve tftp (udp) | █ | ||||||||||||
| serve sftp (ssh) | █ | █ | █ | █ | |||||||||
| serve smb/cifs | ╱ | █ | |||||||||||
| serve dlna | █ | ||||||||||||
| listen on unix-socket | █ | █ | █ | █ | █ | █ | █ | █ | █ | ||||
| zeroconf | █ | █ | |||||||||||
| supports netscape 4 | ╱ | █ | • | ╱ | |||||||||
| ...internet explorer 6 | ╱ | █ | █ | █ | • | ╱ | |||||||
| mojibake filenames | █ | • | • | █ | █ | • | █ | • | ╱ | ||||
| undecodable filenames | █ | • | • | █ | • | ╱ |
webdav = protocol convenient for mounting a remote server as a local filesystem; see zeroconf:zeroconf = the server announces itself on the LAN, automatically appearing on other zeroconf-capable devicesmojibake filenames = filenames decoded with the wrong codec and then reencoded (usually to utf-8), so 宇多田ヒカル might look like ëFæ╜ôcâqâJâïundecodable filenames = pure binary garbage which cannot be parsed as utf-8
$'\355\221' with mpv through mounting a remote copyparty server with rclone, pogC/copyparty remarks:
sg/sftpgo translates mojibake filenames into valid utf-8 (information loss)az/arozos has readonly-support for older browsers; no uploading| feature / software | C | h2 | h3 | nc | sf | rc | df | cs | kb | fb | fg | sg | az |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| config from cmd args | █ | █ | █ | █ | █ | ╱ | ╱ | ||||||
| config files | █ | █ | █ | ╱ | ╱ | █ | █ | █ | • | ╱ | ╱ | ||
| runtime config reload | █ | █ | █ | █ | █ | █ | █ | █ | |||||
| same-port http / https | █ | ||||||||||||
| listen multiple ports | █ | █ | |||||||||||
| virtual file system | █ | █ | █ | █ | █ | ||||||||
| reverse-proxy ok | █ | █ | █ | █ | █ | █ | █ | • | • | • | █ | ╱ | |
| folder-rproxy ok | █ | █ | █ | █ | • | • | █ | • | • |
folder-rproxy = reverse-proxying without dedicating an entire (sub)domain, using a subfolder insteadsg/sftpgo:
az/arozos:
| feature / software | C | h2 | h3 | nc | sf | rc | df | cs | kb | fb | fg | sg | az |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| accounts | █ | █ | █ | █ | █ | █ | █ | █ | █ | █ | █ | █ | █ |
| per-account chroot | █ | ||||||||||||
| single-sign-on | ╱ | █ | █ | • | |||||||||
| token auth | ╱ | █ | █ | █ | █ | ||||||||
| 2fa | ╱ | / | █ | █ | █ | ╱ | |||||||
| per-volume permissions | █ | █ | █ | █ | █ | █ | █ | █ | █ | ╱ | █ | █ | |
| per-folder permissions | ╱ | █ | █ | █ | █ | █ | █ | ╱ | █ | █ | |||
| per-file permissions | █ | █ | █ | █ | █ | █ | |||||||
| per-file passwords | █ | █ | █ | █ | █ | █ | █ | ||||||
| unmap subfolders | █ | █ | █ | █ | ╱ | • | |||||||
| index.html blocks list | ╱ | █ | • | ||||||||||
| write-only folders | █ | █ | █ | █ | █ | ||||||||
| files stored as-is | █ | █ | █ | █ | █ | █ | █ | █ | █ | █ | |||
| file versioning | █ | █ | |||||||||||
| file encryption | █ | █ | █ | █ | |||||||||
| file indexing | █ | █ | █ | █ | █ | █ | █ | ||||||
| ┗ per-volume db | █ | • | • | • | • | • | |||||||
| ┗ db stored in folder | █ | • | • | █ | |||||||||
| ┗ db stored out-of-tree | █ | █ | █ | █ | • | • | █ | ||||||
| ┗ existing file tree | █ | █ | █ | ||||||||||
| file action event hooks | █ | █ | █ | • | |||||||||
| one-way folder sync | █ | █ | █ | █ | |||||||||
| full sync | █ | █ | |||||||||||
| speed throttle | █ | █ | █ | █ | █ | ||||||||
| anti-bruteforce | █ | █ | █ | █ | █ | • | █ | • | |||||
| dyndns updater | █ | █ | |||||||||||
| self-updater | ╱ | █ | █ | ||||||||||
| log rotation | █ | █ | █ | █ | • | █ | █ | • | |||||
| upload tracking / log | █ | █ | • | █ | █ | █ | █ | ╱ | █ | ||||
| prometheus metrics | █ | █ | █ | ||||||||||
| curl-friendly ls | █ | ||||||||||||
| curl-friendly upload | █ | █ | █ | █ | • |
unmap subfolders = "shadowing"; mounting a local folder in the middle of an existing filesystem tree in order to disable access below that pathfiles stored as-is = uploaded files are trivially readable from the server HDD, not sliced into chunks or in weird folder structures or anything like thatdb stored in folder = filesystem index can be written to a database file inside the folder itselfdb stored out-of-tree = filesystem index can be stored some place else, not necessarily inside the shared foldersexisting file tree = will index any existing files it findsfile action event hooks = run script before/after upload, move, rename, ...one-way folder sync = like rsync, optionally deleting unexpected files at targetfull sync = stateful, dropbox-like syncspeed throttle = rate limiting (per ip, per user, per connection, anything like that)curl-friendly ls = returns a sortable plaintext folder listing when curledcurl-friendly upload = uploading with curl is just curl -T some.bin http://.../C/copyparty remarks:
index.html on its own does not prevent directory listing, but permission h (instead of r) enforces index.html to be returned instead of folder contentsfg/filegator remarks:
per-* permissions -- can limit a user to one folder and its subfoldersunmap subfolders -- can globally filter a list of pathssg/sftpgo:
file action event hooks also include on-download triggersupload tracking / log in main logfileaz/arozos:
2fa maybe possible through LDAP/Oauthh3/hfs3
2fa available by installing a plugin| feature / software | C | h2 | h3 | nc | sf | rc | df | cs | kb | fb | fg | sg | az |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| single-page app | █ | █ | █ | █ | █ | █ | █ | █ | █ | ||||
| themes | █ | █ | █ | █ | █ | ||||||||
| directory tree nav | █ | ╱ | █ | █ | ╱ | ||||||||
| multi-column sorting | █ | █ | |||||||||||
| thumbnails | █ | / | ╱ | ╱ | █ | █ | ╱ | █ | |||||
| ┗ image thumbnails | █ | / | █ | █ | █ | █ | █ | █ | |||||
| ┗ video thumbnails | █ | █ | █ | █ | █ | ||||||||
| ┗ audio spectrograms | █ | ||||||||||||
| audio player | █ | ╱ | █ | █ | █ | ╱ | ╱ | █ | |||||
| ┗ gapless playback | █ | • | |||||||||||
| ┗ audio equalizer | █ | ||||||||||||
| ┗ waveform seekbar | █ | ||||||||||||
| ┗ OS integration | █ | █ | |||||||||||
| ┗ transcode to lossy | █ | ||||||||||||
| video player | █ | █ | █ | █ | █ | █ | ╱ | █ | |||||
| ┗ video transcoding | / | █ | |||||||||||
| audio BPM detector | █ | ||||||||||||
| audio key detector | █ | ||||||||||||
| search by path / name | █ | █ | █ | █ | █ | █ | █ | █ | ╱ | ||||
| search by date / size | █ | █ | █ | █ | |||||||||
| search by bpm / key | █ | ||||||||||||
| search by custom tags | █ | █ | |||||||||||
| search in file contents | █ | █ | █ | ||||||||||
| search by custom parser | █ | ||||||||||||
| find local file | █ | ||||||||||||
| undo recent uploads | █ | ||||||||||||
| create directories | █ | █ | █ | █ | ╱ | █ | █ | █ | █ | █ | █ | █ | |
| image viewer | █ | █ | █ | █ | █ | █ | █ | █ | █ | ||||
| markdown viewer | █ | / | █ | █ | ╱ | ╱ | █ | ||||||
| markdown editor | █ | █ | █ | ╱ | ╱ | ╱ | █ | ||||||
| readme.md in listing | █ | / | █ | ||||||||||
| rename files | █ | █ | █ | █ | █ | ╱ | █ | █ | █ | █ | █ | █ | |
| batch rename | █ | █ | |||||||||||
| cut / paste files | █ | █ | █ | █ | █ | █ | █ | ||||||
| move files | █ | █ | █ | █ | █ | █ | █ | █ | █ | █ | █ | ||
| delete files | █ | █ | █ | █ | █ | ╱ | █ | █ | █ | █ | █ | █ | █ |
| copy files | / | █ | █ | █ | █ | █ | █ |
single-page app = multitasking; possible to continue navigating while uploadingaudio player » os-integration = use the lockscreen or media hotkeys to play/pause, prev/next songsearch by custom tags = ability to tag files through the UI and search by thosefind local file = drop a file into the browser to see if it exists on the serverundo recent uploads = accounts without delete permissions have a time window where they can undo their own uploadsC/copyparty has teeny-tiny skips playing gapless albums depending on audio codec (opus best)h2/hfs2 has a very basic directory tree view, not showing sibling foldersrc/rclone can do some file management (mkdir, rename, delete) when hosting througn webdavfg/filebrowser remarks:
fg/filegator directory tree is a modal windowsg/sftpgo remarks:
| feature / software | C | h2 | h3 | nc | sf | rc | df | cs | kb | fb | fg | sg | az |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| OS alert on upload | ╱ | ╱ | ╱ | ||||||||||
| discord | ╱ | ╱ | ╱ | ||||||||||
| ┗ announce uploads | ╱ | ╱ | |||||||||||
| ┗ custom embeds | ╱ | ||||||||||||
| sharex | █ | █ | █ | ╱ | █ | ||||||||
| flameshot | █ |
╱ = yes, but does not provide example sharex configC/copyparty remarks:
fg/filebrowser can probably pull those off with command runners similar to copypartysg/sftpgo has nothing built-in but is very extensible| software / feature | lang | lic | size |
|---|---|---|---|
| copyparty | python | █ mit | 0.6 MB |
| hfs2 | delphi | ░ gpl3 | 2 MB |
| hfs3 | ts | ░ gpl3 | 36 MB |
| nextcloud | php | ‼ agpl | • |
| seafile | c | ‼ agpl | • |
| rclone | c | █ mit | 45 MB |
| dufs | rust | █ apl2 | 2.5 MB |
| chibisafe | ts | █ mit | • |
| kodbox | php | ░ gpl3 | 92 MB |
| filebrowser | go | █ apl2 | 20 MB |
| filegator | php | █ mit | • |
| sftpgo | go | ‼ agpl | 44 MB |
| arozos | go | ░ gpl3 | 531 MB |
| updog | python | █ mit | 17 MB |
| goshs | go | █ mit | 11 MB |
| gimme-that | python | █ mit | 4.8 MB |
| ass | ts | █ isc | • |
| linx | go | ░ gpl3 | 20 MB |
| h5ai | php | █ mit | • |
| autoindex | go | █ mpl2 | 11 MB |
| miniserve | rust | █ mit | 2 MB |
| pingvin-share | go | █ bsd2 | 487 MB |
size = binary (if available) or installed size of program and its dependencies
107 files per sec (copyparty does 670/sec, 6x faster)4 files per sec (copyparty does 670/sec, 160x faster)4.7 files per sec (copyparty does 670/sec, 140x faster)97 files per sec (copyparty does 670/sec, 7x faster)69 files per sec (copyparty does 670/sec, 9x faster)340 files per sec (copyparty does 670/sec)tc qdisc add dev eth0 root netem delay 100ms