2020-09-24 01:15:25 +00:00
|
|
|
<p align="center">
|
|
|
|
<img src="data/logo.svg" alt="miniserve - a CLI tool to serve files and dirs over HTTP"><br>
|
|
|
|
</p>
|
|
|
|
|
2018-05-17 13:37:26 +00:00
|
|
|
# miniserve - a CLI tool to serve files and dirs over HTTP
|
2018-04-26 17:44:30 +00:00
|
|
|
|
2020-07-20 23:26:37 +00:00
|
|
|
[![CI](https://github.com/svenstaro/miniserve/workflows/CI/badge.svg)](https://github.com/svenstaro/miniserve/actions)
|
2022-09-15 06:12:57 +00:00
|
|
|
[![Docker Hub](https://img.shields.io/docker/pulls/svenstaro/miniserve)](https://cloud.docker.com/repository/docker/svenstaro/miniserve/)
|
2018-04-26 17:32:25 +00:00
|
|
|
[![Crates.io](https://img.shields.io/crates/v/miniserve.svg)](https://crates.io/crates/miniserve)
|
|
|
|
[![license](http://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/svenstaro/miniserve/blob/master/LICENSE)
|
2019-02-15 19:34:16 +00:00
|
|
|
[![Stars](https://img.shields.io/github/stars/svenstaro/miniserve.svg)](https://github.com/svenstaro/miniserve/stargazers)
|
|
|
|
[![Downloads](https://img.shields.io/github/downloads/svenstaro/miniserve/total.svg)](https://github.com/svenstaro/miniserve/releases)
|
2020-07-04 02:57:28 +00:00
|
|
|
[![Lines of Code](https://tokei.rs/b1/github/svenstaro/miniserve)](https://github.com/svenstaro/miniserve)
|
2018-04-26 17:32:25 +00:00
|
|
|
|
2018-12-25 14:46:59 +00:00
|
|
|
**For when you really just want to serve some files over HTTP right now!**
|
|
|
|
|
2018-05-16 13:07:49 +00:00
|
|
|
**miniserve** is a small, self-contained cross-platform CLI tool that allows you to just grab the binary and serve some file(s) via HTTP.
|
2018-05-16 12:44:25 +00:00
|
|
|
Sometimes this is just a more practical and quick way than doing things properly.
|
|
|
|
|
2019-04-10 12:58:29 +00:00
|
|
|
## Screenshot
|
|
|
|
|
2019-04-10 12:57:18 +00:00
|
|
|
![Screenshot](screenshot.png)
|
|
|
|
|
2018-05-16 11:55:28 +00:00
|
|
|
## How to use
|
|
|
|
|
|
|
|
### Serve a directory:
|
|
|
|
|
|
|
|
miniserve linux-distro-collection/
|
|
|
|
|
|
|
|
### Serve a single file:
|
|
|
|
|
|
|
|
miniserve linux-distro.iso
|
2021-10-31 19:24:43 +00:00
|
|
|
|
2021-10-31 19:23:13 +00:00
|
|
|
### Set a custom index file to serve instead of a file listing:
|
|
|
|
|
|
|
|
miniserve --index test.html
|
2021-10-31 19:24:43 +00:00
|
|
|
|
2021-10-31 19:23:13 +00:00
|
|
|
### Serve an SPA (Single Page Application) so that non-existent paths are forwarded to the SPA's router instead
|
|
|
|
|
|
|
|
miniserve --spa --index index.html
|
2018-05-16 11:55:28 +00:00
|
|
|
|
|
|
|
### Require username/password:
|
|
|
|
|
|
|
|
miniserve --auth joe:123 unreleased-linux-distros/
|
|
|
|
|
2020-11-03 19:21:24 +00:00
|
|
|
### Require username/password as hash:
|
|
|
|
|
|
|
|
pw=$(echo -n "123" | sha256sum | cut -f 1 -d ' ')
|
|
|
|
miniserve --auth joe:sha256:$pw unreleased-linux-distros/
|
|
|
|
|
2019-02-03 11:03:20 +00:00
|
|
|
### Generate random 6-hexdigit URL:
|
|
|
|
|
2019-02-15 20:04:20 +00:00
|
|
|
miniserve -i 192.168.0.1 --random-route /tmp
|
2019-02-03 11:03:20 +00:00
|
|
|
# Serving path /private/tmp at http://192.168.0.1/c789b6
|
|
|
|
|
2018-08-10 05:05:11 +00:00
|
|
|
### Bind to multiple interfaces:
|
|
|
|
|
2019-02-16 12:06:22 +00:00
|
|
|
miniserve -i 192.168.0.1 -i 10.13.37.10 -i ::1 /tmp/myshare
|
2018-08-10 05:05:11 +00:00
|
|
|
|
2021-08-27 02:15:44 +00:00
|
|
|
### Start with TLS:
|
|
|
|
|
|
|
|
miniserve --tls-cert my.cert --tls-key my.key /tmp/myshare
|
|
|
|
|
2021-03-08 21:23:49 +00:00
|
|
|
### Upload a file using `curl`:
|
|
|
|
|
|
|
|
# in one terminal
|
2022-10-12 19:52:46 +00:00
|
|
|
miniserve -u -- .
|
2021-03-08 21:23:49 +00:00
|
|
|
# in another terminal
|
|
|
|
curl -F "path=@$FILE" http://localhost:8080/upload\?path\=/
|
|
|
|
|
|
|
|
(where `$FILE` is the path to the file. This uses miniserve's default port of 8080)
|
|
|
|
|
2022-10-12 19:52:46 +00:00
|
|
|
Note that for uploading, we have to use `--` to disambiguate the argument to `-u`.
|
|
|
|
This is because `-u` can also take a path (or multiple). If a path argument to `-u` is given,
|
|
|
|
uploading will only be possible to the provided paths as opposed to every path.
|
|
|
|
|
|
|
|
Another effect of this is that you can't just combine flags like this `-uv` when `-u` is used. In
|
|
|
|
this example, you'd need to use `-u -v`.
|
|
|
|
|
2022-06-26 00:02:02 +00:00
|
|
|
### Create a directory using `curl`:
|
|
|
|
|
|
|
|
# in one terminal
|
|
|
|
miniserve --upload-files --mkdir .
|
|
|
|
# in another terminal
|
|
|
|
curl -F "mkdir=$DIR_NAME" http://localhost:8080/upload\?path=\/
|
|
|
|
|
|
|
|
(where `$DIR_NAME` is the name of the directory. This uses miniserve's default port of 8080.)
|
|
|
|
|
2022-03-13 17:57:29 +00:00
|
|
|
### Take pictures and upload them from smartphones:
|
|
|
|
|
|
|
|
miniserve -u -m image -q
|
|
|
|
|
|
|
|
This uses the `--media-type` option, which sends a hint for the expected media type to the browser.
|
|
|
|
Some mobile browsers like Firefox on Android will offer to open the camera app when seeing this.
|
|
|
|
|
2018-05-16 11:55:28 +00:00
|
|
|
## Features
|
|
|
|
|
|
|
|
- Easy to use
|
|
|
|
- Just works: Correct MIME types handling out of the box
|
2018-05-16 13:08:11 +00:00
|
|
|
- Single binary drop-in with no extra dependencies required
|
2019-04-27 03:56:44 +00:00
|
|
|
- Authentication support with username and password (and hashed password)
|
2018-05-16 11:55:28 +00:00
|
|
|
- Mega fast and highly parallel (thanks to [Rust](https://www.rust-lang.org/) and [Actix](https://actix.rs/))
|
2020-05-15 07:26:35 +00:00
|
|
|
- Folder download (compressed on the fly as `.tar.gz` or `.zip`)
|
2019-04-04 08:56:04 +00:00
|
|
|
- File uploading
|
2022-06-26 00:02:02 +00:00
|
|
|
- Directory creation
|
2021-03-28 21:14:41 +00:00
|
|
|
- Pretty themes (with light and dark theme support)
|
2020-07-05 14:34:43 +00:00
|
|
|
- Scan QR code for quick access
|
2021-03-28 21:14:41 +00:00
|
|
|
- Shell completions
|
|
|
|
- Sane and secure defaults
|
2021-08-27 16:23:14 +00:00
|
|
|
- TLS (for supported architectures)
|
2022-08-12 01:46:56 +00:00
|
|
|
- Supports README.md rendering like on GitHub
|
2023-04-16 11:25:55 +00:00
|
|
|
- Range requests
|
2019-03-19 20:00:14 +00:00
|
|
|
|
2020-07-20 22:11:16 +00:00
|
|
|
## Usage
|
|
|
|
|
|
|
|
For when you really just want to serve some files over HTTP right now!
|
|
|
|
|
2022-10-14 12:04:51 +00:00
|
|
|
Usage: miniserve [OPTIONS] [PATH]
|
2020-07-20 22:11:16 +00:00
|
|
|
|
2022-10-14 12:04:51 +00:00
|
|
|
Arguments:
|
|
|
|
[PATH]
|
|
|
|
Which path to serve
|
2021-08-30 03:04:10 +00:00
|
|
|
|
2022-10-14 12:04:51 +00:00
|
|
|
Options:
|
|
|
|
-v, --verbose
|
|
|
|
Be verbose, includes emitting access logs
|
2021-10-31 19:24:43 +00:00
|
|
|
|
2022-10-14 12:04:51 +00:00
|
|
|
--index <INDEX>
|
|
|
|
The name of a directory index file to serve, like "index.html"
|
2021-10-31 19:24:43 +00:00
|
|
|
|
2022-10-14 12:18:19 +00:00
|
|
|
Normally, when miniserve serves a directory, it creates a listing for that
|
|
|
|
directory. However, if a directory contains this file, miniserve will serve that
|
|
|
|
file instead.
|
2021-10-31 19:24:43 +00:00
|
|
|
|
2022-10-14 12:04:51 +00:00
|
|
|
--spa
|
|
|
|
Activate SPA (Single Page Application) mode
|
2021-10-31 19:24:43 +00:00
|
|
|
|
2022-10-14 12:18:19 +00:00
|
|
|
This will cause the file given by --index to be served for all non-existing file
|
|
|
|
paths. In effect, this will serve the index file whenever a 404 would otherwise
|
|
|
|
occur in order to allow the SPA router to handle the request instead.
|
2021-10-31 19:24:43 +00:00
|
|
|
|
2022-10-14 12:04:51 +00:00
|
|
|
-p, --port <PORT>
|
|
|
|
Port to use
|
2021-01-18 01:02:24 +00:00
|
|
|
|
2022-10-14 12:04:51 +00:00
|
|
|
[default: 8080]
|
2021-04-18 03:43:58 +00:00
|
|
|
|
2022-10-14 12:04:51 +00:00
|
|
|
-i, --interfaces <INTERFACES>...
|
|
|
|
Interface to listen on
|
2020-07-20 22:11:16 +00:00
|
|
|
|
2022-10-14 12:04:51 +00:00
|
|
|
-a, --auth <AUTH>...
|
2022-10-14 12:18:19 +00:00
|
|
|
Set authentication. Currently supported formats: username:password,
|
|
|
|
username:sha256:hash, username:sha512:hash (e.g. joe:123,
|
2022-10-14 12:04:51 +00:00
|
|
|
joe:sha256:a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3)
|
2020-07-20 22:11:16 +00:00
|
|
|
|
2022-10-14 12:04:51 +00:00
|
|
|
--route-prefix <ROUTE_PREFIX>
|
|
|
|
Use a specific route prefix
|
2021-08-27 02:15:44 +00:00
|
|
|
|
2022-10-14 12:04:51 +00:00
|
|
|
--random-route
|
|
|
|
Generate a random 6-hexdigit route
|
2021-10-31 19:24:43 +00:00
|
|
|
|
2022-10-14 12:04:51 +00:00
|
|
|
-P, --no-symlinks
|
|
|
|
Hide symlinks in listing and prevent them from being followed
|
2022-05-23 06:25:47 +00:00
|
|
|
|
2022-10-14 12:04:51 +00:00
|
|
|
-H, --hidden
|
|
|
|
Show hidden files
|
2021-10-31 19:24:43 +00:00
|
|
|
|
2022-10-14 12:04:51 +00:00
|
|
|
-c, --color-scheme <COLOR_SCHEME>
|
|
|
|
Default color scheme
|
2021-10-31 19:24:43 +00:00
|
|
|
|
2022-10-14 12:04:51 +00:00
|
|
|
[default: squirrel]
|
|
|
|
[possible values: squirrel, archlinux, zenburn, monokai]
|
2021-10-31 19:24:43 +00:00
|
|
|
|
2022-10-14 12:04:51 +00:00
|
|
|
-d, --color-scheme-dark <COLOR_SCHEME_DARK>
|
|
|
|
Default color scheme
|
2021-10-31 19:24:43 +00:00
|
|
|
|
2022-10-14 12:04:51 +00:00
|
|
|
[default: archlinux]
|
|
|
|
[possible values: squirrel, archlinux, zenburn, monokai]
|
2022-03-15 19:30:47 +00:00
|
|
|
|
2022-10-14 12:04:51 +00:00
|
|
|
-q, --qrcode
|
|
|
|
Enable QR code display
|
2022-03-15 19:30:47 +00:00
|
|
|
|
2022-10-14 12:04:51 +00:00
|
|
|
-u, --upload-files [<ALLOWED_UPLOAD_DIR>]
|
|
|
|
Enable file uploading (and optionally specify for which directory)
|
2022-03-15 19:30:47 +00:00
|
|
|
|
2022-10-14 12:04:51 +00:00
|
|
|
-U, --mkdir
|
|
|
|
Enable creating directories
|
2021-08-27 02:15:44 +00:00
|
|
|
|
2022-10-14 12:04:51 +00:00
|
|
|
-m, --media-type <MEDIA_TYPE>
|
|
|
|
Specify uploadable media types
|
2021-10-31 19:24:43 +00:00
|
|
|
|
2022-10-14 12:04:51 +00:00
|
|
|
[possible values: image, audio, video]
|
2021-10-31 19:24:43 +00:00
|
|
|
|
2022-10-14 12:04:51 +00:00
|
|
|
-M, --raw-media-type <MEDIA_TYPE_RAW>
|
|
|
|
Directly specify the uploadable media type expression
|
2020-07-20 22:11:16 +00:00
|
|
|
|
2022-10-14 12:04:51 +00:00
|
|
|
-o, --overwrite-files
|
|
|
|
Enable overriding existing files during file upload
|
2021-10-31 19:24:43 +00:00
|
|
|
|
2022-10-14 12:04:51 +00:00
|
|
|
-r, --enable-tar
|
|
|
|
Enable uncompressed tar archive generation
|
2021-10-31 19:24:43 +00:00
|
|
|
|
2022-10-14 12:04:51 +00:00
|
|
|
-g, --enable-tar-gz
|
|
|
|
Enable gz-compressed tar archive generation
|
2022-02-21 00:23:23 +00:00
|
|
|
|
2022-10-14 12:04:51 +00:00
|
|
|
-z, --enable-zip
|
|
|
|
Enable zip archive generation
|
2020-07-20 22:11:16 +00:00
|
|
|
|
2022-10-14 12:18:19 +00:00
|
|
|
WARNING: Zipping large directories can result in out-of-memory exception because zip
|
|
|
|
generation is done in memory and cannot be sent on the fly
|
2021-08-30 03:04:10 +00:00
|
|
|
|
2022-10-14 12:04:51 +00:00
|
|
|
-D, --dirs-first
|
|
|
|
List directories first
|
2020-07-20 22:11:16 +00:00
|
|
|
|
2022-10-14 12:04:51 +00:00
|
|
|
-t, --title <TITLE>
|
|
|
|
Shown instead of host in page title and heading
|
2022-08-12 01:46:56 +00:00
|
|
|
|
2022-10-14 12:04:51 +00:00
|
|
|
--header <HEADER>...
|
|
|
|
Set custom header for responses
|
2022-02-06 15:23:15 +00:00
|
|
|
|
2022-10-14 12:04:51 +00:00
|
|
|
-l, --show-symlink-info
|
|
|
|
Visualize symlinks in directory listing
|
2021-10-31 19:24:43 +00:00
|
|
|
|
2022-10-14 12:04:51 +00:00
|
|
|
-F, --hide-version-footer
|
|
|
|
Hide version footer
|
2021-10-31 19:24:43 +00:00
|
|
|
|
2022-10-14 12:04:51 +00:00
|
|
|
--hide-theme-selector
|
|
|
|
Hide theme selector
|
2021-10-31 19:24:43 +00:00
|
|
|
|
2022-10-14 12:04:51 +00:00
|
|
|
-W, --show-wget-footer
|
|
|
|
If enabled, display a wget command to recursively download the current directory
|
2021-10-31 19:24:43 +00:00
|
|
|
|
2022-10-14 12:04:51 +00:00
|
|
|
--print-completions <shell>
|
|
|
|
Generate completion file for a shell
|
2021-10-31 19:24:43 +00:00
|
|
|
|
2022-10-14 12:04:51 +00:00
|
|
|
[possible values: bash, elvish, fish, powershell, zsh]
|
2020-07-20 22:11:16 +00:00
|
|
|
|
2022-10-14 12:04:51 +00:00
|
|
|
--print-manpage
|
|
|
|
Generate man page
|
2022-06-26 00:02:02 +00:00
|
|
|
|
2022-10-14 12:04:51 +00:00
|
|
|
--tls-cert <TLS_CERT>
|
|
|
|
TLS certificate to use
|
2020-07-20 22:11:16 +00:00
|
|
|
|
2022-10-14 12:04:51 +00:00
|
|
|
--tls-key <TLS_KEY>
|
|
|
|
TLS private key to use
|
2021-08-30 03:04:10 +00:00
|
|
|
|
2022-10-14 12:04:51 +00:00
|
|
|
--readme
|
|
|
|
Enable README.md rendering in directories
|
2021-09-23 18:43:14 +00:00
|
|
|
|
2022-10-14 12:04:51 +00:00
|
|
|
-h, --help
|
|
|
|
Print help information (use `-h` for a summary)
|
|
|
|
|
|
|
|
-V, --version
|
|
|
|
Print version information
|
2021-08-27 02:15:44 +00:00
|
|
|
|
2018-05-16 11:55:28 +00:00
|
|
|
## How to install
|
|
|
|
|
2020-04-19 08:19:35 +00:00
|
|
|
<a href="https://repology.org/project/miniserve/versions"><img align="right" src="https://repology.org/badge/vertical-allrepos/miniserve.svg" alt="Packaging status"></a>
|
|
|
|
|
2018-05-16 11:55:28 +00:00
|
|
|
**On Linux**: Download `miniserve-linux` from [the releases page](https://github.com/svenstaro/miniserve/releases) and run
|
|
|
|
|
|
|
|
chmod +x miniserve-linux
|
|
|
|
./miniserve-linux
|
2021-01-18 01:02:24 +00:00
|
|
|
|
2021-01-18 00:58:51 +00:00
|
|
|
Alternatively, if you are on **Arch Linux**, you can do
|
2021-01-05 12:57:08 +00:00
|
|
|
|
|
|
|
pacman -S miniserve
|
2018-05-16 11:55:28 +00:00
|
|
|
|
2021-08-06 16:55:31 +00:00
|
|
|
On [Termux](https://termux.com/)
|
|
|
|
|
|
|
|
pkg install miniserve
|
|
|
|
|
2018-05-16 11:55:28 +00:00
|
|
|
**On OSX**: Download `miniserve-osx` from [the releases page](https://github.com/svenstaro/miniserve/releases) and run
|
|
|
|
|
|
|
|
chmod +x miniserve-osx
|
|
|
|
./miniserve-osx
|
|
|
|
|
2022-02-06 12:12:19 +00:00
|
|
|
Alternatively install with [Homebrew](https://brew.sh/):
|
2019-10-18 10:15:29 +00:00
|
|
|
|
|
|
|
brew install miniserve
|
|
|
|
miniserve
|
|
|
|
|
2018-05-16 12:44:25 +00:00
|
|
|
**On Windows**: Download `miniserve-win.exe` from [the releases page](https://github.com/svenstaro/miniserve/releases) and run
|
|
|
|
|
|
|
|
miniserve-win.exe
|
2018-05-16 11:55:28 +00:00
|
|
|
|
2022-02-06 12:12:19 +00:00
|
|
|
Alternatively install with [Scoop](https://scoop.sh/):
|
|
|
|
|
|
|
|
scoop install miniserve
|
|
|
|
|
2020-11-08 23:16:04 +00:00
|
|
|
**With Cargo**: Make sure you have a recent version of Rust. Then you can run
|
2018-05-16 11:55:28 +00:00
|
|
|
|
2021-10-27 18:05:19 +00:00
|
|
|
cargo install --locked miniserve
|
2018-05-16 11:55:28 +00:00
|
|
|
miniserve
|
|
|
|
|
2022-02-06 12:12:19 +00:00
|
|
|
**With Docker:** Make sure the Docker daemon is running and then run
|
|
|
|
|
|
|
|
docker run -v /tmp:/tmp -p 8080:8080 --rm -it docker.io/svenstaro/miniserve /tmp
|
|
|
|
|
|
|
|
**With Podman:** Just run
|
2019-02-15 15:46:11 +00:00
|
|
|
|
2022-02-06 12:12:19 +00:00
|
|
|
podman run -v /tmp:/tmp -p 8080:8080 --rm -it docker.io/svenstaro/miniserve /tmp
|
2019-02-15 15:46:11 +00:00
|
|
|
|
2021-03-28 21:15:23 +00:00
|
|
|
## Shell completions
|
|
|
|
|
|
|
|
If you'd like to make use of the built-in shell completion support, you need to run `miniserve
|
|
|
|
--print-completions <your-shell>` and put the completions in the correct place for your shell. A
|
|
|
|
few examples with common paths are provided below:
|
|
|
|
|
|
|
|
# For bash
|
2021-08-05 15:00:51 +00:00
|
|
|
miniserve --print-completions bash > ~/.local/share/bash-completion/completions/miniserve
|
2021-03-28 21:15:23 +00:00
|
|
|
# For zsh
|
|
|
|
miniserve --print-completions zsh > /usr/local/share/zsh/site-functions/_miniserve
|
|
|
|
# For fish
|
|
|
|
miniserve --print-completions fish > ~/.config/fish/completions/miniserve.fish
|
|
|
|
|
2021-04-18 07:27:57 +00:00
|
|
|
## systemd
|
|
|
|
|
|
|
|
A hardened systemd-compatible unit file can be found in `packaging/miniserve@.service`. You could
|
|
|
|
install this to `/etc/systemd/system/miniserve@.service` and start and enable `miniserve` as a
|
|
|
|
daemon on a specific serve path `/my/serve/path` like this:
|
|
|
|
|
|
|
|
systemctl enable --now miniserve@-my-serve-path
|
|
|
|
|
|
|
|
Keep in mind that you'll have to use `systemd-escape` to properly escape a path for this usage.
|
|
|
|
|
|
|
|
In case you want to customize the particular flags that miniserve launches with, you can use
|
|
|
|
|
|
|
|
systemctl edit miniserve@-my-serve-path
|
|
|
|
|
|
|
|
and set the `[Service]` part in the resulting `override.conf` file. For instance:
|
|
|
|
|
|
|
|
[Service]
|
2021-04-18 07:36:38 +00:00
|
|
|
ExecStart=/usr/bin/miniserve --enable-tar --enable-zip --no-symlinks --verbose -i ::1 -p 1234 --title hello --color-scheme monokai --color-scheme-dark monokai -- %I
|
2021-04-18 07:27:57 +00:00
|
|
|
|
|
|
|
Make sure to leave the `%I` at the very end in place or the wrong path might be served. You
|
|
|
|
might additionally have to override `IPAddressAllow` and `IPAddressDeny` if you plan on making
|
|
|
|
miniserve directly available on a public interface.
|
|
|
|
|
2018-08-10 05:05:11 +00:00
|
|
|
## Binding behavior
|
|
|
|
|
|
|
|
For convenience reasons, miniserve will try to bind on all interfaces by default (if no `-i` is provided).
|
|
|
|
It will also do that if explicitly provided with `-i 0.0.0.0` or `-i ::`.
|
|
|
|
In all of the aforementioned cases, it will bind on both IPv4 and IPv6.
|
|
|
|
If provided with an explicit non-default interface, it will ONLY bind to that interface.
|
|
|
|
You can provide `-i` multiple times to bind to multiple interfaces at the same time.
|
|
|
|
|
2018-05-16 13:08:38 +00:00
|
|
|
## Why use this over alternatives?
|
2018-05-16 11:55:28 +00:00
|
|
|
|
2021-09-23 18:43:14 +00:00
|
|
|
- darkhttpd: Not easily available on Windows and it's not as easy as download-and-go.
|
2018-05-16 12:44:25 +00:00
|
|
|
- Python built-in webserver: Need to have Python installed, it's low performance, and also doesn't do correct MIME type handling in some cases.
|
2018-05-17 13:59:10 +00:00
|
|
|
- netcat: Not as convenient to use and sending directories is [somewhat involved](https://nakkaya.com/2009/04/15/using-netcat-for-file-transfers/).
|
2018-06-07 21:41:40 +00:00
|
|
|
|
|
|
|
## Releasing
|
|
|
|
|
|
|
|
This is mostly a note for me on how to release this thing:
|
|
|
|
|
2020-10-02 00:53:42 +00:00
|
|
|
- Make sure `CHANGELOG.md` is up to date.
|
|
|
|
- `cargo release <version>`
|
2022-02-06 15:21:08 +00:00
|
|
|
- `cargo release --execute <version>`
|
2022-09-20 01:07:27 +00:00
|
|
|
- Releases will automatically be deployed by GitHub Actions.
|
2021-01-05 06:12:53 +00:00
|
|
|
- Update Arch package.
|