Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/weihanglo/sfz

A simple static file serving command-line tool written in Rust.
https://github.com/weihanglo/sfz

cli rust static-server

Last synced: about 2 months ago
JSON representation

A simple static file serving command-line tool written in Rust.

Awesome Lists containing this project

README

        

> Thank you for using this tool so far. Unfortunately I have no time
> maintaining it, but I believe people can find a better alternative
> out there on [crates.io](https://crates.io).
>
> If you are still interested in supporting Rust and its community, please
> consider **sponsoring Rust developers you like**. You can find a few from
> the official [Rust teams](https://www.rust-lang.org/governance/),
> or just [buy me a coffee](https://github.com/sponsors/weihanglo) ❤️.

# [![sfz](.github/sfz.svg)][sfz]

[![Crates.io](https://img.shields.io/crates/v/sfz.svg)](https://crates.io/crates/sfz)
[![Build Status](https://github.com/weihanglo/sfz/workflows/CI/badge.svg)](https://github.com/weihanglo/sfz/actions?query=workflow%3ACI)
[![Code Coverage](https://codecov.io/gh/weihanglo/sfz/coverage.svg)](https://codecov.io/gh/weihanglo/sfz)
[![Lines of Code](https://tokei.rs/b1/github/weihanglo/sfz?category=code)][sfz]
[![Dependency Status](https://deps.rs/repo/github/weihanglo/sfz/status.svg)](https://deps.rs/repo/github/weihanglo/sfz)

sfz, or **S**tatic **F**ile **Z**erver, is a simple command-line tool serving static files for you.

![](.github/cover.png)

The name **sfz** is derived from an accented note [Sforzando][sforzando] in music, which means “suddenly with force.”

[sfz]: https://github.com/weihanglo/sfz
[sforzando]: https://en.wikipedia.org/wiki/Dynamics_(music)#Sudden_changes_and_accented_notes

## Features

- Directory listing
- Partial responses (range requests)
- Conditional requests with cache validations
- Cross-origin resource sharing
- Automatic HTTP compression (Brotli, Gzip, Deflate)
- Automatic rendering `index.html`
- Respect `.gitignore` file
- Customize path prefix

## Installation

### Automatic

#### macOS

If you are a **macOS Homebrew** user, you can install sfz from a custom tap:

```shell
brew tap weihanglo/sfz https://github.com/weihanglo/sfz.git
brew install sfz
```

> Disclaimer: Formula on **Linuxbrew** did not fully tested.

#### Cargo

If you are a **Rust programmer**, sfz are available on [crates.io][crates.io] via [Cargo][cargo].

```shell
cargo install sfz
```

You can also install the latest version (or a specific commit) of sfz directly from GitHub.

```shell
cargo install --git https://github.com/weihanglo/sfz.git
```

[crates.io]: https://crates.io
[cargo]: https://doc.rust-lang.org/cargo/

### Manual

#### Prebuilt binaries

Archives of prebuilt binaries are available on [GitHub Release][gh-release] for Linux, maxOS and Windows. Download a compatible binary for your system. For convenience, make sure you place sfz under $PATH if you want access it from the command line.

[gh-release]: https://github.com/weihanglo/sfz/releases

#### Build from source

sfz is written in Rust. You need to [install Rust][install-rust] in order to compile it.

```shell
$ git clone https://github.com/weihanglo/sfz.git
$ cd sfz
$ cargo build --release
$ ./target/release/sfz --version
0.7.1
```

[install-rust]: https://www.rust-lang.org/install.html

## Usage

The simplest way to start serving files is to run this command:

```shell
sfz [FLAGS] [OPTIONS] [path]
```

The command above will start serving your current working directory on `127.0.0.1:5000` by default.

If you want to serve another directory, pass `[path]` positional argument in with either absolute or relaitve path.

```shell
sfz /usr/local

# Serve files under `/usr/local` directory.
#
# You can press ctrl-c to exit immediately.
```

### Flags and Options

sfz aims to be simple but configurable. Here is a list of available options:

```
USAGE:
sfz [OPTIONS] [path]

ARGS:
Path to a directory for serving files [default: .]

OPTIONS:
-a, --all Serve hidden and dot (.) files
-b, --bind

Specify bind address [default: 127.0.0.1]
-c, --cache Specify max-age of HTTP caching in seconds [default: 0]
-C, --cors Enable Cross-Origin Resource Sharing from any origin (*)
--coi Enable Cross-Origin isolation
-h, --help Print help information
-I, --no-ignore Don't respect gitignore file
-L, --follow-links Follow symlinks outside current serving base path
--no-log Don't log any request/response information.
-p, --port Specify port to listen on [default: 5000]
--path-prefix Specify an url path prefix, helpful when running behing a reverse
proxy
-r, --render-index Render existing index.html when requesting a directory.
-V, --version Print version information
-Z, --unzipped Disable HTTP compression
```

## Contributing

Contributions are highly appreciated! Feel free to open issues or send pull requests directly.

## Credits

sfz was originally inspired by another static serving tool [serve][serve], and sfz's directory-listing UI is mainly borrowed from [GitHub][github].

sfz is built on the top of awesome Rust community. Thanks for all Rust and crates contributors.

[serve]: https://github.com/zeit/serve
[github]: https://github.com/

## License

This project is licensed under either of

- Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)

at your option.

### Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in sfz by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.