diff --git a/docs/Gemfile b/docs/Gemfile
new file mode 100644
index 000000000..a1ada559a
--- /dev/null
+++ b/docs/Gemfile
@@ -0,0 +1,3 @@
+source 'https://rubygems.org'
+
+gem 'jekyll-relative-links'
diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock
new file mode 100644
index 000000000..cb3caffeb
--- /dev/null
+++ b/docs/Gemfile.lock
@@ -0,0 +1,69 @@
+GEM
+ remote: https://rubygems.org/
+ specs:
+ addressable (2.8.0)
+ public_suffix (>= 2.0.2, < 5.0)
+ colorator (1.1.0)
+ concurrent-ruby (1.1.9)
+ em-websocket (0.5.2)
+ eventmachine (>= 0.12.9)
+ http_parser.rb (~> 0.6.0)
+ eventmachine (1.2.7)
+ ffi (1.15.3)
+ forwardable-extended (2.6.0)
+ http_parser.rb (0.6.0)
+ i18n (1.8.10)
+ concurrent-ruby (~> 1.0)
+ jekyll (4.2.0)
+ addressable (~> 2.4)
+ colorator (~> 1.0)
+ em-websocket (~> 0.5)
+ i18n (~> 1.0)
+ jekyll-sass-converter (~> 2.0)
+ jekyll-watch (~> 2.0)
+ kramdown (~> 2.3)
+ kramdown-parser-gfm (~> 1.0)
+ liquid (~> 4.0)
+ mercenary (~> 0.4.0)
+ pathutil (~> 0.9)
+ rouge (~> 3.0)
+ safe_yaml (~> 1.0)
+ terminal-table (~> 2.0)
+ jekyll-relative-links (0.6.1)
+ jekyll (>= 3.3, < 5.0)
+ jekyll-sass-converter (2.1.0)
+ sassc (> 2.0.1, < 3.0)
+ jekyll-watch (2.2.1)
+ listen (~> 3.0)
+ kramdown (2.3.1)
+ rexml
+ kramdown-parser-gfm (1.1.0)
+ kramdown (~> 2.0)
+ liquid (4.0.3)
+ listen (3.7.0)
+ rb-fsevent (~> 0.10, >= 0.10.3)
+ rb-inotify (~> 0.9, >= 0.9.10)
+ mercenary (0.4.0)
+ pathutil (0.16.2)
+ forwardable-extended (~> 2.6)
+ public_suffix (4.0.6)
+ rb-fsevent (0.11.0)
+ rb-inotify (0.10.1)
+ ffi (~> 1.0)
+ rexml (3.2.5)
+ rouge (3.26.0)
+ safe_yaml (1.0.5)
+ sassc (2.4.0)
+ ffi (~> 1.9)
+ terminal-table (2.0.0)
+ unicode-display_width (~> 1.1, >= 1.1.1)
+ unicode-display_width (1.7.0)
+
+PLATFORMS
+ x86_64-linux-musl
+
+DEPENDENCIES
+ jekyll-relative-links
+
+BUNDLED WITH
+ 2.2.2
diff --git a/docs/_config.yml b/docs/_config.yml
new file mode 100644
index 000000000..79567049e
--- /dev/null
+++ b/docs/_config.yml
@@ -0,0 +1,14 @@
+baseurl: /moq4
+
+defaults:
+ - scope:
+ path: ""
+ values:
+ layout: "default"
+ - scope:
+ path: "index.md"
+ values:
+ layout: "homepage"
+
+plugins:
+ - jekyll-relative-links
diff --git a/docs/_includes/head.html b/docs/_includes/head.html
new file mode 100644
index 000000000..392a9cdcd
--- /dev/null
+++ b/docs/_includes/head.html
@@ -0,0 +1,11 @@
+
+
+
+
+ {{ page.title }}
+
+
+
+
+
+
diff --git a/docs/_includes/header.html b/docs/_includes/header.html
new file mode 100644
index 000000000..352f618d3
--- /dev/null
+++ b/docs/_includes/header.html
@@ -0,0 +1,13 @@
+
diff --git a/docs/_layouts/default.html b/docs/_layouts/default.html
new file mode 100644
index 000000000..bd77f1c7a
--- /dev/null
+++ b/docs/_layouts/default.html
@@ -0,0 +1,10 @@
+
+
+ {% include head.html %}
+
+ {% include header.html %}
+
+ {{ content }}
+
+
+
diff --git a/docs/_layouts/homepage.html b/docs/_layouts/homepage.html
new file mode 100644
index 000000000..213bece8a
--- /dev/null
+++ b/docs/_layouts/homepage.html
@@ -0,0 +1,10 @@
+
+
+ {% include head.html %}
+
+ {% include header.html %}
+
+ {{ content }}
+
+
+
diff --git a/docs/_sass/reset.scss b/docs/_sass/reset.scss
new file mode 100644
index 000000000..3fc99e8d2
--- /dev/null
+++ b/docs/_sass/reset.scss
@@ -0,0 +1,34 @@
+*,
+*::before,
+*::after {
+ box-sizing: border-box;
+}
+
+footer,
+header,
+main {
+ display: block;
+}
+
+blockquote,
+body,
+figure,
+h1,
+h2,
+h3,
+h4,
+img,
+p,
+pre {
+ margin: 0;
+ padding: 0;
+}
+
+:root,
+body {
+ min-height: 100%;
+}
+
+img {
+ display: inline-block;
+}
diff --git a/docs/_sass/utility/flex.scss b/docs/_sass/utility/flex.scss
new file mode 100644
index 000000000..ecffc578d
--- /dev/null
+++ b/docs/_sass/utility/flex.scss
@@ -0,0 +1,21 @@
+.flex {
+ display: flex;
+
+ &-grow {
+ flex-grow: 1;
+ }
+}
+
+.items {
+
+ &-center {
+ align-items: center;
+ }
+}
+
+.justify {
+
+ &-stretch {
+ justify-content: stretch;
+ }
+}
diff --git a/docs/_sass/utility/height.scss b/docs/_sass/utility/height.scss
new file mode 100644
index 000000000..9c7969753
--- /dev/null
+++ b/docs/_sass/utility/height.scss
@@ -0,0 +1,18 @@
+.h {
+
+ &-full {
+ height: 100%;
+ }
+
+ &-24 {
+ height: 24px;
+ }
+
+ &-42 {
+ height: 42px;
+ }
+
+ &-64 {
+ height: 64px;
+ }
+}
diff --git a/docs/_sass/utility/margin.scss b/docs/_sass/utility/margin.scss
new file mode 100644
index 000000000..b4af37475
--- /dev/null
+++ b/docs/_sass/utility/margin.scss
@@ -0,0 +1,9 @@
+.mx-auto {
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.my-36 {
+ margin-top: 36px;
+ margin-bottom: 36px;
+}
diff --git a/docs/_sass/utility/max-width.scss b/docs/_sass/utility/max-width.scss
new file mode 100644
index 000000000..62977dd4c
--- /dev/null
+++ b/docs/_sass/utility/max-width.scss
@@ -0,0 +1,3 @@
+.max-w-650 {
+ max-width: 650px;
+}
diff --git a/docs/_sass/utility/padding.scss b/docs/_sass/utility/padding.scss
new file mode 100644
index 000000000..4ebe8c550
--- /dev/null
+++ b/docs/_sass/utility/padding.scss
@@ -0,0 +1,7 @@
+.p {
+
+ &x-8 {
+ padding-left: 4px;
+ padding-right: 4px;
+ }
+}
diff --git a/docs/_sass/utility/position.scss b/docs/_sass/utility/position.scss
new file mode 100644
index 000000000..89ffe77a8
--- /dev/null
+++ b/docs/_sass/utility/position.scss
@@ -0,0 +1,15 @@
+.absolute {
+ position: absolute;
+}
+
+.relative {
+ position: relative;
+}
+
+.sticky {
+ position: sticky;
+}
+
+.top-0 {
+ top: 0;
+}
diff --git a/docs/_sass/utility/space-between.scss b/docs/_sass/utility/space-between.scss
new file mode 100644
index 000000000..15ff1240e
--- /dev/null
+++ b/docs/_sass/utility/space-between.scss
@@ -0,0 +1,18 @@
+.space-x {
+
+ &-4 > * + * {
+ margin-left: 4px;
+ }
+
+ &-8 > * + * {
+ margin-left: 8px;
+ }
+
+ &-12 > * + * {
+ margin-left: 12px;
+ }
+
+ &-16 > * + * {
+ margin-left: 16px;
+ }
+}
diff --git a/docs/_sass/utility/text-alignment.scss b/docs/_sass/utility/text-alignment.scss
new file mode 100644
index 000000000..7150ea400
--- /dev/null
+++ b/docs/_sass/utility/text-alignment.scss
@@ -0,0 +1,3 @@
+.text-center {
+ text-align: center;
+}
diff --git a/docs/_sass/utility/width.scss b/docs/_sass/utility/width.scss
new file mode 100644
index 000000000..684ee4e1a
--- /dev/null
+++ b/docs/_sass/utility/width.scss
@@ -0,0 +1,14 @@
+.w {
+
+ &-full {
+ width: 100%;
+ }
+
+ &-24 {
+ width: 24px;
+ }
+
+ &-42 {
+ width: 42px;
+ }
+}
diff --git a/docs/assets/images/github-32.png b/docs/assets/images/github-32.png
new file mode 100644
index 000000000..8b25551a9
Binary files /dev/null and b/docs/assets/images/github-32.png differ
diff --git a/docs/assets/images/moq-icon.png b/docs/assets/images/moq-icon.png
new file mode 100644
index 000000000..41cf4062f
Binary files /dev/null and b/docs/assets/images/moq-icon.png differ
diff --git a/docs/assets/main.scss b/docs/assets/main.scss
new file mode 100644
index 000000000..a1821322e
--- /dev/null
+++ b/docs/assets/main.scss
@@ -0,0 +1,118 @@
+---
+---
+
+@import
+ "reset",
+ "utility/flex",
+ "utility/height",
+ "utility/margin",
+ "utility/max-width",
+ "utility/padding",
+ "utility/position",
+ "utility/space-between",
+ "utility/text-alignment",
+ "utility/width";
+
+$body-color: #1c1c1c;
+$body-light-color: #2a2a29;
+$body-text-color: #f0e7d5;
+$heading-text-color: #e8e8e8;
+$primary-color: #ffcc00;
+$primary-light-color: lighten($primary-color, 25%);
+
+:root {
+ font-size: 14px;
+ line-height: 1.5;
+ font-family: 'Open Sans', sans-serif;
+}
+
+code {
+ font-family: 'Inconsolata', monospace;
+}
+
+body {
+ color: $body-text-color;
+ background: linear-gradient($body-light-color, $body-color);
+}
+
+header {
+ background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAIAAAAmkwkpAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTnU1rJkAAAAHklEQVQYV2PQ0tIyhQEGIIbzQRwggPChHCDQ0tICAPUsCW2mN2EYAAAAAElFTkSuQmCC');
+ background-repeat: repeat;
+ border-bottom: 4px solid #434343;
+}
+
+main {
+
+ h1 {
+ font-size: 28px;
+ }
+
+ h2 {
+ font-size: 24px;
+ }
+
+ h1, h2 {
+ color: $heading-text-color;
+ font-weight: inherit;
+ line-height: 1.1;
+ margin-bottom: 10px;
+ }
+
+ img,
+ p,
+ pre {
+ margin-bottom: 20px;
+ }
+
+ blockquote {
+ border-left: 3px solid $primary-color;
+ padding-left: 20px;
+ font-style: italic;
+ }
+}
+
+a {
+ color: $primary-color;
+ text-decoration: none;
+
+ &:hover {
+ color: $primary-light-color;
+ }
+}
+
+pre.highlight {
+ background: rgba(0, 0, 0, 0.125);
+ border-radius: 3px;
+ line-height: 1.25;
+ overflow-y: auto;
+ padding: 8px 12px;
+ scrollbar-width: thin;
+}
+
+p code {
+ background: rgba(0, 0, 0, 0.125);
+ border-radius: 3px;
+ padding: 2px 6px;
+}
+
+.highlight {
+
+ & .c1,
+ & .cm {
+ color: mix($primary-light-color, $body-light-color, 50%);
+ font-style: italic;
+ }
+
+ & .k,
+ & .kt {
+ font-weight: bold;
+ }
+
+ & .m {
+ color: $primary-color;
+ }
+
+ & .p {
+ color: darken($body-text-color, 50%);
+ }
+}
diff --git a/docs/index.md b/docs/index.md
new file mode 100644
index 000000000..920966fb5
--- /dev/null
+++ b/docs/index.md
@@ -0,0 +1,8 @@
+---
+---
+
+
+
+Welcome to the documentation for version 4 of Moq!
+
+[Quickstart](https://github.com/Moq/moq4/wiki/Quickstart) \| [User Guide](user-guide/index.md)
diff --git a/docs/user-guide/index.md b/docs/user-guide/index.md
new file mode 100644
index 000000000..3e55da03b
--- /dev/null
+++ b/docs/user-guide/index.md
@@ -0,0 +1,6 @@
+---
+---
+
+# User Guide
+
+This is work in progress and currently under construction.