mirror of
https://github.com/9001/copyparty.git
synced 2025-08-17 09:02:15 -06:00
add sftpgo to comparison + update docs
This commit is contained in:
parent
749616d09d
commit
7b7979fd61
33
README.md
33
README.md
|
@ -1,19 +1,12 @@
|
||||||
# 💾🎉 copyparty
|
# 💾🎉 copyparty
|
||||||
|
|
||||||
* portable file sharing hub (py2/py3) [(on PyPI)](https://pypi.org/project/copyparty/)
|
turn almost any device into a file server with resumable uploads/downloads using [*any*](#browser-support) web browser
|
||||||
* MIT-Licensed, 2019-05-26, ed @ irc.rizon.net
|
|
||||||
|
|
||||||
|
* server only needs Python (2 or 3), all dependencies optional
|
||||||
|
* 🔌 protocols: [http](#the-browser) // [ftp](#ftp-server) // [webdav](#webdav-server) // [smb/cifs](#smb-server)
|
||||||
|
* 📱 [android app](#android-app) // [iPhone shortcuts](#ios-shortcuts)
|
||||||
|
|
||||||
## summary
|
👉 **[Get started](#quickstart)!** or visit the **[read-only demo server](https://a.ocv.me/pub/demo/)** 👀 running from a basement in finland
|
||||||
|
|
||||||
turn your phone or raspi into a portable file server with resumable uploads/downloads using *any* web browser
|
|
||||||
|
|
||||||
* server only needs Python (`2.7` or `3.3+`), all dependencies optional
|
|
||||||
* browse/upload with [IE4](#browser-support) / netscape4.0 on win3.11 (heh)
|
|
||||||
* protocols: [http](#the-browser) // [ftp](#ftp-server) // [webdav](#webdav-server) // [smb/cifs](#smb-server)
|
|
||||||
* [android app](#android-app) and [iPhone shortcuts](#ios-shortcuts)
|
|
||||||
|
|
||||||
**[Get started](#quickstart)!** or visit the **[read-only demo server](https://a.ocv.me/pub/demo/)** 👀 running from a basement in finland
|
|
||||||
|
|
||||||
📷 **screenshots:** [browser](#the-browser) // [upload](#uploading) // [unpost](#unpost) // [thumbnails](#thumbnails) // [search](#searching) // [fsearch](#file-search) // [zip-DL](#zip-downloads) // [md-viewer](#markdown-viewer)
|
📷 **screenshots:** [browser](#the-browser) // [upload](#uploading) // [unpost](#unpost) // [thumbnails](#thumbnails) // [search](#searching) // [fsearch](#file-search) // [zip-DL](#zip-downloads) // [md-viewer](#markdown-viewer)
|
||||||
|
|
||||||
|
@ -84,6 +77,7 @@ turn your phone or raspi into a portable file server with resumable uploads/down
|
||||||
* [security](#security) - some notes on hardening
|
* [security](#security) - some notes on hardening
|
||||||
* [gotchas](#gotchas) - behavior that might be unexpected
|
* [gotchas](#gotchas) - behavior that might be unexpected
|
||||||
* [cors](#cors) - cross-site request config
|
* [cors](#cors) - cross-site request config
|
||||||
|
* [https](#https) - both HTTP and HTTPS are accepted
|
||||||
* [recovering from crashes](#recovering-from-crashes)
|
* [recovering from crashes](#recovering-from-crashes)
|
||||||
* [client crashes](#client-crashes)
|
* [client crashes](#client-crashes)
|
||||||
* [frefox wsod](#frefox-wsod) - firefox 87 can crash during uploads
|
* [frefox wsod](#frefox-wsod) - firefox 87 can crash during uploads
|
||||||
|
@ -274,7 +268,7 @@ server notes:
|
||||||
|
|
||||||
* iPhones: the volume control doesn't work because [apple doesn't want it to](https://developer.apple.com/library/archive/documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/Device-SpecificConsiderations/Device-SpecificConsiderations.html#//apple_ref/doc/uid/TP40009523-CH5-SW11)
|
* iPhones: the volume control doesn't work because [apple doesn't want it to](https://developer.apple.com/library/archive/documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/Device-SpecificConsiderations/Device-SpecificConsiderations.html#//apple_ref/doc/uid/TP40009523-CH5-SW11)
|
||||||
* *future workaround:* enable the equalizer, make it all-zero, and set a negative boost to reduce the volume
|
* *future workaround:* enable the equalizer, make it all-zero, and set a negative boost to reduce the volume
|
||||||
* "future" because `AudioContext` is broken in the current iOS version (15.1), maybe one day...
|
* "future" because `AudioContext` can't maintain a stable playback speed in the current iOS version (15.7), maybe one day...
|
||||||
|
|
||||||
* Windows: folders cannot be accessed if the name ends with `.`
|
* Windows: folders cannot be accessed if the name ends with `.`
|
||||||
* python or windows bug
|
* python or windows bug
|
||||||
|
@ -1098,13 +1092,15 @@ see the top of [./copyparty/web/browser.css](./copyparty/web/browser.css) where
|
||||||
|
|
||||||
## reverse-proxy
|
## reverse-proxy
|
||||||
|
|
||||||
running copyparty next to other websites hosted on an existing webserver such as nginx or apache
|
running copyparty next to other websites hosted on an existing webserver such as nginx, caddy, or apache
|
||||||
|
|
||||||
you can either:
|
you can either:
|
||||||
* give copyparty its own domain or subdomain (recommended)
|
* give copyparty its own domain or subdomain (recommended)
|
||||||
* or do location-based proxying, using `--rp-loc=/stuff` to tell copyparty where it is mounted -- has a slight performance cost and higher chance of bugs
|
* or do location-based proxying, using `--rp-loc=/stuff` to tell copyparty where it is mounted -- has a slight performance cost and higher chance of bugs
|
||||||
* if copyparty says `incorrect --rp-loc or webserver config; expected vpath starting with [...]` it's likely because the webserver is stripping away the proxy location from the request URLs -- see the `ProxyPass` in the apache example below
|
* if copyparty says `incorrect --rp-loc or webserver config; expected vpath starting with [...]` it's likely because the webserver is stripping away the proxy location from the request URLs -- see the `ProxyPass` in the apache example below
|
||||||
|
|
||||||
|
some reverse proxies (such as [Caddy](https://caddyserver.com/)) can automatically obtain a valid https/tls certificate for you, and some support HTTP/2 and QUIC which could be a nice speed boost
|
||||||
|
|
||||||
example webserver configs:
|
example webserver configs:
|
||||||
|
|
||||||
* [nginx config](contrib/nginx/copyparty.conf) -- entire domain/subdomain
|
* [nginx config](contrib/nginx/copyparty.conf) -- entire domain/subdomain
|
||||||
|
@ -1234,7 +1230,7 @@ if you want to run the copyparty server on your android device, see [install on
|
||||||
|
|
||||||
# iOS shortcuts
|
# iOS shortcuts
|
||||||
|
|
||||||
there is no iPhone app, but the following shortcuts are almost just as good:
|
there is no iPhone app, but the following shortcuts are almost as good:
|
||||||
|
|
||||||
* [upload to copyparty](https://www.icloud.com/shortcuts/41e98dd985cb4d3bb433222bc1e9e770) ([offline](https://github.com/9001/copyparty/raw/hovudstraum/contrib/ios/upload-to-copyparty.shortcut)) ([png](https://user-images.githubusercontent.com/241032/226118053-78623554-b0ed-482e-98e4-6d57ada58ea4.png)) based on the [original](https://www.icloud.com/shortcuts/ab415d5b4de3467b9ce6f151b439a5d7) by [Daedren](https://github.com/Daedren) (thx!)
|
* [upload to copyparty](https://www.icloud.com/shortcuts/41e98dd985cb4d3bb433222bc1e9e770) ([offline](https://github.com/9001/copyparty/raw/hovudstraum/contrib/ios/upload-to-copyparty.shortcut)) ([png](https://user-images.githubusercontent.com/241032/226118053-78623554-b0ed-482e-98e4-6d57ada58ea4.png)) based on the [original](https://www.icloud.com/shortcuts/ab415d5b4de3467b9ce6f151b439a5d7) by [Daedren](https://github.com/Daedren) (thx!)
|
||||||
* can strip exif, upload files, pics, vids, links, clipboard
|
* can strip exif, upload files, pics, vids, links, clipboard
|
||||||
|
@ -1337,6 +1333,13 @@ by default, except for `GET` and `HEAD` operations, all requests must either:
|
||||||
cors can be configured with `--acao` and `--acam`, or the protections entirely disabled with `--allow-csrf`
|
cors can be configured with `--acao` and `--acam`, or the protections entirely disabled with `--allow-csrf`
|
||||||
|
|
||||||
|
|
||||||
|
## https
|
||||||
|
|
||||||
|
both HTTP and HTTPS are accepted by default, but letting a [reverse proxy](#reverse-proxy) handle the https/tls/ssl would be better (probably more secure by default)
|
||||||
|
|
||||||
|
copyparty doesn't speak HTTP/2 or QUIC, so using a reverse proxy would solve that as well
|
||||||
|
|
||||||
|
|
||||||
# recovering from crashes
|
# recovering from crashes
|
||||||
|
|
||||||
## client crashes
|
## client crashes
|
||||||
|
|
375
docs/versus.md
375
docs/versus.md
|
@ -17,6 +17,7 @@ currently up to date with [awesome-selfhosted](https://github.com/awesome-selfho
|
||||||
|
|
||||||
### ...in reviews:
|
### ...in reviews:
|
||||||
* ✅ = advantages over copyparty
|
* ✅ = advantages over copyparty
|
||||||
|
* 💾 = what copyparty offers as an alternative
|
||||||
* 🔵 = similarities
|
* 🔵 = similarities
|
||||||
* ⚠️ = disadvantages (something copyparty does "better")
|
* ⚠️ = disadvantages (something copyparty does "better")
|
||||||
|
|
||||||
|
@ -46,6 +47,7 @@ currently up to date with [awesome-selfhosted](https://github.com/awesome-selfho
|
||||||
* [kodbox](#kodbox)
|
* [kodbox](#kodbox)
|
||||||
* [filebrowser](#filebrowser)
|
* [filebrowser](#filebrowser)
|
||||||
* [filegator](#filegator)
|
* [filegator](#filegator)
|
||||||
|
* [sftpgo](#sftpgo)
|
||||||
* [updog](#updog)
|
* [updog](#updog)
|
||||||
* [goshs](#goshs)
|
* [goshs](#goshs)
|
||||||
* [gimme-that](#gimme-that)
|
* [gimme-that](#gimme-that)
|
||||||
|
@ -53,6 +55,7 @@ currently up to date with [awesome-selfhosted](https://github.com/awesome-selfho
|
||||||
* [linx](#linx)
|
* [linx](#linx)
|
||||||
* [h5ai](#h5ai)
|
* [h5ai](#h5ai)
|
||||||
* [autoindex](#autoindex)
|
* [autoindex](#autoindex)
|
||||||
|
* [miniserve](#miniserve)
|
||||||
* [briefly considered](#briefly-considered)
|
* [briefly considered](#briefly-considered)
|
||||||
|
|
||||||
|
|
||||||
|
@ -89,6 +92,7 @@ the softwares,
|
||||||
* `i` = [kodbox](https://github.com/kalcaddle/kodbox)
|
* `i` = [kodbox](https://github.com/kalcaddle/kodbox)
|
||||||
* `j` = [filebrowser](https://github.com/filebrowser/filebrowser)
|
* `j` = [filebrowser](https://github.com/filebrowser/filebrowser)
|
||||||
* `k` = [filegator](https://github.com/filegator/filegator)
|
* `k` = [filegator](https://github.com/filegator/filegator)
|
||||||
|
* `l` = [sftpgo](https://github.com/drakkan/sftpgo)
|
||||||
|
|
||||||
some softwares not in the matrixes,
|
some softwares not in the matrixes,
|
||||||
* [updog](#updog)
|
* [updog](#updog)
|
||||||
|
@ -96,6 +100,9 @@ some softwares not in the matrixes,
|
||||||
* [gimme-that](#gimmethat)
|
* [gimme-that](#gimmethat)
|
||||||
* [ass](#ass)
|
* [ass](#ass)
|
||||||
* [linx](#linx)
|
* [linx](#linx)
|
||||||
|
* [h5ai](#h5ai)
|
||||||
|
* [autoindex](#autoindex)
|
||||||
|
* [miniserve](#miniserve)
|
||||||
|
|
||||||
symbol legend,
|
symbol legend,
|
||||||
* `█` = absolutely
|
* `█` = absolutely
|
||||||
|
@ -106,62 +113,64 @@ symbol legend,
|
||||||
|
|
||||||
## general
|
## general
|
||||||
|
|
||||||
| feature / software | a | b | c | d | e | f | g | h | i | j | k |
|
| feature / software | a | b | c | d | e | f | g | h | i | j | k | l |
|
||||||
| ----------------------- | - | - | - | - | - | - | - | - | - | - | - |
|
| ----------------------- | - | - | - | - | - | - | - | - | - | - | - | - |
|
||||||
| intuitive UX | | ╱ | █ | █ | █ | | █ | █ | █ | █ | █ |
|
| intuitive UX | | ╱ | █ | █ | █ | | █ | █ | █ | █ | █ | █ |
|
||||||
| config GUI | | █ | █ | █ | █ | | | █ | █ | █ | |
|
| config GUI | | █ | █ | █ | █ | | | █ | █ | █ | | █ |
|
||||||
| good documentation | | | | █ | █ | █ | █ | | | █ | █ |
|
| good documentation | | | | █ | █ | █ | █ | | | █ | █ | ╱ |
|
||||||
| runs on iOS | ╱ | | | | | ╱ | | | | | |
|
| runs on iOS | ╱ | | | | | ╱ | | | | | | |
|
||||||
| runs on Android | █ | | | | | █ | | | | | |
|
| runs on Android | █ | | | | | █ | | | | | | |
|
||||||
| runs on WinXP | █ | █ | | | | █ | | | | | |
|
| runs on WinXP | █ | █ | | | | █ | | | | | | |
|
||||||
| runs on Windows | █ | █ | █ | █ | █ | █ | █ | ╱ | █ | █ | █ |
|
| runs on Windows | █ | █ | █ | █ | █ | █ | █ | ╱ | █ | █ | █ | █ |
|
||||||
| runs on Linux | █ | ╱ | █ | █ | █ | █ | █ | █ | █ | █ | █ |
|
| runs on Linux | █ | ╱ | █ | █ | █ | █ | █ | █ | █ | █ | █ | █ |
|
||||||
| runs on Macos | █ | | █ | █ | █ | █ | █ | █ | █ | █ | █ |
|
| runs on Macos | █ | | █ | █ | █ | █ | █ | █ | █ | █ | █ | █ |
|
||||||
| runs on FreeBSD | █ | | | • | █ | █ | █ | • | █ | █ | |
|
| runs on FreeBSD | █ | | | • | █ | █ | █ | • | █ | █ | | █ |
|
||||||
| portable binary | █ | █ | █ | | | █ | █ | | | █ | |
|
| portable binary | █ | █ | █ | | | █ | █ | | | █ | | █ |
|
||||||
| zero setup, just go | █ | █ | █ | | | ╱ | █ | | | █ | |
|
| zero setup, just go | █ | █ | █ | | | ╱ | █ | | | █ | | ╱ |
|
||||||
| android app | ╱ | | | █ | █ | | | | | | |
|
| android app | ╱ | | | █ | █ | | | | | | | |
|
||||||
| iOS 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 whatever
|
* `zero setup` = you can get a mostly working setup by just launching the app, without having to install any software or configure whatever
|
||||||
* `a`/copyparty remarks:
|
* `a`/copyparty remarks:
|
||||||
* no gui for server settings; only for client-side stuff
|
* no gui for server settings; only for client-side stuff
|
||||||
* can theoretically run on iOS / iPads using [iSH](https://ish.app/), but only the iPad will offer sufficient multitasking i think
|
* can theoretically run on iOS / iPads using [iSH](https://ish.app/), but only the iPad will offer sufficient multitasking i think
|
||||||
* [android app](https://f-droid.org/en/packages/me.ocv.partyup/) is for uploading only
|
* [android app](https://f-droid.org/en/packages/me.ocv.partyup/) is for uploading only
|
||||||
|
* no iOS app but has [shortcuts](https://github.com/9001/copyparty#ios-shortcuts) for easy uploading
|
||||||
* `b`/hfs2 runs on linux through wine
|
* `b`/hfs2 runs on linux through wine
|
||||||
* `f`/rclone must be started with the command `rclone serve webdav .` or similar
|
* `f`/rclone must be started with the command `rclone serve webdav .` or similar
|
||||||
* `h`/chibisafe has undocumented windows support
|
* `h`/chibisafe has undocumented windows support
|
||||||
|
* `i`/sftpgo must be launched with a command
|
||||||
|
|
||||||
|
|
||||||
## file transfer
|
## file transfer
|
||||||
|
|
||||||
*the thing that copyparty is actually kinda good at*
|
*the thing that copyparty is actually kinda good at*
|
||||||
|
|
||||||
| feature / software | a | b | c | d | e | f | g | h | i | j | k |
|
| feature / software | a | b | c | d | e | f | g | h | i | j | k | l |
|
||||||
| ----------------------- | - | - | - | - | - | - | - | - | - | - | - |
|
| ----------------------- | - | - | - | - | - | - | - | - | - | - | - | - |
|
||||||
| download folder as zip | █ | █ | █ | █ | █ | | █ | | █ | █ | ╱ |
|
| download folder as zip | █ | █ | █ | █ | █ | | █ | | █ | █ | ╱ | █ |
|
||||||
| download folder as tar | █ | | | | | | | | | █ | |
|
| download folder as tar | █ | | | | | | | | | █ | | |
|
||||||
| upload | █ | █ | █ | █ | █ | █ | █ | █ | █ | █ | █ |
|
| upload | █ | █ | █ | █ | █ | █ | █ | █ | █ | █ | █ | █ |
|
||||||
| parallel uploads | █ | | | █ | █ | | • | | █ | | █ |
|
| parallel uploads | █ | | | █ | █ | | • | | █ | | █ | |
|
||||||
| resumable uploads | █ | | | | | | | | █ | | █ |
|
| resumable uploads | █ | | | | | | | | █ | | █ | ╱ |
|
||||||
| upload segmenting | █ | | | | | | | █ | █ | | █ |
|
| upload segmenting | █ | | | | | | | █ | █ | | █ | ╱ |
|
||||||
| upload acceleration | █ | | | | | | | | █ | | █ |
|
| upload acceleration | █ | | | | | | | | █ | | █ | |
|
||||||
| upload verification | █ | | | █ | █ | | | | █ | | |
|
| upload verification | █ | | | █ | █ | | | | █ | | | |
|
||||||
| upload deduplication | █ | | | | █ | | | | █ | | |
|
| upload deduplication | █ | | | | █ | | | | █ | | | |
|
||||||
| upload a 999 TiB file | █ | | | | █ | █ | • | | █ | | █ |
|
| upload a 999 TiB file | █ | | | | █ | █ | • | | █ | | █ | ╱ |
|
||||||
| keep last-modified time | █ | | | █ | █ | █ | | | | | |
|
| keep last-modified time | █ | | | █ | █ | █ | | | | | | █ |
|
||||||
| upload rules | ╱ | ╱ | ╱ | ╱ | ╱ | | | ╱ | ╱ | | ╱ |
|
| upload rules | ╱ | ╱ | ╱ | ╱ | ╱ | | | ╱ | ╱ | | ╱ | ╱ |
|
||||||
| ┗ max disk usage | █ | █ | | | █ | | | | █ | | |
|
| ┗ max disk usage | █ | █ | | | █ | | | | █ | | | █ |
|
||||||
| ┗ max filesize | █ | | | | | | | █ | | | █ |
|
| ┗ max filesize | █ | | | | | | | █ | | | █ | █ |
|
||||||
| ┗ max items in folder | █ | | | | | | | | | | |
|
| ┗ max items in folder | █ | | | | | | | | | | | ╱ |
|
||||||
| ┗ max file age | █ | | | | | | | | █ | | |
|
| ┗ max file age | █ | | | | | | | | █ | | | |
|
||||||
| ┗ max uploads over time | █ | | | | | | | | | | |
|
| ┗ max uploads over time | █ | | | | | | | | | | | ╱ |
|
||||||
| ┗ compress before write | █ | | | | | | | | | | |
|
| ┗ compress before write | █ | | | | | | | | | | | |
|
||||||
| ┗ randomize filename | █ | | | | | | | █ | █ | | |
|
| ┗ randomize filename | █ | | | | | | | █ | █ | | | |
|
||||||
| ┗ mimetype reject-list | ╱ | | | | | | | | • | ╱ | |
|
| ┗ mimetype reject-list | ╱ | | | | | | | | • | ╱ | | ╱ |
|
||||||
| ┗ extension reject-list | ╱ | | | | | | | █ | • | ╱ | |
|
| ┗ extension reject-list | ╱ | | | | | | | █ | • | ╱ | | ╱ |
|
||||||
| checksums provided | | | | █ | █ | | | | █ | ╱ | |
|
| checksums provided | | | | █ | █ | | | | █ | ╱ | | |
|
||||||
| cloud storage backend | ╱ | ╱ | ╱ | █ | █ | █ | ╱ | | | ╱ | █ |
|
| 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 segmenting` = files are sliced into chunks, making it possible to upload files larger than 100 MiB on cloudflare for example
|
||||||
|
|
||||||
|
@ -178,25 +187,29 @@ symbol legend,
|
||||||
* can provide checksums for single files on request
|
* can provide checksums for single files on request
|
||||||
* can probably do extension/mimetype rejection similar to copyparty
|
* 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
|
* `k`/filegator download-as-zip is not streaming; it creates the full zipfile before download can start
|
||||||
|
* `l`/sftpgo:
|
||||||
|
* resumable/segmented uploads only over SFTP, not over HTTP
|
||||||
|
* upload rules are totals only, not over time
|
||||||
|
* can probably do extension/mimetype rejection similar to copyparty
|
||||||
|
|
||||||
|
|
||||||
## protocols and client support
|
## protocols and client support
|
||||||
|
|
||||||
| feature / software | a | b | c | d | e | f | g | h | i | j | k |
|
| feature / software | a | b | c | d | e | f | g | h | i | j | k | l |
|
||||||
| ----------------------- | - | - | - | - | - | - | - | - | - | - | - |
|
| ----------------------- | - | - | - | - | - | - | - | - | - | - | - | - |
|
||||||
| serve https | █ | | █ | █ | █ | █ | █ | █ | █ | █ | █ |
|
| serve https | █ | | █ | █ | █ | █ | █ | █ | █ | █ | █ | █ |
|
||||||
| serve webdav | █ | | | █ | █ | █ | █ | | █ | | |
|
| serve webdav | █ | | | █ | █ | █ | █ | | █ | | | █ |
|
||||||
| serve ftp | █ | | | | | █ | | | | | |
|
| serve ftp | █ | | | | | █ | | | | | | █ |
|
||||||
| serve ftps | █ | | | | | █ | | | | | |
|
| serve ftps | █ | | | | | █ | | | | | | █ |
|
||||||
| serve sftp | | | | | | █ | | | | | |
|
| serve sftp | | | | | | █ | | | | | | █ |
|
||||||
| serve smb/cifs | ╱ | | | | | █ | | | | | |
|
| serve smb/cifs | ╱ | | | | | █ | | | | | | |
|
||||||
| serve dlna | | | | | | █ | | | | | |
|
| serve dlna | | | | | | █ | | | | | | |
|
||||||
| listen on unix-socket | | | | █ | █ | | █ | █ | █ | | █ |
|
| listen on unix-socket | | | | █ | █ | | █ | █ | █ | | █ | █ |
|
||||||
| zeroconf | █ | | | | | | | | | | |
|
| zeroconf | █ | | | | | | | | | | | |
|
||||||
| supports netscape 4 | ╱ | | | | | █ | | | | | • |
|
| supports netscape 4 | ╱ | | | | | █ | | | | | • | |
|
||||||
| ...internet explorer 6 | ╱ | █ | | █ | | █ | | | | | • |
|
| ...internet explorer 6 | ╱ | █ | | █ | | █ | | | | | • | |
|
||||||
| mojibake filenames | █ | | | • | • | █ | █ | • | • | • | |
|
| mojibake filenames | █ | | | • | • | █ | █ | • | • | • | | ╱ |
|
||||||
| undecodable filenames | █ | | | • | • | █ | | • | • | | |
|
| undecodable filenames | █ | | | • | • | █ | | • | • | | | ╱ |
|
||||||
|
|
||||||
* `webdav` = protocol convenient for mounting a remote server as a local filesystem; see zeroconf:
|
* `webdav` = protocol convenient for mounting a remote server as a local filesystem; see zeroconf:
|
||||||
* `zeroconf` = the server announces itself on the LAN, [automatically appearing](https://user-images.githubusercontent.com/241032/215344737-0eae8d98-9496-4256-9aa8-cd2f6971810d.png) on other zeroconf-capable devices
|
* `zeroconf` = the server announces itself on the LAN, [automatically appearing](https://user-images.githubusercontent.com/241032/215344737-0eae8d98-9496-4256-9aa8-cd2f6971810d.png) on other zeroconf-capable devices
|
||||||
|
@ -206,57 +219,62 @@ symbol legend,
|
||||||
* `a`/copyparty remarks:
|
* `a`/copyparty remarks:
|
||||||
* extremely minimal samba/cifs server
|
* 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](https://user-images.githubusercontent.com/241032/118192791-fb31fe00-b446-11eb-9647-898ea8efc1f7.png))
|
* netscape 4 / ie6 support is mostly listed as a joke altho some people have actually found it useful ([ie4 tho](https://user-images.githubusercontent.com/241032/118192791-fb31fe00-b446-11eb-9647-898ea8efc1f7.png))
|
||||||
|
* `l`/sftpgo translates mojibake filenames into valid utf-8 (information loss)
|
||||||
|
|
||||||
|
|
||||||
## server configuration
|
## server configuration
|
||||||
|
|
||||||
| feature / software | a | b | c | d | e | f | g | h | i | j | k |
|
| feature / software | a | b | c | d | e | f | g | h | i | j | k | l |
|
||||||
| ----------------------- | - | - | - | - | - | - | - | - | - | - | - |
|
| ----------------------- | - | - | - | - | - | - | - | - | - | - | - | - |
|
||||||
| config from cmd args | █ | | | | | █ | █ | | | █ | |
|
| config from cmd args | █ | | | | | █ | █ | | | █ | | ╱ |
|
||||||
| config files | █ | █ | █ | ╱ | ╱ | █ | | █ | | █ | • |
|
| config files | █ | █ | █ | ╱ | ╱ | █ | | █ | | █ | • | ╱ |
|
||||||
| runtime config reload | █ | █ | █ | | | | | █ | █ | █ | █ |
|
| runtime config reload | █ | █ | █ | | | | | █ | █ | █ | █ | |
|
||||||
| same-port http / https | █ | | | | | | | | | | |
|
| same-port http / https | █ | | | | | | | | | | | |
|
||||||
| listen multiple ports | █ | | | | | | | | | | |
|
| listen multiple ports | █ | | | | | | | | | | | █ |
|
||||||
| virtual file system | █ | █ | █ | | | | █ | | | | |
|
| virtual file system | █ | █ | █ | | | | █ | | | | | █ |
|
||||||
| reverse-proxy ok | █ | | █ | █ | █ | █ | █ | █ | • | • | • |
|
| reverse-proxy ok | █ | | █ | █ | █ | █ | █ | █ | • | • | • | █ |
|
||||||
| folder-rproxy ok | █ | | | | █ | █ | | • | • | • | • |
|
| folder-rproxy ok | █ | | | | █ | █ | | • | • | • | • | |
|
||||||
|
|
||||||
* `folder-rproxy` = reverse-proxying without dedicating an entire (sub)domain, using a subfolder instead
|
* `folder-rproxy` = reverse-proxying without dedicating an entire (sub)domain, using a subfolder instead
|
||||||
|
* `l`/sftpgo:
|
||||||
|
* config: users must be added through gui / api calls
|
||||||
|
|
||||||
|
|
||||||
## server capabilities
|
## server capabilities
|
||||||
|
|
||||||
| feature / software | a | b | c | d | e | f | g | h | i | j | k |
|
| feature / software | a | b | c | d | e | f | g | h | i | j | k | l |
|
||||||
| ----------------------- | - | - | - | - | - | - | - | - | - | - | - |
|
| ----------------------- | - | - | - | - | - | - | - | - | - | - | - | - |
|
||||||
| accounts | █ | █ | █ | █ | █ | █ | █ | █ | █ | █ | █ |
|
| accounts | █ | █ | █ | █ | █ | █ | █ | █ | █ | █ | █ | █ |
|
||||||
| single-sign-on | | | | █ | █ | | | | • | | |
|
| per-account chroot | | | | | | | | | | | | █ |
|
||||||
| token auth | | | | █ | █ | | | █ | | | |
|
| single-sign-on | | | | █ | █ | | | | • | | | |
|
||||||
| per-volume permissions | █ | █ | █ | █ | █ | █ | █ | | █ | █ | ╱ |
|
| token auth | | | | █ | █ | | | █ | | | | |
|
||||||
| per-folder permissions | ╱ | | | █ | █ | | █ | | █ | █ | ╱ |
|
| 2fa | | | | █ | █ | | | | | | | █ |
|
||||||
| per-file permissions | | | | █ | █ | | █ | | █ | | |
|
| per-volume permissions | █ | █ | █ | █ | █ | █ | █ | | █ | █ | ╱ | █ |
|
||||||
| per-file passwords | █ | | | █ | █ | | █ | | █ | | |
|
| per-folder permissions | ╱ | | | █ | █ | | █ | | █ | █ | ╱ | █ |
|
||||||
| unmap subfolders | █ | | | | | | █ | | | █ | ╱ |
|
| per-file permissions | | | | █ | █ | | █ | | █ | | | |
|
||||||
| index.html blocks list | | | | | | | █ | | | • | |
|
| per-file passwords | █ | | | █ | █ | | █ | | █ | | | |
|
||||||
| write-only folders | █ | | | | | | | | | | █ |
|
| unmap subfolders | █ | | | | | | █ | | | █ | ╱ | • |
|
||||||
| files stored as-is | █ | █ | █ | █ | | █ | █ | | | █ | █ |
|
| index.html blocks list | | | | | | | █ | | | • | | |
|
||||||
| file versioning | | | | █ | █ | | | | | | |
|
| write-only folders | █ | | | | | | | | | | █ | █ |
|
||||||
| file encryption | | | | █ | █ | █ | | | | | |
|
| files stored as-is | █ | █ | █ | █ | | █ | █ | | | █ | █ | █ |
|
||||||
| file indexing | █ | | █ | █ | █ | | | █ | █ | █ | |
|
| file versioning | | | | █ | █ | | | | | | | |
|
||||||
| ┗ per-volume db | █ | | • | • | • | | | • | • | | |
|
| file encryption | | | | █ | █ | █ | | | | | | █ |
|
||||||
| ┗ db stored in folder | █ | | | | | | | • | • | █ | |
|
| file indexing | █ | | █ | █ | █ | | | █ | █ | █ | | |
|
||||||
| ┗ db stored out-of-tree | █ | | █ | █ | █ | | | • | • | █ | |
|
| ┗ per-volume db | █ | | • | • | • | | | • | • | | | |
|
||||||
| ┗ existing file tree | █ | | █ | | | | | | | █ | |
|
| ┗ db stored in folder | █ | | | | | | | • | • | █ | | |
|
||||||
| file action event hooks | █ | | | | | | | | | █ | |
|
| ┗ db stored out-of-tree | █ | | █ | █ | █ | | | • | • | █ | | |
|
||||||
| one-way folder sync | █ | | | █ | █ | █ | | | | | |
|
| ┗ existing file tree | █ | | █ | | | | | | | █ | | |
|
||||||
| full sync | | | | █ | █ | | | | | | |
|
| file action event hooks | █ | | | | | | | | | █ | | █ |
|
||||||
| speed throttle | | █ | █ | | | █ | | | █ | | |
|
| one-way folder sync | █ | | | █ | █ | █ | | | | | | |
|
||||||
| anti-bruteforce | █ | █ | █ | █ | █ | | | | • | | |
|
| full sync | | | | █ | █ | | | | | | | |
|
||||||
| dyndns updater | | █ | | | | | | | | | |
|
| speed throttle | | █ | █ | | | █ | | | █ | | | █ |
|
||||||
| self-updater | | | █ | | | | | | | | |
|
| anti-bruteforce | █ | █ | █ | █ | █ | | | | • | | | █ |
|
||||||
| log rotation | █ | | █ | █ | █ | | | • | █ | | |
|
| dyndns updater | | █ | | | | | | | | | | |
|
||||||
| upload tracking / log | █ | █ | • | █ | █ | | | █ | █ | | |
|
| self-updater | | | █ | | | | | | | | | |
|
||||||
| curl-friendly ls | █ | | | | | | | | | | |
|
| log rotation | █ | | █ | █ | █ | | | • | █ | | | █ |
|
||||||
| curl-friendly upload | █ | | | | | █ | █ | • | | | |
|
| 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 path
|
* `unmap subfolders` = "shadowing"; mounting a local folder in the middle of an existing filesystem tree in order to disable access below that path
|
||||||
* `files stored as-is` = uploaded files are trivially readable from the server HDD, not sliced into chunks or in weird folder structures or anything like that
|
* `files stored as-is` = uploaded files are trivially readable from the server HDD, not sliced into chunks or in weird folder structures or anything like that
|
||||||
|
@ -277,49 +295,52 @@ symbol legend,
|
||||||
* `k`/filegator remarks:
|
* `k`/filegator remarks:
|
||||||
* `per-* permissions` -- can limit a user to one folder and its subfolders
|
* `per-* permissions` -- can limit a user to one folder and its subfolders
|
||||||
* `unmap subfolders` -- can globally filter a list of paths
|
* `unmap subfolders` -- can globally filter a list of paths
|
||||||
|
* `l`/sftpgo:
|
||||||
|
* `file action event hooks` also include on-download triggers
|
||||||
|
* `upload tracking / log` in main logfile
|
||||||
|
|
||||||
|
|
||||||
## client features
|
## client features
|
||||||
|
|
||||||
| feature / software | a | b | c | d | e | f | g | h | i | j | k |
|
| feature / software | a | b | c | d | e | f | g | h | i | j | k | l |
|
||||||
| ---------------------- | - | - | - | - | - | - | - | - | - | - | - |
|
| ---------------------- | - | - | - | - | - | - | - | - | - | - | - | - |
|
||||||
| single-page app | █ | | █ | █ | █ | | | █ | █ | █ | █ |
|
| single-page app | █ | | █ | █ | █ | | | █ | █ | █ | █ | |
|
||||||
| themes | █ | █ | | █ | | | | | █ | | |
|
| themes | █ | █ | | █ | | | | | █ | | | |
|
||||||
| directory tree nav | █ | ╱ | | | █ | | | | █ | | ╱ |
|
| directory tree nav | █ | ╱ | | | █ | | | | █ | | ╱ | |
|
||||||
| multi-column sorting | █ | | | | | | | | | | |
|
| multi-column sorting | █ | | | | | | | | | | | |
|
||||||
| thumbnails | █ | | | ╱ | ╱ | | | █ | █ | ╱ | |
|
| thumbnails | █ | | | ╱ | ╱ | | | █ | █ | ╱ | | |
|
||||||
| ┗ image thumbnails | █ | | | █ | █ | | | █ | █ | █ | |
|
| ┗ image thumbnails | █ | | | █ | █ | | | █ | █ | █ | | |
|
||||||
| ┗ video thumbnails | █ | | | █ | █ | | | | █ | | |
|
| ┗ video thumbnails | █ | | | █ | █ | | | | █ | | | |
|
||||||
| ┗ audio spectrograms | █ | | | | | | | | | | |
|
| ┗ audio spectrograms | █ | | | | | | | | | | | |
|
||||||
| audio player | █ | | | █ | █ | | | | █ | ╱ | |
|
| audio player | █ | | | █ | █ | | | | █ | ╱ | | |
|
||||||
| ┗ gapless playback | █ | | | | | | | | • | | |
|
| ┗ gapless playback | █ | | | | | | | | • | | | |
|
||||||
| ┗ audio equalizer | █ | | | | | | | | | | |
|
| ┗ audio equalizer | █ | | | | | | | | | | | |
|
||||||
| ┗ waveform seekbar | █ | | | | | | | | | | |
|
| ┗ waveform seekbar | █ | | | | | | | | | | | |
|
||||||
| ┗ OS integration | █ | | | | | | | | | | |
|
| ┗ OS integration | █ | | | | | | | | | | | |
|
||||||
| ┗ transcode to lossy | █ | | | | | | | | | | |
|
| ┗ transcode to lossy | █ | | | | | | | | | | | |
|
||||||
| video player | █ | | | █ | █ | | | | █ | █ | |
|
| video player | █ | | | █ | █ | | | | █ | █ | | |
|
||||||
| ┗ video transcoding | | | | | | | | | █ | | |
|
| ┗ video transcoding | | | | | | | | | █ | | | |
|
||||||
| audio BPM detector | █ | | | | | | | | | | |
|
| audio BPM detector | █ | | | | | | | | | | | |
|
||||||
| audio key detector | █ | | | | | | | | | | |
|
| audio key detector | █ | | | | | | | | | | | |
|
||||||
| search by path / name | █ | █ | █ | █ | █ | | █ | | █ | █ | ╱ |
|
| search by path / name | █ | █ | █ | █ | █ | | █ | | █ | █ | ╱ | |
|
||||||
| search by date / size | █ | | | | █ | | | █ | █ | | |
|
| search by date / size | █ | | | | █ | | | █ | █ | | | |
|
||||||
| search by bpm / key | █ | | | | | | | | | | |
|
| search by bpm / key | █ | | | | | | | | | | | |
|
||||||
| search by custom tags | | | | | | | | █ | █ | | |
|
| search by custom tags | | | | | | | | █ | █ | | | |
|
||||||
| search in file contents | | | | █ | █ | | | | █ | | |
|
| search in file contents | | | | █ | █ | | | | █ | | | |
|
||||||
| search by custom parser | █ | | | | | | | | | | |
|
| search by custom parser | █ | | | | | | | | | | | |
|
||||||
| find local file | █ | | | | | | | | | | |
|
| find local file | █ | | | | | | | | | | | |
|
||||||
| undo recent uploads | █ | | | | | | | | | | |
|
| undo recent uploads | █ | | | | | | | | | | | |
|
||||||
| create directories | █ | | | █ | █ | ╱ | █ | █ | █ | █ | █ |
|
| create directories | █ | | | █ | █ | ╱ | █ | █ | █ | █ | █ | █ |
|
||||||
| image viewer | █ | | | █ | █ | | | | █ | █ | █ |
|
| image viewer | █ | | | █ | █ | | | | █ | █ | █ | |
|
||||||
| markdown viewer | █ | | | | █ | | | | █ | ╱ | ╱ |
|
| markdown viewer | █ | | | | █ | | | | █ | ╱ | ╱ | |
|
||||||
| markdown editor | █ | | | | █ | | | | █ | ╱ | ╱ |
|
| markdown editor | █ | | | | █ | | | | █ | ╱ | ╱ | |
|
||||||
| readme.md in listing | █ | | | █ | | | | | | | |
|
| readme.md in listing | █ | | | █ | | | | | | | | |
|
||||||
| rename files | █ | █ | █ | █ | █ | ╱ | █ | | █ | █ | █ |
|
| rename files | █ | █ | █ | █ | █ | ╱ | █ | | █ | █ | █ | █ |
|
||||||
| batch rename | █ | | | | | | | | █ | | |
|
| batch rename | █ | | | | | | | | █ | | | |
|
||||||
| cut / paste files | █ | █ | | █ | █ | | | | █ | | |
|
| cut / paste files | █ | █ | | █ | █ | | | | █ | | | |
|
||||||
| move files | █ | █ | | █ | █ | | █ | | █ | █ | █ |
|
| move files | █ | █ | | █ | █ | | █ | | █ | █ | █ | |
|
||||||
| delete files | █ | █ | | █ | █ | ╱ | █ | █ | █ | █ | █ |
|
| delete files | █ | █ | | █ | █ | ╱ | █ | █ | █ | █ | █ | █ |
|
||||||
| copy files | | | | | █ | | | | █ | █ | █ |
|
| copy files | | | | | █ | | | | █ | █ | █ | |
|
||||||
|
|
||||||
* `single-page app` = multitasking; possible to continue navigating while uploading
|
* `single-page app` = multitasking; possible to continue navigating while uploading
|
||||||
* `audio player » os-integration` = use the [lockscreen](https://user-images.githubusercontent.com/241032/142711926-0700be6c-3e31-47b3-9928-53722221f722.png) or [media hotkeys](https://user-images.githubusercontent.com/241032/215347492-b4250797-6c90-4e09-9a4c-721edf2fb15c.png) to play/pause, prev/next song
|
* `audio player » os-integration` = use the [lockscreen](https://user-images.githubusercontent.com/241032/142711926-0700be6c-3e31-47b3-9928-53722221f722.png) or [media hotkeys](https://user-images.githubusercontent.com/241032/215347492-b4250797-6c90-4e09-9a4c-721edf2fb15c.png) to play/pause, prev/next song
|
||||||
|
@ -335,20 +356,21 @@ symbol legend,
|
||||||
|
|
||||||
## integration
|
## integration
|
||||||
|
|
||||||
| feature / software | a | b | c | d | e | f | g | h | i | j | k |
|
| feature / software | a | b | c | d | e | f | g | h | i | j | k | l |
|
||||||
| ----------------------- | - | - | - | - | - | - | - | - | - | - | - |
|
| ----------------------- | - | - | - | - | - | - | - | - | - | - | - | - |
|
||||||
| OS alert on upload | █ | | | | | | | | | ╱ | |
|
| OS alert on upload | █ | | | | | | | | | ╱ | | ╱ |
|
||||||
| discord | █ | | | | | | | | | ╱ | |
|
| discord | █ | | | | | | | | | ╱ | | ╱ |
|
||||||
| ┗ announce uploads | █ | | | | | | | | | | |
|
| ┗ announce uploads | █ | | | | | | | | | | | ╱ |
|
||||||
| ┗ custom embeds | | | | | | | | | | | |
|
| ┗ custom embeds | | | | | | | | | | | | ╱ |
|
||||||
| sharex | █ | | | █ | | █ | ╱ | █ | | | |
|
| sharex | █ | | | █ | | █ | ╱ | █ | | | | |
|
||||||
| flameshot | | | | | | █ | | | | | |
|
| flameshot | | | | | | █ | | | | | | |
|
||||||
|
|
||||||
* sharex `╱` = yes, but does not provide example sharex config
|
* sharex `╱` = yes, but does not provide example sharex config
|
||||||
* `a`/copyparty remarks:
|
* `a`/copyparty remarks:
|
||||||
* `OS alert on upload` available as [a plugin](https://github.com/9001/copyparty/blob/hovudstraum/bin/hooks/notify.py)
|
* `OS alert on upload` available as [a plugin](https://github.com/9001/copyparty/blob/hovudstraum/bin/hooks/notify.py)
|
||||||
* `discord » announce uploads` available as [a plugin](https://github.com/9001/copyparty/blob/hovudstraum/bin/hooks/discord-announce.py)
|
* `discord » announce uploads` available as [a plugin](https://github.com/9001/copyparty/blob/hovudstraum/bin/hooks/discord-announce.py)
|
||||||
* `j`/filebrowser can probably pull those off with command runners similar to copyparty
|
* `j`/filebrowser can probably pull those off with command runners similar to copyparty
|
||||||
|
* `l`/sftpgo has nothing built-in but is very extensible
|
||||||
|
|
||||||
|
|
||||||
## another matrix
|
## another matrix
|
||||||
|
@ -366,6 +388,7 @@ symbol legend,
|
||||||
| kodbox | php | ░ gpl3 | 92 MB |
|
| kodbox | php | ░ gpl3 | 92 MB |
|
||||||
| filebrowser | go | █ apl2 | 20 MB |
|
| filebrowser | go | █ apl2 | 20 MB |
|
||||||
| filegator | php | █ mit | • |
|
| filegator | php | █ mit | • |
|
||||||
|
| sftpgo | go | ‼ agpl | 44 MB |
|
||||||
| updog | python | █ mit | 17 MB |
|
| updog | python | █ mit | 17 MB |
|
||||||
| goshs | go | █ mit | 11 MB |
|
| goshs | go | █ mit | 11 MB |
|
||||||
| gimme-that | python | █ mit | 4.8 MB |
|
| gimme-that | python | █ mit | 4.8 MB |
|
||||||
|
@ -379,6 +402,7 @@ symbol legend,
|
||||||
# reviews
|
# reviews
|
||||||
|
|
||||||
* ✅ are advantages over copyparty
|
* ✅ are advantages over copyparty
|
||||||
|
* 💾 are what copyparty offers as an alternative
|
||||||
* 🔵 are similarities
|
* 🔵 are similarities
|
||||||
* ⚠️ are disadvantages (something copyparty does "better")
|
* ⚠️ are disadvantages (something copyparty does "better")
|
||||||
|
|
||||||
|
@ -412,10 +436,11 @@ symbol legend,
|
||||||
* ⚠️ http/webdav only; no ftp, zeroconf
|
* ⚠️ http/webdav only; no ftp, zeroconf
|
||||||
* ⚠️ less awesome music player
|
* ⚠️ less awesome music player
|
||||||
* ⚠️ doesn't run on android or ipads
|
* ⚠️ doesn't run on android or ipads
|
||||||
|
* ⚠️ AGPL licensed
|
||||||
* ✅ great ui/ux
|
* ✅ great ui/ux
|
||||||
* ✅ config gui
|
* ✅ config gui
|
||||||
* ✅ apps (android / iphone)
|
* ✅ apps (android / iphone)
|
||||||
* copyparty: android upload-only app
|
* 💾 android upload-only app + iPhone upload shortcut
|
||||||
* ✅ more granular permissions (per-file)
|
* ✅ more granular permissions (per-file)
|
||||||
* ✅ search: fulltext indexing of file contents
|
* ✅ search: fulltext indexing of file contents
|
||||||
* ✅ webauthn passwordless authentication
|
* ✅ webauthn passwordless authentication
|
||||||
|
@ -430,10 +455,11 @@ symbol legend,
|
||||||
* ⚠️ http/webdav only; no ftp, zeroconf
|
* ⚠️ http/webdav only; no ftp, zeroconf
|
||||||
* ⚠️ less awesome music player
|
* ⚠️ less awesome music player
|
||||||
* ⚠️ doesn't run on android or ipads
|
* ⚠️ doesn't run on android or ipads
|
||||||
|
* ⚠️ AGPL licensed
|
||||||
* ✅ great ui/ux
|
* ✅ great ui/ux
|
||||||
* ✅ config gui
|
* ✅ config gui
|
||||||
* ✅ apps (android / iphone)
|
* ✅ apps (android / iphone)
|
||||||
* copyparty: android upload-only app
|
* 💾 android upload-only app + iPhone upload shortcut
|
||||||
* ✅ more granular permissions (per-file)
|
* ✅ more granular permissions (per-file)
|
||||||
* ✅ search: fulltext indexing of file contents
|
* ✅ search: fulltext indexing of file contents
|
||||||
|
|
||||||
|
@ -467,7 +493,7 @@ symbol legend,
|
||||||
* ✅ searchable image tags; delete by tag
|
* ✅ searchable image tags; delete by tag
|
||||||
* ✅ browser extension to upload files to the server
|
* ✅ browser extension to upload files to the server
|
||||||
* ✅ reject uploads by file extension
|
* ✅ reject uploads by file extension
|
||||||
* copyparty: can reject uploads [by extension](https://github.com/9001/copyparty/blob/hovudstraum/bin/hooks/reject-extension.py) or [mimetype](https://github.com/9001/copyparty/blob/hovudstraum/bin/hooks/reject-mimetype.py) using plugins
|
* 💾 can reject uploads [by extension](https://github.com/9001/copyparty/blob/hovudstraum/bin/hooks/reject-extension.py) or [mimetype](https://github.com/9001/copyparty/blob/hovudstraum/bin/hooks/reject-mimetype.py) using plugins
|
||||||
* ✅ token auth (api keys)
|
* ✅ token auth (api keys)
|
||||||
|
|
||||||
## [kodbox](https://github.com/kalcaddle/kodbox)
|
## [kodbox](https://github.com/kalcaddle/kodbox)
|
||||||
|
@ -512,6 +538,30 @@ symbol legend,
|
||||||
* ⚠️ doesn't support crazy filenames
|
* ⚠️ doesn't support crazy filenames
|
||||||
* ⚠️ limited file search
|
* ⚠️ limited file search
|
||||||
|
|
||||||
|
## [sftpgo](https://github.com/drakkan/sftpgo)
|
||||||
|
* go; cross-platform (windows, linux, mac)
|
||||||
|
* ⚠️ http uploads not resumable / accelerated / integrity-checked
|
||||||
|
* ⚠️ on cloudflare: max upload size 100 MiB
|
||||||
|
* 🔵 sftp uploads are resumable
|
||||||
|
* ⚠️ web UI is very minimal + a bit slow
|
||||||
|
* ⚠️ no thumbnails / image viewer / audio player
|
||||||
|
* ⚠️ basic file manager (no cut/paste/move)
|
||||||
|
* ⚠️ no filesystem indexing / search
|
||||||
|
* ⚠️ doesn't run on phones, tablets
|
||||||
|
* ⚠️ no zeroconf (mdns/ssdp)
|
||||||
|
* ⚠️ AGPL licensed
|
||||||
|
* 🔵 ftp, ftps, webdav
|
||||||
|
* ✅ sftp server
|
||||||
|
* ✅ settings gui
|
||||||
|
* ✅ acme (automatic tls certs)
|
||||||
|
* 💾 relies on caddy/certbot/acme.sh
|
||||||
|
* ✅ at-rest encryption
|
||||||
|
* 💾 relies on LUKS/BitLocker
|
||||||
|
* ✅ can use S3/GCS as storage backend
|
||||||
|
* 💾 relies on rclone-mount
|
||||||
|
* ✅ on-download event hook (otherwise same as copyparty)
|
||||||
|
* ✅ more extensive permissions control
|
||||||
|
|
||||||
## [updog](https://github.com/sc0tfree/updog)
|
## [updog](https://github.com/sc0tfree/updog)
|
||||||
* python; cross-platform
|
* python; cross-platform
|
||||||
* basic directory listing with upload feature
|
* basic directory listing with upload feature
|
||||||
|
@ -526,7 +576,7 @@ symbol legend,
|
||||||
* ⚠️ uploads not resumable / accelerated / integrity-checked
|
* ⚠️ uploads not resumable / accelerated / integrity-checked
|
||||||
* ⚠️ on cloudflare: max upload size 100 MiB
|
* ⚠️ on cloudflare: max upload size 100 MiB
|
||||||
* ✅ cool clipboard widget
|
* ✅ cool clipboard widget
|
||||||
* copyparty: the markdown editor is an ok substitute
|
* 💾 the markdown editor is an ok substitute
|
||||||
* 🔵 read-only and upload-only modes (same as copyparty's write-only)
|
* 🔵 read-only and upload-only modes (same as copyparty's write-only)
|
||||||
* 🔵 https, webdav, but no ftp
|
* 🔵 https, webdav, but no ftp
|
||||||
|
|
||||||
|
@ -538,7 +588,7 @@ symbol legend,
|
||||||
* ⚠️ weird folder structure for uploads
|
* ⚠️ weird folder structure for uploads
|
||||||
* ✅ clamav antivirus check on upload! neat
|
* ✅ clamav antivirus check on upload! neat
|
||||||
* 🔵 optional max-filesize, os-notification on uploads
|
* 🔵 optional max-filesize, os-notification on uploads
|
||||||
* copyparty: os-notification available as [a plugin](https://github.com/9001/copyparty/blob/hovudstraum/bin/hooks/notify.py)
|
* 💾 os-notification available as [a plugin](https://github.com/9001/copyparty/blob/hovudstraum/bin/hooks/notify.py)
|
||||||
|
|
||||||
## [ass](https://github.com/tycrek/ass)
|
## [ass](https://github.com/tycrek/ass)
|
||||||
* nodejs; recommends docker
|
* nodejs; recommends docker
|
||||||
|
@ -549,12 +599,13 @@ symbol legend,
|
||||||
* ⚠️ on cloudflare: max upload size 100 MiB
|
* ⚠️ on cloudflare: max upload size 100 MiB
|
||||||
* ✅ token auth
|
* ✅ token auth
|
||||||
* ✅ gps metadata stripping
|
* ✅ gps metadata stripping
|
||||||
* copyparty: possible with [a plugin](https://github.com/9001/copyparty/blob/hovudstraum/bin/mtag/image-noexif.py)
|
* 💾 possible with [a plugin](https://github.com/9001/copyparty/blob/hovudstraum/bin/mtag/image-noexif.py)
|
||||||
* ✅ discord integration (custom embeds, upload webhook)
|
* ✅ discord integration (custom embeds, upload webhook)
|
||||||
* copyparty: [upload webhook plugin](https://github.com/9001/copyparty/blob/hovudstraum/bin/hooks/discord-announce.py)
|
* 💾 [upload webhook plugin](https://github.com/9001/copyparty/blob/hovudstraum/bin/hooks/discord-announce.py)
|
||||||
* ✅ reject uploads by mimetype
|
* ✅ reject uploads by mimetype
|
||||||
* copyparty: can reject uploads [by extension](https://github.com/9001/copyparty/blob/hovudstraum/bin/hooks/reject-extension.py) or [mimetype](https://github.com/9001/copyparty/blob/hovudstraum/bin/hooks/reject-mimetype.py) using plugins
|
* 💾 can reject uploads [by extension](https://github.com/9001/copyparty/blob/hovudstraum/bin/hooks/reject-extension.py) or [mimetype](https://github.com/9001/copyparty/blob/hovudstraum/bin/hooks/reject-mimetype.py) using plugins
|
||||||
* ✅ can use S3 as storage backend; copyparty relies on rclone-mount for that
|
* ✅ can use S3 as storage backend
|
||||||
|
* 💾 relies on rclone-mount
|
||||||
* ✅ custom 404 pages
|
* ✅ custom 404 pages
|
||||||
|
|
||||||
## [linx](https://github.com/ZizzyDizzyMC/linx-server/)
|
## [linx](https://github.com/ZizzyDizzyMC/linx-server/)
|
||||||
|
@ -564,12 +615,13 @@ symbol legend,
|
||||||
* 🔵 some of its unique features have been added to copyparty as former linx users have migrated
|
* 🔵 some of its unique features have been added to copyparty as former linx users have migrated
|
||||||
* file expiration timers, filename randomization
|
* file expiration timers, filename randomization
|
||||||
* ✅ password-protected files
|
* ✅ password-protected files
|
||||||
* copyparty: password-protected folders + filekeys to skip the folder password seem to cover most usecases
|
* 💾 password-protected folders + filekeys to skip the folder password seem to cover most usecases
|
||||||
* ✅ file deletion keys
|
* ✅ file deletion keys
|
||||||
* ✅ download files as torrents
|
* ✅ download files as torrents
|
||||||
* ✅ remote uploads (send a link to the server and it downloads it)
|
* ✅ remote uploads (send a link to the server and it downloads it)
|
||||||
* copyparty: available as [a plugin](https://github.com/9001/copyparty/blob/hovudstraum/bin/hooks/wget.py)
|
* 💾 available as [a plugin](https://github.com/9001/copyparty/blob/hovudstraum/bin/hooks/wget.py)
|
||||||
* ✅ can use S3 as storage backend; copyparty relies on rclone-mount for that
|
* ✅ can use S3 as storage backend
|
||||||
|
* 💾 relies on rclone-mount
|
||||||
|
|
||||||
## [h5ai](https://larsjung.de/h5ai/)
|
## [h5ai](https://larsjung.de/h5ai/)
|
||||||
* ⚠️ read only; no upload/move/delete
|
* ⚠️ read only; no upload/move/delete
|
||||||
|
@ -581,7 +633,16 @@ symbol legend,
|
||||||
## [autoindex](https://github.com/nielsAD/autoindex)
|
## [autoindex](https://github.com/nielsAD/autoindex)
|
||||||
* ⚠️ read only; no upload/move/delete
|
* ⚠️ read only; no upload/move/delete
|
||||||
* ✅ directory cache for faster browsing of cloud storage
|
* ✅ directory cache for faster browsing of cloud storage
|
||||||
* copyparty: local index/cache for recursive search (names/attrs/tags), but not for browsing
|
* 💾 local index/cache for recursive search (names/attrs/tags), but not for browsing
|
||||||
|
|
||||||
|
## [miniserve](https://github.com/svenstaro/miniserve)
|
||||||
|
* rust; cross-platform (windows, linux, mac)
|
||||||
|
* ⚠️ uploads not resumable / accelerated / integrity-checked
|
||||||
|
* ⚠️ on cloudflare: max upload size 100 MiB
|
||||||
|
* ⚠️ no thumbnails / image viewer / audio player / file manager
|
||||||
|
* ⚠️ no filesystem indexing / search
|
||||||
|
* 🔵 upload, tar/zip download, qr-code
|
||||||
|
* ✅ faster at loading huge folders
|
||||||
|
|
||||||
|
|
||||||
# briefly considered
|
# briefly considered
|
||||||
|
|
|
@ -14,6 +14,7 @@ docker run --rm -it -u 1000 -p 3923:3923 -v /mnt/nas:/w -v $PWD/cfgdir:/cfg copy
|
||||||
* `/cfg` is an optional folder with zero or more config files (*.conf) to load
|
* `/cfg` is an optional folder with zero or more config files (*.conf) to load
|
||||||
* `copyparty/ac` is the recommended [image edition](#editions)
|
* `copyparty/ac` is the recommended [image edition](#editions)
|
||||||
* you can download the image from github instead by replacing `copyparty/ac` with `ghcr.io/9001/copyparty-ac`
|
* you can download the image from github instead by replacing `copyparty/ac` with `ghcr.io/9001/copyparty-ac`
|
||||||
|
* if you are using rootless podman, remove `-u 1000`
|
||||||
|
|
||||||
i'm unfamiliar with docker-compose and alternatives so let me know if this section could be better 🙏
|
i'm unfamiliar with docker-compose and alternatives so let me know if this section could be better 🙏
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue