diff --git a/.cargo/config b/.cargo/config
index 8a08da961170466c680717f0555e69e16edc8d46..0beee4e05c05e89990c94928695d1732a33f79d2 100644
--- a/.cargo/config
+++ b/.cargo/config
@@ -1,2 +1,2 @@
 [target.x86_64-pc-windows-msvc]
-rustflags = ["-Ctarget-feature=+crt-static", "-Zunstable-options"]
+rustflags = ["-Ctarget-feature=+crt-static"]
\ No newline at end of file
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
new file mode 100644
index 0000000000000000000000000000000000000000..b9d4a45a32f6bdba516541c027c69ab44c7bc6e9
--- /dev/null
+++ b/.github/workflows/build.yml
@@ -0,0 +1,118 @@
+name: ci
+
+on:
+  pull_request: {}
+  push: {}
+  release:
+    types: [published]
+
+jobs:
+  fmt:
+    name: Format
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v2
+      - uses: actions-rs/toolchain@v1
+        with:
+          profile: minimal
+          override: true
+          components: rustfmt
+      - uses: actions-rs/cargo@v1
+        with:
+          command: fmt
+          args: --all -- --check
+
+  clippy:
+    name: Clippy
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v2
+      - uses: actions-rs/toolchain@v1
+        with:
+          profile: minimal
+          override: true
+          components: clippy
+      - uses: actions-rs/clippy-check@v1
+        with:
+          token: ${{ secrets.GITHUB_TOKEN }}
+          args: --all-targets --all-features -- -F warnings
+
+  test:
+    name: Unitest (${{ matrix.os }})
+    runs-on: ${{ matrix.os }}
+    strategy:
+      matrix:
+        os: [macos-latest, ubuntu-latest, windows-latest]
+    steps:
+      - uses: actions/checkout@v2
+      - uses: actions-rs/toolchain@v1
+        with:
+          profile: minimal
+          override: true
+          components: clippy
+      - uses: actions-rs/cargo@v1
+        env:
+          RUST_BACKTRACE: full
+          RUSTFLAGS: -F warnings
+        with:
+          command: test
+          args: --all --all-features
+      - name: "Ensure Cargo.lock is not modified"
+        run: git diff --exit-code Cargo.lock
+
+  build-release:
+    name: Build release Executable (${{ matrix.os }})
+    runs-on: ${{ matrix.os }}
+    strategy:
+      matrix:
+        include:
+          - os: ubuntu-latest
+            target: x86_64-unknown-linux-musl
+          - os: macos-latest
+            target: x86_64-apple-darwin
+          - os: windows-latest
+            target: x86_64-pc-windows-msvc
+    env:
+      BINARY_EXTENSION: ${{ endsWith(matrix.target, '-msvc') && '.exe' || '' }}
+      PATH_BINARY: ${{ github.workspace }}/target/release/simple-http-server${{ endsWith(matrix.target, '-msvc') && '.exe' || '' }}
+    steps:
+      - uses: actions/checkout@v2
+      - uses: actions-rs/toolchain@v1
+        with:
+          profile: minimal
+          override: true
+          components: clippy
+          target: ${{ matrix.target }}
+      - uses: actions-rs/cargo@v1
+        with:
+          command: build
+          args: --release --bin simple-http-server --locked
+      - uses: actions/upload-artifact@v2
+        with:
+          name: ${{ matrix.target }}-simple-http-server${{ env.BINARY_EXTENSION }}
+          path: ${{ env.PATH_BINARY }}
+      - name: Evaluate shasum
+        run: echo -n $(shasum -ba 256 ${{ env.PATH_BINARY }} | cut -d " " -f 1) > ${{ env.PATH_BINARY }}.sha256
+      - uses: actions/upload-artifact@v2
+        with:
+          name: ${{ matrix.target }}-simple-http-server.sha256
+          path: ${{ env.PATH_BINARY }}.sha256
+
+      - name: '[Optional] Publish Artifact'
+        if: ${{ github.event_name == 'release' }}
+        uses: svenstaro/upload-release-action@v2
+        with:
+          repo_token: ${{ secrets.GITHUB_TOKEN }}
+          file: ${{ env.PATH_BINARY }}
+          asset_name: ${{ matrix.target }}-simple-http-server${{ env.BINARY_EXTENSION }}
+          tag: ${{ github.ref }}
+          overwrite: true
+      - name: '[Optional] Publish Artifact (shasum)'
+        if: ${{ github.event_name == 'release' }}
+        uses: svenstaro/upload-release-action@v2
+        with:
+          repo_token: ${{ secrets.GITHUB_TOKEN }}
+          file: ${{ env.PATH_BINARY }}.sha256
+          asset_name: ${{ matrix.target }}-simple-http-server${{ env.BINARY_EXTENSION }}.sha256
+          tag: ${{ github.ref }}
+          overwrite: true
diff --git a/.travis.yml b/.travis.yml
index a02575b67e129ab6545c6d58f7df4df0f86a76f8..02c0e2a9708f2c97b9c77aaa9df372ec5d23d8ab 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -9,7 +9,6 @@ script:
 stages:
   - Check
   - Clippy
-  - Example
   - Test
 jobs:
   include:
@@ -21,10 +20,6 @@ jobs:
       name: Clippy
       script:
         - make clippy
-    - stage: Example
-      name: Example
-      script:
-        - make example
     - stage: Test
       name: Unitest
       script:
diff --git a/Makefile b/Makefile
index e275e174eb332b2d94dade7f854f6b01360e5518..7fd623ba9a72e294a38acd1942c09b360029a270 100644
--- a/Makefile
+++ b/Makefile
@@ -2,13 +2,11 @@ fmt:
 	cargo fmt --all -- --check
 
 clippy:
-	RUSTFLAGS='-F warnings' cargo clippy --all --tests --all-features
-
-example:
-	cargo build --examples
+	cargo clippy --all --tests --all-features -- -F warnings
 
+test: export RUST_BACKTRACE := full
 test:
-	RUSTFLAGS='-F warnings' RUST_BACKTRACE=full cargo test --all --all-features
+	RUSTFLAGS='-F warnings'  cargo test --all --all-features
 
 ci: fmt clippy example test
 	git diff --exit-code Cargo.lock