Skip to content

alshdavid/http-server-rs

Repository files navigation

http-server: a simple static HTTP server 🚀🦀

Rewrite of the popular npm package http-server in Rust with some extras included.

http-server is a simple, zero-configuration command-line static HTTP server. It is powerful enough for production usage, but it's simple and hackable enough to be used for testing, local development and learning.

example.mp4

Usage

# Use default configuration
http-server

# Arguments
# Enable CORS, reroute requests to index.html and automatically compress to brotli 
http-server --cors --spa -Z ./public

# Custom Headers
http-server -H X-Custom-Header:some-value
Usage: http-server [OPTIONS] [SERVE_DIR]

Arguments:
  [SERVE_DIR]  Target directory to serve [default: ./dist]

Options:
  -a, --address <ADDRESS>        [default: 0.0.0.0]
  -p, --port <PORT>              [default: 8080]
      --spa                      Redirect requests to /index.html for Single Page Applications
  -c, --cache-time <CACHE_TIME>  Cache control time [default: 0]
  -Z, --compress                 Compress responses (JIT)
  -H, --header <HEADERS>         Custom headers (Format "key:value")
      --cors                     Enable CORS header
  -S, --shared-array-buffer      Enable headers for SharedArrayBuffer
  -Q, --quiet                    Don't print any logs to terminal
  -w, --watch                    Watch folder for changes and trigger a browser reload
      --watch-dir <WATCH_DIR>    Watch for changes [default: SERVE_DIR]
      --no-watch-inject          Don't automatically inject watch listener into html
  -h, --help                     Print help

Watch Mode

http-server under --watch mode can watch the served directory for changes and emit an event to the client notifying of a change. By default the server will intercept html files and inject a JavaScript script which subscribes to change events and triggers a page reload.

http-server --watch ./dist

To customize the reload functionality, disable the auto-inject script, manually subscribe to change events and trigger the desired functionality.

http-server --watch --no-watch-inject ./dist
<html>
  <head>
    <script>
      new EventSource("/.http-server-rs/reload")
        .onmessage = () => window.location.reload();
    </script>
  </head>
  <body>
    <script src="./app.js"></script>
  </body>
</html>

Installation

MacOS & Linux

Download the binary from the latest GitHub release and add it to your PATH

# Linux AMD64
curl -L --url https://github.com/alshdavid/http-server-rs/releases/latest/download/http-server-linux-amd64.tar.gz | tar -xvzf - -C $HOME/.local/bin

# Linux ARM64
curl -L --url https://github.com/alshdavid/http-server-rs/releases/latest/download/http-server-linux-arm64.tar.gz | tar -xvzf - -C $HOME/.local/bin

# MacOS ARM64 (Apple Silicon)
curl -L --url https://github.com/alshdavid/http-server-rs/releases/latest/download/http-server-macos-arm64.tar.gz | tar -xvzf - -C $HOME/.local/bin 

# MacOS AMD64 (Intel)
curl -L --url https://github.com/alshdavid/http-server-rs/releases/latest/download/http-server-macos-amd64.tar.gz | tar -xvzf - -C $HOME/.local/bin

# Add to PATH if not already there:
echo "\nexport \PATH=\$PATH:\$HOME/.local/bin\n" >> $HOME/.zshrc
echo "\nexport \PATH=\$PATH:\$HOME/.local/bin\n" >> $HOME/.bashrc

Windows

Download the binary from the latest GitHub release and add it to your PATH

About

Static HTTP Server For Local Development

Resources

License

Stars

Watchers

Forks

Packages

No packages published