32 KiB
alternatives to copyparty
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
toc
recommendations
- kodbox (review) appears to be a fantastic alternative if you're not worried about running chinese software, with several advantages over copyparty
- but anything you want to share must be moved into the kodbox filesystem
- seafile (review) and nextcloud (review) could be decent alternatives if you need something heavier than copyparty
- but their license is problematic
- and copyparty is way better at uploads in particular (resumable, accelerated)
- and anything you want to share must be moved into the respective filesystems
- filebrowser (review) and dufs (review) are simpler copyparties but with a settings gui
- has some of the same strengths of copyparty, being portable and able to work with an existing folder structure
- ...but copyparty is better at uploads + some other things
feature comparisons
<&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,
a= copypartyb= hfs2c= hfs3d= nextcloude= seafilef= rclone, specificallyrclone serve webdav .g= dufsh= chibisafei= kodboxj= filebrowserk= filegator
some softwares not in the matrixes,
symbol legend,
█= absolutely╱= partially•= maybe?= nope
general
| feature / software | a | b | c | d | e | f | g | h | i | j | k |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 | █ | • | █ | █ | █ | • | █ | █ | |||
| 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 whatevera/copyparty remarks:- no gui for server settings; only for client-side stuff
- can theoretically run on iOS / iPads using iSH, but only the iPad will offer sufficient multitasking i think
- android app is for uploading only
b/hfs2 runs on linux through winef/rclone must be started with the commandrclone serve webdav .or similarh/chibisafe has undocumented windows support
file transfer
the thing that copyparty is actually kinda good at
| feature / software | a | b | c | d | e | f | g | h | i | j | k |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 | █ | █ | █ | • | █ | █ | |||||
| 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 | ╱ | █ | • | ╱ | |||||||
| 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 -
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 fromrclone mountas a bridge -
a/copyparty can reject uploaded files (based on complex conditions), for example by extension or mimetype -
j/filebrowser remarks:- can provide checksums for single files on request
- can probably do extension/mimetype rejection similar to copyparty
-
k/filegator download-as-zip is not streaming; it creates the full zipfile before download can start
protocols and client support
| feature / software | a | b | c | d | e | f | g | h | i | j | k |
|---|---|---|---|---|---|---|---|---|---|---|---|
| serve https | █ | █ | █ | █ | █ | █ | █ | █ | █ | █ | |
| serve webdav | █ | █ | █ | █ | █ | █ | |||||
| serve ftp | █ | █ | |||||||||
| serve ftps | █ | █ | |||||||||
| serve sftp | █ | ||||||||||
| 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- you can successfully play
$'\355\221'with mpv through mounting a remote copyparty server with rclone, pog
- you can successfully play
a/copyparty remarks:- extremely minimal samba/cifs server
- netscape 4 / ie6 support is mostly listed as a joke altho some people have actually found it useful (ie4 tho)
server configuration
| feature / software | a | b | c | d | e | f | g | h | i | j | k |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 instead
server capabilities
| feature / software | a | b | c | d | e | f | g | h | i | j | k |
|---|---|---|---|---|---|---|---|---|---|---|---|
| accounts | █ | █ | █ | █ | █ | █ | █ | █ | █ | █ | █ |
| single-sign-on | █ | █ | • | ||||||||
| token auth | █ | █ | █ | ||||||||
| 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 | █ | █ | • | █ | █ | █ | █ | ||||
| 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 synccurl-friendly ls= returns a sortable plaintext folder listing when curledcurl-friendly upload= uploading with curl is justcurl -T some.bin http://.../a/copyparty remarks:- one-way folder sync from local to server can be done efficiently with up2k.py, or with webdav and conventional rsync
- can hot-reload config files (with just a few exceptions)
- can set per-folder permissions if that folder is made into a separate volume, so there is configuration overhead
- event hooks (discord, desktop) inspired by filebrowser, as well as the more complex media parser alternative
- upload history can be visualized using partyjournal
k/filegator remarks:per-* permissions-- can limit a user to one folder and its subfoldersunmap subfolders-- can globally filter a list of paths
client features
| feature / software | a | b | c | d | e | f | g | h | i | j | k |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 uploadsa/copyparty has teeny-tiny skips playing gapless albums depending on audio codec (opus best)b/hfs2 has a very basic directory tree view, not showing sibling foldersf/rclone can do some file management (mkdir, rename, delete) when hosting througn webdavj/filebrowser has a plaintext viewer/editork/filegator directory tree is a modal window
integration
| feature / software | a | b | c | d | e | f | g | h | i | j | k |
|---|---|---|---|---|---|---|---|---|---|---|---|
| OS alert on upload | █ | ╱ | |||||||||
| discord | █ | ╱ | |||||||||
| ┗ announce uploads | █ | ||||||||||
| ┗ custom embeds | |||||||||||
| sharex | █ | █ | █ | ╱ | █ | ||||||
| flameshot | █ |
- sharex
╱= yes, but does not provide example sharex config a/copyparty remarks:j/filebrowser can probably pull those off with command runners similar to copyparty
another matrix
| 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 | • |
| 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 |
size= binary (if available) or installed size of program and its dependencies- copyparty size is for the standalone python file; the windows exe is 6 MiB
reviews
- ✅ are advantages over copyparty
- ⚠️ are disadvantages
copyparty
- resumable uploads which are verified server-side
- upload segmenting allows for potentially much faster uploads on some connections, and terabyte-sized files even on cloudflare
- both of the above are surprisingly uncommon features
- very cross-platform (python, no dependencies)
hfs2
- the OG, the legend
- ⚠️ uploads not resumable / accelerated / integrity-checked
- ⚠️ on cloudflare: max upload size 100 MiB
- ⚠️ windows-only
- ✅ config GUI
- vfs with gui config, per-volume permissions
- starting to show its age, hence the rewrite:
hfs3
- nodejs; cross-platform
- vfs with gui config, per-volume permissions
- still early development, let's revisit later
nextcloud
- php, mariadb
- ⚠️ [isolated on-disk file hierarchy] in per-user folders
- not that bad, can probably be remedied with bindmounts or maybe symlinks
- ⚠️ uploads not resumable / accelerated / integrity-checked
- ⚠️ on cloudflare: max upload size 100 MiB
- ⚠️ no write-only / upload-only folders
- ⚠️ http/webdav only; no ftp, zeroconf
- ⚠️ less awesome music player
- ⚠️ doesn't run on android or ipads
- ✅ great ui/ux
- ✅ config gui
- ✅ apps (android / iphone)
- copyparty: android upload-only app
- ✅ more granular permissions (per-file)
- ✅ search: fulltext indexing of file contents
- ✅ webauthn passwordless authentication
seafile
- c, mariadb
- ⚠️ isolated on-disk file hierarchy, incompatible with other software
- much worse than nextcloud in that regard
- ⚠️ uploads not resumable / accelerated / integrity-checked
- ⚠️ on cloudflare: max upload size 100 MiB
- ⚠️ no write-only / upload-only folders
- ⚠️ http/webdav only; no ftp, zeroconf
- ⚠️ less awesome music player
- ⚠️ doesn't run on android or ipads
- ✅ great ui/ux
- ✅ config gui
- ✅ apps (android / iphone)
- copyparty: android upload-only app
- ✅ more granular permissions (per-file)
- ✅ search: fulltext indexing of file contents
rclone
- nice standalone c program
- ⚠️ uploads not resumable / accelerated / integrity-checked
- ⚠️ on cloudflare: max upload size 100 MiB
- ⚠️ no web-ui, just a server / downloader / uploader utility
- ✅ works with almost any protocol, cloud provider
- ⚠️ copyparty's webdav server is slightly faster
dufs
- rust; cross-platform (windows, linux, macos)
- ⚠️ uploads not resumable / accelerated / integrity-checked
- ⚠️ on cloudflare: max upload size 100 MiB
- ⚠️ doesn't support crazy filenames
- ✅ per-url access control (copyparty is per-volume)
- basic but really snappy ui
- upload, rename, delete, ... see feature matrix
chibisafe
- nodejs; recommends docker
- it has upload segmenting!
- ⚠️ but uploads are still not resumable / accelerated / integrity-checked
- ⚠️ not portable
- ⚠️ isolated on-disk file hierarchy, incompatible with other software
- ⚠️ http/webdav only; no ftp or zeroconf
- ✅ pretty ui
- ✅ control panel for server settings and user management
- ✅ user registration
- ✅ searchable image tags; delete by tag
- ✅ browser extension to upload files to the server
- ✅ reject uploads by file extension
- copyparty: can reject uploads by extension or mimetype using plugins
- ✅ token auth (api keys)
kodbox
- this thing is insane
- php; docker
- upload segmenting, acceleration, and integrity checking!
- ⚠️ but uploads are not resumable(?)
- ⚠️ not portable
- ⚠️ isolated on-disk file hierarchy, incompatible with other software
- ⚠️ http/webdav only; no ftp or zeroconf
- ⚠️ some parts of the GUI are in chinese
- ✅ fantastic ui/ux
- ✅ control panel for server settings and user management
- ✅ file tags; file discussions!?
- ✅ video transcoding
- ✅ unzip uploaded archives
- ✅ IDE with syntax hilighting
- ✅ wysiwyg editor for openoffice files
filebrowser
- go; cross-platform (windows, linux, mac)
- ⚠️ uploads not resumable / accelerated / integrity-checked
- ⚠️ on cloudflare: max upload size 100 MiB
- ⚠️ http only; no webdav / ftp / zeroconf
- ⚠️ doesn't support crazy filenames
- ⚠️ no directory tree nav
- ⚠️ limited file search
- ✅ settings gui
- ✅ good ui/ux
- ⚠️ but no directory tree for navigation
- ✅ user signup
- ✅ command runner / remote shell
- supposed to have write-only folders but couldn't get it to work
filegator
- go; cross-platform (windows, linux, mac)
- ⚠️ http only; no webdav / ftp / zeroconf
- ⚠️ does not support symlinks
- ⚠️ expensive download-as-zip feature
- ⚠️ doesn't support crazy filenames
- ⚠️ limited file search
- it has upload segmenting and acceleration
- ⚠️ but uploads are still not integrity-checked
updog
- python; cross-platform
- basic directory listing with upload feature
- ⚠️ less portable
- ⚠️ uploads not resumable / accelerated / integrity-checked
- ⚠️ on cloudflare: max upload size 100 MiB
- ⚠️ no vfs; single folder, single account
goshs
- go; cross-platform (windows, linux, mac)
- ⚠️ no vfs; single folder, single account
- ⚠️ uploads not resumable / accelerated / integrity-checked
- ⚠️ on cloudflare: max upload size 100 MiB
- ✅ cool clipboard widget
- copyparty: the markdown editor is an ok substitute
- read-only and upload-only modes (same as copyparty's write-only)
- https, webdav
gimme-that
- python, but with c dependencies
- ⚠️ no vfs; single folder, multiple accounts
- ⚠️ uploads not resumable / accelerated / integrity-checked
- ⚠️ on cloudflare: max upload size 100 MiB
- ⚠️ weird folder structure for uploads
- ✅ clamav antivirus check on upload! neat
- optional max-filesize, os-notification on uploads
- copyparty: os-notification available as a plugin
ass
- nodejs; recommends docker
- ⚠️ not portable
- ⚠️ upload only; no browser
- ⚠️ upload through sharex only; no web-ui
- ⚠️ uploads not resumable / accelerated / integrity-checked
- ⚠️ on cloudflare: max upload size 100 MiB
- ✅ token auth
- ✅ gps metadata stripping
- copyparty: possible with a plugin
- ✅ discord integration (custom embeds, upload webhook)
- copyparty: upload webhook plugin
- ✅ reject uploads by mimetype
- copyparty: can reject uploads by extension or mimetype using plugins
- ✅ can use S3 as storage backend; copyparty relies on rclone-mount for that
- ✅ custom 404 pages
linx
- originally andreimarcu/linx-server but development has ended
- ⚠️ uploads not resumable / accelerated / integrity-checked
- ⚠️ on cloudflare: max upload size 100 MiB
- some of its unique features have been added to copyparty as former linx users have migrated
- file expiration timers, filename randomization
- ✅ password-protected files
- copyparty: password-protected folders + filekeys to skip the folder password seem to cover most usecases
- ✅ file deletion keys
- ✅ download files as torrents
- ✅ remote uploads (send a link to the server and it downloads it)
- copyparty: available as a plugin
- ✅ can use S3 as storage backend; copyparty relies on rclone-mount for that