Repository: static-web-server/static-web-server (language: rust)

Issue:
Website
**Is your feature request related to a problem?**

Currently we have no website to describe more clearly the features, usage and documentation, just a README file.

**Describe the solution you'd like**

It would be great if we can deploy a static website describing more clearly the features, usage/examples and documentation necessary as well as releases (maybe redirecting to the Github Releases directly).

**Describe alternatives you've considered**

In order to do that we can use [mkdocs-material](https://squidfunk.github.io/mkdocs-material/) or another alternative.

**Additional context**

No



Discussion / hints:

Fix patch:
diff --git a/.gitignore b/.gitignore
index 3da0fa43..5686bbd4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,7 +13,6 @@
 **/*.gz
 **/.DS_Store
 **/*.env
-**/*.svg
 **/*.data*
 **/*.zst
 **/*.out*
@@ -23,3 +22,4 @@ release
 TODO
 
 !sample.env
+!/docs
diff --git a/Makefile b/Makefile
index ce391b12..35dd70fb 100644
--- a/Makefile
+++ b/Makefile
@@ -249,6 +249,10 @@ prod.release.version:
 	git push
 .ONESHELL: prod.release.version
 
+docs-dev:
+	@docker-compose -f docs/docker-compose.yml up --build
+.PHONY: docs-dev
+
 promote:
 	@drone build promote joseluisq/static-web-server $(BUILD) $(ENV)
 .PHONY: promote
diff --git a/docs/Dockerfile b/docs/Dockerfile
new file mode 100644
index 00000000..6c4f86a4
--- /dev/null
+++ b/docs/Dockerfile
@@ -0,0 +1,5 @@
+FROM squidfunk/mkdocs-material
+
+RUN set -eux \
+    && pip install --no-cache-dir \
+        "mkdocs-git-revision-date-plugin";
diff --git a/docs/content/assets/rust_logo.svg b/docs/content/assets/rust_logo.svg
new file mode 100644
index 00000000..281d2c44
--- /dev/null
+++ b/docs/content/assets/rust_logo.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg width="100%" height="100%" viewBox="0 0 100 100" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;">
+    <g transform="matrix(0.98522,0,0,0.98522,-13.6364,-13.5473)">
+        <path d="M64.591,21.527C40.9,21.527 21.618,40.818 21.618,64.5C21.618,88.182 40.909,107.473 64.591,107.473C88.273,107.473 107.564,88.182 107.564,64.5C107.564,40.818 88.273,21.527 64.591,21.527ZM64.527,25.345C66.045,25.385 67.274,26.649 67.273,28.173C67.265,29.721 65.994,30.993 64.445,31C62.897,30.993 61.626,29.721 61.618,28.173L61.618,28.172C61.626,26.619 62.906,25.345 64.459,25.345C64.482,25.345 64.505,25.345 64.527,25.345ZM71,30C81.039,31.883 89.757,38.092 94.818,46.964L91.482,54.491C90.916,55.786 91.504,57.317 92.791,57.9L99.209,60.745C99.408,62.752 99.433,64.772 99.282,66.782L95.709,66.782C95.355,66.782 95.209,67.018 95.209,67.364L95.209,69C95.209,72.855 93.036,73.7 91.127,73.909C89.309,74.118 87.3,73.145 87.045,72.036C85.973,66.009 84.191,64.727 81.373,62.5C84.873,60.282 88.509,57 88.509,52.618C88.509,47.882 85.264,44.9 83.055,43.436C79.945,41.391 76.509,40.982 75.582,40.982L38.673,40.982C43.776,35.282 50.619,31.421 58.136,30L62.491,34.564C62.975,35.073 63.647,35.362 64.35,35.362C65.012,35.362 65.65,35.105 66.127,34.645L71,30ZM30.818,50.927C32.336,50.977 33.558,52.236 33.564,53.755C33.556,55.303 32.285,56.574 30.736,56.582C29.188,56.574 27.917,55.303 27.909,53.755L27.909,53.754C27.917,52.2 29.197,50.926 30.75,50.926C30.773,50.926 30.795,50.927 30.818,50.927ZM98.227,51.055C99.745,51.105 100.967,52.364 100.973,53.882C100.965,55.43 99.694,56.702 98.145,56.709C96.597,56.702 95.326,55.43 95.318,53.882L95.318,53.881C95.326,52.328 96.606,51.054 98.159,51.054C98.182,51.054 98.205,51.054 98.227,51.055ZM36.145,51.509L41.073,51.509L41.073,73.727L31.127,73.727C29.899,69.414 29.516,64.904 30,60.445L36.091,57.736C37.02,57.324 37.622,56.399 37.622,55.383C37.622,55.022 37.546,54.666 37.4,54.336L36.145,51.509ZM56.709,51.745L68.445,51.745C69.055,51.745 72.727,52.445 72.727,55.2C72.727,57.482 69.909,58.3 67.591,58.3L56.7,58.3L56.709,51.745ZM56.709,67.709L65.7,67.709C66.518,67.709 70.091,67.945 71.227,72.509C71.582,73.909 72.373,78.473 72.909,79.936C73.445,81.573 75.618,84.845 77.936,84.845L92.609,84.845C91.626,86.162 90.55,87.408 89.391,88.573L83.418,87.291C82.034,86.995 80.652,87.889 80.355,89.273L78.936,95.891C69.713,100.067 59.111,100.017 49.927,95.755L48.509,89.136C48.258,87.952 47.203,87.098 45.992,87.098C45.812,87.098 45.631,87.117 45.455,87.155L39.609,88.409C38.524,87.29 37.516,86.1 36.591,84.845L65.018,84.845C65.336,84.845 65.555,84.791 65.555,84.491L65.555,74.436C65.555,74.145 65.336,74.082 65.018,74.082L56.7,74.082L56.709,67.709ZM43.591,90.736C45.108,90.786 46.331,92.045 46.336,93.564C46.329,95.112 45.057,96.383 43.509,96.391C41.961,96.383 40.689,95.112 40.682,93.564L40.682,93.563C40.689,92.009 41.969,90.736 43.523,90.736C43.545,90.736 43.568,90.736 43.591,90.736ZM85.455,90.864C86.972,90.914 88.195,92.173 88.2,93.691C88.193,95.239 86.921,96.511 85.373,96.518C83.825,96.511 82.553,95.239 82.545,93.691L82.545,93.69C82.553,92.137 83.833,90.863 85.386,90.863C85.409,90.863 85.432,90.863 85.455,90.864Z" style="fill:white;fill-rule:nonzero;"/>
+    </g>
+    <g transform="matrix(0.98522,0,0,0.98522,-13.6364,-13.5473)">
+        <path d="M105.164,64.5C105.164,86.757 86.848,105.073 64.591,105.073C42.334,105.073 24.018,86.757 24.018,64.5C24.018,42.243 42.334,23.927 64.591,23.927C86.848,23.927 105.164,42.243 105.164,64.5ZM104.4,60.582L110.727,64.5L104.4,68.418L109.836,73.5L102.873,76.109L107.218,82.155L99.864,83.355L102.955,90.136L95.509,89.873L97.218,97.127L89.964,95.418L90.227,102.864L83.445,99.773L82.245,107.127L76.2,102.782L73.591,109.745L68.509,104.309L64.591,110.636L60.673,104.309L55.591,109.745L52.982,102.782L46.936,107.127L45.736,99.773L38.955,102.864L39.218,95.418L31.964,97.127L33.673,89.873L26.227,90.136L29.318,83.355L21.964,82.155L26.309,76.109L19.345,73.5L24.782,68.418L18.455,64.5L24.782,60.582L19.345,55.5L26.309,52.891L21.964,46.845L29.318,45.645L26.227,38.864L33.673,39.127L31.964,31.873L39.218,33.582L38.955,26.136L45.736,29.227L46.936,21.873L52.982,26.218L55.591,19.255L60.673,24.691L64.591,18.364L68.509,24.691L73.591,19.255L76.2,26.218L82.245,21.873L83.445,29.227L90.227,26.136L89.964,33.582L97.218,31.873L95.509,39.127L102.955,38.864L99.864,45.645L107.218,46.845L102.873,52.891L109.836,55.5L104.4,60.582Z" style="fill:white;stroke:white;stroke-width:2.73px;"/>
+    </g>
+</svg>
diff --git a/docs/content/changelog-v1.md b/docs/content/changelog-v1.md
new file mode 100644
index 00000000..c5d8864c
--- /dev/null
+++ b/docs/content/changelog-v1.md
@@ -0,0 +1,491 @@
+# Static Web Server v1 - Changelog
+
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
+and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+
+_**Note:** See changelog for v2 under the [master](https://github.com/joseluisq/static-web-server/blob/master/CHANGELOG.md) branch._
+
+## v1.18.0 - 2021-08-20
+
+__Updates__
+
+- [806a276](https://github.com/joseluisq/static-web-server/commit/806a276) Update dependencies including OpenSSL, httparse and related crates.
+
+__Refactorings__
+
+- [c9e7222](https://github.com/joseluisq/static-web-server/commit/c9e7222) Cross-platform `ctrl-c` signal handling including Windows support.
+- [3c7d9f6](https://github.com/joseluisq/static-web-server/commit/3c7d9f6) Remove needless borrow on server module.
+
+__Docs__
+
+- [5a14787](https://github.com/joseluisq/static-web-server/commit/5a14787) Changelog support for v1. PR [#50](https://github.com/joseluisq/static-web-server/pull/50)
+
+## v1.17.1 - 2021-06-30
+
+__Fixes__
+
+- [f976586](https://github.com/joseluisq/static-web-server/commit/f976586) Fix static file base path not resolved (canonicalized) properly. For example when uri paths map to symlinks on file system.
+- [35d5a1e](https://github.com/joseluisq/static-web-server/commit/35d5a1e) Fix missing server version env of "scratch" Dockerfile.
+
+__Updates__
+
+- [1fc9d7f](https://github.com/joseluisq/static-web-server/commit/1fc9d7f) Update dependencies 30.06.2021.
+
+__Docs__
+
+-  [8979292](https://github.com/joseluisq/static-web-server/commit/8979292) Describe current supported targets.
+
+__Refactorings__
+
+- [34cd35b](https://github.com/joseluisq/static-web-server/commit/34cd35b) Minor config project updates.
+
+## v1.17.0 - 2021-06-21
+
+__Updates__
+
+- [54ae2d9](https://github.com/joseluisq/static-web-server/commit/54ae2d9) Update dependencies which includes OpenSSL crate updates and others (also [299e01c](https://github.com/joseluisq/static-web-server/commit/299e01c)).
+
+__Features__
+
+-  [f78de5a](https://github.com/joseluisq/static-web-server/commit/f78de5a) Additionally to current three targets `x86_64-unknown-linux-musl`, `x86_64-apple-darwin`, `x86_64-pc-windows-msvc`. We are supporting six ones more, among which five ARMs stand out:
+    - `x86_64-unknown-linux-gnu`
+    - `aarch64-apple-darwin`
+    - `aarch64-pc-windows-msvc`
+    - `aarch64-unknown-linux-gnu`
+    - `aarch64-unknown-linux-musl`
+    - `arm-unknown-linux-gnueabihf`
+
+Find those targets attached to this release.
+
+__Refactorings__
+
+- [bf87d7f](https://github.com/joseluisq/static-web-server/commit/bf87d7f) Improve error messages for address binding errors. PR [#43](https://github.com/joseluisq/static-web-server/pull/43)
+- [842be1d](https://github.com/joseluisq/static-web-server/commit/842be1d) Update Docker files in order to get the new Linux binary source.
+
+__Note about releases__
+
+[Rust Nightly](https://doc.rust-lang.org/book/appendix-07-nightly-rust.html) is powering the releases from now on the CI. This makes possible to reach more targets in the future.
+For more details about it see [Rust Nightly targets supported](https://doc.rust-lang.org/nightly/rustc/platform-support.html).
+However clarify that the `static-web-server` project is not using any nightly feature but only _**stable Rust**_ ones and also the project is tested against nightly and stable Rust on CI recurrently in order to be notified in case of _"regressions or bugs introduced in Nightly Rust"_. However it is [known](https://stackoverflow.com/a/56067977/2510591) that the nightly compiler is very stable therefore the reason why we have chosen it for release targets via CI like many other popular Rust projects.
+In any case, don't hesitate to file an issue.
+
+## v1.16.0 - 2021-05-26
+
+__Updates__
+
+- [b0593ff](https://github.com/joseluisq/static-web-server/commit/b0593ff) Binaries compiled with latest Rust [1.52.1](https://blog.rust-lang.org/2021/05/10/Rust-1.52.1.html) release.
+- [c96cd48](https://github.com/joseluisq/static-web-server/commit/c96cd48) Update dependencies 26.05.2021
+
+## v1.15.0 - 2021-04-20
+
+__Features__
+
+- [8cf7909](https://github.com/joseluisq/static-web-server/commit/8cf7909) Binaries compiled with latest Rust [1.51.0](https://blog.rust-lang.org/2021/03/25/Rust-1.51.0.html) release.
+- [cfbffb8](https://github.com/joseluisq/static-web-server/commit/cfbffb8) [Alpine 3.13](https://alpinelinux.org/posts/Alpine-3.13.0-released.html) Docker image.
+
+__Updates__
+
+- [12824ed](https://github.com/joseluisq/static-web-server/commit/12824ed) Update dependencies 20.04.2021 (also [996c181](https://github.com/joseluisq/static-web-server/commit/996c181), [c383b8a](https://github.com/joseluisq/static-web-server/commit/c383b8a)). Upgrades also include a OpenSSL security upgrade to `1.1.1k` which fixes `CVE-2021-3450`. More details on https://www.openssl.org/news/secadv/20210325.txt
+
+
+__Docs__
+
+- [304288c](https://github.com/joseluisq/static-web-server/commit/304288c) Minor README clarifications.
+
+## v1.14.0 - 2021-02-14
+
+__Features__
+
+- [252406d](https://github.com/joseluisq/static-web-server/commit/252406d) Binaries compiled with latest Rust [v1.50.0](https://blog.rust-lang.org/2021/02/11/Rust-1.50.0.html) release.
+- [feac82e](https://github.com/joseluisq/static-web-server/commit/feac82e) Directory listing support via new `-i, --directory-listing` boolean flag (equivalent `SERVER_DIRECTORY_LISTING` env variable) which is disabled by default. PR [#32](https://github.com/joseluisq/static-web-server/pull/32) resolves [#31](https://github.com/joseluisq/static-web-server/issues/31).
+- [5026bfe](https://github.com/joseluisq/static-web-server/commit/5026bfe) Windows x86_64 binary support (.exe). See binary file attached to this release. PR [#33](https://github.com/joseluisq/static-web-server/pull/33) resolves [#29](https://github.com/joseluisq/static-web-server/issues/29).
+- [116cbbf](https://github.com/joseluisq/static-web-server/commit/116cbbf) UTF-8 URL decoding support (also [cfcb6c](https://github.com/joseluisq/static-web-server/commit/cfcb6c) for directory listing)
+
+__Refactorings__
+
+- [4fe89c5](https://github.com/joseluisq/static-web-server/commit/4fe89c5) Trim CORS comma-separated allowed hosts (CORS server argument).
+- [8733d2a](https://github.com/joseluisq/static-web-server/commit/8733d2a) Simplify public example asset files.
+- [1c1c2af](https://github.com/joseluisq/static-web-server/commit/1c1c2af) Better 4xx/50x status code checks and more concise default error page content.
+- [db51d77](https://github.com/joseluisq/static-web-server/commit/db51d77) `Option` type used for certain server arguments.
+- [6551018](https://github.com/joseluisq/static-web-server/commit/6551018) Static file middleware searching optimizations which increases web server performance. 
+- [a6cca08](https://github.com/joseluisq/static-web-server/commit/a6cca08) Improved static file path resolving.
+- [5fed730](https://github.com/joseluisq/static-web-server/commit/5fed730) Improved error handling on directory listing feature.
+- [d5e6bdd](https://github.com/joseluisq/static-web-server/commit/d5e6bdd) Improve error handling on static files module.
+- [b167030](https://github.com/joseluisq/static-web-server/commit/b167030) Optimize few dependencies features which reduces binary size.
+- [dd59cd3](https://github.com/joseluisq/static-web-server/commit/dd59cd3) Explicit OS target for signals handling (just Unix-like & Windows distinction)
+
+__Updates__
+
+- [a664866](https://github.com/joseluisq/static-web-server/commit/a664866) Update dependencies 14.02.2021
+
+__Codebase__
+
+- [533006f](https://github.com/joseluisq/static-web-server/commit/533006f) Refactor project modules structure & incorporate the static file middleware into the project.
+
+__Docs__
+
+- [6887624](https://github.com/joseluisq/static-web-server/commit/6887624) Remove whitespace description for CORS option.
+
+## v1.13.0 - 2021-01-24
+
+__Updates__
+
+- [300337e](https://github.com/joseluisq/static-web-server/commit/300337e) Update dependencies 24.01.2021 (also [a72b31d](https://github.com/joseluisq/static-web-server/commit/a72b31d))
+
+__Features__
+
+- __Github Sponsor support__. Consider to support this project via [Github Sponsor](https://github.com/sponsors/joseluisq ) or Paypal [paypal.me/joseluisqs](https://paypal.me/joseluisqs).
+- [63a05fa](https://github.com/joseluisq/static-web-server/commit/63a05fa) HTTP to HTTPS redirection support. PR [#26](https://github.com/joseluisq/static-web-server/pull/26) resolves [#25](https://github.com/joseluisq/static-web-server/issues/25) by [@HenningHolmDE](https://github.com/HenningHolmDE). See [README](https://github.com/joseluisq/static-web-server/tree/1.x#environment-variables) file for more details.
+- [77b07be](https://github.com/joseluisq/static-web-server/commit/77b07be) CLI argument aliases for some options. See [README](https://github.com/joseluisq/static-web-server/tree/1.x#command-line-arguments) file for more details.
+
+__Refactorings__
+
+- [61d819d](https://github.com/joseluisq/static-web-server/commit/61d819d) Minor server log info tweaks.
+- [d595219](https://github.com/joseluisq/static-web-server/commit/d595219) Prefer `&[]` instead of `Vec` ptr as arg type for `on_server_running` function.
+
+__Codebase__
+
+- [f3008f3](https://github.com/joseluisq/static-web-server/commit/f3008f3) Github Actions as new CI.
+
+## v1.12.0 - 2021-01-02
+
+__Updates__
+
+- [c3583f3](https://github.com/joseluisq/static-web-server/commit/c3583f3) Binaries compiled with latest Rust [v1.49.0](https://blog.rust-lang.org/2020/12/31/Rust-1.49.0.html) release.
+- [2732bd3](https://github.com/joseluisq/static-web-server/commit/2732bd3) Update dependencies 02.01.2021 (also [acef399](https://github.com/joseluisq/static-web-server/commit/acef399), [a7b3f40](https://github.com/joseluisq/static-web-server/commit/a7b3f40))
+
+__Bug fixes__
+
+- [c3583f3](https://github.com/joseluisq/static-web-server/commit/c3583f3) Server error response during large file downloads (Macos/Linux). Issue [#24](https://github.com/joseluisq/static-web-server/issues/24) reported by [@lukasa1993](https://github.com/lukasa1993).
+The Rust 1.49.0 upgrade solves the issue which was [published on 1.48.0](https://github.com/rust-lang/rust/commit/db7ee7cc0ddf46a52f53a8a141cd0747f829999a)
+
+__Features__
+
+- [62c8fc2](https://github.com/joseluisq/static-web-server/commit/62c8fc2) Alpine 1.12 Docker image.
+
+__Darwin__
+
+- Binary compiled on Mac OS X SDK 10.15 with a minimum 10.14 version. [joseluisq/rust-linux-darwin-builder@v1.49.0](https://github.com/joseluisq/rust-linux-darwin-builder/releases/tag/v1.49.0)
+
+__Binary sizes__
+
+- **Linux:** Static binary size has no changed (__4.8M__) on current version `v1.12.0`.
+- **Darwin:** Dynamic binary size was decreased (__0.1M__). From __1.7M__ (`v1.11.0`) to __1.6M__ (current version `v1.12.0`)
+
+__Codebase__
+
+- [7581c99](https://github.com/joseluisq/static-web-server/commit/7581c99) Ignore some project directories.
+
+## v1.11.0 - 2020-10-15
+
+__Updates__
+
+- [d4e32ca](https://github.com/joseluisq/static-web-server/commit/d4e32ca) Binaries compiled with latest Rust [v1.47.0](https://blog.rust-lang.org/2020/10/08/Rust-1.47.html) release.
+- [dd20c3e](https://github.com/joseluisq/static-web-server/commit/dd20c3e) Update dependencies 15.10.2020 (also [d4e32ca](https://github.com/joseluisq/static-web-server/commit/d4e32ca), [c4db7c6](https://github.com/joseluisq/static-web-server/commit/c4db7c6))
+
+__Improvements__
+
+- [6d3dc45](https://github.com/joseluisq/static-web-server/commit/6d3dc45) Shrink Darwin binary size. 
+- [2401b24](https://github.com/joseluisq/static-web-server/commit/2401b24) Include a `SERVER_VERSION` (server release version) env on every Docker image (also [ee47f76](https://github.com/joseluisq/static-web-server/commit/ee47f76), [74040cf](https://github.com/joseluisq/static-web-server/commit/74040cf)).
+
+__Binary sizes__
+
+- **Linux:** Static binary size was increased (__0.5M__). From __4.3M__ (`v1.10.0`) to __4.8M__ (current version `v1.11.0`)
+- **Darwin:** Dynamic binary size was decreased (__0.4M__). From __2.1M__ (`v1.10.0`) to __1.7M__ (current version `v1.11.0`)
+
+__Codebase__
+
+- [cbe1783](https://github.com/joseluisq/static-web-server/commit/cbe1783) Automate Docker images versioning with Drone pipelines.
+
+## v1.10.0 - 2020-07-07
+
+__Updates__
+
+- [ff2f2ba](https://github.com/joseluisq/static-web-server/commit/ff2f2ba) Binaries compiled with latest Rust [v1.44.1](https://blog.rust-lang.org/2020/06/18/Rust.1.44.1.html) release.
+- [9732d47](https://github.com/joseluisq/static-web-server/commit/9732d47) Update dependencies 07.07.2020 (also [eb30e11](https://github.com/joseluisq/static-web-server/commit/eb30e11))
+
+__Improvements__
+
+- [93aecf2](https://github.com/joseluisq/static-web-server/commit/93aecf2) Use `jemalloc` as global allocator on Linux Musl 64-bit systems. Which increases the web server performance (also [0fda53f](https://github.com/joseluisq/static-web-server/commit/0fda53f)). See more details on PR [#22](https://github.com/joseluisq/static-web-server/pull/22).  
+
+__Linux binary size__
+
+Static binary size was increased (__0.2M__). From __4.1M__ (`v1.9.2`) to __4.3M__ (current version `v1.10.0`)
+
+__Codebase__
+
+- [8e5a3c7](https://github.com/joseluisq/static-web-server/commit/8e5a3c7) Refactor project dev structure.
+
+## v1.9.2 - 2020-06-08
+
+__Bugfixes__
+
+- [034263e](https://github.com/joseluisq/static-web-server/commit/034263e) Fix regression introduced by commit c0d2891 which displays wrong content type `text/plain` instead of `text/html` for 404/50x error pages.
+
+## v1.9.1 - 2020-06-08
+
+__Updates__
+
+- [d87dafd](https://github.com/joseluisq/static-web-server/commit/d87dafd) Binaries compiled with latest Rust [v1.43.1](https://blog.rust-lang.org/2020/05/07/Rust.1.43.1.html) release.
+- [0d7038f](https://github.com/joseluisq/static-web-server/commit/0d7038f) Update dependencies 08.06.20 (also [044b4a9](https://github.com/joseluisq/static-web-server/commit/044b4a9))
+
+__Improvements__
+
+- Update `iron-staticfile-middleware` to [v0.4.2](https://github.com/joseluisq/iron-staticfile-middleware/releases/tag/v0.4.2) which increases slightly performance on every check of text-based mime types array.
+
+__Refactors__
+
+- [c0d2891](https://github.com/joseluisq/static-web-server/commit/c0d2891) Prefer `const` for the default content type on Error Page middeware.
+- [c3a7d73](https://github.com/joseluisq/static-web-server/commit/c3a7d73) Minor syntax improvements on the Gzip middeware and the Staticfile handler.
+- [f7564f6](https://github.com/joseluisq/static-web-server/commit/f7564f6) Remove unnecessary `to_string` conversion on server address.
+- [23a6a15](https://github.com/joseluisq/static-web-server/commit/23a6a15) Remove git tag `latest` of release tag target.
+
+## v1.9.0 - 2020-05-09
+
+__Features__
+
+-  Binaries compiled with latest Rust [v1.43.0](https://blog.rust-lang.org/2020/04/23/Rust-1.43.0.html) and OpenSSL `v1.1.1g`. More details on [rust-linux-darwin-builder](https://github.com/joseluisq/rust-linux-darwin-builder/releases/tag/v1.43.0) release.
+- [b2d2f40](https://github.com/joseluisq/static-web-server/commit/b2d2f40) Partial Content Delivery support. Which allows to serve bytes of large files. Resolves [#15](https://github.com/joseluisq/static-web-server/issues/15).
+- [1af7d28](https://github.com/joseluisq/static-web-server/commit/1af7d28) CORS support via `--cors-allow-origins` option and its equivalent env. Resolves [#18](https://github.com/joseluisq/static-web-server/issues/18).
+- [ed94c4b](https://github.com/joseluisq/static-web-server/commit/ed94c4b) Enable Gzip compression only for known text-based file types. View file content types on issue [#19](https://github.com/joseluisq/static-web-server/issues/19).
+- [77bf538](https://github.com/joseluisq/static-web-server/commit/77bf538) Update dependencies 10.05.2020 (also [b2d2f40](https://github.com/joseluisq/static-web-server/commit/b2d2f40), [7a0fed0](https://github.com/joseluisq/static-web-server/commit/7a0fed0))
+
+__Linux binary size__
+
+Static binary size was increased (__0.1M__). From __4.0M__ (`v1.8.0`) to __4.1M__ (current version `v1.9.0`)
+
+
+__Documentation__
+
+- [e37d513](https://github.com/joseluisq/static-web-server/commit/e37d513) Corresponding documentation updates reflecting changes and features.
+
+__Codebase__
+
+- [1b1174d](https://github.com/joseluisq/static-web-server/commit/1b1174d) Prefer const over static on default error page content.
+- [4bda5f3](https://github.com/joseluisq/static-web-server/commit/4bda5f3) Simplify Gzip middleware.
+- [9a109d7](https://github.com/joseluisq/static-web-server/commit/9a109d7) Staging CI pipeline.
+
+## v1.8.0 - 2020-04-21
+
+__Overview__
+
+This minor release `v1.8.0` introduces the following:
+
+- `assets` directory path configurable and independent (no more relative to the `root`). This contains a **"breaking change"**. (Please see below).
+- `assets` directory route is always the directory name. That means if you have `/public/my-assets` then the route will be `/my-assets`. 
+- New option for configurable logging levels. `error` log level by default. (More details below).
+* Reply with an empty response body on HEAD requests.
+* Skip Gzip compression on HEAD requests.
+* `root` and `assets` directory paths checking before to start the server.
+* Improve logging server information.
+
+Please view the details involved about this minor release.
+
+__Features__
+
+* [2f7d042](https://github.com/joseluisq/static-web-server/commit/2f7d042) - Configurable assets directory. (minor breaking change).
+* [0dd2abe](https://github.com/joseluisq/static-web-server/commit/0dd2abe) - Configurable logging levels (resolves [#16](https://github.com/joseluisq/static-web-server/issues/16)) via `--log-level` option or its equivalent env. Now `error` log level is enabled by default. Use `info` level if you want requests details. Check out the documentation for more options.
+* [0a9f66b](https://github.com/joseluisq/static-web-server/commit/0a9f66b) - Update [`iron_staticfile_middleware`](https://github.com/joseluisq/iron-staticfile-middleware) to `v0.3.0`.
+* [925c58a](https://github.com/joseluisq/static-web-server/commit/925c58a) - Update dependencies (April 21th 2020).
+
+__Breaking change__
+
+This minor release contains one "breaking change" due to the feature _"configurable assets directory"_ ([2f7d042](https://github.com/joseluisq/static-web-server/commit/2f7d042)).
+
+__1. Configurable assets directory__
+
+This feature makes `assets` directory (`--assets` option and its equivalent `SERVER_ASSETS` env) configurable and independent.
+
+It means that `assets` directory is no more restricted to be relative to `root` directory. So absolute `paths` work now.
+
+__1.1. Caveat and solution for relative assets directory__
+
+If you are using an `assets` directory path relative to `root` (`v1.7.0` or early). For example if you have a root `./my-root` and assets `./my-assets`  directories. Just adjust your `assets` directory path to `./my-root/my-assets` or use another absolute path if you want.
+
+This is necessary because from now, the `assets` directory is treated as an independent path. So an absolute path is recomendable for both directories (root and assets).
+
+Otherwise, if you are using the default values provided by the server, you don't need to modify anything. Unless you had specified them yourself. If so, please proceed as explained above.
+
+__Refactorings__
+
+* [59777d7](https://github.com/joseluisq/static-web-server/commit/59777d7) - Empty response body on HEAD requests (also 07bf49b).
+* [57184a5](https://github.com/joseluisq/static-web-server/commit/57184a5) - Skip Gzip compression on HEAD requests.
+* [e40016d](https://github.com/joseluisq/static-web-server/commit/e40016d) - Root and assets directory paths checking.
+* [597fa97](https://github.com/joseluisq/static-web-server/commit/597fa97) - Improve logging server information.
+
+__Documentation__
+
+New options and modifications details were updated, please take a look the documentation on README file.
+
+* [8a5cf79](https://github.com/joseluisq/static-web-server/commit/8a5cf79) - Clarify assets default option value.
+* [0767071](https://github.com/joseluisq/static-web-server/commit/0767071) - Docker stack notes about assets directory functionality.
+
+__Codebase__
+
+* [a449eb3](https://github.com/joseluisq/static-web-server/commit/a449eb3) - Refactor path helpers implementation.
+* [2e2a6ac](https://github.com/joseluisq/static-web-server/commit/2e2a6ac) - Simplify error page implementation.
+* [ff4ec6e](https://github.com/joseluisq/static-web-server/commit/ff4ec6e) - Static file unit test cases.
+* [48b92ef](https://github.com/joseluisq/static-web-server/commit/48b92ef) - Skip files of Docker build context.
+
+## v1.7.0 - 2020-04-04
+
+__Features__
+
+- [052c18d](https://github.com/joseluisq/static-web-server/commit/052c18d) Binaries compiled with latest Rust [v1.42.0](https://blog.rust-lang.org/2020/03/12/Rust-1.42.html)
+- [4ae5b1a](https://github.com/joseluisq/static-web-server/commit/4ae5b1a) Update dependencies (April 4th 2020)
+
+__Linux binary size__
+
+Static binary size was increased (__0.1M__). From __3.9M__ (`v1.6.0`) to __4.0M__ (current version `v1.7.0`)
+
+__Codebase__
+- [18a6cd5](https://github.com/joseluisq/static-web-server/commit/18a6cd5) - Simplify makefile build tagets. Includes checksum task (also [1c3abdf](https://github.com/joseluisq/static-web-server/commit/1c3abdf))
+- Among other project structural improvements
+
+## v1.6.0 - 2020-03-04
+
+__Features__
+
+- [d0e7a7f](https://github.com/joseluisq/static-web-server/commit/d0e7a7f) Binaries compiled with latest Rust [v1.41.1](https://blog.rust-lang.org/2020/02/27/Rust-1.41.1.html).
+- [a2a4e98](https://github.com/joseluisq/static-web-server/commit/a2a4e98) Signals termination support. View feature issue  [#13](https://github.com/joseluisq/static-web-server/issues/13) resolved by PR [#14](https://github.com/joseluisq/static-web-server/pull/14).
+- [08d5847](https://github.com/joseluisq/static-web-server/commit/08d5847) Docker Alpine image upgraded to latest `v3.11`.
+- [20b9fd2](https://github.com/joseluisq/static-web-server/commit/20b9fd2) Docker entrypoint shell script for Alpine image. It gives the ability to pass flag arguments on a `docker run` execution or via the `command` option in a `docker-compose` file. Example: `docker run --rm static-web-server:alpine --help`. Flag arguments (with dashes) will be passed to `static-web-server`, otherwise they will be treated as shell commands. Example of an interactive run: `docker run --rm -it static-web-server:alpine sh`.
+- [881f37c](https://github.com/joseluisq/static-web-server/commit/881f37c) Dependency updates 03.03.2020. (also [a96e031](https://github.com/joseluisq/static-web-server/commit/a96e031), [c0e96e8](https://github.com/joseluisq/static-web-server/commit/c0e96e8))
+
+__Linux binary size__
+
+Static binary size was reduced (__0.3M__). From __4.2M__ (`v1.5.0`) to __3.9M__ (current version `v1.6.0`)
+
+
+__Codebase__
+
+- [bac3914](https://github.com/joseluisq/static-web-server/commit/bac3914) `openssl` as dev-dependency vendored.
+- [27dd9ff](https://github.com/joseluisq/static-web-server/commit/27dd9ff) Update makefile cross-compiling tasks using `rust-linux-darwin-builder` (also [38808fb](https://github.com/joseluisq/static-web-server/commit/38808fb)).
+- [478d100](https://github.com/joseluisq/static-web-server/commit/478d100) Rename Docker file templates. (also [ba105e4](https://github.com/joseluisq/static-web-server/commit/ba105e4))
+- [2adc5db](https://github.com/joseluisq/static-web-server/commit/2adc5db) Relocate Docker templates version script.
+- [34e0c59](https://github.com/joseluisq/static-web-server/commit/34e0c59) Minor documentation updates.
+
+
+## v1.5.0 - 2020-02-02
+
+__Features__
+
+- [6dc5056](https://github.com/joseluisq/static-web-server/commit/6dc5056) Feat: gzip compression on demand via `accept-encoding` header (PR [#12](https://github.com/joseluisq/static-web-server/pull/12) resolves [#10](https://github.com/joseluisq/static-web-server/issues/10)). 
+- [eaebf82](https://github.com/joseluisq/static-web-server/commit/eaebf82) Feat: Update dependencies Feb 02, 2020. It also resolves [#11](https://github.com/joseluisq/static-web-server/issues/11) `head` request method feature.
+- 
+## v1.4.0 - 2020-01-15
+
+__Features__
+
+- [d195e74](https://github.com/joseluisq/static-web-server/commit/d195e74) Feat: Add TLS/SSL support (PR [#9](https://github.com/joseluisq/static-web-server/pull/9) resolves [#2](https://github.com/joseluisq/static-web-server/issues/2)).  Introducing three new options such as `--tls`, `--tls-pkcs12` and `--tls-pkcs12-passwd` as well as their corresponding environment variables.
+- [63f2c82](https://github.com/joseluisq/static-web-server/commit/63f2c82) Docs: Add TLS/SSL section. View [usage](https://github.com/joseluisq/static-web-server#usage) on readme file.
+- [9c58c9c](https://github.com/joseluisq/static-web-server/commit/9c58c9c) Feat: Update to latest dependencies Jun 15, 2020.
+- Due TLS/SSL feature the __Linux__ binary size has incremented (`2,3MB`) from `1.8MB` to `4.1MB`.
+
+__Misc__
+
+- [cf0fb53](https://github.com/joseluisq/static-web-server/commit/cf0fb53) Docs: Update new options usage in readme file
+- [a7d55ad](https://github.com/joseluisq/static-web-server/commit/a7d55ad) Fix: Permissions for Rust project directory
+- [86f8d8a](https://github.com/joseluisq/static-web-server/commit/86f8d8a) Feat: Add more sections to Cargo manifest file
+
+## v1.3.0 - 2020-01-07
+
+__Features__
+
+- [9179bc3](https://github.com/joseluisq/static-web-server/commit/9179bc3) Add binary support for __Macos__ `x86_64-apple-darwin` thanks to [Rust Linux / Darwin Builder](https://github.com/joseluisq/rust-linux-darwin-builder). Resolves issue [#8](https://github.com/joseluisq/static-web-server/issues/8).
+- [1509f5f](https://github.com/joseluisq/static-web-server/commit/1509f5f) Update dependencies Jan 7, 2020
+
+__Misc__
+
+- [92b04e1](https://github.com/joseluisq/static-web-server/commit/92b04e1) Add Linux and Darwin makefile tasks
+- [a7a6d61](https://github.com/joseluisq/static-web-server/commit/a7a6d61) Fix tarball and shrinking makefile tasks
+- [56c425a](https://github.com/joseluisq/static-web-server/commit/56c425a) Remove Github release step from Drone pipeline
+
+## v1.2.0 - 2019-12-26
+
+__Features__
+
+-  [2979f7a](https://github.com/joseluisq/static-web-server/commit/2979f7a) Makes optional the _**error pages feature**_ introducing default response HTML messages for 400 and 50x errors. (PR [#7](https://github.com/joseluisq/static-web-server/pull/7) resolves [#6](https://github.com/joseluisq/static-web-server/issues/6)) 
+
+__Refactors__
+
+- [8a90486](https://github.com/joseluisq/static-web-server/commit/8a90486) Update pages and assets example
+- [3e64cbb](https://github.com/joseluisq/static-web-server/commit/3e64cbb) Update server config information
+
+__Misc__
+
+- [593ca98](https://github.com/joseluisq/static-web-server/commit/593ca98) Minor documentation updates
+- [9f63108](https://github.com/joseluisq/static-web-server/commit/9f63108) Disable Travis CI email notifications
+
+## v1.1.0 - 2019-12-25
+
+__Features__
+
+- Rust [v1.40.0](https://blog.rust-lang.org/2019/12/19/Rust-1.40.0.html) ([73528e3](https://github.com/joseluisq/static-web-server/commit/73528e3) 2019-12-16)
+- CLI options support. PR [#4](https://github.com/joseluisq/static-web-server/pull/4) by [@dlalic](https://github.com/dlalic) resolves [#1](https://github.com/joseluisq/static-web-server/issues/1). See README file for more details.
+- Error pages support. PR [#5](https://github.com/joseluisq/static-web-server/pull/5) resolves [#3](https://github.com/joseluisq/static-web-server/issues/3). See README file for more details.
+- Binary size increment (`0.4MB`) from `1.4MB` to `1.8MB`.
+
+__Breaking changes__
+
+Due __error HTML pages feature #5__ now the server requires two settings for display 404 and 50x errors.
+
+For example if you use environment variables try to append following variables with the two paths of your HTML pages:
+
+```sh
+#  HTML file path for 404 errors
+SERVER_ERROR_PAGE_404=./public/404.html
+# HTML file path for 50x errors
+SERVER_ERROR_PAGE_50X=./public/50x.html
+```
+
+Or via CLI options:
+
+```
+--page404 <page404>    HTML file path for 404 errors [env: SERVER_ERROR_PAGE_404=]  [default: ./public/404.html]
+--page50x <page50x>    HTML file path for 50x errors [env: SERVER_ERROR_PAGE_50X=]  [default: ./public/50x.html]
+```
+
+__Refactors__
+- [112a1f3](https://github.com/joseluisq/static-web-server/commit/112a1f3) Update dockefile templates metadata
+- [b34624c](https://github.com/joseluisq/static-web-server/commit/b34624c) Dependency updates 
+- [5e9abd4](https://github.com/joseluisq/static-web-server/commit/5e9abd4) Apply cargo fix --edition to entire project 
+- [4712b9c](https://github.com/joseluisq/static-web-server/commit/4712b9c) Minor tweaks for Cargo make tasks
+- [6fb65b2](https://github.com/joseluisq/static-web-server/commit/6fb65b2) Rename `env.rs` to `config.rs`.
+- New updated fork dependency [iron-staticfile-middleware](https://github.com/joseluisq/iron-staticfile-middleware)
+- Minor project code base improvements
+
+## v1.0.0 - 2019-11-28
+
+This is the first major release :zap:
+
+__Features__
+
+- Rust [v1.39.0](https://blog.rust-lang.org/2019/11/07/Rust-1.39.0.html) ([4560ea788](https://github.com/joseluisq/static-web-server/commit/4560ea788) 2019-11-04)
+- Binary size reduction for this current release from `1.6MB` to `1.4MB`.
+
+## v1.0.0-beta.4 - 2019-11-28
+
+__Updates__
+
+- [eb96054](https://github.com/joseluisq/static-web-server/commit/eb96054) Refactor project structure
+- [eb96054](https://github.com/joseluisq/static-web-server/commit/eb96054) Update dependencies
+- [eb96054](https://github.com/joseluisq/static-web-server/commit/eb96054) Support for latest Rust [v1.39.0](https://blog.rust-lang.org/2019/11/07/Rust-1.39.0.html) (`[4560ea7](https://github.com/joseluisq/static-web-server/commit/4560ea7)` 2019-11-04)
+
+__Deployment__
+
+- [2fd780e](https://github.com/joseluisq/static-web-server/commit/2fd780e) Fix Cargo package config file name and version extraction 
+- [3a69088](https://github.com/joseluisq/static-web-server/commit/3a69088) Fix release tarball files generation
+
+__Misc__
+
+- Binary size reduction for this current release from `1.6M` to `1.4M`.
+
+## v1.0.0-beta.3 - 2019-10-10
+__Features__
+
+- Add [Rust v1.38.0](https://blog.rust-lang.org/2019/09/26/Rust-1.38.0.html) ([625451e](https://github.com/joseluisq/static-web-server/commit/625451e) 2019-09-23) compiling support.
+
+## v1.0.0-beta.2 - 2019-09-05
diff --git a/docs/content/changelog-v2.md b/docs/content/changelog-v2.md
new file mode 100644
index 00000000..a8048049
--- /dev/null
+++ b/docs/content/changelog-v2.md
@@ -0,0 +1,370 @@
+# Static Web Server v2 - Changelog
+
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
+and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+
+_**Note:** See changelog for v1 under the [1.x](https://github.com/joseluisq/static-web-server/blob/1.x/CHANGELOG.md) branch._
+
+## v2.1.0 - 2021-10-23
+
+__Fixes__
+
+* [5f3842b](https://github.com/joseluisq/static-web-server/commit/5f3842b) Update dependencies including Hyper, Tokio, h2, futures, tracing bug/security fixes and related crates (also [5528bcb](https://github.com/joseluisq/static-web-server/commit/5528bcb), [dc98fbb](https://github.com/joseluisq/static-web-server/commit/dc98fbb)).
+* [62e98c6](https://github.com/joseluisq/static-web-server/commit/62e98c6) `aarch64-unknown-linux-musl` build fails using Rust nightly.
+
+__Features__
+
+- [abc76a8](https://github.com/joseluisq/static-web-server/commit/abc76a8) Basic HTTP Authentication support via the new `--basic-auth` option. PR [#55](https://github.com/joseluisq/static-web-server/pull/55) resolves [#53](https://github.com/joseluisq/static-web-server/issues/53) suggested by [@bjornharrtell](https://github.com/bjornharrtell).
+
+__Refactorings__
+
+- [0273611](https://github.com/joseluisq/static-web-server/commit/0273611) Prefer `futures-util` over `futures` dependency.
+- [c3bfa68](https://github.com/joseluisq/static-web-server/commit/c3bfa68) Use [Rust 1.56.0 (2021 Edition)](https://blog.rust-lang.org/2021/10/21/Rust-1.56.0.html) on CI.
+
+__Docs__
+
+- [f89c5c9](https://github.com/joseluisq/static-web-server/commit/f89c5c9) Describe Basic HTTP Authentication feature.
+- [a6d0e53](https://github.com/joseluisq/static-web-server/commit/a6d0e53) Minor general description improvements.
+
+## v2.0.3 - 2021-09-29
+
+__Fixes__
+
+* [5de5874](https://github.com/joseluisq/static-web-server/commit/5de5874) Update dependencies including Hyper, Tokio, http, futures, tracing bug fixes and related crates (also [1c6c873](https://github.com/joseluisq/static-web-server/commit/1c6c873) [34efa49](https://github.com/joseluisq/static-web-server/commit/34efa49), [6fb832b](https://github.com/joseluisq/static-web-server/commit/6fb832b))
+
+__Refactorings__
+
+- [b2f09ab](https://github.com/joseluisq/static-web-server/commit/b2f09ab) Remove optional extra Docker volume `/public` of `scratch` and `alpine` images. PR [#52](https://github.com/joseluisq/static-web-server/pull/52) resolves [#51](https://github.com/joseluisq/static-web-server/issues/51) reported by [@bergi9](https://github.com/bergi9).
+- [906106f](https://github.com/joseluisq/static-web-server/commit/906106f) Remove never read `origins_str` field on Cors module.
+- [6f7a6bc](https://github.com/joseluisq/static-web-server/commit/6f7a6bc) Fix Rust edition idioms.
+
+__Tests__
+
+* [166e869](https://github.com/joseluisq/static-web-server/commit/166e869) More Cors test cases.
+
+## v2.0.2 - 2021-08-29
+
+__Fixes__
+
+* [ab83e2a](https://github.com/joseluisq/static-web-server/commit/ab83e2a) Update dependencies including Hyper, h2, httparse bug fixes. Tokio leak fix and related crates (also [adb8ca6](https://github.com/joseluisq/static-web-server/commit/adb8ca6))
+
+## v2.0.1 - 2021-08-18
+
+__Fixes__
+
+* [2459ec4](https://github.com/joseluisq/static-web-server/commit/2459ec4) Return incorrect first bytes range when final bytes are requested. For example a request using `Range: bytes=-10` header returned incorrectly the first 10 bytes rather than the last 10 ones.
+
+__Updates__
+
+* [122e1bd](https://github.com/joseluisq/static-web-server/commit/122e1bd) Update dependencies including Hyper and Tokio bug fixes, Brotli, Serde and related crates (also [0b413f9](https://github.com/joseluisq/static-web-server/commit/0b413f9), [fa130fa](https://github.com/joseluisq/static-web-server/commit/fa130fa), [167e1de](https://github.com/joseluisq/static-web-server/commit/167e1de), [fa32375](https://github.com/joseluisq/static-web-server/commit/fa32375), [2d1c5f3](https://github.com/joseluisq/static-web-server/commit/2d1c5f3))
+
+__Refactorings__
+
+* [8fc1812](https://github.com/joseluisq/static-web-server/commit/8fc1812) Remove needless borrow on static file and handle modules.
+* [27f5687](https://github.com/joseluisq/static-web-server/commit/27f5687) UTF-8 for default Docker `index.html` file.
+* [ffb2e54](https://github.com/joseluisq/static-web-server/commit/ffb2e54) Update Rust stable to 1.54.0 on CI.
+
+__Tests__
+
+* [5cdcffc](https://github.com/joseluisq/static-web-server/commit/5cdcffc) More directory listing test cases.
+* [c7e8ec9](https://github.com/joseluisq/static-web-server/commit/c7e8ec9) More static files test cases.
+* [37f2371](https://github.com/joseluisq/static-web-server/commit/37f2371) More static file methods and compression test cases.
+* [dd7f995](https://github.com/joseluisq/static-web-server/commit/dd7f995) More static file test cases for during request handling.
+
+__Docs__
+
+* [f389cbc](https://github.com/joseluisq/static-web-server/commit/f389cbc) Minor badges and link updates.
+
+## v2.0.0 - 2021-07-18
+
+The second major stable release is finally available after around half a year of work. It introduces notable changes including new features, performance improvements and new targets support like ARM64 and OSes like FreeBSD.
+
+This version was re-written almost from scratch on top of [Hyper](https://github.com/hyperium/hyper) and [Tokio](https://github.com/tokio-rs/tokio) runtime which give us the [Rust asynchronous ability](https://rust-lang.github.io/async-book/01_getting_started/02_why_async.html) by default and latest HTTP/1 - HTTP/2 implementation improvements.
+However it still try to keep the same principles of its first version: lightness and easy to use. Therefore a migration should not be a big deal.
+
+Your feedback is very appreciated.
+
+### Features
+
+This list only shows new features not present in previous v1.
+
+- Static Web Server is now asynchronous by default powered by latest Hyper and Tokio.
+- It supports opt-in GZip, Deflate and Brotli compression for text-based web files only.
+- HTTP/2 + TLS support (via `--http2` option).
+- [Security headers](https://github.com/joseluisq/static-web-server/pull/44) like STS, CSP and others for HTTP/2 by default.
+- Customizable number of worker threads (via `--threads-multiplier` option).
+- [Redesigned directory listing](https://github.com/joseluisq/static-web-server/pull/41) (via `--directory-listing` option).
+- Cache control header is now optional (via `--cache-control-headers`).
+- Ability to accept a socket listener as a file descriptor for use in sandboxing and on-demand applications (E.g [systemd](http://0pointer.de/blog/projects/socket-activation.html)). Via `--fd` option. Thanks to [@tim-seoss](https://github.com/tim-seoss).
+- Binaries for various i686/x86_64 targets (Linux/Windows/FreeBSD) and ARM/ARM64 (Linux/Macos M1)
+
+For the full list, options details and usage please check it out the [README](https://github.com/joseluisq/static-web-server/blob/master/README.md) file.
+
+### Breaking changes
+
+This major version has few breaking changes.
+However a migration should not represent a problem. Please have in mind the following changes:
+
+- The server supports now only a root directory path (via `--root` or its equivalent env) so an assets path option is no longer required.
+- Cache control headers is applied to assets in an arbitrary manner. See [src/control_headers.rs](https://github.com/joseluisq/static-web-server/blob/master/src/control_headers.rs) for more details.
+- OpenSSL TLS for HTTP/1 is not longer supported instead for the HTTP/2 + TLS (via `--http2` option) the server uses [h2](https://github.com/hyperium/h2) which is on top of [Rustls](https://github.com/ctz/rustls). It means that instead of using a .p12 or .pfx file you can now use only a certificate file along with its private key. More details on [README](https://github.com/joseluisq/static-web-server/blob/master/README.md) file.
+
+The rest of known options are equivalent to v1 except the new ones of course.
+However it's worth to always recommend to test this server update first with your applications on a development environment or similar.
+
+Please see the full list of options with their details on the [README](https://github.com/joseluisq/static-web-server/blob/master/README.md) file.
+
+---
+
+Changes after the latest `v2.0.0-beta.7` release:
+
+__Performance__
+
+- [157ade1](https://github.com/joseluisq/static-web-server/commit/157ade1) Decrease few allocations during 404/50x error page responses.
+- [941572c](https://github.com/joseluisq/static-web-server/commit/941572c) Reduce few allocations on control headers checking.
+
+__Features__
+
+- [012b626](https://github.com/joseluisq/static-web-server/commit/012b626) Cache control headers optional via `--cache-control-headers`.
+
+__Refactorings__
+
+- [5aa587f](https://github.com/joseluisq/static-web-server/commit/5aa587f) Minor syntax improvements on static file module.
+- [45988db](https://github.com/joseluisq/static-web-server/commit/45988db) Minor style updates on server module.
+
+__Docs__
+
+- [5bcc629](https://github.com/joseluisq/static-web-server/commit/5bcc629) FreeBSD targets description.
+- [dffdf5c](https://github.com/joseluisq/static-web-server/commit/dffdf5c) Changelog support.
+
+## v2.0.0-beta.7 - 2021-07-09
+
+Seventh and last beta release `v2.0.0-beta.7` with notable changes.
+
+__Updates__
+
+- [9e90b38](https://github.com/joseluisq/static-web-server/commit/9e90b38) Hyper 0.14.10 dependency update which fixes two [security issues](https://github.com/hyperium/hyper/releases/tag/v0.14.10).
+
+__Features__
+
+- [432b591](https://github.com/joseluisq/static-web-server/commit/432b591) FreeBSD i686 and x86_64 targets support.
+  - i686-unknown-freebsd
+  - x86_64-unknown-freebsd
+
+Find the binaries for new targets attached to this release.
+
+__Performance__
+
+- [70a76ed](https://github.com/joseluisq/static-web-server/commit/70a76ed) Optimize root path of static file module which increases performance and reduces memory usage.
+
+__Codebase__
+
+- [2aa130d](https://github.com/joseluisq/static-web-server/commit/2aa130d) Move source `./public` to `./docker` dir.
+
+## v2.0.0-beta.6 - 2021-07-07
+
+Sixth beta release `v2.0.0-beta.6` with notable changes.
+
+__Updates__
+
+- [33040d0](https://github.com/joseluisq/static-web-server/commit/33040d0) Update dependencies including latest Tokio and related crates (also [a4ef322](https://github.com/joseluisq/static-web-server/commit/a4ef322), [26b3fbc](https://github.com/joseluisq/static-web-server/commit/26b3fbc), [e07c333](https://github.com/joseluisq/static-web-server/commit/e07c333)).
+
+__Fixes__
+
+- [a1b7836](https://github.com/joseluisq/static-web-server/commit/a1b7836) Missing `Content-Type` header for directory listing index and error pages.
+
+__Features__
+
+- [e2bf778](https://github.com/joseluisq/static-web-server/commit/e2bf778) Windows 64-bit target support. It also improves Ctrl+C signal handling cross-platform. Note Windows ARM64 is in stand by temporarily, see README file for more details.
+- [0fa5015](https://github.com/joseluisq/static-web-server/commit/0fa5015) Windows/Linux i686 targets support and one Windows x86_64
+  - i686-pc-windows-msvc
+  - i686-unknown-linux-gnu
+  - i686-unknown-linux-musl
+  - x86_64-pc-windows-gnu
+- [59cf8bc](https://github.com/joseluisq/static-web-server/commit/59cf8bc) More text-based mime types for compression.
+  - text/csv
+  - text/calendar
+  - text/markdown
+  - text/x-yaml
+  - text/x-toml
+  - application/rtf
+  - application/xhtml+xml
+
+Find the binaries for new targets attached to this release and all targets supported also described in the README file.
+
+__Refactorings__
+
+- [2a699e4](https://github.com/joseluisq/static-web-server/commit/2a699e4) Follow symlinks during directory listing, displaying the index page properly for symlinks that points to directories or files.
+- [b4f1bcc](https://github.com/joseluisq/static-web-server/commit/b4f1bcc) Prefer stabilized `Poll::map_err` on compression stream.
+- [55ffd06](https://github.com/joseluisq/static-web-server/commit/55ffd06) Handle potencial panic for 404/50x error page responses.
+- [920acb2](https://github.com/joseluisq/static-web-server/commit/920acb2) Prefer `to_owned()` for string literals over `to_string()` in some cases.
+- [c0dca6e](https://github.com/joseluisq/static-web-server/commit/c0dca6e) Improve directory path scanning when directory listing.
+- [0ed6287](https://github.com/joseluisq/static-web-server/commit/0ed6287) Auto compression error result logging.
+- [87b8744](https://github.com/joseluisq/static-web-server/commit/87b8744) Minor server config info updates.
+- [b025536](https://github.com/joseluisq/static-web-server/commit/b025536) Minor code styling and docs changes.
+
+__Release notes__ 
+
+FreeBSD i686/x86_64 binaries are coming in next and last beta release which is very close to the final v2 releasing.
+
+## v2.0.0-beta.5 - 2021-06-22
+
+Fifth beta release `v2.0.0-beta.5` with notable changes.
+
+__Updates__
+
+- [5343a22](https://github.com/joseluisq/static-web-server/commit/5343a22) Update dependencies including latest Hyper, Tokio and related crates. (also [bcb8493](https://github.com/joseluisq/static-web-server/commit/bcb8493), [e51f969](https://github.com/joseluisq/static-web-server/commit/e51f969), [e51f969](https://github.com/joseluisq/static-web-server/commit/e51f969))
+
+__Features__
+
+- [c96af53](https://github.com/joseluisq/static-web-server/commit/c96af53) Security headers for HTTP/2 by default (`--security-headers`). PR [#44](https://github.com/joseluisq/static-web-server/pull/44) resolves [#39](https://github.com/joseluisq/static-web-server/issues/39)
+- [3c95d1a](https://github.com/joseluisq/static-web-server/commit/3c95d1a) Support five more targets. (also [e6faff8](https://github.com/joseluisq/static-web-server/commit/e6faff8))
+  - `x86_64-unknown-linux-gnu`
+  - `aarch64-apple-darwin`
+  - `aarch64-unknown-linux-gnu`
+  - `aarch64-unknown-linux-musl`
+  - `arm-unknown-linux-gnueabihf`
+
+Find binaries for those targets attached to this release.
+
+__Note about releases__
+
+[Rust Nightly](https://doc.rust-lang.org/book/appendix-07-nightly-rust.html) is powering the releases from now on the CI. This makes possible to reach more targets in the future.
+For more details about it see [Rust Nightly targets supported](https://doc.rust-lang.org/nightly/rustc/platform-support.html).
+However clarify that the `static-web-server` project is not using any nightly feature but only _**stable Rust**_ ones and the project is also tested against nightly and stable Rust on CI periodically in order to be notified in case of _"regressions or bugs introduced in Nightly Rust"_. However it is [known](https://stackoverflow.com/a/56067977/2510591) that the nightly compiler is very stable therefore the reason why we have chosen it for release targets via CI like many other popular Rust projects.
+In any case, please don't hesitate to file an issue or send a PR.
+
+__Refactorings__
+
+- [2b2da3a](https://github.com/joseluisq/static-web-server/commit/2b2da3a) `--http2-tls-cert` and `--http2-tls-key` options now require `--http2` enabled.
+- [6fe04a5](https://github.com/joseluisq/static-web-server/commit/6fe04a5) Update Docker files in order to get the new Linux binary source.
+- [77d231c](https://github.com/joseluisq/static-web-server/commit/77d231c) Drop redudant reference on CORS module.
+- [d5189ec](https://github.com/joseluisq/static-web-server/commit/d5189ec) Drop root arc-path on static files module.
+
+## v2.0.0-beta.4 - 2021-06-02
+
+Fourth beta release `v2.0.0-beta.4` with notable changes.
+
+__Updates__
+
+- [a8b9379](https://github.com/joseluisq/static-web-server/commit/a8b9379) Binaries compiled with latest Rust [1.52.1](https://blog.rust-lang.org/2021/05/10/Rust-1.52.1.html) release.
+- [c3389cc](https://github.com/joseluisq/static-web-server/commit/c3389cc) Update dependencies including latest Hyper, Tokio and related crates. (also [7cbe483](https://github.com/joseluisq/static-web-server/commit/7cbe483))
+
+__Features__
+
+- [21bdf8c](https://github.com/joseluisq/static-web-server/commit/21bdf8c) Support inheriting TCP listener from parent process via file descriptor (`-f`, `--fd`). PR [#40](https://github.com/joseluisq/static-web-server/pull/40) by [@tim-seoss](https://github.com/tim-seoss).
+- [5428eb3](https://github.com/joseluisq/static-web-server/commit/5428eb3) Redefined directory listing (`-z`, `--directory-listing`). PR [#41](https://github.com/joseluisq/static-web-server/pull/41)
+- [d389803](https://github.com/joseluisq/static-web-server/commit/d389803) Opt-in response body auto compression (Gzip, Deflate, Brotli) based on `Accept-Encoding` header (`-x`, `--compression`).
+- [74b9eaf](https://github.com/joseluisq/static-web-server/commit/74b9eaf) Just one file associated metadata per request as possible.
+- [af9a329](https://github.com/joseluisq/static-web-server/commit/af9a329) CORS support (`-c`, ` --cors-allow-origins`).
+- [6ed3fe5](https://github.com/joseluisq/static-web-server/commit/6ed3fe5) Unix-like termination signals handling.
+
+__Refactorings__
+
+- [a8d462a](https://github.com/joseluisq/static-web-server/commit/a8d462a) Drop `Warp` in favor of just `Hyper` + `Tokio`. PR [#38](https://github.com/joseluisq/static-web-server/pull/38)
+- [04ec1b1](https://github.com/joseluisq/static-web-server/commit/04ec1b1) One worker thread per available core by default (`-n`, `--threads-multiplier`).
+- [991d4b8](https://github.com/joseluisq/static-web-server/commit/991d4b8) Introduce a custom Hyper service implementation for the HTTP1 & HTTP2 web servers.
+- [58ff9b7](https://github.com/joseluisq/static-web-server/commit/58ff9b7) Reject non `HEAD` or `GET` requests on static assets and error page handlers.
+- [5cede7e](https://github.com/joseluisq/static-web-server/commit/5cede7e) Log info for compression and directory listing features.
+
+__Docs__
+
+All feature flags as well as their equivalent environment variables are described on the updated [README](https://github.com/joseluisq/static-web-server#usage) file.
+
+## v2.0.0-beta.3 - 2021-04-20
+
+Third beta release `v2.0.0-beta.3` with notable changes.
+
+__Updates__
+
+- [7f29c90](https://github.com/joseluisq/static-web-server/commit/7f29c90) Binaries compiled with latest Rust [1.51.0](https://blog.rust-lang.org/2021/03/25/Rust-1.51.0.html) release.
+- [97d75e0](https://github.com/joseluisq/static-web-server/commit/97d75e0) [Alpine 3.13](https://alpinelinux.org/posts/Alpine-3.13.0-released.html) Docker image.
+- [97d75e0](https://github.com/joseluisq/static-web-server/commit/97d75e0) Update dependencies including latest **Tokio** `v1`,  **Warp** `v0.3` (with **Hyper** `v0.14`) and related crates (also [e9384e9](https://github.com/joseluisq/static-web-server/commit/e9384e9), [5d4421d](https://github.com/joseluisq/static-web-server/commit/5d4421d))
+
+__Refactorings__
+
+- [5d8b266](https://github.com/joseluisq/static-web-server/commit/5d8b266) Static server configuration and static default error pages content.
+- [e853410](https://github.com/joseluisq/static-web-server/commit/e853410) Drop support for Deflate compression.
+- [bbb5a8f](https://github.com/joseluisq/static-web-server/commit/bbb5a8f) Improve log information on server runtime setup.
+- [c05471f](https://github.com/joseluisq/static-web-server/commit/c05471f) Tokio server tasks simplifications.
+- [7ea40a7](https://github.com/joseluisq/static-web-server/commit/7ea40a7) Minor CLI typos.
+
+__Fixes__
+
+- [99b8b7e](https://github.com/joseluisq/static-web-server/commit/99b8b7e) Linking error for `ring` crate during Darwin build.
+
+__Docs__
+
+- [3c36c9b](https://github.com/joseluisq/static-web-server/commit/3c36c9b) Minor README description improvements.
+
+## v2.0.0-beta.2 - 2021-01-30
+
+Second beta release `v2.0.0-beta.2` with notable changes.
+
+__Updates__
+
+- [9867d71](https://github.com/joseluisq/static-web-server/commit/9867d71) Update dependencies including latest **Tokio** `v1`,  **Warp** `v0.3` (with **Hyper** `v0.14`) and related crates. (also [a4421c6](https://github.com/joseluisq/static-web-server/commit/a4421c6), [960a681](https://github.com/joseluisq/static-web-server/commit/960a681), [960a681](https://github.com/joseluisq/static-web-server/commit/960a681))
+
+__Features__
+
+- [3007e74](https://github.com/joseluisq/static-web-server/commit/3007e74) **Project sponsor support.** Consider to support the project via [github.com/sponsors/joseluisq](https://github.com/sponsors/joseluisq) or [paypal.me/joseluisqs](https://paypal.me/joseluisqs).
+- [360ae99](https://github.com/joseluisq/static-web-server/commit/360ae99) Worker threads multiplier option `--threads-multiplier` which provides the ability to customize number of worker threads.
+- [ed0d6ac](https://github.com/joseluisq/static-web-server/commit/ed0d6ac) Custom error pages support.
+- [4667b10](https://github.com/joseluisq/static-web-server/commit/4667b10) HTTP/2 + TLS support.
+- [8c4ce94](https://github.com/joseluisq/static-web-server/commit/8c4ce94) CORS support.
+
+More details about features on [README](https://github.com/joseluisq/static-web-server/) file.
+
+__Refactorings__
+
+- [6d3e2d1](https://github.com/joseluisq/static-web-server/commit/6d3e2d1) Remove redundant `'static` lifetime on constants.
+- [866c7cd](https://github.com/joseluisq/static-web-server/commit/866c7cd) Remove Tokio `macros` feature.
+- [f7f2bf6](https://github.com/joseluisq/static-web-server/commit/f7f2bf6) Some improvement suggestions by `Clippy`.
+- [bff49a0](https://github.com/joseluisq/static-web-server/commit/bff49a0) Few improvement on filter and helper modules.
+
+__Codebase__
+
+- [7265f6b](https://github.com/joseluisq/static-web-server/commit/7265f6b) Github Actions as new CI.
+- [c63b549](https://github.com/joseluisq/static-web-server/commit/c63b549) Remove Travis CI.
+- [65250c0](https://github.com/joseluisq/static-web-server/commit/65250c0) Minor simplications on server module.
+- [b94fe72](https://github.com/joseluisq/static-web-server/commit/b94fe72) Update core modules structure.
+- [da5bdc3](https://github.com/joseluisq/static-web-server/commit/da5bdc3) Re-export few core lib modules.
+- [57c27f4](https://github.com/joseluisq/static-web-server/commit/57c27f4) Deny(warnings) on lib
+- [a3744d4](https://github.com/joseluisq/static-web-server/commit/a3744d4) Simplify conditionals on rejection filter.
+
+__Docs__
+
+- [933a3c4](https://github.com/joseluisq/static-web-server/commit/933a3c4) Feature documentations updates (also [0ef21c4](https://github.com/joseluisq/static-web-server/commit/0ef21c4))
+- [78033d0](https://github.com/joseluisq/static-web-server/commit/78033d0) CLI arguments and environment variables descriptions.
+
+## v2.0.0-beta.1 - 2021-01-12
+
+First major beta release `v2.0.0-beta.1` with notable changes.
+
+#### Built-in features
+
+It uses **Tokio** `v0.2` and **Warp** `v0.2` (**Hyper** `v0.13`).
+PR [#28](https://github.com/joseluisq/static-web-server/pull/28)
+
+- Environment variables and CLI arguments setup
+- Lightweight and configurable logging
+- Head responses support
+- GZip, Deflate and Brotli compression support
+- Compression for text-based web file only
+- Termination signal handling.
+- Default error pages (404, 500x, etc)
+- GZip, Deflate or Brotli compression can be optional
+- Compression on demand via `Accept-Encoding` header
+- Cache control headers for assets
+- Docker scratch & Alpine images
+- MacOs binary support
+
+#### Bugfixes
+
+- Resolves [#24](https://github.com/joseluisq/static-web-server/issues/24) - Error on 8GB file
+
+#### Additional features
+
+- Resolves [#17](https://github.com/joseluisq/static-web-server/issues/17) - Make assets directory path optional. Since this major release doesn't include an assets dir just a root.
diff --git a/docs/content/configuration/command-line-arguments.md b/docs/content/configuration/command-line-arguments.md
new file mode 100644
index 00000000..3815b2b5
--- /dev/null
+++ b/docs/content/configuration/command-line-arguments.md
@@ -0,0 +1,83 @@
+# Command-Line Arguments
+
+The server can be configured via the following command-line arguments.
+
+!!! tip "Remember"
+    - Command-line arguments are equivalent to their [environment variables](./environment-variables.md).
+    - Command-line arguments take precedence over their equivalent environment variables.
+
+
+```
+$ static-web-server -h
+
+static-web-server 2.1.0
+Jose Quintana <https://git.io/joseluisq>
+A blazing fast and asynchronous web server for static files-serving.
+
+USAGE:
+    static-web-server [OPTIONS]
+
+FLAGS:
+    -h, --help       Prints help information
+    -V, --version    Prints version information
+
+OPTIONS:
+        --basic-auth <basic-auth>
+            It provides The "Basic" HTTP Authentication scheme using credentials as "user-id:password" pairs. Password
+            must be encoded using the "BCrypt" password-hashing function [env: SERVER_BASIC_AUTH=]  [default: ]
+    -e, --cache-control-headers <cache-control-headers>
+            Enable cache control headers for incoming requests based on a set of file types. The file type list can be
+            found on `src/control_headers.rs` file [env: SERVER_CACHE_CONTROL_HEADERS=]  [default: true]
+    -x, --compression <compression>
+            Gzip, Deflate or Brotli compression on demand determined by the Accept-Encoding header and applied to text-
+            based web file types only [env: SERVER_COMPRESSION=]  [default: true]
+    -c, --cors-allow-origins <cors-allow-origins>
+            Specify an optional CORS list of allowed origin hosts separated by comas. Host ports or protocols aren't
+            being checked. Use an asterisk (*) to allow any host [env: SERVER_CORS_ALLOW_ORIGINS=]  [default: ]
+    -z, --directory-listing <directory-listing>
+            Enable directory listing for all requests ending with the slash character (‘/’) [env:
+            SERVER_DIRECTORY_LISTING=]  [default: false]
+    -f, --fd <fd>
+            Instead of binding to a TCP port, accept incoming connections to an already-bound TCP socket listener on the
+            specified file descriptor number (usually zero). Requires that the parent process (e.g. inetd, launchd, or
+            systemd) binds an address and port on behalf of static-web-server, before arranging for the resulting file
+            descriptor to be inherited by static-web-server. Cannot be used in conjunction with the port and host
+            arguments. The included systemd unit file utilises this feature to increase security by allowing the static-
+            web-server to be sandboxed more completely [env: SERVER_LISTEN_FD=]
+    -a, --host <host>
+            Host address (E.g 127.0.0.1 or ::1) [env: SERVER_HOST=]  [default: ::]
+
+    -t, --http2 <http2>
+            Enable HTTP/2 with TLS support [env: SERVER_HTTP2_TLS=]  [default: false]
+
+        --http2-tls-cert <http2-tls-cert>
+            Specify the file path to read the certificate [env: SERVER_HTTP2_TLS_CERT=]  [default: ]
+
+        --http2-tls-key <http2-tls-key>
+            Specify the file path to read the private key [env: SERVER_HTTP2_TLS_KEY=]  [default: ]
+
+    -g, --log-level <log-level>
+            Specify a logging level in lower case. Values: error, warn, info, debug or trace [env: SERVER_LOG_LEVEL=]
+            [default: error]
+        --page404 <page404>
+            HTML file path for 404 errors. If path is not specified or simply don't exists then server will use a
+            generic HTML error message [env: SERVER_ERROR_PAGE_404=]  [default: ./public/404.html]
+        --page50x <page50x>
+            HTML file path for 50x errors. If path is not specified or simply don't exists then server will use a
+            generic HTML error message [env: SERVER_ERROR_PAGE_50X=]  [default: ./public/50x.html]
+    -p, --port <port>                                      Host port [env: SERVER_PORT=]  [default: 80]
+    -d, --root <root>
+            Root directory path of static files [env: SERVER_ROOT=]  [default: ./public]
+
+        --security-headers <security-headers>
+            Enable security headers by default when HTTP/2 feature is activated. Headers included: "Strict-Transport-
+            Security: max-age=63072000; includeSubDomains; preload" (2 years max-age), "X-Frame-
+            Options: DENY", "X-XSS-Protection: 1; mode=block" and "Content-Security-Policy: frame-ancestors
+            'self'" [env: SERVER_SECURITY_HEADERS=]  [default: false]
+    -n, --threads-multiplier <threads-multiplier>
+            Number of worker threads multiplier that'll be multiplied by the number of system CPUs using the formula:
+            `worker threads = number of CPUs * n` where `n` is the value that changes here. When multiplier value is 0
+            or 1 then one thread per core is used. Number of worker threads result should be a number between 1 and
+            32,768 though it is advised to keep this value on the smaller side [env: SERVER_THREADS_MULTIPLIER=]
+            [default: 1]
+```
diff --git a/docs/content/configuration/environment-variables.md b/docs/content/configuration/environment-variables.md
new file mode 100644
index 00000000..5e1b62d8
--- /dev/null
+++ b/docs/content/configuration/environment-variables.md
@@ -0,0 +1,58 @@
+# Environment Variables
+
+The server can be configured via the following environment variables.
+
+!!! tip "Remember"
+    - Environment variables are equivalent to their command-line arguments.
+    - [Command line arguments](./command-line-arguments.md) take precedence over their equivalent environment variables.
+
+### SERVER_HOST
+The address of the host (E.g 127.0.0.1). Default `[::]`.
+
+### SERVER_PORT
+The port of the host. Default `80`.
+
+### SERVER_LISTEN_FD
+Optional file descriptor number (e.g. `0`) to inherit an already-opened TCP listener on (instead of using `SERVER_HOST` and/or `SERVER_PORT`). Default empty (disabled).
+
+### SERVER_ROOT
+Relative or absolute root directory path of static files. Default `./public`.
+
+### SERVER_LOG_LEVEL
+Specify a logging level in lower case. Possible values are `error`, `warn`, `info`, `debug` or `trace`. Default `error`.
+
+### SERVER_ERROR_PAGE_404
+HTML file path for 404 errors. If path is not specified or simply don't exists then server will use a generic HTML error message. Default `./public/404.html`.
+
+### SERVER_ERROR_PAGE_50X
+HTML file path for 50x errors. If path is not specified or simply don't exists then server will use a generic HTML error message. Default `./public/50x.html`
+
+### SERVER_THREADS_MULTIPLIER
+Number of worker threads multiplier that'll be multiplied by the number of system CPUs using the formula: `worker threads = number of CPUs * n` where `n` is the value that changes here. When multiplier value is 0 or 1 then the `number of CPUs` is used. Number of worker threads result should be a number between 1 and 32,768 though it is advised to keep this value on the smaller side. Default one thread per core.
+
+### SERVER_HTTP2_TLS
+Enable HTTP/2 with TLS support. Make sure also to adjust current server port. Default `false` (disabled).
+
+### SERVER_HTTP2_TLS_CERT
+Specify the file path to read the certificate. Default empty (disabled).
+
+### SERVER_HTTP2_TLS_KEY
+Specify the file path to read the private key. Default empty (disabled).
+
+### SERVER_CORS_ALLOW_ORIGINS
+Specify a optional CORS list of allowed origin hosts separated by comas. Host ports or protocols aren't being checked. Use an asterisk (*) to allow any host. Default empty (disabled).
+
+### SERVER_COMPRESSION
+`Gzip`, `Deflate` or `Brotli` compression on demand determined by the `Accept-Encoding` header and applied to text-based web file types only. See [ad-hoc mime-type list](https://github.com/joseluisq/static-web-server/blob/master/src/compression.rs#L20). Default `true` (enabled).
+
+### SERVER_DIRECTORY_LISTING
+Enable directory listing for all requests ending with the slash character (‘/’). Default `false` (disabled).
+
+### SERVER_SECURITY_HEADERS
+Enable security headers by default when HTTP/2 feature is activated. Headers included: `Strict-Transport-Security: max-age=63072000; includeSubDomains; preload` (2 years max-age), `X-Frame-Options: DENY`, `X-XSS-Protection: 1; mode=block` and `Content-Security-Policy: frame-ancestors 'self'`. Default `false` (disabled).
+
+### SERVER_CACHE_CONTROL_HEADERS
+Enable cache control headers for incoming requests based on a set of file types. The file type list can be found on [`src/control_headers.rs`](https://github.com/joseluisq/static-web-server/blob/master//src/control_headers.rs) file. Default `true` (enabled).
+
+### SERVER_BASIC_AUTH
+It provides [The "Basic" HTTP Authentication Scheme](https://datatracker.ietf.org/doc/html/rfc7617) using credentials as `user-id:password` pairs, encoded using `Base64`. Password must be encoded using the [BCrypt](https://en.wikipedia.org/wiki/Bcrypt) password-hashing function. Default empty (disabled).
diff --git a/docs/content/contributions.md b/docs/content/contributions.md
new file mode 100644
index 00000000..e019eb5b
--- /dev/null
+++ b/docs/content/contributions.md
@@ -0,0 +1,5 @@
+# Contributions
+
+Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in current work by you, as defined in the [Apache License (Version 2.0)](https://github.com/joseluisq/static-web-server/blob/master/LICENSE-APACHE) license, shall be dual licensed as described below, without any additional terms or conditions.
+
+Feel free to send some [Pull request](https://github.com/joseluisq/static-web-server/pulls) or file an [issue](https://github.com/joseluisq/static-web-server/issues).
diff --git a/docs/content/download-and-install.md b/docs/content/download-and-install.md
new file mode 100644
index 00000000..959a8de9
--- /dev/null
+++ b/docs/content/download-and-install.md
@@ -0,0 +1,26 @@
+# Download and Install
+
+Latest featured downloads
+
+[Linux x86_64](https://github.com/joseluisq/static-web-server/releases/download/v2.1.0/static-web-server-v2.1.0-x86_64-unknown-linux-gnu.tar.gz){ .md-button } [macOS x86_64](https://github.com/joseluisq/static-web-server/releases/download/v2.1.0/static-web-server-v2.1.0-x86_64-apple-darwin.tar.gz){ .md-button } [Windows x86_64](https://github.com/joseluisq/static-web-server/releases/download/v2.1.0/static-web-server-v2.1.0-x86_64-pc-windows-msvc.zip){ .md-button }
+
+See all [available releases](https://github.com/joseluisq/static-web-server/releases).
+
+### v2.1.0 - 2021-10-23
+
+See [v2.1.0 release history](https://github.com/joseluisq/static-web-server/releases/tag/v2.1.0).
+
+- [static-web-server-v2.1.0-aarch64-apple-darwin.tar.gz](https://github.com/joseluisq/static-web-server/releases/download/v2.1.0/static-web-server-v2.1.0-aarch64-apple-darwin.tar.gz) <br>`076b7e801a3252ccee9391d94a517bf9d70e29d1b93c744c9ea7d9fa3ffc63fb`
+- [static-web-server-v2.1.0-aarch64-unknown-linux-gnu.tar.gz](https://github.com/joseluisq/static-web-server/releases/download/v2.1.0/static-web-server-v2.1.0-aarch64-unknown-linux-gnu.tar.gz) <br>`7efd6f5b4db3cd7fc423d3d3a7c68f1b86411449f2a2030aeb19aea857db9f5e`
+- [static-web-server-v2.1.0-aarch64-unknown-linux-musl.tar.gz](https://github.com/joseluisq/static-web-server/releases/download/v2.1.0/static-web-server-v2.1.0-aarch64-unknown-linux-musl.tar.gz) <br>`5888d772b0ecf93d87eb39def45c5b09d7ac2fc8a236d6e65fd46035b5ed4afb`
+- [static-web-server-v2.1.0-arm-unknown-linux-gnueabihf.tar.gz](https://github.com/joseluisq/static-web-server/releases/download/v2.1.0/static-web-server-v2.1.0-arm-unknown-linux-gnueabihf.tar.gz) <br>`cde040c48d7032c1a6d9f7990322112c3f423ed4b527c77d10b9d71a32246351`
+- [static-web-server-v2.1.0-i686-pc-windows-msvc.zip](https://github.com/joseluisq/static-web-server/releases/download/v2.1.0/static-web-server-v2.1.0-i686-pc-windows-msvc.zip) <br>`4b85b8615627087720bc719e37d8b5efb7d5260caeb30b38598064675fba0227`
+- [static-web-server-v2.1.0-i686-unknown-freebsd.tar.gz](https://github.com/joseluisq/static-web-server/releases/download/v2.1.0/static-web-server-v2.1.0-i686-unknown-freebsd.tar.gz) <br>`1e147aa1dd7a22ba7b9b829f60d6dc4bec20c4ff42e3ec147898d01774c88fd3`
+- [static-web-server-v2.1.0-i686-unknown-linux-gnu.tar.gz](https://github.com/joseluisq/static-web-server/releases/download/v2.1.0/static-web-server-v2.1.0-i686-unknown-linux-gnu.tar.gz) <br>`c113dfa00f04c2b6f2a1e8f1700c0710dc0a6a430d7e2a7e5f10bd1d29af5a84`
+- [static-web-server-v2.1.0-i686-unknown-linux-musl.tar.gz](https://github.com/joseluisq/static-web-server/releases/download/v2.1.0/static-web-server-v2.1.0-i686-unknown-linux-musl.tar.gz) <br>`d6070951586785a87cc340aca64cb2df13f41f94ab3d0f7bacfbfdc7efbb8d53`
+- [static-web-server-v2.1.0-x86_64-apple-darwin.tar.gz](https://github.com/joseluisq/static-web-server/releases/download/v2.1.0/static-web-server-v2.1.0-x86_64-apple-darwin.tar.gz) <br>`55ded256c9a1698ab2532d30af29b7329dd2d3c5fb073a268e4cc75dff415b74`
+- [static-web-server-v2.1.0-x86_64-pc-windows-gnu.zip](https://github.com/joseluisq/static-web-server/releases/download/v2.1.0/static-web-server-v2.1.0-x86_64-pc-windows-gnu.zip) <br>`51a3dc66a346e60825636e9f29941ebd6bed1b57111b05704f3fffd9340e7a98`
+- [static-web-server-v2.1.0-x86_64-pc-windows-msvc.zip](https://github.com/joseluisq/static-web-server/releases/download/v2.1.0/static-web-server-v2.1.0-x86_64-pc-windows-msvc.zip) <br>`d34ac9f47e5a3f3f48c79500dcb1c80993871ab3f8e4a328ebd7ee6929ae7679`
+- [static-web-server-v2.1.0-x86_64-unknown-freebsd.tar.gz](https://github.com/joseluisq/static-web-server/releases/download/v2.1.0/static-web-server-v2.1.0-x86_64-unknown-freebsd.tar.gz) <br>`4e7a444d314c7ea807a3731485db17e6f130285f39633f566349b51b78d3ede5`
+- [static-web-server-v2.1.0-x86_64-unknown-linux-gnu.tar.gz](https://github.com/joseluisq/static-web-server/releases/download/v2.1.0/static-web-server-v2.1.0-x86_64-unknown-linux-gnu.tar.gz) <br>`c39445deacef14e9e39df24235d22d9936c62cf1e1490e9c4f352b0563db9db7`
+- [static-web-server-v2.1.0-x86_64-unknown-linux-musl.tar.gz](https://github.com/joseluisq/static-web-server/releases/download/v2.1.0/static-web-server-v2.1.0-x86_64-unknown-linux-musl.tar.gz) <br>`de3b0b438ed348d422e3d118863da8d20a8b395fb4af59721f50057cc82cd126`
diff --git a/docs/content/examples/basic-authentication.md b/docs/content/examples/basic-authentication.md
new file mode 100644
index 00000000..e103e2e9
--- /dev/null
+++ b/docs/content/examples/basic-authentication.md
@@ -0,0 +1,33 @@
+# Basic HTTP Authentication
+
+**`SWS`** provides "Basic" HTTP Authentication Scheme using a `user-id/password` pairs encoded with `Base64`.
+
+This feature is disabled by default and can be controlled by the string `--basic-auth` option or the equivalent [SERVER_BASIC_AUTH](./../configuration/environment-variables.md#server_basic_auth) env.
+
+First, create a `user-id/password` pair using your favourite tool.
+
+!!! info "Note"
+    Only the password must be encoded using the [`BCrypt`](https://en.wikipedia.org/wiki/Bcrypt) password-hashing function.
+
+In this example we are using the Apache [`htpasswd`](https://httpd.apache.org/docs/2.4/programs/htpasswd.html) tool.
+
+```sh
+htpasswd -nbBC5 "username" "password"
+# username:$2y$05$KYOM0uaMQnEknnu/ckcCuuFyNQbc8BJEUk5X.ixtoCQpjXsc4geHK
+```
+
+!!! tip "Tip"
+    The password verification happens at runtime but its verification speed depends on the computing time cost of `bcrypt` algorithm used.
+
+    For example the `htpasswd` tool supports a `-C` argument in order to adjust the `bcrypt`'s computing time.
+    
+    Using a higher value is more secure but slower. The default values is `5` and the possible values are ranging from `4` to `17`.
+
+Finally assign the credentails and run the server.
+
+```sh
+static-web-server \
+    --port 8787 \
+    --root ./my-public-dir \
+    --basic-auth 'username:$2y$05$KYOM0uaMQnEknnu/ckcCuuFyNQbc8BJEUk5X.ixtoCQpjXsc4geHK'
+```
diff --git a/docs/content/examples/cache-control-headers.md b/docs/content/examples/cache-control-headers.md
new file mode 100644
index 00000000..23357229
--- /dev/null
+++ b/docs/content/examples/cache-control-headers.md
@@ -0,0 +1,41 @@
+# Cache Control Headers
+
+**`SWS`** provides support for [`Cache-Control`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control) HTTP header specifying a `public` and `max-age` response directives.
+
+This feature is enabled by default and can be controlled by the boolean `-e, --cache-control-headers` option or the equivalent [SERVER_CACHE_CONTROL_HEADERS](./../configuration/environment-variables.md#server_cache_control_headers) env.
+
+## Cache-Control Max-Age
+
+Control headers are applied only to the following file types with the corresponding `max-age` values.
+
+### One day
+
+A `max-age` of *one day* duration is used by default.
+
+!!! info "Note"
+    One day `max-age` for example includes `html` and other file types.
+
+### One hour
+
+A `max-age` of *one hour* is applied only to the following file types.
+
+```txt
+atom, json, rss, xml
+```
+
+### One year
+
+A `max-age` of *one year* is applied only to the following file types.
+
+```txt
+bmp, bz2, css, doc, gif, gz, htc, ico, jpeg, jpg, js, map, mjs, mp3, mp4, ogg, ogv, pdf, png, rar, rtf, tar, tgz, wav, weba, webm, webp, woff, woff2, zip
+```
+
+Below an example of how to enable the feature.
+
+```sh
+static-web-server \
+    --port 8787 \
+    --root ./my-public-dir \
+    --cache-control-headers true
+```
diff --git a/docs/content/examples/compression.md b/docs/content/examples/compression.md
new file mode 100644
index 00000000..070e98ab
--- /dev/null
+++ b/docs/content/examples/compression.md
@@ -0,0 +1,44 @@
+# Compression
+
+**`SWS`** provides [`Gzip`](https://datatracker.ietf.org/doc/html/rfc1952), [`Deflate`](https://datatracker.ietf.org/doc/html/rfc1951#section-Abstract) and [`Brotli`](https://www.ietf.org/rfc/rfc7932.txt) compression of HTTP responses.
+
+The compression functionality is determined by the [`Accept-Encoding`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Encoding) header and is only applied to text-based web file types only.
+
+## MIME types compressed
+
+Only this list of common text-based MIME type files will be compressed either with `Gzip`, `Deflate` or `Brotli` via the `Accept-Encoding` header value.
+
+```txt
+text/html
+text/css
+text/javascript
+text/xml
+text/plain
+text/csv
+text/calendar
+text/markdown
+text/x-yaml
+text/x-toml
+text/x-component
+application/rtf
+application/xhtml+xml
+application/javascript
+application/x-javascript
+application/json
+application/xml
+application/rss+xml
+application/atom+xml
+application/vnd.ms-fontobject
+font/truetype
+font/opentype
+image/svg+xml
+```
+
+This feature is enabled by default and can be controlled by the boolean `-x, --compression` option or the equivalent [SERVER_COMPRESSION](./../configuration/environment-variables.md#server_compression) env.
+
+```sh
+static-web-server \
+    --port 8787 \
+    --root ./my-public-dir \
+    --compression true
+```
diff --git a/docs/content/examples/cors.md b/docs/content/examples/cors.md
new file mode 100644
index 00000000..787bfcd2
--- /dev/null
+++ b/docs/content/examples/cors.md
@@ -0,0 +1,20 @@
+# CORS
+
+**`SWS`** provides optional [Cross-Origin Resource Sharing (CORS)](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) support.
+
+A list of allowed origin hosts (URLs) should be specified and separated by comas.
+Or an asterisk (*) can be used in order to allow any host.
+
+This feature is disabled by default and can be controlled by the string `-c, --cors-allow-origins` option or the equivalent [SERVER_CORS_ALLOW_ORIGINS](./../configuration/environment-variables.md#server_cors_allow_origins) env.
+
+Below an example of how to enable CORS.
+
+```sh
+static-web-server \
+    --port 8787 \
+    --root ./my-public-dir \
+    --cors-allow-origins "https://domain.com"
+
+    # Or use an asterisk to allow any host
+    # --cors-allow-origins "*"
+```
diff --git a/docs/content/examples/directory-listing.md b/docs/content/examples/directory-listing.md
new file mode 100644
index 00000000..40ae8758
--- /dev/null
+++ b/docs/content/examples/directory-listing.md
@@ -0,0 +1,16 @@
+# Directory Listing
+
+**`SWS`** provides a directory listing feature to display content of directories.
+
+This feature is disabled by default and can be controlled by the boolean `-z, --directory-listing` option or the equivalent [SERVER_DIRECTORY_LISTING](./../configuration/environment-variables.md#server_directory_listing) env.
+
+```sh
+static-web-server \
+    --port 8787 \
+    --root ./my-public-dir \
+    --directory-listing true
+```
+
+And here an example of how the directory listing looks like.
+
+<img title="SWS - Directory Listing" src="https://user-images.githubusercontent.com/1700322/118666481-81f22c80-b7f3-11eb-8c10-d530304e0e34.png" width="400">
diff --git a/docs/content/examples/docker.md b/docs/content/examples/docker.md
new file mode 100644
index 00000000..697ba1fe
--- /dev/null
+++ b/docs/content/examples/docker.md
@@ -0,0 +1,54 @@
+# Docker
+
+`SWS` has first-class [Docker](https://docs.docker.com/get-started/overview/) support. It provides a [Scratch](https://hub.docker.com/_/scratch) as well as the latest [Alpine Linux](https://hub.docker.com/_/alpine) Docker images.
+
+## Run a container
+
+```sh
+# Scratch image (just the binary)
+docker run --rm -it -p 8787:80 joseluisq/static-web-server:2
+
+# Or Alpine image
+docker run --rm -it -p 8787:80 joseluisq/static-web-server:2-alpine
+```
+
+## Dockerfile
+
+```Dockerfile
+# Scratch image (just the binary)
+FROM joseluisq/static-web-server:2
+
+# Or Alpine image
+FROM joseluisq/static-web-server:2-alpine
+```
+
+## Docker Compose
+
+Below a [Docker Compose](https://docs.docker.com/compose/) example using the [Traefik Proxy](https://traefik.io/traefik/).
+
+```yaml
+version: "3.3"
+
+services:
+  web:
+    image: joseluisq/static-web-server:2
+    environment:
+      # Note: those envs are customizable but also optional
+      - SERVER_HOST=127.0.0.1
+      - SERVER_PORT=80
+      - SERVER_ROOT=/public
+    volumes:
+      - ./some-dir-path:/public
+    labels:
+      - "traefik.enable=true"
+      - "traefik.frontend.entryPoints=https"
+      - "traefik.backend=localhost_dev"
+      - "traefik.frontend.rule=Host:localhost.dev"
+      - "traefik.port=80"
+    networks:
+      - traefik_net
+
+networks:
+  traefik_net:
+    external: true
+```
diff --git a/docs/content/examples/error-pages.md b/docs/content/examples/error-pages.md
new file mode 100644
index 00000000..e6611d46
--- /dev/null
+++ b/docs/content/examples/error-pages.md
@@ -0,0 +1,18 @@
+# Error Pages
+
+**`SWS`** provides custom HTML error pages for the HTTP `404` and `50x` status errors.
+
+This feature is enabled by default and can be controlled either by the string `--page404` ([SERVER_ERROR_PAGE_404](./../configuration/environment-variables.md#server_error_page_404)) or the `--page50x` ([SERVER_ERROR_PAGE_50X](./../configuration/environment-variables.md#server_error_page_50x)) arguments.
+
+!!! info "Tip"
+    Note that either `--page404` and `--page50x` have defaults (optional values) so they can be specified or omitted as required.
+
+Below an example of how to customize those HTLM pages.
+
+```sh
+static-web-server \
+    --port 8787 \
+    --root ./my-public-dir \
+    --page404 ./my-page-404.html \
+    --page50x ./my-page-50x.html
+```
diff --git a/docs/content/examples/file-descriptor-socket-passing.md b/docs/content/examples/file-descriptor-socket-passing.md
new file mode 100644
index 00000000..d8e78606
--- /dev/null
+++ b/docs/content/examples/file-descriptor-socket-passing.md
@@ -0,0 +1,26 @@
+# File Descriptor Socket Passing
+
+**SWS** provides the ability to accept a socket listener as a file descriptor for use in sandboxing and on-demand applications via `systemd` (Linux), `launchd` (Macos) or similar.
+
+!!! tip "Tip"
+    The [Socket Activation](http://0pointer.de/blog/projects/socket-activation.html) model is basically an alternative to TCP port binding.
+
+Socket activation is supported by the `-f, --fd` option or the equivalent [SERVER_LISTEN_FD](./../configuration/environment-variables.md#server_listen_fd) env.
+
+If you are using `inetd`, its "`wait`" option should be used in conjunction with static-web-server's `--fd 0`
+option.
+
+## Systemd
+
+If you're using `systemd` on Linux, there is a fully working example in the SWS Git repository under the [.`/systemd`](https://github.com/joseluisq/static-web-server/tree/master/systemd) directory.
+
+## Testing
+
+Alternatively, the light-weight [`systemfd`](https://github.com/mitsuhiko/systemfd) utility may be
+useful especially for testing purposes.
+
+For example using `systemfd` utility as follow:
+
+```sh
+systemfd --no-pid -s http::8091 -- path/to/static-web-server --fd 0
+```
diff --git a/docs/content/examples/http1.md b/docs/content/examples/http1.md
new file mode 100644
index 00000000..8f92c59c
--- /dev/null
+++ b/docs/content/examples/http1.md
@@ -0,0 +1,15 @@
+# HTTP/1
+
+The HTTP/1 is the protocol by default and can be used specifying a host address via the `-a, --host` ([SERVER_HOST](./../configuration/environment-variables.md#server_host)) argument, the host port via `-p, --port` ([SERVER_PORT](./../configuration/environment-variables.md#server_port)) and the directory of the static files via `-d, --root` ([SERVER_ROOT](./../configuration/environment-variables.md#server_root)) argument.
+
+!!! info "Tip"
+    Note that either `--host`, `--port` and `--root` have defaults (optional values) so they can be specified or omitted as required.
+
+Below an example of how to run the server using HTTP/1.
+
+```sh
+static-web-server \
+    --host 127.0.0.1 \
+    --port 8787 \
+    --root ./my-public-dir
+```
diff --git a/docs/content/examples/http2-tls.md b/docs/content/examples/http2-tls.md
new file mode 100644
index 00000000..0b1a7dff
--- /dev/null
+++ b/docs/content/examples/http2-tls.md
@@ -0,0 +1,20 @@
+# HTTP/2 and TLS
+
+**`SWS`** provides [HTTP/2](https://en.wikipedia.org/wiki/HTTP/2) protocol and [TLS](https://en.wikipedia.org/wiki/Transport_Layer_Security) support.
+
+This feature is disabled by default and can be activated via the boolean `-t, --http2` option as well as string arguments `--http2-tls-cert` (TLS certificate file path) and `--http2-tls-key` (private key file path).
+
+!!! tip "Tips"
+    - Either `--host`, `--port` and `--root` have defaults (optional values) so they can be specified or omitted as required.
+    - Don't forget to adjust the proper `--port` value for the HTTP/2 & TLS feature.
+    - When this feature is enabled via `--http2=true` then the [security headers](./security-headers.md) are also enabled automatically.
+
+```sh
+static-web-server \
+    --host 127.0.0.1 \
+    --port 8787 \
+    --root ./my-public-dir \
+    --http2 true \
+    --http2-tls-cert ./my-tls.cert \
+    --http2-tls-key ./my-tls.key
+```
diff --git a/docs/content/examples/logging.md b/docs/content/examples/logging.md
new file mode 100644
index 00000000..b4dfa887
--- /dev/null
+++ b/docs/content/examples/logging.md
@@ -0,0 +1,14 @@
+# Logging
+
+**`SWS`** provides logging support just specifying a log level in lower case. The values allowed are `error`, `warn`, `info`, `debug` and `trace`. The default value is `error`.
+
+This feature is enabled by default and can be controlled by the string `-g, --log-level` option or the equivalent [SERVER_LOG_LEVEL](./../configuration/environment-variables.md#server_log_level) env.
+
+Below an example of how to adjust the log level.
+
+```sh
+static-web-server \
+    --port 8787 \
+    --root ./my-public-dir \
+    --log-level "trace"
+```
diff --git a/docs/content/examples/security-headers.md b/docs/content/examples/security-headers.md
new file mode 100644
index 00000000..bcaf43a4
--- /dev/null
+++ b/docs/content/examples/security-headers.md
@@ -0,0 +1,17 @@
+# Security Headers
+
+**`SWS`** provides several [security headers](https://web.dev/security-headers/) support.
+
+When the [HTTP/2](../examples/http2-tls.md) feature is activated *security headers* is enabled automatically.
+
+This feature is disabled by default on HTTP/1 and can be controlled by the boolean `--security-headers` option or the equivalent [SERVER_SECURITY_HEADERS](./../configuration/environment-variables.md#server_security_headers) env.
+
+## Headers included
+
+The following headers are only included.
+
+- `Strict-Transport-Security: max-age=63072000; includeSubDomains; preload" (2 years max-age)`
+- `X-Frame-Options: DENY`
+- `X-XSS-Protection: 1; mode=block`
+- `X-Content-Type-Options: nosniff`
+- `Content-Security-Policy: frame-ancestors`
diff --git a/docs/content/examples/worker-threads.md b/docs/content/examples/worker-threads.md
new file mode 100644
index 00000000..fe350714
--- /dev/null
+++ b/docs/content/examples/worker-threads.md
@@ -0,0 +1,35 @@
+# Worker Threads Customization
+
+**`SWS`** allows to customize the number of worker threads powered by the [Tokio](https://tokio.rs/) runtime.
+
+This feature can be controlled by the numeric `-n, --threads-multiplier` option or the equivalent [SERVER_THREADS_MULTIPLIER](./../configuration/environment-variables.md#server_threads_multiplier) env.
+
+## Worker threads multiplier
+
+The value of `-n, --threads-multiplier` works as multiplier digits in order to determine the number of worker threads used by the server.
+
+Basically multipling this input number by the number of system CPUs.
+
+The formula used is the following:
+
+> worker threads = number of CPUs * n
+
+*Where `n` is the input value of `-n, --threads-multiplier`.*
+
+**For example:** If there are `4` available CPUs and the `--threads-multiplier` is `8` then the total of *worker threads* to use will be `32`.
+
+!!! Info "Info"
+    When the `--threads-multiplier` input value is `0` or `1` then one thread per core is used (default value).
+
+!!! warn "Warn"
+    Number of worker threads result should be a number between `1` and `32,768` though it is advised to keep this value on the smaller side. See [Tokio ` worker_threads` API](https://docs.rs/tokio/1.12.0/tokio/runtime/struct.Builder.html#method.worker_threads) for more details.
+
+Below an example of how to adjust the number of worker threads.
+
+```sh
+static-web-server \
+    --port 8787 \
+    --root ./my-public-dir \
+    # NOTE: "8" gets multiplied by the number of the available cores.
+    --threads-multiplier 8
+```
diff --git a/docs/content/getting-started.md b/docs/content/getting-started.md
new file mode 100644
index 00000000..a0449a58
--- /dev/null
+++ b/docs/content/getting-started.md
@@ -0,0 +1,13 @@
+# Getting Started
+
+First [download](./download-and-install.md) the binary for your platform.
+
+Then just type the following command.
+
+```sh
+static-web-server --port 8787 --root ./my-public-dir
+```
+
+For details about the available options type `static-web-server -h` or go to the [Command-line arguments](./configuration/command-line-arguments.md) section.
+
+Or if you are looking fo more advanced examples, take a look at [the examples](./examples/http1.md) section.
diff --git a/docs/content/index.md b/docs/content/index.md
new file mode 100644
index 00000000..f8bf4882
--- /dev/null
+++ b/docs/content/index.md
@@ -0,0 +1,60 @@
+<div>
+  <div align="center">
+    <img
+      src="https://camo.githubusercontent.com/a08032a2db94aea229991af8f73c45cc95174c8066dc7a6b1f88a79c94cf1093/68747470733a2f2f75706c6f61642e77696b696d656469612e6f72672f77696b6970656469612f636f6d6d6f6e732f7468756d622f642f64352f527573745f70726f6772616d6d696e675f6c616e67756167655f626c61636b5f6c6f676f2e7376672f3130323470782d527573745f70726f6772616d6d696e675f6c616e67756167655f626c61636b5f6c6f676f2e7376672e706e67"
+      height="100" width="100"
+    />
+  </div>
+
+  <h1 align="center">Static Web Server</h1>
+
+  <h4 align="center">
+    A blazing fast and asynchronous web server for static files-serving ⚡
+  </h4>
+
+<div align="center">
+<a href="https://github.com/joseluisq/static-web-server/actions?query=workflow%3ACI" title="CI"><img src="https://github.com/joseluisq/static-web-server/workflows/CI/badge.svg"></a> 
+<a href="https://hub.docker.com/r/joseluisq/static-web-server/" title="Docker Image Version (tag latest semver)"><img src="https://img.shields.io/docker/v/joseluisq/static-web-server/2"></a> 
+<a href="https://hub.docker.com/r/joseluisq/static-web-server/tags" title="Docker Image Size (tag)"><img src="https://img.shields.io/docker/image-size/joseluisq/static-web-server/2"></a> 
+<a href="https://hub.docker.com/r/joseluisq/static-web-server/" title="Docker Image"><img src="https://img.shields.io/docker/pulls/joseluisq/static-web-server.svg"></a> 
+</div>
+</div>
+
+## Overview
+
+**Static Web Server** (or **`SWS`** abbreviated) is a very small and fast production-ready web server suitable to serve static web files or assets.
+
+It is focused on **lightness and easy to use** principles but keeping [high performance and safety](https://blog.rust-lang.org/2015/04/10/Fearless-Concurrency.html) powered by [The Rust Programming Language](https://rust-lang.org).
+
+Written on top of [Hyper](https://github.com/hyperium/hyper) and [Tokio](https://github.com/tokio-rs/tokio) runtime. It provides [concurrent and asynchronous networking abilities](https://rust-lang.github.io/async-book/01_getting_started/02_why_async.html) as well as the latest HTTP/1 - HTTP/2 implementations.
+
+It's cross-platform and available for `Linux`, `macOS`, `Windows` and `FreeBSD` (`x86`/`x86_64`,  `ARM`/`ARM64`) as well as `Docker`.
+
+!!! tip "Tips"
+    - If you're looking for `v1` please go to [1.x](https://github.com/joseluisq/static-web-server/tree/1.x) branch.
+    - If you want to migrate from `v1` to `v2` please take a look at [v2.0.0](https://github.com/joseluisq/static-web-server/releases/tag/v2.0.0) release.
+
+## Features
+
+- Built with [Rust](https://rust-lang.org) which is focused on [safety, speed and concurrency](https://kornel.ski/rust-c-speed).
+- Memory safe and very reduced CPU and RAM overhead.
+- Blazing fast static files-serving and asynchronous powered by latest [Hyper](https://github.com/hyperium/hyper/), [Tokio](https://github.com/tokio-rs/tokio) and a set of [awesome crates](https://github.com/joseluisq/static-web-server/blob/master/Cargo.toml).
+- Single __4MB__ (uncompressed) and fully static binary with no dependencies ([Musl libc](https://doc.rust-lang.org/edition-guide/rust-2018/platform-and-target-support/musl-support-for-fully-static-binaries.html)). Suitable for running on [any Linux distro](https://en.wikipedia.org/wiki/Linux_distribution) or [Docker container](https://hub.docker.com/r/joseluisq/static-web-server/tags).
+- Optional GZip, Deflate or Brotli compression for text-based web files only.
+- Compression on demand via [Accept-Encoding](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Encoding) header.
+- [Partial Content Delivery](https://en.wikipedia.org/wiki/Byte_serving) support for byte-serving of large files.
+- Optional [Cache Control](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control) headers for assets.
+- [HEAD](https://tools.ietf.org/html/rfc7231#section-4.3.2) responses.
+- Lightweight and configurable logging via [tracing](https://github.com/tokio-rs/tracing) crate.
+- [Termination signal](https://www.gnu.org/software/libc/manual/html_node/Termination-Signals.html) handling.
+- [HTTP/2](https://tools.ietf.org/html/rfc7540) + TLS support.
+- [Security headers](https://web.dev/security-headers/) for HTTP/2 by default.
+- Customizable number of worker threads.
+- Optional directory listing.
+- [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) support.
+- Basic HTTP Authentication.
+- Default and custom error pages.
+- Configurable using CLI arguments or environment variables.
+- First-class [Docker](https://docs.docker.com/get-started/overview/) support. [Scratch](https://hub.docker.com/_/scratch) and latest [Alpine Linux](https://hub.docker.com/_/alpine) Docker images available.
+- Ability to accept a socket listener as a file descriptor for use in sandboxing and on-demand applications (E.g [systemd](http://0pointer.de/blog/projects/socket-activation.html)).
+- Cross-platform. Binaries available for Linux, macOS, Windows & FreeBSD x86_64 / ARM.
diff --git a/docs/content/license.md b/docs/content/license.md
new file mode 100644
index 00000000..cb90e83d
--- /dev/null
+++ b/docs/content/license.md
@@ -0,0 +1,5 @@
+# License
+
+This work is primarily distributed under the terms of both the [MIT license](https://github.com/joseluisq/static-web-server/blob/master/LICENSE-MIT) and the [Apache License (Version 2.0)](https://github.com/joseluisq/static-web-server/blob/master/LICENSE-APACHE).
+
+© 2019-present [Jose Quintana](https://git.io/joseluisq)
diff --git a/docs/content/migration.md b/docs/content/migration.md
new file mode 100644
index 00000000..689e8d24
--- /dev/null
+++ b/docs/content/migration.md
@@ -0,0 +1,1 @@
+# Migration
diff --git a/docs/content/platforms-architectures.md b/docs/content/platforms-architectures.md
new file mode 100644
index 00000000..b650fbed
--- /dev/null
+++ b/docs/content/platforms-architectures.md
@@ -0,0 +1,48 @@
+# Platforms & Architectures
+
+Currently only the following platforms/architectures are supported.
+
+## Linux
+
+#### x86
+  - `i686-unknown-linux-gnu` 
+  - `i686-unknown-linux-musl`
+
+#### x86_64
+  - `x86_64-unknown-linux-gnu`
+  - `x86_64-unknown-linux-musl`
+
+#### ARM
+  - `arm-unknown-linux-gnueabihf`
+
+#### ARM64
+  - `aarch64-unknown-linux-musl`
+  - `aarch64-unknown-linux-gnu`
+
+## macOS
+
+#### x86_64
+  - `x86_64-apple-darwin`
+
+#### ARM64
+  - `aarch64-apple-darwin`
+
+## Windows
+
+#### x86
+  - `i686-pc-windows-msvc`
+
+#### x86_64
+  - `x86_64-pc-windows-msvc`
+  - `x86_64-pc-windows-gnu`
+
+#### ARM64
+  - ~~`aarch64-pc-windows-msvc`~~ (temporarily disabled until [briansmith/ring#1167](https://github.com/briansmith/ring/issues/1167))
+
+## FreeBSD
+
+#### x86
+  - `i686-unknown-freebsd`
+
+#### x86_64
+  - `x86_64-unknown-freebsd`
diff --git a/docs/content/semantic-versioning.md b/docs/content/semantic-versioning.md
new file mode 100644
index 00000000..04117749
--- /dev/null
+++ b/docs/content/semantic-versioning.md
@@ -0,0 +1,10 @@
+# Semantic Versioning
+
+**`SWS`** project adheres to [Semantic Versioning](https://semver.org/) for every release like [`v1`](./changelog-v1.md) and latest [`v2`](./changelog-v2.md).
+
+## Breaking changes
+
+Only switches between ***major*** versions "could" contain *breaking changes* or not depending on the particular case.<br>
+However this project try to keep away of any kind of *breaking change* as possible between ***major*** versions. But it still supports and prioritizes ***"no breaking changes"*** for ***minor*** and ***patch*** (bug fixes) versions.
+
+In the other hand, if a *breaking change* is found to be *"strictly necessary"* to do. Then a new ***major*** version must be promoted as well as users informed accordingly in order they can do a seamlessly transition.
diff --git a/docs/docker-compose.yml b/docs/docker-compose.yml
new file mode 100644
index 00000000..7229b8f7
--- /dev/null
+++ b/docs/docker-compose.yml
@@ -0,0 +1,10 @@
+version: "3.3"
+services:
+  server:
+    build:
+      context: .
+      dockerfile: Dockerfile
+    ports:
+      - 8088:8000
+    volumes:
+      - ./:/docs
diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml
new file mode 100644
index 00000000..c5830774
--- /dev/null
+++ b/docs/mkdocs.yml
@@ -0,0 +1,138 @@
+# Project information
+site_name: Static Web Server
+site_description: 'A blazing fast and asynchronous web server for static files-serving ⚡'
+site_author: 'Jose Quintana'
+site_url: https://sws.joseluisq.net
+dev_addr: 0.0.0.0:8000
+
+# Repository
+repo_name: joseluisq/static-web-server
+repo_url: https://github.com/joseluisq/static-web-server/
+edit_uri: edit/master/docs/
+
+docs_dir: 'content'
+
+# Copyright
+copyright: Copyright &copy; 2019-2021 Jose Quintana
+
+# Theme
+theme:
+  name: 'material'
+  logo: assets/rust_logo.svg
+  language: en
+  include_sidebar: true
+  features:
+    - content.code.annotate
+    - content.tabs.link
+    - header.autohide
+    - navigation.expand
+    - navigation.indexes
+    # - navigation.instant
+    # - navigation.sections
+    # - navigation.tabs
+    - navigation.tabs.sticky
+    - navigation.top
+    - navigation.tracking
+    - search.highlight
+    - search.share
+    - search.suggest
+    # - toc.integrate
+  palette:
+    - scheme: default
+      primary: black
+      accent: blue
+      toggle:
+        icon: material/toggle-switch-off-outline
+        name: Switch to dark mode
+    - scheme: slate
+      primary: black
+      accent: blue
+      toggle:
+        icon: material/toggle-switch
+        name: Switch to light mode
+  font:
+    text: 'Open Sans'
+    code: 'Droid Sans Mono'
+  favicon: https://camo.githubusercontent.com/a08032a2db94aea229991af8f73c45cc95174c8066dc7a6b1f88a79c94cf1093/68747470733a2f2f75706c6f61642e77696b696d656469612e6f72672f77696b6970656469612f636f6d6d6f6e732f7468756d622f642f64352f527573745f70726f6772616d6d696e675f6c616e67756167655f626c61636b5f6c6f676f2e7376672f3130323470782d527573745f70726f6772616d6d696e675f6c616e67756167655f626c61636b5f6c6f676f2e7376672e706e67
+
+extra:
+  social:
+    - icon: 'fontawesome/brands/github'
+      link: 'https://github.com/joseluisq'
+    - icon: 'fontawesome/brands/twitter'
+      link: 'https://twitter.com/joseluis_q'
+
+markdown_extensions:
+  - admonition
+  - abbr
+  - def_list
+  - md_in_html
+  - codehilite
+  - admonition
+  - meta
+  - attr_list
+  - footnotes
+  - tables
+  - toc:
+      permalink: true
+  - markdown.extensions.tables
+  - pymdownx.arithmatex
+  - pymdownx.betterem
+  - pymdownx.critic
+  - pymdownx.caret
+  - pymdownx.keys
+  - pymdownx.mark
+  - pymdownx.tilde
+  - pymdownx.details
+  - pymdownx.emoji:
+      emoji_index: !!python/name:materialx.emoji.twemoji
+      emoji_generator: !!python/name:materialx.emoji.to_svg
+  - pymdownx.magiclink:
+      repo_url_shortener: true
+      repo_url_shorthand: true
+      provider: "github"
+      user: "facelessuser"
+      repo: "pymdown-extensions"
+  - pymdownx.superfences
+  - pymdownx.inlinehilite
+  - pymdownx.smartsymbols
+  - pymdownx.tasklist
+  - pymdownx.highlight:
+      linenums: true
+      linenums_style: pymdownx-inline
+
+# Plugins
+plugins:
+  - search
+  - minify:
+      minify_html: true
+
+# Content Navigation
+nav:
+  - 'Overview': 'index.md'
+  - 'Download and Install': 'download-and-install.md'
+  - 'Getting Started': 'getting-started.md'
+  - 'Configuration':
+    - 'Command Line Arguments': 'configuration/command-line-arguments.md'
+    - 'Environment Variables': 'configuration/environment-variables.md'
+  - 'Examples':
+    - 'HTTP/1': 'examples/http1.md'
+    - 'HTTP/2 and TLS': 'examples/http2-tls.md'
+    - 'Logging': 'examples/logging.md'
+    - 'Compression': 'examples/compression.md'
+    - 'Cache Control Headers': 'examples/cache-control-headers.md'
+    - 'CORS': 'examples/cors.md'
+    - 'Security Headers': 'examples/security-headers.md'
+    - 'Basic Authentication': 'examples/basic-authentication.md'
+    - 'Directory Listing': 'examples/directory-listing.md'
+    - 'Docker': 'examples/docker.md'
+    - 'File Descriptor Socket Passing': './examples/file-descriptor-socket-passing.md'
+    - 'Worker Threads Customization': 'examples/worker-threads.md'
+    - 'Error Pages': 'examples/error-pages.md'
+  - 'Platforms & Architectures': 'platforms-architectures.md'
+  - 'Changelog v2': 'changelog-v2.md'
+  - 'Migration': 'migration.md'
+  - 'Changelog v1': 'changelog-v1.md'
+  - 'Semantic Versioning': 'semantic-versioning.md'
+  - 'Contributions': 'contributions.md'
+  - 'License': 'license.md'


Test patch: