From a7fae6e62fbddc5565b10995f0eaeaca0af6c818 Mon Sep 17 00:00:00 2001
From: Christopher Speller
Date: Thu, 18 Feb 2016 09:25:10 -0500
Subject: Moving tests to /tests and removing /doc folder. Docs are now in
seperate repository
---
api/command_loadtest.go | 2 +-
doc/README.md | 54 ---
doc/developer/API-Web-Service.md | 96 -----
doc/developer/API.md | 47 ---
doc/developer/Code-Contribution-Guidelines.md | 5 -
doc/developer/Setup.md | 130 -------
doc/developer/Style-Guide.md | 170 ---------
doc/developer/tests/README.md | 18 -
doc/developer/tests/test-attachments.md | 144 --------
doc/developer/tests/test-emoticons.md | 22 --
doc/developer/tests/test-hashtags.md | 20 -
doc/developer/tests/test-link-preview.md | 23 --
doc/developer/tests/test-links.md | 69 ----
doc/developer/tests/test-markdown-basics.md | 151 --------
doc/developer/tests/test-markdown-lists.md | 250 -------------
doc/developer/tests/test-mentions.md | 13 -
doc/developer/tests/test-search.md | 43 ---
doc/developer/tests/test-syntax-highlighting.md | 231 ------------
doc/developer/tests/test-tables.md | 80 ----
doc/favicon.ico | 0
doc/help/Account-Settings.md | 115 ------
doc/help/Channels.md | 45 ---
doc/help/Creating-Teams.md | 38 --
doc/help/Manage-Members.md | 37 --
doc/help/Markdown.md | 191 ----------
doc/help/Notifications.md | 31 --
doc/help/README.md | 25 --
doc/help/Search.md | 18 -
doc/help/Sign-in.md | 27 --
doc/help/Team-Settings.md | 71 ----
doc/help/system-console/Team-Statistics.md | 24 --
doc/install/Administration.md | 114 ------
doc/install/Amazon-Elastic-Beanstalk.md | 28 --
doc/install/Command-Line-Tools.md | 81 ----
doc/install/Configuration-Settings.md | 409 ---------------------
doc/install/Docker-Single-Container.md | 124 -------
doc/install/LDAP-Setup.md | 34 --
doc/install/Production-Debian.md | 332 -----------------
doc/install/Production-RHEL6.md | 231 ------------
doc/install/Production-RHEL7.md | 238 ------------
doc/install/Production-Ubuntu.md | 215 -----------
doc/install/Release-Numbering.md | 23 --
doc/install/Requirements.md | 91 -----
doc/install/SMTP-Email-Setup.md | 107 ------
doc/install/Troubleshooting.md | 66 ----
doc/install/Upgrade-Guide.md | 81 ----
.../Single-Sign-On/GitHub-Enterprise.md | 20 -
doc/integrations/Single-Sign-On/GitHub.md | 24 --
doc/integrations/Single-Sign-On/Gitlab.md | 23 --
.../Gitlab-Integration-Service-for-Mattermost.md | 9 -
doc/integrations/webhooks/Incoming-Webhooks.md | 107 ------
doc/integrations/webhooks/Outgoing-Webhooks.md | 118 ------
doc/process/accepting-pull-request.md | 28 --
doc/process/documentation-guidelines.md | 209 -----------
doc/process/overview.md | 143 -------
doc/process/release-process.md | 156 --------
doc/usage/Markdown.md | 3 -
tests/README.md | 18 +
tests/test-attachments.md | 144 ++++++++
tests/test-emoticons.md | 22 ++
tests/test-hashtags.md | 20 +
tests/test-link-preview.md | 23 ++
tests/test-links.md | 69 ++++
tests/test-markdown-basics.md | 151 ++++++++
tests/test-markdown-lists.md | 250 +++++++++++++
tests/test-mentions.md | 13 +
tests/test-search.md | 43 +++
tests/test-syntax-highlighting.md | 231 ++++++++++++
tests/test-tables.md | 80 ++++
69 files changed, 1065 insertions(+), 5203 deletions(-)
delete mode 100644 doc/README.md
delete mode 100644 doc/developer/API-Web-Service.md
delete mode 100644 doc/developer/API.md
delete mode 100644 doc/developer/Code-Contribution-Guidelines.md
delete mode 100644 doc/developer/Setup.md
delete mode 100644 doc/developer/Style-Guide.md
delete mode 100644 doc/developer/tests/README.md
delete mode 100644 doc/developer/tests/test-attachments.md
delete mode 100644 doc/developer/tests/test-emoticons.md
delete mode 100644 doc/developer/tests/test-hashtags.md
delete mode 100644 doc/developer/tests/test-link-preview.md
delete mode 100644 doc/developer/tests/test-links.md
delete mode 100644 doc/developer/tests/test-markdown-basics.md
delete mode 100644 doc/developer/tests/test-markdown-lists.md
delete mode 100644 doc/developer/tests/test-mentions.md
delete mode 100644 doc/developer/tests/test-search.md
delete mode 100644 doc/developer/tests/test-syntax-highlighting.md
delete mode 100644 doc/developer/tests/test-tables.md
delete mode 100644 doc/favicon.ico
delete mode 100644 doc/help/Account-Settings.md
delete mode 100644 doc/help/Channels.md
delete mode 100644 doc/help/Creating-Teams.md
delete mode 100644 doc/help/Manage-Members.md
delete mode 100644 doc/help/Markdown.md
delete mode 100644 doc/help/Notifications.md
delete mode 100644 doc/help/README.md
delete mode 100644 doc/help/Search.md
delete mode 100644 doc/help/Sign-in.md
delete mode 100644 doc/help/Team-Settings.md
delete mode 100644 doc/help/system-console/Team-Statistics.md
delete mode 100644 doc/install/Administration.md
delete mode 100644 doc/install/Amazon-Elastic-Beanstalk.md
delete mode 100644 doc/install/Command-Line-Tools.md
delete mode 100644 doc/install/Configuration-Settings.md
delete mode 100644 doc/install/Docker-Single-Container.md
delete mode 100644 doc/install/LDAP-Setup.md
delete mode 100644 doc/install/Production-Debian.md
delete mode 100644 doc/install/Production-RHEL6.md
delete mode 100644 doc/install/Production-RHEL7.md
delete mode 100644 doc/install/Production-Ubuntu.md
delete mode 100644 doc/install/Release-Numbering.md
delete mode 100644 doc/install/Requirements.md
delete mode 100644 doc/install/SMTP-Email-Setup.md
delete mode 100644 doc/install/Troubleshooting.md
delete mode 100644 doc/install/Upgrade-Guide.md
delete mode 100644 doc/integrations/Single-Sign-On/GitHub-Enterprise.md
delete mode 100644 doc/integrations/Single-Sign-On/GitHub.md
delete mode 100644 doc/integrations/Single-Sign-On/Gitlab.md
delete mode 100644 doc/integrations/services/Gitlab-Integration-Service-for-Mattermost.md
delete mode 100644 doc/integrations/webhooks/Incoming-Webhooks.md
delete mode 100644 doc/integrations/webhooks/Outgoing-Webhooks.md
delete mode 100644 doc/process/accepting-pull-request.md
delete mode 100644 doc/process/documentation-guidelines.md
delete mode 100644 doc/process/overview.md
delete mode 100644 doc/process/release-process.md
delete mode 100644 doc/usage/Markdown.md
create mode 100644 tests/README.md
create mode 100644 tests/test-attachments.md
create mode 100644 tests/test-emoticons.md
create mode 100644 tests/test-hashtags.md
create mode 100644 tests/test-link-preview.md
create mode 100644 tests/test-links.md
create mode 100644 tests/test-markdown-basics.md
create mode 100644 tests/test-markdown-lists.md
create mode 100644 tests/test-mentions.md
create mode 100644 tests/test-search.md
create mode 100644 tests/test-syntax-highlighting.md
create mode 100644 tests/test-tables.md
diff --git a/api/command_loadtest.go b/api/command_loadtest.go
index c7c4f98f5..c76bc713f 100644
--- a/api/command_loadtest.go
+++ b/api/command_loadtest.go
@@ -289,7 +289,7 @@ func (me *LoadTestProvider) UrlCommand(c *Context, channelId string, message str
// provide a shortcut to easily access tests stored in doc/developer/tests
if !strings.HasPrefix(url, "http") {
- url = "https://raw.githubusercontent.com/mattermost/platform/master/doc/developer/tests/" + url
+ url = "https://raw.githubusercontent.com/mattermost/platform/master/tests/" + url
if path.Ext(url) == "" {
url += ".md"
diff --git a/doc/README.md b/doc/README.md
deleted file mode 100644
index 15d1d731b..000000000
--- a/doc/README.md
+++ /dev/null
@@ -1,54 +0,0 @@
-# Mattermost Documentation
-
-## Installation
-
-#### Preview Installation
-See what Mattermost has to offer in a Docker-based preview install
-
-Local Machine:
-- [One-line Docker Install](install/Docker-Single-Container.md#one-line-docker-install)
-- [Mac OS X install](install/Docker-Single-Container.md#mac-osx)
-- [Ubuntu Install](install/Docker-Single-Container.md#ubuntu)
-- [Arch Install](install/Docker-Single-Container.md#arch)
-
-Service Based:
-- [AWS Elastic Beanstalk Setup](install/Amazon-Elastic-Beanstalk.md)
-
-Optional:
-- [SMTP Email Setup](install/SMTP-Email-Setup.md)
-- [System Console Settings](install/Configuration-Settings.md)
-
-#### Production Installation
-Set up Mattermost in your data center using compiled binaries
-- [Software and Hardware Requirements](install/Requirements.md)
-- [Production Ubuntu Setup](install/Production-Ubuntu.md)
-- [SMTP Email Setup](install/SMTP-Email-Setup.md)
-- [System Console Settings](install/Configuration-Settings.md)
-- [Trouble Shooting Guide](install/Troubleshooting.md)
-
-Optional
-- [Community Guide for Production Debian Setup](install/Production-Debian.md)
-
-#### Configuration and Management
-- [System Console Settings](install/Configuration-Settings.md)
- - [GitLab SSO Configuration](integrations/Single-Sign-On/Gitlab.md)
-- [Mattermost Release Numbering and Schedule](install/Release-Numbering.md)
-
-#### System Upgrades
-Procedures for upgrading the Mattermost server
-- [Mattermost Release Numbering and Schedule](install/Release-Numbering.md)
-- [Upgrade Guide](install/Upgrade-Guide.md)
-
-## Developer Documentation
-
-- [Code Contribution Guidelines](https://github.com/mattermost/platform/blob/master/CONTRIBUTING.md)
-- [Developer Machine Setup](developer/Setup.md)
-- [Mattermost Style Guide](developer/Style-Guide.md)
-- [API Overview](developer/API.md)
- - [Incoming Webhooks](integrations/webhooks/Incoming-Webhooks.md)
- - [Outgoing Webhooks](integrations/webhooks/Outgoing-Webhooks.md)
- - [Web Service API](developer/API-Web-Service.md)
-
-## Help
-
-See [End User Help](help/README.md).
diff --git a/doc/developer/API-Web-Service.md b/doc/developer/API-Web-Service.md
deleted file mode 100644
index 53ebc869c..000000000
--- a/doc/developer/API-Web-Service.md
+++ /dev/null
@@ -1,96 +0,0 @@
-# Mattermost Web Service API
-
-This provides a basic overview of the Mattermost Web Service API. Drivers interfacing with this API are available in different languages. Current documentation focuses on the transport layer for the API and functional documentation will be developed next.
-
-All examples assume there is a Mattermost instance running at http://localhost:8065.
-
-## Schema
-
-All API access is done through `yourdomain.com/api/v1/`, with all data being sent and received as JSON.
-
-
-## Authentication
-
-The majority of the Mattermost API involves interacting with teams. Therefore, most API methods require authentication as a user. There are two ways to authenticate into a Mattermost system.
-
-##### Session Token
-
-Make an HTTP POST to `yourdomain.com/api/v1/users/login` with a JSON body indicating the `name` of the team, the user's `email` and `password`.
-
-```
-curl -i -d '{"name":"exampleteam","email":"someone@nowhere.com","password":"thisisabadpassword"}' http://localhost:8065/api/v1/users/login
-```
-
-If successful, the response will contain a `Token` header and a User object in the body.
-
-```
-HTTP/1.1 200 OK
-Set-Cookie: MMSID=hyr5dmb1mbb49c44qmx4whniso; Path=/; Max-Age=2592000; HttpOnly
-Token: hyr5dmb1mbb49c44qmx4whniso
-X-Ratelimit-Limit: 10
-X-Ratelimit-Remaining: 9
-X-Ratelimit-Reset: 1
-X-Request-Id: smda55ckcfy89b6tia58shk5fh
-X-Version-Id: developer
-Date: Fri, 11 Sep 2015 13:21:14 GMT
-Content-Length: 657
-Content-Type: application/json; charset=utf-8
-
-{{user object as json}}
-```
-
-Include the `Token` as part of the `Authentication` header on your future API requests with the `Bearer` method.
-
-```
-curl -i -H 'Authorization: Bearer hyr5dmb1mbb49c44qmx4whniso' http://localhost:8065/api/v1/users/me
-```
-
-That's it! You should now be able to access the API as the user you logged in as.
-
-##### OAuth2
-
-Coming soon...
-
-
-## Client Errors
-
-All errors will return an appropriate HTTP response code along with the following JSON body:
-
-```
-{
- "message": "", // the reason for the error
- "detailed_error": "", // some extra details about the error
- "request_id": "", // the ID of the request
- "status_code": 0 // the HTTP status code
-}
-```
-
-
-## Rate Limiting
-
-Whenever you make an HTTP request to the Mattermost API you might notice the following headers included in the response:
-```
-X-Ratelimit-Limit: 10
-X-Ratelimit-Remaining: 9
-X-Ratelimit-Reset: 1441983590
-
-```
-
-These headers are telling you your current rate limit status.
-
-Header | Description
-:--------------------- |:-----------
-X-Ratelimit-Limit | The maximum number of requests you can make per second.
-X-Ratelimit-Remaining | The number of requests remaining in the current window.
-X-Ratelimit-Reset | The remaining UTC epoch seconds before the rate limit resets.
-
-If you exceed your rate limit for a window you will receive the following error in the body of the response:
-```
-HTTP/1.1 429 Too Many Requests
-Date: Tue, 10 Sep 2015 11:20:28 GMT
-X-RateLimit-Limit: 10
-X-RateLimit-Remaining: 0
-X-RateLimit-Reset: 1
-
-limit exceeded
-```
diff --git a/doc/developer/API.md b/doc/developer/API.md
deleted file mode 100644
index 1da1a475b..000000000
--- a/doc/developer/API.md
+++ /dev/null
@@ -1,47 +0,0 @@
-# Mattermost APIs
-
-Mattermost APIs let you integrate your favorite tools and services withing your Mattermost experience.
-
-## Slack-compatible Webhooks
-
-To offer an alternative to propreitary SaaS services, Mattermost focuses on being "Slack-compatible, but not Slack limited". That means providing support for developers of Slack applications to easily extend their apps to Mattermost, as well as support and capabilities beyond what Slack offers.
-
-### [Incoming Webhooks](https://github.com/mattermost/platform/blob/master/doc/integrations/webhooks/Incoming-Webhooks.md)
-
-Incoming webhooks allow external applications to post messages into Mattermost channels and private groups by sending a JSON payload via HTTP POST request to a secret Mattermost URL generated specifically for each application.
-
-In addition to supporting Slack's incoming webhook formatting, Mattermost webhooks offer full support of industry-standard markdown formatting, including headings, tables and in-line images.
-
-### [Outgoing Webhooks](https://github.com/mattermost/platform/blob/master/doc/integrations/webhooks/Outgoing-Webhooks.md)
-
-Outgoing webhooks allow external applications to receive webhook events from events happening within Mattermost channels and private groups via JSON payloads via HTTP POST requests sent to incoming webhook URLs defined by your applications.
-
-Over time, Mattermost outgoing webhooks will support not only Slack applications using a compatible format, but also offer optional events and triggers beyond Slack's feature set.
-
-## Mattermost Web Service API
-
-Mattermost offers a Web Service API accessible by Mattermost Drivers, listed below. Initial documentation on the [transport layer for the web service is available](API-Web-Service.md) and functional documentation is under development.
-
-## Mattermost Drivers
-
-Mattermost drivers offer access to the Mattermost web service API in different languages and frameworks.
-
-### [ReactJS Javascript Driver](https://github.com/mattermost/platform/blob/master/web/react/utils/client.jsx)
-
-[client.jsx](https://github.com/mattermost/platform/blob/master/web/react/utils/client.jsx) - This Javascript driver connects with the ReactJS components of Mattermost. The web client does the vast majority of its work by connecting to a RESTful JSON web service. There is a very small amount of processing for error checking and set up that happens on the web server.
-
-### [Golang Driver](https://github.com/mattermost/platform/blob/master/model/client.go)
-
-[client.go](https://github.com/mattermost/platform/blob/master/model/client.go) - This is a RESTful driver connecting with the Golang-based webservice of Mattermost and is used by unit tests.
-
-## Building API Integration
-
-If you're building a deep integration with Mattermost, for example a mobile native client, and there is a driver available to support the programming language you are using, it's best to use the driver available to access the [Mattermost Web Service APIs](API-Web-Service.md).
-
-If no driver is available for the programming language of your choice, you can view the [Golang Driver](https://github.com/mattermost/platform/blob/master/model/client.go) source code to understand how it exercises the Web Service API. You can also learn more by reviewing open source projects that use the Web Service API, like [matterircd](https://github.com/42wim/matterircd).
-
-There are a wide range of [installation guides](http://www.mattermost.org/installation/) for setting up your own Mattermost server on which to develop and test your integrations.
-
-
-
-
diff --git a/doc/developer/Code-Contribution-Guidelines.md b/doc/developer/Code-Contribution-Guidelines.md
deleted file mode 100644
index 18be4aa0b..000000000
--- a/doc/developer/Code-Contribution-Guidelines.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# Code Contribution Guidelines
-
-Please see [CONTRIBUTING.md](https://github.com/mattermost/platform/blob/master/CONTRIBUTING.md)
-
-
diff --git a/doc/developer/Setup.md b/doc/developer/Setup.md
deleted file mode 100644
index fd3704545..000000000
--- a/doc/developer/Setup.md
+++ /dev/null
@@ -1,130 +0,0 @@
-Developer Machine Setup
------------------------------
-
-### Mac OS X ###
-
-1. Download and set up Docker Toolbox
- 1. Follow the instructions at http://docs.docker.com/installation/mac/
- 2. Start a new docker host
- `docker-machine create -d virtualbox dev`
- 2. Get the IP address of your docker host
- `docker-machine ip dev`
- 3. Add a line to your /etc/hosts that goes ` dockerhost`
- 4. Run `docker-machine env dev` and copy the export statements to your ~/.bash_profile
-2. Download Go 1.5.1 and Node.js using Homebrew
- 1. Download Homebrew from http://brew.sh/
- 2. `brew install go`
- 3. `brew install node`
-3. Set up your Go workspace
- 1. `mkdir ~/go`
- 2. Add the following to your ~/.bash_profile
- `export GOPATH=$HOME/go`
- `export PATH=$PATH:$GOPATH/bin`
- `ulimit -n 8096`
- If you don't increase the file handle limit you may see some weird build issues with browserify or npm.
- 3. Reload your bash profile
- `source ~/.bash_profile`
-4. Install Compass
- 1. Run `ruby -v` and check the ruby version is 1.8.7 or higher
- 2. `sudo gem install compass`
-5. Download Mattermost
- `cd ~/go`
- `mkdir -p src/github.com/mattermost`
- `cd src/github.com/mattermost`
- `git clone https://github.com/mattermost/platform.git`
- `cd platform`
-6. Run unit tests on Mattermost using `make test` to make sure the installation was successful
-7. If tests passed, you can now run Mattermost using `make run`
-
-Any issues? Please let us know on our forums at: http://forum.mattermost.org
-
-### Ubuntu ###
-
-1. Download Docker
- 1. Follow the instructions at https://docs.docker.com/installation/ubuntulinux/ or use the summary below:
- `sudo apt-get update`
- `sudo apt-get install wget`
- `wget -qO- https://get.docker.com/ | sh`
- `sudo usermod -aG docker `
- `sudo service docker start`
- `newgrp docker`
-2. Set up your dockerhost address
- 1. Edit your /etc/hosts file to include the following line
- `127.0.0.1 dockerhost`
-3. Install build essentials
- 1. `apt-get install build-essential`
-4. Download Go 1.5.1 from http://golang.org/dl/
-5. Set up your Go workspace and add Go to the PATH
- 1. `mkdir ~/go`
- 2. Add the following to your ~/.bashrc
- `export GOPATH=$HOME/go`
- `export PATH=$PATH:$GOPATH/bin`
- `ulimit -n 8096`
- If you don't increase the file handle limit you may see some weird build issues with browserify or npm.
- 3. Reload your bashrc
- `source ~/.bashrc`
-6. Install Node.js
- `curl -sL https://deb.nodesource.com/setup_5.x | sudo -E bash -`
- `sudo apt-get install -y nodejs`
-7. Install Ruby and Compass
- `apt-get install ruby`
- `apt-get install ruby-dev`
- `gem install compass`
-8. Download Mattermost
- `cd ~/go`
- `mkdir -p src/github.com/mattermost`
- `cd src/github.com/mattermost`
- `git clone https://github.com/mattermost/platform.git`
- `cd platform`
-9. Run unit tests on Mattermost using `make test` to make sure the installation was successful
-10. If tests passed, you can now run Mattermost using `make run`
-
-Any issues? Please let us know on our forums at: http://forum.mattermost.org
-
-### Archlinux ###
-
-1. Install Docker
- 1. `pacman -S docker`
- 2. `gpasswd -a user docker`
- 3. `systemctl enable docker.service`
- 4. `systemctl start docker.service`
- 5. `newgrp docker`
-2. Set up your dockerhost address
- 1. Edit your /etc/hosts file to include the following line
- `127.0.0.1 dockerhost`
-3. Install Go
- 1. `pacman -S go`
-4. Set up your Go workspace and add Go to the PATH
- 1. `mkdir ~/go`
- 2. Add the following to your ~/.bashrc
- 1. `export GOPATH=$HOME/go`
- 2. `export GOROOT=/usr/lib/go`
- 3. `export PATH=$PATH:$GOROOT/bin`
- 3. Reload your bashrc
- `source ~/.bashrc`
-4. Edit /etc/security/limits.conf and add the following lines (replace *username* with your user):
-
- ```
- username soft nofile 8096
- username hard nofile 8096
- ```
-
- You will need to reboot after changing this. If you don't increase the file handle limit you may see some weird build issues with browserify or npm.
-5. Install Node.js
- `pacman -S nodejs npm`
-6. Install Ruby and Compass
- 1. `pacman -S ruby`
- 2. Add executable gems to your path in your ~/.bashrc
-
- `PATH="$(ruby -e 'print Gem.user_dir')/bin:$PATH"`
- 3. `gem install compass`
-7. Download Mattermost
- `cd ~/go`
- `mkdir -p src/github.com/mattermost`
- `cd src/github.com/mattermost`
- `git clone https://github.com/mattermost/platform.git`
- `cd platform`
-8. Run unit tests on Mattermost using `make test` to make sure the installation was successful
-9. If tests passed, you can now run Mattermost using `make run`
-
-Any issues? Please let us know on our forums at: http://forum.mattermost.org
diff --git a/doc/developer/Style-Guide.md b/doc/developer/Style-Guide.md
deleted file mode 100644
index a06f9e29b..000000000
--- a/doc/developer/Style-Guide.md
+++ /dev/null
@@ -1,170 +0,0 @@
-# Mattermost Style Guide
-
-1. [Go](#go)
-2. [Javascript](#javascript)
-3. [React-JSX](#react-jsx)
-
-
-## Go
-
-All go code must follow the golang official [Style Guide](https://golang.org/doc/effective_go.html)
-
-In addition all code must be run though the official go formatter tool [gofmt](https://golang.org/cmd/gofmt/)
-
-
-## Javascript
-
-Part of the build process is running ESLint. ESLint is the final authority on all style issues. PRs will not be accepted unless there are no errors running ESLint. The ESLint configuration file can be found in: [web/react/.eslintrc](/web/react/.eslintrc)
-
-Instructions on how to use ESLint with your favourite editor can be found here: [http://eslint.org/docs/user-guide/integrations](http://eslint.org/docs/user-guide/integrations)
-
-You can run eslint using the makefile by using `make check`
-
-The following is a subset of what ESLint checks for. ESLint is always the authority.
-
-### Whitespace
-
-- Indentation is four spaces.
-- Use a space before the leading brace.
-- Use one space between the comma and the next argument in a bracketed list. No other space.
-- Use whitespace to make code more readable.
-- Do not use more than one newline to separate code blocks.
-- Do not use a newline as the first line of a function
-
-```javascript
-// Correct
-function myFunction(parm1, parm2) {
- stuff...;
-
- morestuff;
-}
-
-// Incorrect
-function myFunction ( parm1, parm2 ){
- stuff...;
-
-
- morestuff;
-}
-
-```
-
-### Semicolons
-
-- You must use them always.
-
-```javascript
-// Correct
-let x = 1;
-
-// Incorrect
-let x = 1
-```
-
-### Variables
-
-- Declarations must always use var, let or const.
-- Prefer let or const over var.
-- camelCase for all variable names.
-
-```javascript
-// Correct
-let myVariable = 4;
-
-// OK
-var myVariable = 4;
-
-// Incorrect
-myVariable = 4;
-var my_variable = 4;
-```
-
-### Blocks
-
-- Braces must be used on all blocks.
-- Braces must start on the same line as the statement starting the block.
-- Else and else if must be on the same line as the if block closing brace.
-
-```javascript
-// Correct
-if (something) {
- stuff...;
-} else if (otherthing) {
- stuff...;
-}
-
-// Incorrect
-if (something)
-{
- stuff...;
-}
-else
-{
- stuff...;
-}
-
-// Incorrect
-if (something) stuff...;
-if (something)
- stuff...;
-
-```
-
-### Strings
-
-- Use of template strings is preferred instead of concatenation.
-
-```javascript
-// Correct
-function getStr(stuff) {
- return "This is the ${stuff} string";
-}
-
-// Incorrect
-function wrongGetStr(stuff) {
- return "This is the " + stuff + " string";
-}
-```
-
-## React-JSX
-
-Part of the build process is running ESLint. ESLint is the final authority on all style issues. PRs will not be accepted unless there are no errors running ESLint. The ESLint configuration file can be found in: [web/react/.eslintrc](/web/react/.eslintrc)
-
-Instructions on how to use ESLint with your favourite editor can be found here: [http://eslint.org/docs/user-guide/integrations](http://eslint.org/docs/user-guide/integrations)
-
-You can run eslint using the makefile by using `make check`
-
-The following is a subset of what ESLint checks for. ESLint is always the authority.
-
-### General
-
-- Include only one React component per file.
-- Use class \ extends React.Component over React.createClass unless you need mixins
-- Filenames should be the component name.
-
-### Alignment
-
-- Follow alignment styles shown below:
-```xml
-// Correct
-
-
-
-
-// Correct
-
-```
-
-### Naming
-
-- Property names use camelCase.
-- React component names use CapitalCamelCase.
-- Do not use an underscore for internal methods in a react component.
-
-```xml
-// Correct
-
-```
diff --git a/doc/developer/tests/README.md b/doc/developer/tests/README.md
deleted file mode 100644
index a7b36f18d..000000000
--- a/doc/developer/tests/README.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# Testing Text Processing
-The text processing tests located in the [doc/developer/tests folder](https://github.com/mattermost/platform/tree/master/doc/developer/tests) are designed for use with the `/loadtest url` command. This command posts the raw contents of a specified .md file in the doc/developer/test folder into Mattermost.
-
-## Turning on /loadtest
-Access the **System Console** from the Main Menu. Under *Service Settings* make sure that *Enable Testing* is set to `true`, then click **Save**. You may also change this setting from `config.json` by setting `”EnableTesting”: true`. Changing this setting requires a server restart to take effect.
-
-## Running the Tests
-In the text input box in Mattermost, type: `/loadtest url [file-name-in-testing-folder].md`. Some examples:
-
-`/loadtest url test-emoticons.md`
-`/loadtest url test-links.md`
-
-#### Notes:
-1. If a test has prerequisites, make sure your Mattermost setup meets the requirements described at the top of the test file.
-2. Some tests are over 4000 characters in length and will render across multiple posts.
-
-## Manual Testing
-It is possible to manually test specific sections of any test, instead of using the /loadtest command. Do this by clicking **Raw** in the header for the file when it’s open in GitHub, then copy and paste any section into Mattermost to post it. Manual testing only supports sections of 4000 characters or less per post.
diff --git a/doc/developer/tests/test-attachments.md b/doc/developer/tests/test-attachments.md
deleted file mode 100644
index 75a2285f8..000000000
--- a/doc/developer/tests/test-attachments.md
+++ /dev/null
@@ -1,144 +0,0 @@
-# Testing Files and Attachments
-This test contains instructions for the core team to manually test common attachment types. All files for testing are stored in the [mm_file_testing](https://www.dropbox.com/sh/i7ft8is5hbhk8ii/AAAyM-WG-X2jiQOgg6-E3MmLa?dl=0) dropbox folder. Follow these instructions:
-
-1. Download the entire [mm_file_testing](https://www.dropbox.com/sh/i7ft8is5hbhk8ii/AAAyM-WG-X2jiQOgg6-E3MmLa?dl=0) folder.
-2. Drag and drop each file type into Mattermost to upload it.
-3. Post the file attachment
-
-**Notes:**
-- All file types should upload and post.
-- Read the expected for details on the behavior of the thumbnail and preview window.
-- The expected behavior of video and audio formats depends on the operating system, browser and plugins. View the permalinks to the Public Test Channel on Pre-Release Core to see the expected cases.
-- If the browser can play the media file, media player controls should appear. If the browser cannot play the file, it should show appear as a regular attachment without the media controls.
-
-
-### Images
-**JPG**
-`Images/JPG.jpg`
-Expected: Scaled thumbnail & preview window
-[Permalink](https://pre-release.mattermost.com/core/pl/bgx3wcd9ppdo7fz9zqokofg7sc)
-
-**PNG**
-`Images/PNG.png`
-Expected: Scaled thumbnail & preview window
-[Permalink](https://pre-release.mattermost.com/core/pl/zra4yhm69j8ij81iy5hw7983qe)
-
-**BMP**
-`Images/BMP.bmp`
-Expected: Scaled thumbnail & preview window
-[Permalink](https://pre-release.mattermost.com/core/pl/1hx7x7t1npn4jqyr5rb1qhbj3h)
-
-**GIF**
-`Images/GIF.gif`
-Expected: Scaled thumbnail & preview window. GIF should auto-play in the preview window.
-[Permalink](https://pre-release.mattermost.com/core/pl/j49fowdkstr57g3ed9bgpfoo5w)
-
-**TIFF**
-`Images/TIFF.tiff`
-Expected: Generic attachment thumbnail & preview window
-[Permalink](https://pre-release.mattermost.com/core/pl/6yad4jydaidr3pc3tihp8n8bge)
-
-**PSD**
-`Images/PSD.psd`
-Expected: Generic attachment thumbnail & preview window
-[Permalink](https://pre-release.mattermost.com/core/pl/4kitwk7pi78c9ck4i98f9xnzoe)
-
-
-### Documents
-
-**PDF Files**
-`Documents/PDF.pdf`
-Expected: Generic PDF thumbnail & preview window.
-[Permalink](https://pre-release.mattermost.com/core/pl/o1dg6menetdszrhyxmtoqjfi8h)
-
-
-**Excel**
-`Documents/Excel.xlsx`
-Expected: Generic Excel thumbnail & preview window.
-[Permalink](https://pre-release.mattermost.com/core/pl/71wwezy3f7drze6ipundscb17y)
-
-
-**PPT**
-`Documents/PPT.pptx`
-Expected: Generic Powerpoint thumbnail & preview window.
-[Permalink](https://pre-release.mattermost.com/core/pl/mx37h4znwb8f5ffuoajusqhiew)
-
-**Word**
-`Documents/Word.docx`
-Expected: Generic Word thumbnail & preview window.
-[Permalink](https://pre-release.mattermost.com/core/pl/d7s76wp6kjdwfp4hgrwpijsnyy)
-
-
-### Videos
-
-**MP4**
-`Videos/MP4.mp4`
-Expected: Generic video thumbnail, view Permalink for preview window behavior. Expected depends on the operating system, browser and plugins.
-[Permalink](https://pre-release.mattermost.com/core/pl/5dx5qx9t9brqfnhohccxjynx7c)
-
-**AVI**
-`Videos/AVI.avi`
-Expected: Generic video thumbnail, view Permalink for preview window behavior. Expected depends on the operating system, browser and plugins.
-[Permalink](https://pre-release.mattermost.com/core/pl/qwn9eiy7j3rkjyruxhcugpogdw)
-
-**MKV**
-`Videos/MKV.mkv`
-Expected: Generic video thumbnail, view Permalink for preview window behavior. Expected depends on the operating system, browser and plugins.
-[Permalink](https://pre-release.mattermost.com/core/pl/tszyjkr1cidhxjgiusa4mde3ja)
-
-**MOV**
-`Videos/MOV.mov`
-Expected: Generic video thumbnail, view Permalink for preview window behavior. Expected depends on the operating system, browser and plugins.
-[Permalink](https://pre-release.mattermost.com/core/pl/ienzppz5i3f7tbt5jiujn8uuir)
-
-**MPG**
-`Videos/MPG.mpg`
-Expected: Generic video thumbnail, view Permalink for preview window behavior. Expected depends on the operating system, browser and plugins.
-[Permalink](https://pre-release.mattermost.com/core/pl/skggdq1hfpritc6c88bi481p5a)
-
-**Webm**
-`Videos/WEBM.webm`
-Expected: Generic video thumbnail, view Permalink for preview window behavior. Expected depends on the operating system, browser and plugins.
-[Permalink](https://pre-release.mattermost.com/core/pl/7h8tysuxgfgsxeht3sbn7e4h6y)
-
-**WMV**
-`Videos/WMV.wmv`
-Expected: Generic video thumbnail, view Permalink for preview window behavior. Expected depends on the operating system, browser and plugins.
-[Permalink](https://pre-release.mattermost.com/core/pl/kaom7j7uyjra7bzhrre6qwdrbw)
-
-### Audio
-
-**MP3**
-`Audio/MP3.mp3`
-Expected: Generic audio thumbnail & playable preview window
-[Permalink](https://pre-release.mattermost.com/core/pl/if4gn8dbrjgx8fmqmkukzefyme)
-
-**M4A**
-`Audio/M4a.m4a`
-Expected: Generic audio thumbnail, view Permalink for preview window behavior. Expected depends on the operating system, browser and plugins.
-[Permalink](https://pre-release.mattermost.com/core/pl/6c7qsw48ybd88bktgeykodsrrc)
-
-**AAC**
-`Audio/AAC.aac`
-Expected: Generic audio thumbnail, view Permalink for preview window behavior. Expected depends on the operating system, browser and plugins.
-[Permalink](https://pre-release.mattermost.com/core/pl/3naoy5pr5tydbk1m6yo1ast9ny)
-
-**FLAC**
-`Audio/FLAC.flac`
-Expected: Generic audio thumbnail, view Permalink for preview window behavior. Expected depends on the operating system, browser and plugins.
-[Permalink](https://pre-release.mattermost.com/core/pl/kf4cmy44dfya5efmse7rg43eih)
-
-**OGG**
-`Audio/OGG.ogg`
-Expected: Generic audio thumbnail, view Permalink for preview window behavior. Expected depends on the operating system, browser and plugins.
-[Permalink](https://pre-release.mattermost.com/core/pl/dezrcpbxapyexe77rjuzkrp63r)
-
-**WAV**
-`Audio/WAV.wav`
-Expected: Generic audio thumbnail, view Permalink for preview window behavior. Expected depends on the operating system, browser and plugins.
-[Permalink](https://pre-release.mattermost.com/core/pl/pdkxx1udepdnbmi9j8kyas5xbh)
-
-**WMA**
-`Audio/WMA.wma`
-Expected: Generic audio thumbnail, view Permalink for preview window behavior. Expected depends on the operating system, browser and plugins.
-[Permalink](https://pre-release.mattermost.com/core/pl/756wrmdd57dcig3m4emypp6i1h)
diff --git a/doc/developer/tests/test-emoticons.md b/doc/developer/tests/test-emoticons.md
deleted file mode 100644
index fc2594d9e..000000000
--- a/doc/developer/tests/test-emoticons.md
+++ /dev/null
@@ -1,22 +0,0 @@
-# Emoticon Testing
-Verify that all emoticons render. This test should render in three separate messages since it's ~11000 characters.
-
-### Emoticon - Punctuation
-
-:) :-) ;) ;-) :o :O :-o :-O :] :-] :d :-D x-d x-D :p :-P :@ :( :-( :'( :/ :-/ :s :-s :| :-| :$ :-$ :-x <3 :+1: :-1:
-
-### Emoticons - People
-:bowtie: :smile: :laughing: :blush: :smiley: :relaxed: :smirk: :heart_eyes: :kissing_heart: :kissing_closed_eyes: :flushed: :relieved: :satisfied: :grin: :wink: :stuck_out_tongue_winking_eye: :stuck_out_tongue_closed_eyes: :grinning: :kissing: :kissing_smiling_eyes: :stuck_out_tongue: :sleeping: :worried: :frowning: :anguished: :open_mouth: :grimacing: :confused: :hushed: :expressionless: :unamused: :sweat_smile: :sweat: :disappointed_relieved: :weary: :pensive: :disappointed: :confounded: :fearful: :cold_sweat: :persevere: :cry: :sob: :joy: :astonished: :scream: :neckbeard: :tired_face: :angry: :rage: :triumph: :sleepy: :yum: :mask: :sunglasses: :dizzy_face: :imp: :smiling_imp: :neutral_face: :no_mouth: :innocent: :alien: :yellow_heart: :blue_heart: :purple_heart: :heart: :green_heart: :broken_heart: :heartbeat: :heartpulse: :two_hearts: :revolving_hearts: :cupid: :sparkling_heart: :sparkles: :star: :star2: :dizzy: :boom: :collision: :anger: :exclamation: :question: :grey_exclamation: :grey_question: :zzz: :dash: :sweat_drops: :notes: :musical_note: :fire: :hankey: :poop: :shit: :+1: :thumbsup: :-1: :thumbsdown: :ok_hand: :punch: :facepunch: :fist: :v: :wave: :hand: :raised_hand: :open_hands: :point_up: :point_down: :point_left: :point_right: :raised_hands: :pray: :point_up_2: :clap: :muscle: :metal: :fu: :runner: :running: :couple: :family: :two_men_holding_hands: :two_women_holding_hands: :dancer: :dancers: :ok_woman: :no_good: :information_desk_person: :raising_hand: :bride_with_veil: :person_with_pouting_face: :person_frowning: :bow: :couplekiss: :couple_with_heart: :massage: :haircut: :nail_care: :boy: :girl: :woman: :man: :baby: :older_woman: :older_man: :person_with_blond_hair: :man_with_gua_pi_mao: :man_with_turban: :construction_worker: :cop: :angel: :princess: :smiley_cat: :smile_cat: :heart_eyes_cat: :kissing_cat: :smirk_cat: :scream_cat: :crying_cat_face: :joy_cat: :pouting_cat: :japanese_ogre: :japanese_goblin: :see_no_evil: :hear_no_evil: :speak_no_evil: :guardsman: :skull: :feet: :lips: :kiss: :droplet: :ear: :eyes: :nose: :tongue: :love_letter: :bust_in_silhouette: :busts_in_silhouette: :speech_balloon: :thought_balloon: :feelsgood: :finnadie: :goberserk: :godmode: :hurtrealbad: :rage1: :rage2: :rage3: :rage4: :suspect: :trollface:
-
-### Emoticons - Nature
-:sunny: :umbrella: :cloud: :snowflake: :snowman: :zap: :cyclone: :foggy: :ocean: :cat: :dog: :mouse: :hamster: :rabbit: :wolf: :frog: :tiger: :koala: :bear: :pig: :pig_nose: :cow: :boar: :monkey_face: :monkey: :horse: :racehorse: :camel: :sheep: :elephant: :panda_face: :snake: :bird: :baby_chick: :hatched_chick: :hatching_chick: :chicken: :penguin: :turtle: :bug: :honeybee: :ant: :beetle: :snail: :octopus: :tropical_fish: :fish: :whale: :whale2: :dolphin: :cow2: :ram: :rat: :water_buffalo: :tiger2: :rabbit2: :dragon: :goat: :rooster: :dog2: :pig2: :mouse2: :ox: :dragon_face: :blowfish: :crocodile: :dromedary_camel: :leopard: :cat2: :poodle: :paw_prints: :bouquet: :cherry_blossom: :tulip: :four_leaf_clover: :rose: :sunflower: :hibiscus: :maple_leaf: :leaves: :fallen_leaf: :herb: :mushroom: :cactus: :palm_tree: :evergreen_tree: :deciduous_tree: :chestnut: :seedling: :blossom: :ear_of_rice: :shell: :globe_with_meridians: :sun_with_face: :full_moon_with_face: :new_moon_with_face: :new_moon: :waxing_crescent_moon: :first_quarter_moon: :waxing_gibbous_moon: :full_moon: :waning_gibbous_moon: :last_quarter_moon: :waning_crescent_moon: :last_quarter_moon_with_face: :first_quarter_moon_with_face: :crescent_moon: :earth_africa: :earth_americas: :earth_asia: :volcano: :milky_way: :partly_sunny: :octocat: :squirrel:
-
-### Emoticons - Objects
-:bamboo: :gift_heart: :dolls: :school_satchel: :mortar_board: :flags: :fireworks: :sparkler: :wind_chime: :rice_scene: :jack_o_lantern: :ghost: :santa: :christmas_tree: :gift: :bell: :no_bell: :tanabata_tree: :tada: :confetti_ball: :balloon: :crystal_ball: :cd: :dvd: :floppy_disk: :camera: :video_camera: :movie_camera: :computer: :tv: :iphone: :phone: :telephone: :telephone_receiver: :pager: :fax: :minidisc: :vhs: :sound: :speaker: :mute: :loudspeaker: :mega: :hourglass: :hourglass_flowing_sand: :alarm_clock: :watch: :radio: :satellite: :loop: :mag: :mag_right: :unlock: :lock: :lock_with_ink_pen: :closed_lock_with_key: :key: :bulb: :flashlight: :high_brightness: :low_brightness: :electric_plug: :battery: :calling: :email: :mailbox: :postbox: :bath: :bathtub: :shower: :toilet: :wrench: :nut_and_bolt: :hammer: :seat: :moneybag: :yen: :dollar: :pound: :euro: :credit_card: :money_with_wings: :e-mail: :inbox_tray: :outbox_tray: :envelope: :incoming_envelope: :postal_horn: :mailbox_closed: :mailbox_with_mail: :mailbox_with_no_mail: :package: :door: :smoking: :bomb: :gun: :hocho: :pill: :syringe: :page_facing_up: :page_with_curl: :bookmark_tabs: :bar_chart: :chart_with_upwards_trend: :chart_with_downwards_trend: :scroll: :clipboard: :calendar: :date: :card_index: :file_folder: :open_file_folder: :scissors: :pushpin: :paperclip: :black_nib: :pencil2: :straight_ruler: :triangular_ruler: :closed_book: :green_book: :blue_book: :orange_book: :notebook: :notebook_with_decorative_cover: :ledger: :books: :bookmark: :name_badge: :microscope: :telescope: :newspaper: :football: :basketball: :soccer: :baseball: :tennis: :8ball: :8ball: :rugby_football: :bowling: :golf: :mountain_bicyclist: :bicyclist: :horse_racing: :snowboarder: :swimmer: :surfer: :ski: :spades: :hearts: :clubs: :diamonds: :gem: :ring: :trophy: :musical_score: :musical_keyboard: :violin: :space_invader: :video_game: :black_joker: :flower_playing_cards: :game_die: :dart: :mahjong: :clapper: :memo: :pencil: :book: :art: :microphone: :headphones: :trumpet: :saxophone: :guitar: :shoe: :sandal: :high_heel: :lipstick: :boot: :shirt: :tshirt: :necktie: :womans_clothes: :dress: :running_shirt_with_sash: :jeans: :kimono: :bikini: :ribbon: :tophat: :crown: :womans_hat: :mans_shoe: :closed_umbrella: :briefcase: :handbag: :pouch: :purse: :eyeglasses: :fishing_pole_and_fish: :coffee: :tea: :sake: :baby_bottle: :beer: :beers: :cocktail: :tropical_drink: :wine_glass: :fork_and_knife: :pizza: :hamburger: :fries: :poultry_leg: :meat_on_bone: :spaghetti: :curry: :fried_shrimp: :bento: :sushi: :fish_cake: :rice_ball: :rice_cracker: :rice: :ramen: :stew: :oden: :dango: :egg: :bread: :doughnut: :custard: :icecream: :ice_cream: :shaved_ice: :birthday: :cake: :cookie: :chocolate_bar: :candy: :lollipop: :honey_pot: :apple: :green_apple: :tangerine: :lemon: :cherries: :grapes: :watermelon: :strawberry: :peach: :melon: :banana: :pear: :pineapple: :sweet_potato: :eggplant: :tomato: :corn:
-
-### Emoticons - Places
-
-:house: :house_with_garden: :school: :office: :post_office: :hospital: :bank: :convenience_store: :love_hotel: :hotel: :wedding: :church: :department_store: :european_post_office: :city_sunrise: :city_sunset: :japanese_castle: :european_castle: :tent: :factory: :tokyo_tower: :japan: :mount_fuji: :sunrise_over_mountains: :sunrise: :stars: :statue_of_liberty: :bridge_at_night: :carousel_horse: :rainbow: :ferris_wheel: :fountain: :roller_coaster: :ship: :speedboat: :boat: :sailboat: :rowboat: :anchor: :rocket: :airplane: :helicopter: :steam_locomotive: :tram: :mountain_railway: :bike: :aerial_tramway: :suspension_railway: :mountain_cableway: :tractor: :blue_car: :oncoming_automobile: :car: :red_car: :taxi: :oncoming_taxi: :articulated_lorry: :bus: :oncoming_bus: :rotating_light: :police_car: :oncoming_police_car: :fire_engine: :ambulance: :minibus: :truck: :train: :station: :train2: :bullettrain_front: :bullettrain_side: :light_rail: :monorail: :railway_car: :trolleybus: :ticket: :fuelpump: :vertical_traffic_light: :traffic_light: :warning: :construction: :beginner: :atm: :slot_machine: :busstop: :barber: :hotsprings: :checkered_flag: :crossed_flags: :izakaya_lantern: :moyai: :circus_tent: :performing_arts: :round_pushpin: :triangular_flag_on_post: :jp: :kr: :cn: :us: :fr: :es: :it: :ru: :gb: :uk: :de:
-
-### Emoticons - Symbols
-:one: :two: :three: :four: :five: :six: :seven: :eight: :nine: :keycap_ten: :1234: :zero: :hash: :symbols: :arrow_backward: :arrow_down: :arrow_forward: :arrow_left: :capital_abcd: :abcd: :abc: :arrow_lower_left: :arrow_lower_right: :arrow_right: :arrow_up: :arrow_upper_left: :arrow_upper_right: :arrow_double_down: :arrow_double_up: :arrow_down_small: :arrow_heading_down: :arrow_heading_up: :leftwards_arrow_with_hook: :arrow_right_hook: :left_right_arrow: :arrow_up_down: :arrow_up_small: :arrows_clockwise: :arrows_counterclockwise: :rewind: :fast_forward: :information_source: :ok: :twisted_rightwards_arrows: :repeat: :repeat_one: :new: :top: :up: :cool: :free: :ng: :cinema: :koko: :signal_strength: :u5272: :u5408: :u55b6: :u6307: :u6708: :u6709: :u6e80: :u7121: :u7533: :u7a7a: :u7981: :sa: :restroom: :mens: :womens: :baby_symbol: :no_smoking: :parking: :wheelchair: :metro: :baggage_claim: :accept: :wc: :potable_water: :put_litter_in_its_place: :secret: :congratulations: :m: :passport_control: :left_luggage: :customs: :ideograph_advantage: :cl: :sos: :id: :no_entry_sign: :underage: :no_mobile_phones: :do_not_litter: :non-potable_water: :no_bicycles: :no_pedestrians: :children_crossing: :no_entry: :eight_spoked_asterisk: :sparkle: :eight_pointed_black_star: :heart_decoration: :vs: :vibration_mode: :mobile_phone_off: :chart: :currency_exchange: :aries: :taurus: :gemini: :cancer: :leo: :virgo: :libra: :scorpius: :sagittarius: :capricorn: :aquarius: :pisces: :ophiuchus: :six_pointed_star: :negative_squared_cross_mark: :a: :b: :ab: :o2: :diamond_shape_with_a_dot_inside: :recycle: :end: :back: :on: :soon: :clock1: :clock130: :clock10: :clock1030: :clock11: :clock1130: :clock12: :clock1230: :clock2: :clock230: :clock3: :clock330: :clock4: :clock430: :clock5: :clock530: :clock6: :clock630: :clock7: :clock730: :clock8: :clock830: :clock9: :clock930: :heavy_dollar_sign: :copyright: :registered: :tm: :x: :heavy_exclamation_mark: :bangbang: :interrobang: :o: :heavy_multiplication_x: :heavy_plus_sign: :heavy_minus_sign: :heavy_division_sign: :white_flower: :100: :heavy_check_mark: :ballot_box_with_check: :radio_button: :link: :curly_loop: :wavy_dash: :part_alternation_mark: :trident: :black_small_square: :white_small_square: :black_medium_small_square: :white_medium_small_square: :black_medium_square: :white_medium_square: :black_large_square: :white_large_square: :white_check_mark: :black_square_button: :white_square_button: :black_circle: :white_circle: :red_circle: :large_blue_circle: :large_blue_diamond: :large_orange_diamond: :small_blue_diamond: :small_orange_diamond: :small_red_triangle: :small_red_triangle_down: :shipit:
diff --git a/doc/developer/tests/test-hashtags.md b/doc/developer/tests/test-hashtags.md
deleted file mode 100644
index 0c26042ba..000000000
--- a/doc/developer/tests/test-hashtags.md
+++ /dev/null
@@ -1,20 +0,0 @@
-# Hashtag Testing
-
-Hashtags in Mattermosts should render as specified below.
-
-#### These strings should auto-link:
-
-#testing
-#testing123
-#test-test
-#test_test
-#test! (punctuation should be excluded from linking)
-#test1 #test2
-#hüllo
-
-#### These strings should not auto-link:
-
-#123test
-#?test
-#-test
-
diff --git a/doc/developer/tests/test-link-preview.md b/doc/developer/tests/test-link-preview.md
deleted file mode 100644
index 4061bda35..000000000
--- a/doc/developer/tests/test-link-preview.md
+++ /dev/null
@@ -1,23 +0,0 @@
-# Link Preview Tests
-
-Link previews should embed previews of the contents of a hyperlink from a message or comment in the center channel directly below the message or comment.
-
-Post location variation:
-
-1. Post as message in center channel with RHS closed (link preview should render under message)
-2. Post as message in center channel with RHS open (link preview should render under message)
-3. Post as comment in RHS (link preview should not render)
-4. View comment in center channel with RHS closed (link preview should render under message)
-5. View comment in center channel with RHS open (link preview should render under message)
-6. Search for post in RHS with link
-
-Post the following links one per message in the above variations:
-
-Twitter Link Preview:
-https://twitter.com/mattermosthq/status/664928489078820865
-
-Vine:
-https://vine.co/v/eDeVgbFrt9L
-
-Wikipedia
-https://en.wikipedia.org/wiki/Princess_Bubblegum
diff --git a/doc/developer/tests/test-links.md b/doc/developer/tests/test-links.md
deleted file mode 100644
index b4a04e439..000000000
--- a/doc/developer/tests/test-links.md
+++ /dev/null
@@ -1,69 +0,0 @@
-# Link Testing
-
-Links in Mattermosts should render as specified below.
-
-#### These strings should auto-link:
-
-http://example.com
-https://example.com
-www.example.com
-www.example.com/index
-www.example.com/index.html
-www.example.com/index/sub
-www.example.com/index?params=1
-www.example.com/index?params=1&other=2
-www.example.com/index?params=1;other=2
-http://example.com:8065
-http://www.example.com/_/page
-www.example.com/_/page
-https://en.wikipedia.org/wiki/🐬
-https://en.wikipedia.org/wiki/Rendering_(computer_graphics)
-http://127.0.0.1
-http://192.168.1.1:4040
-http://[::1]:80
-http://[::1]:8065
-https://[::1]:80
-http://[2001:0:5ef5:79fb:303a:62d5:3312:ff42]:80
-http://[2001:0:5ef5:79fb:303a:62d5:3312:ff42]:8065
-https://[2001:0:5ef5:79fb:303a:62d5:3312:ff42]:443
-http://username:password@example.com
-http://username:password@127.0.0.1
-http://username:password@[2001:0:5ef5:79fb:303a:62d5:3312:ff42]:80
-test@example.com
-
-#### These strings should not auto-link:
-
-example.com
-readme.md
-http://
-@example.com
-./make-compiled-client.sh
-test.:test
-https:///signup/gitlab
-
-#### Only the links within these sentences should auto-link:
-
-(http://example.com)
-(test@example.com)
-This is a sentence with a http://example.com in it.
-This is a sentence with a [link](http://example.com) in it.
-This is a sentence with a http://example.com/_/underscore in it.
-This is a sentence with a link (http://example.com) in it.
-This is a sentence with a (https://en.wikipedia.org/wiki/Rendering_(computer_graphics)) in it.
-This is a sentence with a http://192.168.1.1:4040 in it.
-This is a sentence with a https://[::1]:80 in it.
-This is a link to http://example.com.
-
-#### These links should auto-link to the specified location:
-
-[example link](example.com) links to `http://example.com`
-[example.com](example.com) links to `http://example.com`
-[example.com/other](example.com) links to `http://example.com`
-[example.com/other_link](example.com/example) links to `http://example.com/example`
-www.example.com links to `http://www.example.com`
-https://example.com links to `https://example.com` and not `http://example.com`
-https://en.wikipedia.org/wiki/🐬 links to the Wikipedia article on dolphins
-https://en.wikipedia.org/wiki/URLs#Syntax links to the Syntax section of the Wikipedia article on URLs
-test@example.com links to `mailto:test@example.com`
-[email link](mailto:test@example.com) links to `mailto:test@example.com` and not `http://mailto:test@example.com`
-[other link](ts3server://example.com) links to `ts3server://example.com` and not `http://ts3server://example.com`
diff --git a/doc/developer/tests/test-markdown-basics.md b/doc/developer/tests/test-markdown-basics.md
deleted file mode 100644
index cea9a0867..000000000
--- a/doc/developer/tests/test-markdown-basics.md
+++ /dev/null
@@ -1,151 +0,0 @@
-# Basic Markdown Testing
-Tests for text style, code blocks, in-line code and images, lines, block quotes, and headings.
-
-### Text Style
-
-**The following text should render as:**
-_Italics_
-*Italics*
-**Bold**
-***Bold-italics***
-**_Bold-italics_**
-~~Strikethrough~~
-
-This sentence contains **bold**, _italic_, ***bold-italic***, and ~~stikethrough~~ text.
-
-**The following should render as normal text:**
-Normal Text_
-_Normal Text
-_Normal Text*
-
-### Carriage Return
-
-**The following text should render as:**
-Line #1 followed by Line #2
-Line #2 followed by one blank line
-
-Line #3 followed by one blank line
-
-
-Line #4 following one blank line
-
-
-### Code Blocks
-
-```
-This text should render in a code block
-```
-
-**The following markdown should not render:**
-```
-_Italics_
-*Italics*
-**Bold**
-***Bold-italics***
-**Bold-italics_**
-~~Strikethrough~~
-:) :-) ;) ;-) :o :O :-o :-O
-:bamboo: :gift_heart: :dolls: :school_satchel: :mortar_board:
-# Heading 1
-## Heading 2
-### Heading 3
-#### Heading 4
-##### Heading 5
-###### Heading 6
-> Block Quote
-- List
- - List Sub-item
-[Link](http://i.giphy.com/xNrM4cGJ8u3ao.gif)
-[![Github](https://assets-cdn.github.com/favicon.ico)](https://github.com/mattermost/platform)
-| Left-Aligned Text | Center Aligned Text | Right Aligned Text |
-| :------------ |:---------------:| -----:|
-| Left column 1 | this text | $100 |
-```
-
-**The following links should not auto-link or generate previews:**
-```
-GIF: http://i.giphy.com/xNrM4cGJ8u3ao.gif
-Website: https://en.wikipedia.org/wiki/Dolphin
-```
-
-**The following should appear as a carriage return separating two lines of text:**
-```
-Line #1 followed by a blank line
-
-Line #2 following a blank line
-```
-
-### In-line Code
-
-The word `monospace` should render as in-line code.
-
-The following markdown in-line code should not render:
-`_Italics_`, `*Italics*`, `**Bold**`, `***Bold-italics***`, `**Bold-italics_**`, `~~Strikethrough~~`, `:)` , `:-)` , `;)` , `:-O` , `:bamboo:` , `:gift_heart:` , `:dolls:` , `# Heading 1`, `## Heading 2`, `### Heading 3`, `#### Heading 4`, `##### Heading 5`, `###### Heading 6`
-
-This GIF link should not preview: `http://i.giphy.com/xNrM4cGJ8u3ao.gif`
-This link should not auto-link: `https://en.wikipedia.org/wiki/Dolphin`
-
-This sentence with `
-in-line code
-` should appear on one line.
-
-### In-line Images
-
-Mattermost/platform build status: [![Build Status](https://travis-ci.org/mattermost/platform.svg?branch=master)](https://travis-ci.org/mattermost/platform)
-
-GitHub favicon: ![Github](https://assets-cdn.github.com/favicon.ico)
-
-GIF Image:
-![gif](http://i.giphy.com/xNrM4cGJ8u3ao.gif)
-
-4K Wallpaper Image (11Mb):
-![4K Image](http://4kwallpaper.xyz/wallpaper/Large-Galaxy-Lightyears-Space-4K-wallpaper.png)
-
-Panorama Image:
-![Pano](http://amardeepphotography.com/wp-content/uploads/2012/11/Untitled_Panorama6small.jpg)
-
-Tall Portrait Image:
-![Portrait](http://www.maniacworld.com/now-this-is-a-tall-building.jpg)
-
-
-### Lines
-
-Three lines should render with text between them:
-
-Text above line
-
-***
-
-Text between lines
-
----
-
-Text between lines
-___
-
-Text below line
-
-### Block Quotes
-
->This text should render in a block quote.
-
-**The following markdown should render within the block quote:**
-> #### Heading 4
-> _Italics_, *Italics*, **Bold**, ***Bold-italics***, **_Bold-italics_**, ~~Strikethrough~~
-> :) :-) ;) :-O :bamboo: :gift_heart: :dolls:
-
-**The following text should render in two block quotes separated by one line of text:**
-> Block quote 1
-
-Text between block quotes
-
-> Block quote 2
-
-### Headings
-
-# Heading 1 font size
-## Heading 2 font size
-### Heading 3 font size
-#### Heading 4 font size
-##### Heading 5 font size
-###### Heading 6 font size
diff --git a/doc/developer/tests/test-markdown-lists.md b/doc/developer/tests/test-markdown-lists.md
deleted file mode 100644
index 7d080526a..000000000
--- a/doc/developer/tests/test-markdown-lists.md
+++ /dev/null
@@ -1,250 +0,0 @@
-# Markdown List Testing
-Verify that all list types render as expected.
-
-### Single-item Ordered List
-
-**Expected:**
-```
-7. Single Item
-```
-
-**Actual:**
-7. Single Item
-
-### Multi-item Ordered List
-
-**Expected:**
-```
-1. One
-2. Two
-3. Three
-```
-
-**Actual:**
-
-3. One
-2. Two
-1. Three
-
-### Nested Ordered List
-
-**Expected:**
-```
-1. Alpha
- 1. Bravo
-2. Charlie
-3. Delta
- 1. Echo
- 2. Foxtrot
-```
-
-**Actual:**
-
-1. Alpha
- 1. Bravo
-1. Charlie
-1. Delta
- 1. Echo
- 1. Foxtrot
-
-### Single-item Unordered List
-
-**Expected:**
-```
-• Single Item
-```
-
-**Actual:**
-* Single Item
-
-### Multi-item Unordered List
-
-**Expected:**
-```
-• One
-• Two
-• Three
-```
-
-**Actual:**
-* One
-- Two
-+ Three
-
-### Nested Unordered List
-
-**Expected:**
-```
-• Alpha
- • Bravo
-• Charlie
-• Delta
- • Echo
- • Foxtrot
-```
-
-**Actual:**
-+ Alpha
- * Bravo
-- Charlie
-* Delta
- + Echo
- - Foxtrot
-
-### Mixed List Starting Ordered
-
-**Expected:**
-```
-1. One
-2. Two
-3. Three
-```
-
-**Actual:**
-
-1. One
-+ Two
-- Three
-
-### Mixed List Starting Unordered
-
-**Expected:**
-```
-• Monday
-• Tuesday
-• Wednesday
-```
-
-**Actual:**
-+ Monday
-1. Tuesday
-* Wednesday
-
-### Nested Mixed List
-
-**Expected:**
-```
-• Alpha
- 1. Bravo
- • Charlie
- • Delta
-• Echo
-• Foxtrot
- • Golf
- 1. Hotel
- • India
- 1. Juliet
- 2. Kilo
- • Lima
-• Mike
- 1. November
- 1. Oscar
- 1. Papa
-```
-
-**Actual:**
-- Alpha
- 1. Bravo
- * Charlie
- + Delta
-- Echo
-* Foxtrot
- + Golf
- 1. Hotel
- - India
- 2. Juliet
- 3. Kilo
- * Lima
-1. Mike
- 1. November
- 4. Oscar
- 5. Papa
-
-### Ordered Lists Separated by Carriage Returns
-
-**Expected:**
-```
-1. One
- • Two
-
-1. One
-2. Two
-```
-
-**Actual:**
-
-1. One
- - Two
-
-
-1. One
-2. Two
-
-### Carriage Return and New Line After a List
-
-**Expected:**
-```
-1. One
- - Two
-This text should be on a new line.
-```
-
-**Actual:**
-
-1. One
- - Two
-This text should be on a new line.
-
-**Expected:**
-```
-List:
-
-- One
-- Two
-
-This line should have a line break above it.
-```
-
-**Actual:**
-
-List:
-
-- One
-- Two
-
-This line should have a line break above it.
-
-### Task Lists
-
-**Expected:**
-```
-[ ] One
- [ ] Subpoint one
- - Normal Bullet
-[ ] Two
-[x] Completed item
-```
-
-**Actual:**
-
-- [ ] One
- - [ ] Subpoint one
- - Normal Bullet
-- [ ] Two
-- [x] Completed item
-
-### Numbered Task Lists
-
-**Expected:**
-```
-1. [ ] One
-2. [ ] Two
-3. [x] Completed item
-```
-
-**Actual:**
-
-1. [ ] One
-2. [ ] Two
-3. [x] Completed item
-
diff --git a/doc/developer/tests/test-mentions.md b/doc/developer/tests/test-mentions.md
deleted file mode 100644
index 99a47e337..000000000
--- a/doc/developer/tests/test-mentions.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# Mentions Testing
-
-To test the following mention functional:
-
-1. Add a user 'alice' to the system
-2. Paste the below text to test if mentions is properly highlighting
-
-
-```
-To run this test, if a user named @alice doesn't yet exist, create one.
-
-I saw @alice--and I said "Hi @alice!" then "What's up @alice?" and then @alice, was totally @alice; she just "@alice"'d me and walked on by. That's @alice...
-```
diff --git a/doc/developer/tests/test-search.md b/doc/developer/tests/test-search.md
deleted file mode 100644
index 0f0ba1153..000000000
--- a/doc/developer/tests/test-search.md
+++ /dev/null
@@ -1,43 +0,0 @@
-# Search Testing
-
-### Basic Search Testing
-
-This post is used by the core team to test search. It should be returned for the test cases for search, with proper highlighting in the search results.
-
-**Basic word search:** Hello world!
-**Emoji search:** :strawberry:
-**Accent search:** Crème friache
-**Non-latin search:**
-您好吗
-您好
-**Email search:** person@domain.org
-**Link search:** www.dropbox.com
-**Markdown search:**
-##### Hello
-```
-Hello
-```
-`Hello`
-
-
-### Hashtags:
-
-Click on the linked hashtags below, and confirm that the search results match the linked hashtags. Confirm that the highlighting in the search results is correct.
-
-#### Basic Hashtags
-
-#hello #world
-
-#### Hashtags containing punctuation:
-
-*Note: Make a separate post containing only the word “hashtag”, and confirm the hashtags below do not return the separate post.*
-
-#hashtag #hashtag-dash #hashtag_underscore #hashtag.dot
-
-#### Punctuation following a hashtag:
-
-#colon: #slash/ #backslash\ #percent% #dollar$ #semicolon; #ampersand& #bracket( #bracket) #lessthan< #greaterthan> #dash- #plus+ #equals= #caret^ #hashtag# #asterisk* #verticalbar| #invertedquestion¿ #atsign@ #quote” #apostrophe' #curlybracket{ #curlybracket} #squarebracket[ #squarebracket]
-
-#### Markdown surrounding a hashtag:
-
-*#markdown-hashtag*
diff --git a/doc/developer/tests/test-syntax-highlighting.md b/doc/developer/tests/test-syntax-highlighting.md
deleted file mode 100644
index b1568c385..000000000
--- a/doc/developer/tests/test-syntax-highlighting.md
+++ /dev/null
@@ -1,231 +0,0 @@
-# Code Syntax Highlighting
-
-Verify the following code blocks render as code blocks and highlight properly.
-
-### Diff
-
-``` diff
-*** /path/to/original ''timestamp''
---- /path/to/new ''timestamp''
-***************
-*** 1 ****
-! This is a line.
---- 1 ---
-! This is a replacement line.
-It is important to spell
--removed line
-+new line
-```
-
-### Apache
-
-``` apache
-
-DocumentRoot /www/example1
-ServerName www.example.com
-
-```
-
-### Makefile
-
-``` makefile
-CC=gcc
-CFLAGS=-I.
-
-hellomake: hellomake.o hellofunc.o
- $(CC) -o hellomake hellomake.o hellofunc.o -I.
-```
-
-### HTTP
-
-``` http
-HTTP/1.1 200 OK
-Date: Sun, 28 Dec 2014 08:56:53 GMT
-Content-Length: 44
-Content-Type: text/html
-
-It works!
-```
-
-### JSON
-
-``` json
-{"employees":[
- {"firstName":"John", "lastName":"Doe"},
-]}
-```
-
-### Markdown
-
-``` markdown
-**bold**
-*italics*
-[link](www.example.com)
-```
-
-### JavaScript
-
-``` javascript
-document.write('Hello, world!');
-```
-
-### CSS
-
-``` css
-body {
- background-color: red;
-}
-```
-
-### NGINX
-
-``` nginx
-server { # simple reverse-proxy
- listen 80;
- server_name domain2.com www.domain2.com;
- access_log logs/domain2.access.log main;
-```
-
-### Objective C
-
-``` objectivec
-#import
-
-int main (void)
-{
- printf ("Hello world!\n");
-}
-```
-
-### Python
-
-``` python
-print "Hello, world!"
-```
-
-### XML
-
-``` xml
-
-
- John Doe
-
-
-```
-
-### Perl
-
-``` perl
-print "Hello, World!\n";
-```
-
-### Bash
-
-``` bash
-echo "Hello World"
-```
-
-### PHP
-
-``` php
- Hello World
'; ?>
-```
-
-### CoffeeScript
-
-``` coffeescript
-console.log(“Hello world!”);
-```
-
-### C#
-
-``` cs
-using System;
-class Program
-{
- public static void Main(string[] args)
- {
- Console.WriteLine("Hello, world!");
- }
-}
-```
-
-### C++
-
-``` cpp
-#include
-
-main()
-{
- cout << "Hello World!";
- return 0;
-}
-```
-
-### SQL
-
-``` sql
-SELECT column_name,column_name
-FROM table_name;
-```
-
-### Go
-
-``` go
-package main
-import "fmt"
-func main() {
- fmt.Println("Hello, 世界")
-}
-```
-
-### Ruby
-
-``` ruby
-puts "Hello, world!"
-```
-
-### Java
-
-``` java
-import javax.swing.JFrame; //Importing class JFrame
-import javax.swing.JLabel; //Importing class JLabel
-public class HelloWorld {
- public static void main(String[] args) {
- JFrame frame = new JFrame(); //Creating frame
- frame.setTitle("Hi!"); //Setting title frame
- frame.add(new JLabel("Hello, world!"));//Adding text to frame
- frame.pack(); //Setting size to smallest
- frame.setLocationRelativeTo(null); //Centering frame
- frame.setVisible(true); //Showing frame
- }
-}
-```
-
-### INI
-
-``` ini
-; last modified 1 April 2011 by John Doe
-[owner]
-name=John Doe
-organization=Mattermost
-```
-
-### Latex Equation
-
-``` latex
-\frac{d}{dx}\left( \int_{0}^{x} f(u)\,du\right)=f(x).
-```
-
-### Latex Document
-
-``` latex
-\documentclass{article}
-\begin{document}
-\noindent
-Are $a, b \in \mathbb{R}, then applies (a+b)^{2} = a^{2} + ab + b^{2} $ \\
-better \\
-are $a, b \in \mathbb{R}, \textrm{then applies} \, (a+b)^{2 } = a^{2 } + ab + b^{2}$\\
-\end{document}
-```
-
diff --git a/doc/developer/tests/test-tables.md b/doc/developer/tests/test-tables.md
deleted file mode 100644
index 87d8af856..000000000
--- a/doc/developer/tests/test-tables.md
+++ /dev/null
@@ -1,80 +0,0 @@
-# Markdown Tables
-
-Verify that all tables render as described.
-
-### Normal Tables
-
-These tables use different raw text as inputs, but all three should render as the same table.
-
-#### Table 1
-
-Raw text:
-
-```
-First Header | Second Header
-------------- | -------------
-Content Cell | Content Cell
-Content Cell | Content Cell
-```
-
-Renders as:
-
-First Header | Second Header
-------------- | -------------
-Content Cell | Content Cell
-Content Cell | Content Cell
-
-#### Table 2
-
-Raw Text:
-
-```
-| First Header | Second Header |
-| ------------- | ------------- |
-| Content Cell | Content Cell |
-| Content Cell | Content Cell |
-```
-
-Renders as:
-
-| First Header | Second Header |
-| ------------- | ------------- |
-| Content Cell | Content Cell |
-| Content Cell | Content Cell |
-
-#### Table 3
-
-Raw Text:
-
-```
-| First Header | Second Header |
-| ------------- | ----------- |
-| Content Cell | Content Cell|
-| Content Cell | Content Cell |
-```
-
-Renders as:
-
-| First Header | Second Header |
-| ------------- | ----------- |
-| Content Cell | Content Cell|
-| Content Cell | Content Cell |
-
-### Tables Containing Markdown
-
-This table should contain A1: Strikethrough, A2: Bold, B1: Italics, B2: Dolphin emoticon.
-
-| Column\Row | 1 | 2 |
-| ------------- | ------------- |------------- |
-| A | ~~Strikethrough~~ | **Bold** |
-| B | _italics_ | :dolphin: |
-
-### Table with Left, Center, and Right Aligned Columns
-
-The left column should be left aligned, the center column centered and the right column should be right aligned.
-
-| Left-Aligned | Center Aligned | Right Aligned |
-| :------------ |:---------------:| -----:|
-| 1 | this text | $100 |
-| 2 | is | $10 |
-| 3 | centered | $1 |
diff --git a/doc/favicon.ico b/doc/favicon.ico
deleted file mode 100644
index e69de29bb..000000000
diff --git a/doc/help/Account-Settings.md b/doc/help/Account-Settings.md
deleted file mode 100644
index 1e05ef2ad..000000000
--- a/doc/help/Account-Settings.md
+++ /dev/null
@@ -1,115 +0,0 @@
-# Account Settings
-___
-Account Settings is accessible from the **Main Menu** by clicking the three dots at the top of the channels pane. From here, you can configure your profile settings, notification preferences, integrations, theme settings, and display options.
-
-## General
-Settings to configure name, username, nickname, email and profile picture.
-
-#### Full Name
-Full names appear in the Direct Messages member list and team management modal. By default, you will receive mention notifications when someone types your first name. Entering a full name is optional.
-
-#### Username
-Usernames appear next to all posts. Pick something easy for teammates to recognize and recall. By default, you will receive mention notifications when someone types your username.
-
-####Nickname
-Nicknames appear in the Direct Messages member list and team management modal. You will not receive mention notifications when someone types your nickname unless you add it to the *Words That Trigger Mentions* in **Account Settings > Notifications**.
-
-#### Email
-Email is used for sign-in, notifications, and password reset. Email requires verification if changed. If you are signing in using a single sign-on service, the email field is not editable and you will receive email notifications to the email you used to sign up to your SSO service.
-
-#### Profile Picture
-Profile pictures appear next to all posts and in the top of the channels pane next to your name. All users have a generic profile picture when they sign up for an account. Edit your profile picture by clicking **Select** and then choosing a picture in either JPG or PNG format that’s at least 128px wide and 128px high. For best results, choose an image that is square with the subject of interest centered. If you edit your profile picture, all past posts will appear with the new picture.
-
-##Security
-Settings to configure your password, view access history, and view or logout of active sessions.
-
-#### Password
-You may change your password if you’ve logged in by email. If you are signing in using a single sign-on service, the password field is not editable, and you must access your SSO service’s account settings to update your password.
-
-#### View Access History
-Access History displays a chronological list of the last 20 login and logout attempts, channel creations and deletions, account settings changes, or channel setting modifications made on your account. Click **More Info** to view the IP address and session ID of each action.
-
-#### View and Logout of Active Sessions
-Sessions are created when you log in with your email and password to a new browser on a device. Sessions let you use Mattermost for up to 30 days without having to log in again. Click **Logout** on an active session if you want to revoke automatic login privileges for a specific browser or device. Click **More Info** to view details on browser and operating system.
-
-## Notifications
-Settings to configure desktop notifications, desktop notification sounds, email notifications, and words that trigger mentions.
-
-#### Send Desktop Notifications
-Desktop notifications appear at the bottom right corner of your main monitor. The desktop notification preference you choose in *Account Settings* applies globally, but this preference is customizable for each channel from the channel name drop-down menu. Desktop notifications are available on Firefox, Safari, and Chrome.
-
-#### Desktop Notification Sounds
-A notification sound plays for all Mattermost posts that would fire a desktop notification, unless *Desktop Notification Sound* is turned off. Desktop notification sounds are available on Firefox, Safari, Chrome, Internet Explorer, and Edge.
-
-#### Email Notifications
-Email notifications are sent for mentions and direct messages after you’ve been offline for more than 60 seconds or away from Mattermost for more than 5 minutes. Change the email where notifications are sent from **Account Settings > General > Email**.
-
-#### Words That Trigger Mentions
-By default, you will receive mention notifications from your non-case sensitive username, mentioned @username, @all, and @channel. Customize the words that trigger mentions by typing them in the input box. This is useful if you want to be notified of all posts on a certain topic, for example, “marketing”.
-
-## Appearance
-Settings to customize your account’s theme colors and code theme.
-
-#### Theme Colours
-Select **Theme Colors** to select from four standard themes designed by the Mattermost team. To make custom adjustments on the four standard theme colours, click a standard theme and then select **Custom Theme** to load the standard theme into the custom theme color selectors.
-
-#### Custom Theme
-Customize your theme colors and share them with others by copying and pasting theme vectors into the input box. Observe a live preview as you customize theme colors and then click **Save** to confirm your changes. Discard your changes by exiting the settings modal and clicking **Yes, Discard**.
-
-- **Sidebar BG:** Background color of the Channels pane, and Account and Team settings navigation sidebars.
-- **Sidebar Text:** Text colour of read channels in the Channels pane, and tabs in the Account and Team settings navigation sidebar.
-- **Sidebar Header BG:** Background color of the header above the Channels pane and all modal headers.
-- **Sidebar Header Text:** Text colour of the header above the Channels pane and all modal headers.
-- **Sidebar Unread Text:** Text color of unread channels in the Channels pane.
-- **Sidebar Text Hover BG:** Background color behind channel names and settings tabs as you hover over them.
-- **Sidebar Text Active Border:** Color of the rectangular marker on the left side of the Channels pane or Settings sidebar indicating the active channel or tab.
-- **Sidebar Text Active Color:** Text color of the active active channel or tab in the Channels pane or Settings sidebar.
-- **Online Indicator:** Color of the online indicator appearing next to team members names in the Direct Messages list.
-- **Mention Jewel BG:** Background color of the jewel indicating unread mentions that appears to the right of the channel name. This is also the background color of the “Unread Posts Below/Above” indicator appearing at the top or bottom of the Channels pane on shorter browser windows.
-- **Mention Jewel Text:** Text color on the mention jewel indicating the number of unread mentions. This is also the text color on the “Unread Posts Below/Above” indicator.
-- **Center Channel BG:** Color of the center pane, RHS and all modal backgrounds.
-- **Center Channel Text:** Color of all the text - with the exception of mentions, links, hashtags and code blocks - in the center pane, RHS and modals.
-- **New Message Separator:** The new massage separator appears below the last read message when you click into a channel with unread messages.
-- **Link Color:** Text color of all links, hashtags, teammate mentions, and low priority UI buttons.
-- **Button BG:** Color of the rectangular background behind all high priority UI buttons.
-- **Button Text:** Text colour appearing on the rectangular background for all high priority UI buttons.
-- **Mention Highlight BG:** Highlight color behind your words that trigger mentions in the center pane and RHS.
-- **Mention Highlight Link:** Text color of your words that trigger mentions in the center pane and RHS.
-- **Code Theme:** Background and syntax colors for all code blocks.
-
-#### Import theme colors from Slack
-To import a theme, go to **Preferences > Sidebar Theme** from within Slack, open the custom theme option, copy the theme color vector and then paste it into the *Input Slack Theme* input box in Mattermost. Any theme settings that are not customizable in Slack will default to the “Mattermost” standard theme settings.
-
-## Integrations
-Settings to configure incoming and outgoing webhooks for your team.
-
-#### Incoming Webhooks
-Incoming webhooks from external integrations can post messages to Mattermost in public channels or private groups. Learn more about setting up incoming webhooks on our [documentation page](https://github.com/mattermost/platform/blob/master/doc/integrations/webhooks/Incoming-Webhooks.md).
-
-
-#### Outgoing Webhooks
-Outgoing webhooks use trigger words to fire new message events to external integrations. For security reasons, outgoing webhooks are only available in public channels. Learn more about setting up outgoing webhooks on our [documentation page](https://github.com/mattermost/platform/blob/master/doc/integrations/webhooks/Outgoing-Webhooks.md).
-
-##Display
-Settings to configure clock and teammate name display preferences.
-
-#### Display Font
-Select what font is used.
-
-#### Clock Display
-Choose a 12-hour or 24-hour time preference that appears on the time stamp for all posts.
-
-#### Teammate Name Display
-Configure how names are displayed in the Direct Messages list in the Channels pane: nickname, username or full name.
-
-## Advanced
-Setting to configure when messages are sent.
-
-#### Send Messages on Ctrl+Enter
-If enabled, press **Enter** to insert a new line and **Ctrl + Enter** posts the message. If disabled, **Shift + Enter** inserts a new line and **Enter** posts the message.
-
-#### Preview pre-release features
-Turn on preview features to view them early, ahead of their official release:
-- **Show markdown preview option in message input box:** Turning this on will show a "Preview" option when typing in the text input box. Pressing "Preview" shows what the Markdown formatting in the message looks like before the message is sent.
-- **Show preview snippet of links below message:** Turning this on will show a preview snippet posted below links from select websites.
-
diff --git a/doc/help/Channels.md b/doc/help/Channels.md
deleted file mode 100644
index 531cc047c..000000000
--- a/doc/help/Channels.md
+++ /dev/null
@@ -1,45 +0,0 @@
-# Channels
-___
-
-## Channel Types
-Channels organize conversations across different topics. There are three types of channels: Public Channels, Private Groups, and Direct Messages.
-
-
-#### Public Channels
-Public Channels are open to everyone on a team. New team members are automatically a part of two Public Channels: Town Square and Off-Topic.
-
-#### Private Groups
-Private Groups are for sensitive topics and are only visible to select team members. Any member of a Private Group can add additional members. Group members can choose to leave at any time, but only the group owner or team administrator can remove other members.
-
-#### Direct Messages
-Direct Messages are for conversations between two team members. These conversations are only visible to the two team members involved.
-
-## Managing Channels
-Channels can be created, joined, renamed, left and deleted.
-
-#### Creating a Channel
-Create a new Public Channel or Private Group by selecting the **+** symbol next to the *Channels* or *Private Groups* header on the left hand side. To start a direct message thread, click **More** at the bottom of the *Direct Messages* list to view a list of team members you can message.
-
-#### Joining a Channel
-Click **More** at the bottom of the *Channels* list to view a list of Public Channels you can join. To join a Private Group you need to be added by a member of that group.
-
-#### Renaming a Channel
-Click the channel name at the top of the center pane to access the drop-down menu, then click **Rename Channel**. Channel owners can rename the Public Channels or Private Groups they’ve created. Team and System Administrators can rename any channel or group.
-
-#### Leaving a Channel
-Click the channel name at the top of the center pane to access the drop-down menu, then click **Leave Channel**. Any team member who leaves a Private Group must be added back by a group member if they wish to rejoin. Team members will not receive mention notifications from channels of which they are not members.
-
-#### Deleting a Channel
-Click the channel name at the top of the center pane to access the drop-down menu, then click **Delete Channel**. Channel owners can delete the Public Channels or Private Groups they’ve created. Team and System Administrators can delete any channel or group.
-
-## Channel Settings
-Notification preferences, channel header, and channel purpose are customizable for each channel.
-
-#### Notification Preferences
-By default, the desktop notification preference assigned in *Account Settings* is used for all channels. To customize the desktop notification preference for each channel, click the channel name at the top of the center pane to access the drop-down menu, then click **Notification Preferences > Send Desktop Notifications**. Customize what activity causes the channel name to be bolded by accessing the channel name drop-down menu, then click **Notification Preferences > Mark Channel Unread**.
-
-#### Channel Header
-The header is the text that appears next to the channel name at the top of the screen. It can be used to summarize the channel topic or provide links to frequently accessed documents. Any channel member can set the channel header by clicking the channel name at the top of the center pane to access the drop-down menu, then click **Set Channel Header**.
-
-#### Channel Purpose
-This text appears in the channel list in the *More…* menu and helps others decide whether to join. Any channel member can set the channel purpose by clicking the channel name at the top of the center pane to access the drop-down menu, then click **Set Channel Purpose**.
diff --git a/doc/help/Creating-Teams.md b/doc/help/Creating-Teams.md
deleted file mode 100644
index 598f38e75..000000000
--- a/doc/help/Creating-Teams.md
+++ /dev/null
@@ -1,38 +0,0 @@
-# Creating Teams
-___
-New teams can be created if the System Administrator has *Enable Team Creation* set to true from the system console.
-
-## Methods to Create a Team
-Teams can be created from the main menu, system home page or team sign in page.
-
-#### Main Menu
-Click the **Three-Dot** menu in Mattermost, then select **Create a New Team**. If this option is not visible in the menu, then the System Administrator has *Enable Team Creation* set to false.
-
-
-#### System Home Page
-Navigate to the web address of your system, `https://domain.com/`. Enter a valid email address and click **Create Team** to be guided through the rest of the set up steps. If this option is not visible on the web page, then the System Administrator has *Enable Team Creation* set to false. It is not necessary to have an existing account on the system in order to create a team from the system home page.
-
-#### Team Sign In Page
-Navigate to the web address of your team, `https://domain.com/teamurl/`. If you are logged in, the web address will open Mattermost and you can create a new team from the main menu. If you are logged out, the web address will direct you to the sign in page where you can click **Create a New Team**. If this option is not visible on the web page, then the System Administrator has *Enable Team Creation* set to false. It is not necessary to have an existing account on the system in order to create a team from the sign in page.
-
-## Team Name and URL Selection
-There are a few details and restrictions to consider when selecting a team name and team URL.
-
-#### Team Name
-This is the display name of your team that appears in menus and headings.
-
-- It can contain any letters, numbers or symbols.
-- It is case sensitive.
-- It must be 4 - 15 characters in length.
-
-#### Team URL
-The team URL is part of the web address that navigates to your team on the system domain, `https://domain.com/teamurl/`.
-
-- It may contain only lowercase letters, numbers and dashes.
-- It must start with a letter and cannot end in a dash.
-- It must be 4 - 15 characters in length.
-
-If the system administrator has *Restrict Team Names* set to true, the team URL cannot start with the following restricted words: www, web, admin, support, notify, test, demo, mail, team, channel, internal, localhost, dockerhost, stag, post, cluster, api, oauth.
-
-## User Roles on Multiple Teams
-Each user is distinct and owned by a team. A team creator is automatically granted Team Administrator privileges for that team, even if they are a System Administrator on another team. A System Administrator with accounts on multiple teams must grant all their accounts *System Admin* privileges from the system console. To do this, go to the **Main Menu > System Console**, then click **Users** under the *Teams* heading for the team you want to manage.
diff --git a/doc/help/Manage-Members.md b/doc/help/Manage-Members.md
deleted file mode 100644
index 04243f9fb..000000000
--- a/doc/help/Manage-Members.md
+++ /dev/null
@@ -1,37 +0,0 @@
-# Manage Members
-
-The Manage Members menu is used to change the user roles assigned to members belonging to a team.
-
-## User Roles
-
-The following user roles are assigned from the **Manage Members** menu option in the team site main menu.
-
-### System Admin
-
-The System Administrator is typically a member of the IT staff and has the follow privileges:
-
-- Access to the System Console from the main menu in any team site.
-- Change any setting on the Mattermost server available in the System Console.
-- Promote and demote other users to and from the System Admin role.
-- This role also has all the privileges of the Team Administrator as described below
-
-The first user added to a newly installed Mattermost system is assigned the System Admin role.
-
-### Team Admin
-
-The Team Administrator is typically a non-technical end user and has the following privileges:
-
-- Access to the "Team Settings" menu from the team site main menu
-- Ability to change the team name and import data from Slack export files
-- Access to the "Manage Members" menu and change user roles to the levels of Team Administrator, Member and Inactive
-
-### Member
-
-This is the default role given to end users who join the system. Members have basic permissions to use the Mattermost team site.
-
-### Inactive
-
-This status is given to users whose accounts are marked inactive. These users can no longer log into the system.
-
-Because Mattermost is designed as a system-of-record, there is not an option to delete users from the Mattermost system, as such an operation could compromise the integrity of message archives.
-
diff --git a/doc/help/Markdown.md b/doc/help/Markdown.md
deleted file mode 100644
index 9d3cb2a90..000000000
--- a/doc/help/Markdown.md
+++ /dev/null
@@ -1,191 +0,0 @@
-# Markdown Help
-
-Markdown makes it easy to format messages. Type a message as you normally would, and use these rules to render it with special formatting.
-
-## Text Style:
-
-You can use either `_` or `*` around a word to make it italic. Use two to make it bold.
-
-* `_italics_` renders as _italics_
-* `**bold**` renders as **bold**
-* `**_bold-italic_**` renders as **_bold-italics_**
-* `~~strikethrough~~` renders as ~~strikethrough~~
-
-## Code Block:
-
-Create a code block by indenting each line by four spaces, or by placing ``` on the line above and below your code.
-
-Example:
-
- ```
- code block
- ```
-
-Renders as:
-```
-code block
-```
-
-### Syntax Highlighting
-
-To add syntax highlighting, type the language to be highlighted after the ``` at the beginning of the code block.
-
-Supported languages are:
-`diff, apache, makefile, http, json, markdown, javascript, css, nginx, objectivec, python, xml, perl, bash, php, coffeescript, cs (C#), cpp (C++), sql, go, ruby, java, ini, latex`
-
-Example:
-
- ``` go
- package main
- import "fmt"
- func main() {
- fmt.Println("Hello, 世界")
- }
- ```
-
-Renders as:
-``` go
-package main
-import "fmt"
-func main() {
- fmt.Println("Hello, 世界")
-}
-```
-
-## In-line Code:
-
-Create in-line monospaced font by surrounding it with backticks.
-```
-`monospace`
-```
-Renders as: `monospace`.
-
-## Links:
-
-Create labeled links by putting the desired text in square brackets and the associated link in normal brackets.
-
-`[Check out Mattermost!](www.mattermost.com)`
-
-Renders as: [Check out Mattermost!](www.mattermost.com)
-
-## In-line Images
-
-Create in-line images using an `!` followed by the alt text in square brackets and the link in normal brackets. Add hover text by placing it in quotes after the link.
-```
-![alt text](link "hover text")
-
-and
-
-[![Build Status](https://travis-ci.org/mattermost/platform.svg?branch=master)](https://travis-ci.org/mattermost/platform) [![Github](https://assets-cdn.github.com/favicon.ico)](https://github.com/mattermost/platform)
-```
-Renders as:
-
-![alt text](link "hover text")
-
-and
-
-[![Build Status](https://travis-ci.org/mattermost/platform.svg?branch=master)](https://travis-ci.org/mattermost/platform) [![Github](https://assets-cdn.github.com/favicon.ico)](https://github.com/mattermost/platform)
-
-## Emojis
-
-Emoji provided free by [Emoji One](http://emojione.com/). Check out a full list of emojis [here](http://emoji.codes/).
-
-```
-:smile: :+1: :sheep:
-```
-Renders as:
-:smile: :+1: :sheep:
-
-## Lines:
-
-Create a line by using three `*`, `_`, or `-`.
-
-`***` renders as:
-***
-
-## Block quotes:
-
-Create block quotes using `>`.
-
-`> block quotes` renders as:
-> block quotes
-
-## Lists:
-
-Create a list by using `*` or `-` as bullets. Indent a bullet point by adding two spaces in front of it.
-```
-* list item one
-* list item two
- * item two sub-point
-```
-Renders as:
-* list item one
-* list item two
- * item two sub-point
-
-Make it an ordered list by using numbers instead:
-```
-1. Item one
-2. Item two
-```
-Renders as:
-1. Item one
-2. Item two
-
-Make a task list by including square brackets:
-```
-- [ ] Item one
-- [ ] Item two
-- [x] Completed item
-```
-Renders as:
-- [ ] Item one
-- [ ] Item two
-- [x] Completed item
-
-## Tables:
-
-Create a table by placing a dashed line under the header row and separating the columns with a pipe `|`. (The columns don’t need to line up exactly for it to work). Choose how to align table columns by including colons `:` within the header row.
-```
-| Left-Aligned | Center Aligned | Right Aligned |
-| :------------ |:---------------:| -----:|
-| Left column 1 | this text | $100 |
-| Left column 2 | is | $10 |
-| Left column 3 | centered | $1 |
-```
-
-Renders as:
-
-| Left-Aligned | Center Aligned | Right Aligned |
-| :------------ |:---------------:| -----:|
-| Left column 1 | this text | $100 |
-| Left column 2 | is | $10 |
-| Left column 3 | centered | $1 |
-
-## Headings:
-
-Make a heading by typing # and a space before your title. For smaller headings, use more #’s.
-```
-# Large heading
-## Smaller heading
-### Even smaller heading
-```
-Renders as:
-# Large Heading
-## Smaller Heading
-### Even smaller heading
-
-Alternatively, for the large heading you can underline the text using `===`. For the smaller heading you can underline using `---`
-```
-Large Heading
-=============
-
-Smaller Heading
---------------
-```
-Renders as:
-Large Heading
-=============
-
-Smaller Heading
---------------
diff --git a/doc/help/Notifications.md b/doc/help/Notifications.md
deleted file mode 100644
index 31f06e713..000000000
--- a/doc/help/Notifications.md
+++ /dev/null
@@ -1,31 +0,0 @@
-# Notifications
-___
-
-Notifications in Mattermost alert you to unread mentions and messages.
-
-## Types of Notifications
-
-#### Email Notifications
-These are emails sent to your primary email address for any mentions you receive while offline or inactive.
-- Users are offline when they do not have Mattermost open.
-- Users are inactive when they have Mattermost open but haven’t performed an action for a set amount of time.
-- You can change the email to which these notifications are sent in **Account Settings** > **General** > **Email**.
-- You can turn email notifications on or off in **Account Settings** > **Notifications** > **Email Notifications**.
-
-#### Desktop Notifications
-These are browser notifications that are by default sent for all activity.
-- You can adjust this setting in **Account Settings** > **Notifications** > **Send Desktop Notifications**.
-- Channel specific notifications are automatically set to the global default but can be modified in **Channel Settings** > **Notification Preferences** > **Send Desktop Notifications**.
-- Desktop notifications are available on Firefox, Safari, and Chrome.
-
-
-#### Sound Notifications
-These accompany each desktop notification by default.
-- You can change this setting in **Account Settings** > **Notifications** > **Desktop Notification Sounds**.
-
-
-#### Browser Tab Notifications
-These appear in the Mattermost tab and inform you of any unread messages and alert you to the number of mentions you have.
-- Unread messages are denoted by an asterisk (*) next to the Mattermost icon.
-- Mentions and replies are denoted by a red Mattermost icon.
-- The total number of unread mentions and replies are shown in brackets next to the Mattermost icon. For example, if you have 3 unread mentions, you’ll see a (3) in the browser tab.
diff --git a/doc/help/README.md b/doc/help/README.md
deleted file mode 100644
index fc11aebaa..000000000
--- a/doc/help/README.md
+++ /dev/null
@@ -1,25 +0,0 @@
-## Help
-
-- Getting Started
- - [Sign-in](Sign-in.md)
- - [Creating Teams](Creating-Teams.md)
-
-- User Interface
- - Main Menu
- - [Team Settings ](Team-Settings.md)
- - [General Settings](Team-Settings.md#general)
- - [Slack Import](Team-Settings.md#import-from-slack-beta)
- - [Manage Members](Manage-Members.md)
- - [Account Settings](Account-Settings.md)
- - [Messaging](Messaging.md)
- - [Mattermost Markdown Formatting](Markdown.md)
- - [Search](Search.md)
- - [Channels](Channels.md)
- - [Channel Types](Channels.md#channel-types)
- - [Managing Channels](Channels.md#managing-channels)
- - [Channel Settings](Channels.md#channel-settings)
- - [Notifications](Notifications.md)
-
-- System Console
- - Team
- - [Team Statistics](system-console/Team-Statistics.md)
diff --git a/doc/help/Search.md b/doc/help/Search.md
deleted file mode 100644
index 354e29a43..000000000
--- a/doc/help/Search.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# Search
-
-The search box in Mattermost brings back results from any channel of which you’re a member. No results are returned from channels where you are not a member - even if they are open channels.
-
-#### Some things to know about search:
-
-- Multiple search terms are connected with “OR” by default. Typing in `Mattermost website` returns results containing “Mattermost” or “website”
-- Use `from:` to find posts from specific users and `in:` to find posts in specific channels. For example: Searching `Mattermost in:town-square` only returns messages in Town Square that contain `Mattermost`
-- Use quotes to return search results for exact terms. For example: Searching `"Mattermost website"` returns messages containing the entire phrase `"Mattermost website"` and not messages containing only `Mattermost` or `website`
-- Use the `*` character for wildcard searches that match within words. For example: Searching for `rea*` brings back messages containing `reach`, `reason` and other words starting with `rea`
-- Click on the **Jump** link on the right of a search result to view the post archive in the center channel
-
-#### Limitations:
-
-- Search in Mattermost uses the full text search features included in either a MySQL or Postgres database, which has some limitations
- - Special cases that are not supported in default full text search, such as searching for IP addresses like `10.100.200.101`, can be added in future as the search feature evolves
- - Two letter searches and common words like "this", "a" and "is" won't appear in search results
- - For searching in Chinese try adding * to the end of queries
diff --git a/doc/help/Sign-in.md b/doc/help/Sign-in.md
deleted file mode 100644
index 3b91af1fc..000000000
--- a/doc/help/Sign-in.md
+++ /dev/null
@@ -1,27 +0,0 @@
-# Sign-in
-
-You can sign-in to your team from the web address of `https://domain.com/teamname`.
-
-There are several options for signing in to your team depending on how your System Administrator has configured your server.
-
-#### Email address and password sign-in
-
-When enabled by your System Administrator, you can sign in using the combination of email address and password used to create your account.
-
-If you have forgotten your password, you should be able to reset it from the "I forgot my password" option on the sign-in screen, or contact your System Administrator if you need help resetting your password.
-
-#### GitLab Single-Sign-On (SSO) option
-
-When enabled by your System Administrator, you can sign-in using your GitLab account using a one-click sign-in option. GitLab SSO lets you create teams, create accounts on teams, and sign-in to teams using one username, email address, and password that works across everything on the server.
-
-#### Switching Teams
-
-When you've used the same email address to sign-up and sign-in to multiple teams, you can switch among those teams using the main menu in any team site on the server. By default, devices remember which teams you have signed into for 30 days.
-
-#### System Adminstrator Role
-
-If your account in a given team has been given the System Administrator role, it has access to the System Console. The System Administrator role does not apply to accounts created in other teams using the same email address, since user accounts are unique to teams.
-
-#### Logging Out
-
-You can log out from the main menu, which is accessed by clicking the three dots in the top header on the left side of the screen. Clicking "Logout" logs you out of all teams that are signed-in and open in your browser.
diff --git a/doc/help/Team-Settings.md b/doc/help/Team-Settings.md
deleted file mode 100644
index 99960a575..000000000
--- a/doc/help/Team-Settings.md
+++ /dev/null
@@ -1,71 +0,0 @@
-## Team Settings
-
-The Team Settings menu offers Team Administrators, Team Owners and System Administrators the ability to adjust settings applied to a specific team.
-
-The following settings are found in a Team Site from the **Three-Dot** menu at the top of the left sidebar under **Team Settings**.
-
-### General
-
-General settings under the **Team Settings** > **General** configure how a team is displayed to users.
-
-#### Team Name
-
-Your **Team Name** is displayed on the sign-in page, and in the top of the left-hand sidebar for your team.
-
-#### Allow anyone to sign-up from login page
-
-Setting this option to **Yes** shows a link to the account creation page on the sign-in page of this team.
-
-Team Administrators would set this to **Yes** when they:
- 1. Operate on a closed network and want to make sign-up easy.
- 2. Operate on the open internet with sign-up restricted to specific domains, and want to allow easy sign-up from users with email addresses. Note: System Administrators can restrict sign-up to specific domains via the System Console.
- 3. Operate on the open internet and want to allow anyone to sign-up.
-
-Team Administrators would set this to **No** when they:
- 1. Operate on the open internet and want a small, private team that is email-invite-only.
-
-#### Include this team in the Team Directory
-
-Setting this option to **Yes** includes the Team Name on the Home Page and a link to this team's sign-in page.
-
-Team Administrators would set this to **Yes** when they:
- 1. Operate on a closed network and want to make it easy to discover their team from the Home Page of the Mattermost server.
- 2. Operate on the open internet with sign-up restricted to specific domains, and want to allow easy sign-up from users with email addresses. Note: System Administrators can restrict sign-up to specific domains via the System Console.
- 3. Operate on the open internet and want to allow anyone to sign-up to their team from the Home Page of the Mattermost server.
-
-Team Administrators would set this to **No** when they:
- 1. Operate on the open internet and want a small, private team that is email-invite-only.
-
-#### Invite Code
-
-The **Invite Code** is used as part of the URL in the team invitation link retrieved from the **Main Menu** > **Get Team Invite Link**. Click **Re-Generate** and then **Save** to generate a new team invitation link and invalidate the previous link.
-
-### Import
-
-#### Import from Slack (Beta)
-
-*Note: As a proprietary SaaS service, Slack is able to change its export format quickly and without notice. If you encounter issues not mentioned in the documentation below, please alert the product team by [filing an issue](https://github.com/mattermost/platform/issues).*
-
-The Slack Import feature in Mattermost is in "Beta" and focus is on supporting migration of teams of less than 100 registered users. To use:
-
-1. Generate a Slack "Export" file from **Slack > Team Settings > Import/Export Data > Export > Start Export**.
-
-2. In Mattermost go to **Team Settings > Import > Import from Slack**. _Team Owner_ or _Team Administrator_ role is required to access this menu option.
-
-3. Click **Select file** to upload Slack export file and click **Import**.
-
-4. Emails and usernames from Slack are used to create new Mattermost accounts.
-
-5. Slack users can activate their new Mattermost accounts by using Mattermost's Password Reset screen with their email addresses from Slack to set new passwords for their Mattermost accounts.
-
-6. Once logged in, the Mattermost users will have access to previous Slack messages in the public channels imported from Slack.
-
-**It is highly recommended that you test Slack import before applying it to an instance intended for production.** If you use Docker, you can spin up a test instance in one line (`docker run --name mattermost-dev -d --publish 8065:80 mattermost/platform`). If you don't use Docker, there are [step-by-step instructions](../install/Docker-Single-Container.md) to install Mattermost in preview mode in less than 5 minutes.
-
-#### Notes:
-
-- Users are not automatically added to channels or groups when importing from Slack.
-- Newly added markdown support in Slack's Posts 2.0 feature announced on September 28, 2015 is not yet supported.
-- Slack does not export files or images your team has stored in Slack's database. Mattermost will provide links to the location of your assets in Slack's web UI.
-- Slack does not export any content from private groups or direct messages that your team has stored in Slack's database.
-- In Beta, Slack accounts with usernames or email addresses identical to existing Mattermost accounts will not import and mentions do not resolve as Mattermost usernames (still shows Slack ID). No pre-check or roll-back is currently offered.
diff --git a/doc/help/system-console/Team-Statistics.md b/doc/help/system-console/Team-Statistics.md
deleted file mode 100644
index 5e4bcb5c5..000000000
--- a/doc/help/system-console/Team-Statistics.md
+++ /dev/null
@@ -1,24 +0,0 @@
-# Team Statistics
-
-Statistics on users, posts and channels are tracked for each team and are viewable under **System Console** > **Teams** > **Statistics**.
-
-## Total Users
-The total number of accounts created, including both active and inactive accounts.
-
-## Total Posts
-The total number of posts made in a team, including deleted posts and posts made using automation.
-
-## Public Groups
-The number of public channels created by your team, including channels that may have been archived.
-
-## Private Group
-The number of private groups created by your team, including groups that may have been archived.
-
-## Active Users With Posts
-Users who logged in and made a post on a certain day.
-
-## Recently Active Users
-Users that have logged in and had recent browser activity in Mattermost.
-
-## Newly Created Users
-Users that have recently completed the sign-up process to create a Mattermost account on the team.
diff --git a/doc/install/Administration.md b/doc/install/Administration.md
deleted file mode 100644
index 53f413d04..000000000
--- a/doc/install/Administration.md
+++ /dev/null
@@ -1,114 +0,0 @@
-# Administration
-
-This document provides instructions for common administrator tasks
-
-#### Important notes
-
-##### **DO NOT manipulate the Mattermost database**
- - In particular, DO NOT delete data from the database, as Mattermost is designed to stop working if data integrity has been compromised. The system is designed to archive content continously and generally assumes data is never deleted.
-
-### Common Tasks
-
-##### Creating System Administrator account from commandline
- - If the System Administrator account becomes unavailable, a person leaving the organization for example, you can set a new system admin from the commandline using `./platform -assign_role -team_name="yourteam" -email="you@example.com" -role="system_admin"`.
- - After assigning the role the user needs to log out and log back in before the System Administrator role is applied.
-
-##### Deactivating a user
-
- - Team Admin or System Admin can go to **Main Menu** > **Manage Members** > **Make Inactive** to deactivate a user, which removes them from the team.
- - To preserve audit history, users are never deleted from the system. It is highly recommended that System Administrators do not attempt to delete users manually from the database, as this may compromise system integrity and ability to upgrade in future.
-
-## GitLab Mattermost Administration
-
-GitLab Mattermost is a special version of Mattermost bundled with GitLab omnibus. Here we consolidate administrative instructions, guides and troubleshooting guidance.
-
-### Installing GitLab Mattermost
-
-Please follow the [GitLab Omnibus documentation for installing GitLab Mattermost](http://doc.gitlab.com/omnibus/gitlab-mattermost/).
-
-### Community Support Resources
-
-For help and support around your GitLab Mattermost deployment please see:
-
-- [Troubleshooting Forum](https://forum.mattermost.org/t/about-the-trouble-shooting-category/150/1)
-- [GitLab Mattermost issue tracker on GitLab.com](https://gitlab.com/gitlab-org/gitlab-mattermost/issues)
-
-### Connecting Mattermost to integrations with incoming webhooks
-
-#### Connecting Mattermost to GitLab for Slack-equivalent functionality.
-
-Mattermost is designed to be _Slack-compatible, not Slack-limited_ and supports integration via the Slack UI in GitLab, as well as fully customizable integrations.
-
-To enable this:
-
-1. In Mattermost, from a team site where you have System Administration privileges, from the main menu go to **System Console** > **Serice Settings** > **Enable Incoming Webhooks** and select **true** then click **Save**
-
-2. Follow the step-by-step example of [connecting Mattermost incoming webhooks to GitLab's Slack webhooks UI](https://github.com/mattermost/platform/blob/master/doc/integrations/webhooks/Incoming-Webhooks.md#connecting-mattermost-to-gitlab-using-slack-ui).
-
-#### Connecting Mattermost to GitLab for functionality exceeding Slack integration.
-
-To enable this:
-
-1. In Mattermost, from a team site where you have System Administration privileges, from the main menu go to **System Console** > **Serice Settings** > **Enable Incoming Webhooks** and select **true** then click **Save**
-
-2. Set up the [GitLab Integration Service for Mattermost](https://github.com/mattermost/mattermost-integration-gitlab).
-
-### Connecting Mattermost to integrations with outgoing webhooks
-
-Mattermost offers Slack-compatible outgoing webhooks, that can connect to applications created by the Mattermost community, such as [Hubot](https://www.npmjs.com/package/hubot-mattermost) and [IRC](https://github.com/42wim/matterbridge) support.
-
-To enable this:
-
-1. In Mattermost, from a team site where you have System Administration privileges, from the main menu go to **System Console** > **Serice Settings** > **Enable Outgoing Webhooks** and select **true** then click **Save**
-
-2. Select a [Mattermost community application](http://www.mattermost.org/community-applications/) using outgoing webhooks--or adapt a Slack application using the same outgoing webhook standard--and follow the setup instructions provided.
-
-### Upgrading GitLab Mattermost manually
-
-If you choose to upgrade Mattermost outside of GitLab's omnibus automation, please [follow this guide](https://github.com/mattermost/platform/blob/master/doc/install/Upgrade-Guide.md#upgrading-mattermost-to-next-major-release).
-
-### Upgrading GitLab Mattermost from GitLab 8.0 (containing Mattermost 0.7.1-beta)
-
-To upgrade GitLab Mattermost from the 0.7.1-beta release of Mattermost in GitLab 8.0, please [follow this guide](https://github.com/mattermost/platform/blob/master/doc/install/Upgrade-Guide.md#upgrading-mattermost-in-gitlab-80-to-gitlab-81-with-omnibus).
-
-### Troubleshooting GitLab Mattermost
-
-- If you're having issues installing GitLab Mattermost with GitLab Omnibus, as a first step please turn on logging by updating the [log settings](https://github.com/mattermost/platform/blob/master/doc/install/Configuration-Settings.md#log-file-settings) section in your `config.json` file installed by omnibus, and they try a general web search for the error message you receive.
-
-#### GitLab Mattermost Error Messages
-
-###### `We received an unexpected status code from the server (200)`
-
-- If you have upgraded from a pre-released version of GitLab Mattermost or if an unforseen issue has arrisen during the [upgrade procedure](https://github.com/mattermost/platform/blob/master/doc/install/Upgrade-Guide.md), you may be able to restore Mattermost using the following procedure:
- - `sudo stop mattermost`, so DB can be dropped
- - `sudo gitlab-ctl reconfigure`
- - `sudo -u gitlab-psql /opt/gitlab/embedded/bin/dropdb -h /var/opt/gitlab/postgresql mattermost_production`
- - `sudo start mattermost`
- - `sudo gitlab-ctl reconfigure`
- - [Manually set up GitLab SSO](https://github.com/mattermost/platform/blob/master/doc/integrations/Single-Sign-On/Gitlab.md) by copying Secret and ID into `/var/opt/gitlab/mattermost/config.json`
- - `sudo gitlab-ctl restart`
-
-###### `Token request failed`
- - This error can appear in the web browser after attempting to create a new team with GitLab SSO enabled
- - **Solutions:**
- 1. Check that your SSL settings for the SSO provider match the `http://` or `https://` choice selected in `config.json` under `GitLabSettings`
- 2. Follow steps 1 to 3 of the manual [GitLab SSO configuration procedure](https://github.com/mattermost/platform/blob/master/doc/integrations/Single-Sign-On/Gitlab.md) to confirm your `Secret` and `Id` settings in `config.json` match your GitLab settings, and if they don't, manually update `config.json` to the correct settings and see if this clears the issue.
-
-###### `"The redirect URI included is not valid.`
- - This error may be related to SSL configurations in your proxy after a GitLab omnibus upgrade from 8.0, which contained the Mattermost beta version.
- - **Solution:**
- - Please check that each step of [the procedure for upgrading Mattermost in GitLab 8.0 to GitLab 8.1 was completed](https://github.com/mattermost/platform/blob/master/doc/install/Upgrade-Guide.md#upgrading-mattermost-in-gitlab-80-to-gitlab-81-with-omnibus). Then check upgrades to successive major versions were completed using the procedure in the [Upgrade Guide](https://github.com/mattermost/platform/blob/master/doc/install/Upgrade-Guide.md#upgrading-mattermost-to-next-major-release).
-
-
-###### `We couldn't find the existing account ...`
- - This error appears when a user attempts to sign in using a single-sign-on option with an account that was not created using that single-sign-on option. For example, if a user creates Account A using email sign-up, then attempts to sign-in using GitLab SSO, the error appears since Account A was not created using GitLab SSO.
- - **Solution:**
- - If you're switching from email auth to GitLab SSO, and you're getting this issue on an admin account, consider deactivating your email-based account, then creating a new account with System Admin privileges using GitLab SSO. Specifically:
- 1. Deactivate your email-based System Admin account (note: this process is [scheduled to improve](https://mattermost.atlassian.net/browse/PLT-975))
- 1. Temporarily turn off email verification (**System Console** > **Email Settings** > **Require Email Verification** > **false**, or set `"RequireEmailVerification": false` in `config.json`).
- 2. Change email for account to random address so you can create a new GitLab SSO account using your regular address.
- 2. Create a new Mattermost account using GitLab SSO
- 1. With GitLab SSO enabled, go to `https://domain.com/teamname` and sign-up for a new Mattermost account using your GitLab SSO account with preferred email address.
- 2. [Upgrade the new account to System Admin privileges](https://github.com/mattermost/platform/blob/master/doc/install/Troubleshooting.md#lost-system-administrator-account).
- 3. Deactivate the previous System Admin account that used email authentication.
- 1. Using the new GitLab SSO System Admin account go to **System Console** > **[TEAMNAME]** > **Users**, find the previous account and set it to "Inactive"
diff --git a/doc/install/Amazon-Elastic-Beanstalk.md b/doc/install/Amazon-Elastic-Beanstalk.md
deleted file mode 100644
index 56650fc93..000000000
--- a/doc/install/Amazon-Elastic-Beanstalk.md
+++ /dev/null
@@ -1,28 +0,0 @@
-
-## AWS Elastic Beanstalk Setup (Docker)
-These instructions will guide you through the process of setting up Mattermost for product evaluation using an EBS Docker single-container application using [Dockerrun.aws.zip][Dockerrun.aws].
-
-1. From your [AWS console]( https://console.aws.amazon.com/console/home) select **Elastic Beanstalk** under the Compute section.
-2. Select **Create New Application** from the top right.
-3. Name your Elastic Beanstalk application and click **Next**,
-4. Select **Create web server** on the New Enviroment page.
-5. If asked, select **Create an IAM role and instance profile**, then click **Next**.
-6. On the Enviroment Type page,
- 1. Set Predefined Configuration to **Docker** under the generic heading in the drop-down list.
- 2. Set Environment Type to **Single instance** in the drop-down list.
- 3. Click **Next**.
-7. For Application Source, select **Upload your own** and upload the [Dockerrun.aws.zip][Dockerrun.aws] file, then click **Next**.
-8. Type an Environment Name and URL. Make sure the URL is available by clicking **Check availability**, then click **Next**.
-9. The options on the Additional Resources page may be left at default unless you wish to change them. Click **Next**.
-10. On the Configuration Details page,
- 1. Select an Instance Type of **t2.small** or larger.
- 2. The remaining options may be left at their default values unless you wish to change them. Click **Next**.
-11. Environment tags may be left blank. Click **Next**.
-12. You will be asked to review your information, then click **Launch**.
-14. It may take a few minutes for beanstalk to launch your environment. If the launch is successful, you will see a see a large green checkmark and the Health status should change to “Green”.
-15. Test your environment by clicking the domain link next to your application name at the top of the dashboard. Alternatively, enter the domain into your browser in the form `http://.elasticbeanstalk.com`. You can also map your own domain if you wish. If everything is working correctly, the domain should navigate you to the Mattermost signup page. Enjoy exploring Mattermost!
-
-### (Recommended) Enable Email
-The default single-container Docker instance for Mattermost is designed for product evaluation, and sets `SendEmailNotifications=false` so the product can function without enabling email. To see the product's full functionality, [enabling SMTP email is recommended](SMTP-Email-Setup.md).
-
-[Dockerrun.aws]: https://github.com/mattermost/platform/raw/master/docker/1.4/Dockerrun.aws.zip
diff --git a/doc/install/Command-Line-Tools.md b/doc/install/Command-Line-Tools.md
deleted file mode 100644
index ff6f110fd..000000000
--- a/doc/install/Command-Line-Tools.md
+++ /dev/null
@@ -1,81 +0,0 @@
-# Command Line Tools
-
-From the directory where the Mattermost platform is installed a `platform` command is available for configuring the system, including:
-
-- Creating teams
-- Creating users
-- Assigning roles to users
-- Reseting user passwords
-- Permanently deleting users (use cautiously - database backup recommended before use)
-- Permanently deleting teams (use cautiously - database backup recommended before use)
-
-Typing `platform -help` brings up the below documentation on usage.
-
-```
-Mattermost commands to help configure the system
-
-NAME:
- platform -- platform configuation tool
-
-USAGE:
- platform [options]
-
-FLAGS:
- -config="config.json" Path to the config file
-
- -email="user@example.com" Email address used in other commands
-
- -password="mypassword" Password used in other commands
-
- -team_name="name" The team name used in other commands
-
- -role="admin" The role used in other commands
- valid values are
- "" - The empty role is basic user
- permissions
- "admin" - Represents a team admin and
- is used to help administer one team.
- "system_admin" - Represents a system
- admin who has access to all teams
- and configuration settings.
-COMMANDS:
- -create_team Creates a team. It requires the -team_name
- and -email flag to create a team.
- Example:
- platform -create_team -team_name="name" -email="user@example.com"
-
- -create_user Creates a user. It requires the -team_name,
- -email and -password flag to create a user.
- Example:
- platform -create_user -team_name="name" -email="user@example.com" -password="mypassword"
-
- -assign_role Assigns role to a user. It requires the -role,
- -email and -team_name flag. You may need to log out
- of your current sessions for the new role to be
- applied.
- Example:
- platform -assign_role -team_name="name" -email="user@example.com" -role="admin"
-
- -reset_password Resets the password for a user. It requires the
- -team_name, -email and -password flag.
- Example:
- platform -reset_password -team_name="name" -email="user@example.com" -password="newpassword"
-
- -permanent_delete_user Permanently deletes a user and all related information
- including posts from the database. It requires the
- -team_name, and -email flag. You may need to restart the
- server to invalidate the cache
- Example:
- platform -permanent_delete_user -team_name="name" -email="user@example.com"
-
- -permanent_delete_team Permanently deletes a team and all users along with
- all related information including posts from the database.
- It requires the -team_name flag. You may need to restart
- the server to invalidate the cache.
- Example:
- platform -permanent_delete_team -team_name="name"
-
- -version Display the current of the Mattermost platform
-
- -help Displays this help page`
-```
diff --git a/doc/install/Configuration-Settings.md b/doc/install/Configuration-Settings.md
deleted file mode 100644
index 7ee440b7c..000000000
--- a/doc/install/Configuration-Settings.md
+++ /dev/null
@@ -1,409 +0,0 @@
-## System Console Settings
-
-The System Console user interface lets system administrators manage a Mattermost server and multiple teams from a web-based user interface. The first user added to a new Mattermost install is assigned the system administrator role and can access the System Console from the main menu of any team. Setting changes in the System Console are stored in `config.json`.
-
-### Service Settings
-
-General settings to configure the listening address, login security, testing, webhooks and service integration of Mattermost.
-
-#### System
-
-```"ListenAddress": ":8065"```
-The IP address on which to listen and the port on which to bind. Entering ":8065" will bind to all interfaces or you can choose one like "127.0.0.1:8065". Changing this will require a server restart before taking effect.
-
-```"MaximumLoginAttempts": 10```
-Failed login attempts allowed before a user is locked out and required to reset their password via email.
-
-```"SegmentDeveloperKey": ""```
-For users running SaaS services, signup for a key at Segment.com to track metrics.
-
-```"GoogleDeveloperKey": ""```
-Set this key to enable embedding of YouTube video previews based on hyperlinks appearing in messages or comments. Instructions to obtain a key available at https://www.youtube.com/watch?v=Im69kzhpR3I. Leaving the field blank disables the automatic generation of YouTube video previews from links.
-
-```"EnableTesting": false```
-"true": `/loadtest` slash command is enabled to load test accounts and test data.
-
-```"EnableDeveloper": false```
-"true": Users are alerted to any console errors that occur.
-
-```"EnableSecurityFixAlert": true```
-"true": System Administrators are notified by email if a relevant security fix alert has been announced in the last 12 hours. Requires email to be enabled.
-
-```"SessionLengthWebInDays" : 30```
-Set the number of days before web sessions expire and users will need to log in again.
-
-```"SessionLengthMobileInDays" : 30```
-Set the number of days before native mobile sessions expire.
-
-```"SessionLengthSSOInDays" : 30```
-Set the number of days before SSO sessions expire.
-
-```"SessionCacheInMinutes" : 10```
-Set the number of minutes to cache a session in memory.
-
-```"WebsocketSecurePort": 443```
-The port to use for secure websocket connections being initiated from the client. By default wss:// uses port 443. Some server configurations (e.g. Cloudfoundry) support wss on a different port.
-
-```"WebsocketPort": 80```
-The port to use for websocket connections being initiated from the client. By default ws:// uses port 80.
-
-
-#### Webhooks
-
-```"EnableIncomingWebhooks": true```
-Developers building integrations can create webhook URLs for channels and private groups. Please see http://mattermost.org/webhooks to learn about creating webhooks, view samples, and to let the community know about integrations you have built. "true": Incoming webhooks will be allowed. To manage incoming webhooks, go to **Account Settings -> Integrations**. The webhook URLs created in Account Settings can be used by external applications to create posts in any channels or private groups that you have access to; “false”: The Integrations > Incoming Webhooks section of Account Settings is hidden and all incoming webhooks are disabled.
-
-Security note: By enabling this feature, users may be able to perform [phishing attacks](https://en.wikipedia.org/wiki/Phishing) by attempting to impersonate other users. To combat these attacks, a BOT tag appears next to all posts from a webhook. Enable at your own risk.
-
-```"EnableOutgoingWebhooks": true```
-Developers building integrations can create webhook tokens for public channels. Trigger words are used to fire new message events to external integrations. For security reasons, outgoing webhooks are only available in public channels. Please see our [documentation page](https://github.com/mattermost/platform/blob/master/doc/integrations/webhooks/Outgoing-Webhooks.md) to learn about creating webhooks and view samples. "true": Outgoing webhooks will be allowed. To manage outgoing webhooks, go to **Account Settings -> Integrations**; “false”: The Integrations > Outgoing Webhooks section of Account Settings is hidden and all outgoing webhooks are disabled.
-
-Security note: By enabling this feature, users may be able to perform [phishing attacks](https://en.wikipedia.org/wiki/Phishing) by attempting to impersonate other users. To combat these attacks, a BOT tag appears next to all posts from a webhook. Enable at your own risk.
-
-```"EnablePostUsernameOverride": false```
-"true": Webhooks will be allowed to change the username they are posting as; “false”: Webhooks can only post as the username they were set up with. See http://mattermost.org/webhooks for more details.
-
-```"EnablePostIconOverride": false```
-"true": Webhooks will be allowed to change the icon they post with; “false”: Webhooks can only post with the profile picture of the account they were set up with. See http://mattermost.org/webhooks for more details.
-
-### Team Settings
-
-Settings to configure the appearance, size, and access options for teams.
-
-```"SiteName": "Mattermost"```
-Name of service shown in login screens and UI.
-
-```"MaxUsersPerTeam": 50```
-Maximum number of users per team, including both active and inactive users.
-
-```"EnableTeamCreation": true```
-"true": Ability to create a new team is enabled for all users; “false”: the ability to create teams is disabled. The Create A New Team button is hidden in the main menu UI.
-
-```"EnableUserCreation": true```
-"true": Ability to create new accounts is enabled via inviting new members or sharing the team invite link; “false”: the ability to create accounts is disabled. The create account button displays an error when trying to signup via an email invite or team invite link.
-
-```"RestrictCreationToDomains": ""```
-Teams and user accounts can only be created by a verified email from this list of comma-separated domains (e.g. "corp.mattermost.com, mattermost.org").
-
-```"RestrictTeamNames": true```
-"true": Newly created team names cannot contain the following restricted words: www, web, admin, support, notify, test, demo, mail, team, channel, internal, localhost, dockerhost, stag, post, cluster, api, oauth; “false”: Newly created team names are not restricted.
-
-```"EnableTeamListing": false```
-"true": Teams that are configured to appear in the team directory will appear on the system main page. Teams can configure this setting from **Team Settings -> Include this team in the Team Directory**; "true": Team directory on the system main page is disabled.
-
-
-### SQL Settings
-
-Settings to configure the data sources, connections, and encryption of SQL databases. Changing properties in this section will require a server restart before taking effect.
-
-```"DriverName": "mysql"```
-"mysql": enables driver to MySQL database; "postgres": enables driver to PostgreSQL database. This setting can only be changed from config.json file, it cannot be changed from the System Console user interface.
-
-```"DataSource": "mmuser:mostest@tcp(dockerhost:3306)/mattermost_test?charset=utf8mb4,utf8"```
-This is the connection string to the master database. When **DriverName**="postgres" then use a connection string in the form “postgres://mmuser:password@localhost:5432/mattermost_test?sslmode=disable&connect_timeout=10”. This setting can only be changed from config.json file, it cannot be changed from the System Console user interface.
-
-```"DataSourceReplicas": []```
-This is a list of connection strings pointing to read replicas of MySQL or PostgreSQL database. If running a single server, set to DataSource. This setting can only be changed from config.json file, it cannot be changed from the System Console user interface.
-
-```"MaxIdleConns": 10```
-Maximum number of idle connections held open to the database.
-
-```"MaxOpenConns": 10```
-Maximum number of open connections held open to the database.
-
-```"Trace": false```
-"true": Executing SQL statements are written to the log for development.
-
-```"AtRestEncryptKey": "7rAh6iwQCkV4cA1Gsg3fgGOXJAQ43QVg"```
-32-character (to be randomly generated via Admin Console) salt available to encrypt and decrypt sensitive fields in database.
-
-
-### Email Settings
-
-Settings to configure email signup, notifications, security, and SMTP options.
-
-#### Signup
-
-```"EnableSignUpWithEmail": true```
-"true": Allow team creation and account signup using email and password; “false”: Email signup is disabled and users are not able to invite new members. This limits signup to single-sign-on services like OAuth or LDAP.
-
-#### Notifications
-
-```"SendEmailNotifications": false```
-"true": Enables sending of email notifications. “false”: Disables email notifications for developers who may want to skip email setup for faster development. Setting this to true removes the **Preview Mode: Email notifications have not been configured** banner (requires logging out and logging back in after setting is changed)
-
-
-```"RequireEmailVerification": false```
-"true": Require email verification after account creation prior to allowing login; “false”: Users do not need to verify their email address prior to login. Developers may set this field to false so skip sending verification emails for faster development.
-
-
-```"FeedbackName": ""```
-Name displayed on email account used when sending notification emails from Mattermost system.
-
-```"FeedbackEmail": ""```
-Address displayed on email account used when sending notification emails from Mattermost system.
-
-#### SMTP
-
-```"SMTPUsername": ""```
-Obtain this credential from the administrator setting up your email server.
-
-```"SMTPPassword": ""```
-Obtain this credential from the administrator setting up your email server.
-
-```"SMTPServer": ""```
-Location of SMTP email server.
-
-```"SMTPPort": ""```
-Port of SMTP email server.
-
-#### Security
-
-```"ConnectionSecurity": ""```
-"none": Send email over an unsecure connection; "TLS": Communication between Mattermost and your email server is encrypted; “STARTTLS”: Attempts to upgrade an existing insecure connection to a secure connection using TLS.
-
-```"InviteSalt": "bjlSR4QqkXFBr7TP4oDzlfZmcNuH9YoS"```
-32-character (to be randomly generated via Admin Console) salt added to signing of email invites.
-
-```"PasswordResetSalt": "vZ4DcKyVVRlKHHJpexcuXzojkE5PZ5eL"```
-32-character (to be randomly generated via Admin Console) salt added to signing of password reset emails.
-
-#### Push Notification Settings
-
-```"SendPushNotifications": false```
-"true": Your mattermsot server sends mobile push notifications to the server specified in **PushNotificationServer**; "false": Mobile push notifications are disabled.
-
-```"PushNotificationServer": ""```
-Address of the proxy server that re-sends push notifications to their respective services like APNS (Apple Push Notification Services).
-
-
-### File Settings
-
-Settings to configure storage, appearance, and security of files and images.
-
-#### File Storage
-
-```"DriverName": "local"```
-System used for file storage. “local”: Files and images are stored on the local file system. “amazons3”: Files and images are stored on Amazon S3 based on the provided access key, bucket and region fields.
-
-```"Directory": "./data/"```
-Directory to which files are written. If blank, directory will be set to ./data/.
-
-```"AmazonS3AccessKeyId": ""```
-Obtain this credential from your Amazon EC2 administrator.
-
-```"AmazonS3SecretAccessKey": ""```
-Obtain this credential from your Amazon EC2 administrator.
-
-```"AmazonS3Bucket": ""```
-Name you selected for your S3 bucket in AWS.
-
-```"AmazonS3Region": ""```
-AWS region you selected for creating your S3 bucket. Refer to [AWS Reference Documentation](http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region) and choose this variable from the Region column.
-
-#### Image Settings
-
-```"ThumbnailWidth": 120```
-Width of thumbnails generated from uploaded images. Updating this value changes how thumbnail images render in future, but does not change images created in the past.
-
-```"ThumbnailHeight": 100```
-Height of thumbnails generated from uploaded images. Updating this value changes how thumbnail images render in future, but does not change images created in the past.
-
-```"PreviewWidth": 1024```
-Maximum width of preview image. Updating this value changes how preview images render in future, but does not change images created in the past.
-
-```"PreviewHeight": 0```
-Maximum height of preview image ("0": Sets to auto-size). Updating this value changes how preview images render in future, but does not change images created in the past.
-
-```"ProfileWidth": 128```
-The width to which profile pictures are resized after being uploaded via Account Settings.
-
-```"ProfileHeight": 128```
-The height to which profile pictures are resized after being uploaded via Account Settings.
-
-```"EnablePublicLink": true```
-"true": Allow users to share public links to files and images when previewing; “false”: The Get Public Link option is hidden from the image preview user interface.
-
-```"PublicLinkSalt": "A705AklYF8MFDOfcwh3I488G8vtLlVip"```
-32-character (to be randomly generated via Admin Console) salt added to signing of public image links.
-
-
-### Log Settings
-
-Settings to configure the console and log file output, detail level, format and location of error messages.
-
-#### Console Settings
-
-```"EnableConsole": true```
-"true": Output log messages to the console based on **ConsoleLevel** option. The server writes messages to the standard output stream (stdout).
-
-```"ConsoleLevel": "DEBUG"```
-Level of detail at which log events are written to the console when **EnableConsole**=true. ”ERROR”: Outputs only error messages; “INFO”: Outputs error messages and information around startup and initialization; “DEBUG”: Prints high detail for developers debugging issues.
-
-#### Log File Settings
-
-```"EnableFile": true```
-"true": Log files are written to files specified in **FileLocation**.
-
-```"FileLevel": "INFO"```
-Level of detail at which log events are written to log files when **EnableFile**=true. “ERROR”: Outputs only error messages; “INFO”: Outputs error messages and information around startup and initialization; “DEBUG”: Prints high detail for developers debugging issues.
-
-```"FileFormat": ""```
-Format of log message output. If blank, **FileFormat** = "[%D %T] [%L] (%S) %M", where:
-
- %T Time (15:04:05 MST)
- %t Time (15:04)
- %D Date (2006/01/02)
- %d Date (01/02/06)
- %L Level (FNST, FINE, DEBG, TRAC, WARN, EROR, CRIT)
- %S Source
- %M Message
-
-```"FileLocation": ""```
-Directory to which log files are written. If blank, log files write to ./logs/mattermost/mattermost.log. Log rotation is enabled and every 10,000 lines of log information is written to new files stored in the same directory, for example mattermost.2015-09-23.001, mattermost.2015-09-23.002, and so forth.
-
-### Rate Limit Settings
-
-Settings to enable API rate limiting and configure requests per second, user sessions and variables for rate limiting. Changing properties in this section will require a server restart before taking effect.
-
-```"EnableRateLimiter": true```
-"true": APIs are throttled at the rate specified by **PerSec**.
-
-```"PerSec": 10```
-Throttle API at this number of requests per second if **EnableRateLimiter**=true.
-
-```"MemoryStoreSize": 10000```
-Maximum number of user sessions connected to the system as determined by **VaryByRemoteAddr** and **VaryByHeader** variables.
-
-```"VaryByRemoteAddr": true```
-"true": Rate limit API access by IP address.
-
-```"VaryByHeader": ""```
-Vary rate limiting by HTTP header field specified (e.g. when configuring Ngnix set to "X-Real-IP", when configuring AmazonELB set to "X-Forwarded-For").
-
-### Privacy Settings
-
-Settings to configure the name and email privacy of users on your system.
-
-```"ShowEmailAddress": true```
-"true": Show email address of all users; "false": Hide email address of users from other users in the user interface, including team owners and team administrators. This is designed for managing teams where users choose to keep their contact information private.
-
-```"ShowFullName": true```
-"true": Show full name of all users; “false”: hide full name of users from other users including team owner and team administrators.
-
-### GitLab Settings
-
-Settings to configure account and team creation using GitLab OAuth.
-
-```"Enable": false```
-"true": Allow team creation and account signup using GitLab OAuth. To configure, input the **Secret** and **Id** credentials.
-
-```"Secret": ""```
-Obtain this value by logging into your GitLab account. Go to Profile Settings -> Applications -> New Application, enter a Name, then enter Redirect URLs `https:///login/gitlab/complete` (example: `https://example.com:8065/login/gitlab/complete`) and `https:///signup/gitlab/complete`.
-
-```"Id": ""```
-Obtain this value by logging into your GitLab account. Go to Profile Settings -> Applications -> New Application, enter a Name, then enter Redirect URLs `https:///login/gitlab/complete` (example: `https://example.com:8065/login/gitlab/complete`) and `https:///signup/gitlab/complete`.
-
-```"AuthEndpoint": ""```
-Enter `https:///oauth/authorize` (example: `https://example.com:3000/oauth/authorize`). Use HTTP or HTTPS depending on how your server is configured.
-
-```"TokenEndpoint": ""```
-Enter `https:///oauth/authorize` (example: `https://example.com:3000/oauth/token`). Use HTTP or HTTPS depending on how your server is configured.
-
-```"UserApiEndpoint": ""```
-Enter `https:///oauth/authorize` (example: `https://example.com:3000/api/v3/user`). Use HTTP or HTTPS depending on how your server is configured.
-
-### Support Settings
-
-```"TermsOfServiceLink": "/static/help/terms.html"```
-Set the link for the terms of service.
-
-```"PrivacyPolicyLink": "/static/help/privacy.html"```
-Set the link for the privacy policy.
-
-```"AboutLink": "/static/help/about.html"```
-Set the link for the about page.
-
-```"HelpLink": "/static/help/help.html"```
-Set the link for the help page.
-
-```"ReportAProblemLink": "/static/help/report_problem.html"```
-Set the link for the support website.
-
-`"SupportEmail":"feedback@mattermost.com"`
-Set an email for feedback or support requests.
-
-### LDAP Settings (Enterprise)
-
-Settings used to enable and configure LDAP authentication with Mattermost. Available in the Enterprise version of Mattermost.
-
-```"Enable Login With LDAP": "false"```
-"true": Mattermost allows login using LDAP.
-
-```"LDAP Server": ""```
-The domain or IP address of the LDAP server.
-
-```"LDAP Port": "389"```
-The port Mattermost will use to connect to the LDAP server. Default is 389.
-
-```"BaseDN": ""```
-The Base DN is the Distinguished Name of the location where Mattermost should start its search for users in the LDAP tree.
-
-```"Bind Username": ""```
-The username used to perform the LDAP search. This should typically be an account created specifically for use with Mattermost. It should be a read only account with access limited to the portion of the LDAP tree specified in the BaseDN field.
-
-```"Bind Password": ""```
-Password of the user given in “Bind Username”.
-
-```"First Name Attribute": ""```
-The attribute in the LDAP server that will be used to populate the first name of users in Mattermost.
-
-```"Last Name Attribute": ""```
-The attribute in the LDAP server that will be used to populate the last name of users in Mattermost.
-
-```"Email Attribute": ""```
-The attribute in the LDAP server that will be used to populate the email addresses of users in Mattermost.
-
-```"Username Attribute": ""```
-The attribute in the LDAP server that will be used to populate the username field in Mattermost. This may be the same as the ID Attribute.
-
-```"ID Attribute": ""```
-The attribute in the LDAP server that will be used as a unique identifier in Mattermost.
-
-This is the attribute that will be used to create Mattermost accounts. It should be an LDAP attribute with a value that does not change, such as username or uid. If a user’s Id Attribute changes, it will create a new Mattermost account unassociated with their old one.
-
-This is also the value used to log in to Mattermost in the “LDAP Username” field on the sign in page. Normally this attribute is the same as the “Username Attribute” field above. If your team typically uses domain\username to sign in to other services with LDAP, you may choose to put domain\username in this field to maintain consistency between sites.
-
-```"Query Timeout (seconds)": "60"```
-The timeout value for queries to the LDAP server. Increase this value if you are getting timeout errors caused by a slow LDAP server.
-
-## Config.json Settings Not in System Console
-
-System Console allows an IT Admin to update settings defined in `config.json`. However there are a number of settings in `config.json` unavailable in the System Console and require update from the file itself. We describe them here:
-
-### Service Settings
-
-```"EnableOAuthServiceProvider": false```
-"true": Allow Mattermost to function as an OAuth provider, allowing 3rd party apps access to your user store for authentication.
-
-### File Settings
-
-```"InitialFont": "luximbi.ttf"```
-Font used in auto-generated profile pics with colored backgrounds.
-
-```"AmazonS3Endpoint": ""```
-Set an endpoint URL for an Amazon S3 instance.
-
-```"AmazonS3BucketEndpoint": ""```
-Set an endpoint URL for Amazon S3 buckets.
-
-```"AmazonS3LocationConstraint": false```
-Set whether the S3 region is location constrained.
-
-```Added: "AmazonS3LowercaseBucket": false```
-Set whether bucket names are fully lowercase or not.
-
-### GitLab Settings
-
-```"Scope": ""```
-Standard setting for OAuth to determine the scope of information shared with OAuth client. Not currently supported by GitLab OAuth.
diff --git a/doc/install/Docker-Single-Container.md b/doc/install/Docker-Single-Container.md
deleted file mode 100644
index 7c0784ad0..000000000
--- a/doc/install/Docker-Single-Container.md
+++ /dev/null
@@ -1,124 +0,0 @@
-# Local Machine Setup and Upgrade
-
-The following install instructions are for single-container installs of Mattermost using Docker for exploring product functionality and upgrading to newer versions.
-
-### One-line Docker Install ###
-
-If you have Docker set up, Mattermost installs in one-line:
-`docker run --name mattermost-dev -d --publish 8065:80 mattermost/platform`
-
-Otherwise, see step-by-step available:
-
-### Mac OSX ###
-
-1. Install Docker Toolbox using instructions at: http://docs.docker.com/installation/mac/
- 1. Start Docker Toolbox from the command line and run: `docker-machine create -d virtualbox dev`
-2. Get your Docker IP address with: `docker-machine ip dev`
-3. Use `sudo nano /etc/hosts` to add ` dockerhost` to your /etc/hosts file
-4. Run: `docker-machine env dev` and copy the export statements to your ~/.bash\_profile by running `sudo nano ~/.bash_profile`. Then run: `source ~/.bash_profile`
-5. Run: `docker run --name mattermost-dev -d --publish 8065:80 mattermost/platform`
-6. When docker is done fetching the image, open http://dockerhost:8065/ in your browser.
-
-### Ubuntu ###
-1. Follow the instructions at https://docs.docker.com/installation/ubuntulinux/ or use the summary below:
-
- ``` bash
- sudo apt-get update
- sudo apt-get install wget
- wget -qO- https://get.docker.com/ | sh
- sudo usermod -aG docker
- sudo service docker start
- newgrp docker
- ```
-
-2. Start docker container:
-
- ``` bash
- docker run --name mattermost-dev -d --publish 8065:80 mattermost/platform
- ```
-
-3. When docker is done fetching the image, open http://localhost:8065/ in your browser.
-
-### Arch ###
-1. Install Docker using the following commands:
-
- ``` bash
- pacman -S docker
- systemctl enable docker.service
- systemctl start docker.service
- gpasswd -a docker
- newgrp docker
- ```
-
-2. Start Docker container:
-
- ``` bash
- docker run --name mattermost-dev -d --publish 8065:80 mattermost/platform
- ```
-
-3. When Docker is done fetching the image, open http://localhost:8065/ in your browser.
-
-### Additional Notes ###
-- If you want to work with the latest master from the repository (i.e. not a stable release) you can run the cmd:
-
- ``` bash
- docker run --name mattermost-dev -d --publish 8065:80 mattermost/platform:dev
- ```
-
-- Instructions on how to update your Docker image are found below.
-
-- If you wish to remove mattermost-dev use:
-
- ``` bash
- docker stop mattermost-dev
- docker rm -v mattermost-dev
- ```
-
-- If you wish to gain access to a shell on the container use:
-
- ``` bash
- docker exec -ti mattermost-dev /bin/bash
- ```
-
-## Configuration Settings
-
-There are a few configuration settings you might want to adjust when setting up your instance of Mattermost. You can edit them in `config.json` or `config_docker.json` if you're running a Docker instance.
-
-* *EmailSettings*:*ByPassEmail* - If this is set to true, then users on the system will not need to verify their email addresses when signing up. In addition, no emails will ever be sent.
-* *ServiceSettings*:*UseLocalStorage* - If this is set to true, then your Mattermost server will store uploaded files in the storage directory specified by *StorageDirectory*. *StorageDirectory* must be set if *UseLocalStorage* is set to true.
-* *ServiceSettings*:*StorageDirectory* - The file path where files will be stored locally if *UseLocalStorage* is set to true. The operating system user that is running the Mattermost application must have read and write privileges to this directory.
-* *AWSSettings*:*S3*\* - If *UseLocalStorage* is set to false, and the S3 settings are configured here, then Mattermost will store files in the provided S3 bucket.
-
-### (Recommended) Enable Email
-
-The default single-container Docker instance for Mattermost is designed for product evaluation, and sets `ByPassEmail=true` so the product can run without enabling email, when doing so maybe difficult.
-
-To see the product's full functionality, [enabling SMTP email is recommended](SMTP-Email-Setup.md).
-
-## Upgrading Mattermost
-
-### Docker ###
-To upgrade your Docker image to a preview of the latest stable release (NOTE: this will erase all data in the Docker container, including the database):
-
-1. Stop your Docker container by running:
-
- ``` bash
- docker stop mattermost-dev
- ```
-2. Delete your Docker container by running:
-
- ``` bash
- docker rm mattermost-dev
- ```
-3. Update your Docker image by running:
-
- ``` bash
- docker pull mattermost/platform
- ```
-4. Start your Docker container by running:
-
- ``` bash
- docker run --name mattermost-dev -d --publish 8065:80 mattermost/platform
- ```
-
-To upgrade to the latest development build on master from the repository replace `mattermost/platform` with `mattermost/platform:dev` in the instructions 3) and 4) above.
diff --git a/doc/install/LDAP-Setup.md b/doc/install/LDAP-Setup.md
deleted file mode 100644
index a619e645e..000000000
--- a/doc/install/LDAP-Setup.md
+++ /dev/null
@@ -1,34 +0,0 @@
-## LDAP Setup
-
-LDAP authentication is available in the Enterprise version of Mattermost.
-### How to enable LDAP
-
-After installing Mattermost:
-
-1. Create a team using email authentication
- - Note: The first account used to create a team will be the “System Administrator” account, used to configure settings for your Mattermost site
- 3. Go to Main Menu (the three dots near your team name in the top left of your screen) > **System Console**
- 4. Go to LDAP Settings
- 5. Fill in the fields to set up Mattermost authentication with your LDAP server
-
- After LDAP has been enabled, users should be able to go to your Mattermost site and sign in using their LDAP credentials. The “LDAP username” will be the attribute set in the “Id Attribute” field.
-
- **Note: In the initial implementation of LDAP, if a user attribute changes on the LDAP server it will be updated the next time the user enters their credentials to log in to Mattermost. This includes if a user is made inactive or removed from an LDAP server. Synchronization with LDAP servers is planned in a future release.**
-
-### Switching System Administrator account to LDAP authentication
-
-If you would like to switch your System Administrator account to LDAP authentication, it is recommended you do the following:
-
-1. Create a new account using LDAP
- - Note: If your LDAP credentials use the same email address as your System Administrator account, it is recommended you change the email on your System Administrator account by going to Main Menu -> Account Settings -> General -> Email. This will free up the email address so it can be used by the LDAP account.
- 2. Sign in to your email based System Administrator account
- 3. Navigate to the System Console
- 4. Go to Teams -> Team Name -> Users, and find your new LDAP user account
- 5. Promote your LDAP account to “System Administrator” using the dropdown menu beside the username
- 6. Log in with your LDAP account
- 7. Navigate to the System Console
- 8. Go to Teams -> Team Name -> Users, and find your old email based System Administrator account
- 9. Make the email account “Inactive” using the dropdown beside the username
-
- **Note: If you make the email account inactive without promoting another account to System Administrator, you will lose your System Administrator privileges. This can be fixed by promoting another account to System Administrator using the command line.**
-
diff --git a/doc/install/Production-Debian.md b/doc/install/Production-Debian.md
deleted file mode 100644
index ffe3d79e8..000000000
--- a/doc/install/Production-Debian.md
+++ /dev/null
@@ -1,332 +0,0 @@
-# (Community Guide) Production Installation on Debian Jessie (x64)
-
-Note: This install guide has been generously contributed by the Mattermost community. It has not yet been tested by the core team. We have [an open ticket](https://github.com/mattermost/platform/issues/1185) requesting community help testing and improving this guide. Once the community has confirmed we have multiple deployments on these instructions, we can update the text here. If you're installing on Debian anyway, please let us know any issues or instruciton improvements? https://github.com/mattermost/platform/issues/1185
-
-
-## Install Debian Jessie (x64)
-1. Set up 3 machines with Debian Jessie with 2GB of RAM or more. The servers will be used for the Load Balancer, Mattermost (this must be x64 to use pre-built binaries), and Database.
-1. This can also be set up all on a single server for small teams:
- * I have a Mattermost instance running on a single Debian Jessie server with 1GB of ram and 30 GB SSD
- * This has been working in production for ~20 users without issue.
- * The only difference in the below instructions for this method is to do everything on the same server
-1. Make sure the system is up to date with the most recent security patches.
- * ``` sudo apt-get update```
- * ``` sudo apt-get upgrade```
-
-
-## Set up Database Server
-1. For the purposes of this guide we will assume this server has an IP address of 10.10.10.1
-1. Install PostgreSQL 9.3+ (or MySQL 5.6+)
- * ``` sudo apt-get install postgresql postgresql-contrib```
-1. PostgreSQL created a user account called `postgres`. You will need to log into that account with:
- * ``` sudo -i -u postgres```
-1. You can get a PostgreSQL prompt by typing:
- * ``` psql```
-1. Create the Mattermost database by typing:
- * ```postgres=# CREATE DATABASE mattermost;```
-1. Create the Mattermost user by typing:
- * ```postgres=# CREATE USER mmuser WITH PASSWORD 'mmuser_password';```
-1. Grant the user access to the Mattermost database by typing:
- * ```postgres=# GRANT ALL PRIVILEGES ON DATABASE mattermost to mmuser;```
-1. You can exit out of PostgreSQL by typing:
- * ```postgre=# \q```
-1. You can exit the postgres account by typing:
- * ``` exit```
-1. Allow Postgres to listen on all assigned IP Addresses
- * ```sudo vi /etc/postgresql/9.3/main/postgresql.conf```
- * Uncomment 'listen_addresses' and change 'localhost' to '*'
-1. Alter pg_hba.conf to allow the mattermost server to talk to the postgres database
- * ```sudo vi /etc/postgresql/9.3/main/pg_hba.conf```
- * Add the following line to the 'IPv4 local connections'
- * host all all 10.10.10.2/32 md5
-1. Reload Postgres database
- * ```sudo /etc/init.d/postgresql reload```
-1. Attempt to connect with the new created user to verify everything looks good
- * ```psql --host=10.10.10.1 --dbname=mattermost --username=mmuser --password```
- * ```mattermost=> \q```
-
-
-## Set up Mattermost Server
-1. For the purposes of this guide we will assume this server has an IP address of 10.10.10.2
-1. Download the latest Mattermost Server by typing:
- * ``` wget https://github.com/mattermost/platform/releases/download/v1.3.0/mattermost.tar.gz```
-1. Install Mattermost under /opt
- * Unzip the Mattermost Server by typing:
- * ``` tar -xvzf mattermost.tar.gz```
- * ``` sudo mv mattermost /opt```
-1. Create the storage directory for files. We assume you will have attached a large drive for storage of images and files. For this setup we will assume the directory is located at `/opt/mattermost/data`.
- * Create the directory by typing:
- * ``` sudo mkdir -p /opt/mattermost/data```
-1. Create a system user and group called mattermost that will run this service
- * ``` sudo useradd -r mattermost -U```
- * Set the mattermost account as the directory owner by typing:
- * ``` sudo chown -R mattermost:mattermost /opt/mattermost```
- * ``` sudo chmod -R g+w /opt/mattermost```
- * Add yourself to the mattermost group to ensure you can edit these files:
- * ``` sudo usermod -aG mattermost USERNAME```
-1. Configure Mattermost Server by editing the config.json file at /opt/mattermost/config
- * ``` cd /opt/mattermost/config```
- * Edit the file by typing:
- * ``` vi config.json```
- * replace `DriverName": "mysql"` with `DriverName": "postgres"`
- * replace `"DataSource": "mmuser:mostest@tcp(dockerhost:3306)/mattermost_test?charset=utf8mb4,utf8"` with `"DataSource": "postgres://mmuser:mmuser_password@10.10.10.1:5432/mattermost?sslmode=disable&connect_timeout=10"`
- * Optionally you may continue to edit configuration settings in `config.json` or use the System Console described in a later section to finish the configuration.
-1. Test the Mattermost Server
- * ``` cd /opt/mattermost/bin```
- * Run the Mattermost Server by typing:
- * ``` ./platform```
- * You should see a console log like `Server is listening on :8065` letting you know the service is running.
- * Stop the server for now by typing `ctrl-c`
-1. Setup Mattermost to use the systemd init daemon which handles supervision of the Mattermost process
- * ``` sudo touch /etc/init.d/mattermost```
- * ``` sudo vi /etc/init.d/mattermost```
- * Copy the following lines into `/etc/init.d/mattermost`
-```
-#! /bin/sh
-### BEGIN INIT INFO
-# Provides: mattermost
-# Required-Start: $network $syslog
-# Required-Stop: $network $syslog
-# Default-Start: 2 3 4 5
-# Default-Stop: 0 1 6
-# Short-Description: Mattermost Group Chat
-# Description: Mattermost: An open-source Slack
-### END INIT INFO
-
-PATH=/sbin:/usr/sbin:/bin:/usr/bin
-DESC="Mattermost"
-NAME=mattermost
-MATTERMOST_ROOT=/opt/mattermost
-MATTERMOST_GROUP=mattermost
-MATTERMOST_USER=mattermost
-DAEMON="$MATTERMOST_ROOT/bin/platform"
-PIDFILE=/var/run/$NAME.pid
-SCRIPTNAME=/etc/init.d/$NAME
-
-. /lib/lsb/init-functions
-
-do_start() {
- # Return
- # 0 if daemon has been started
- # 1 if daemon was already running
- # 2 if daemon could not be started
- start-stop-daemon --start --quiet \
- --chuid $MATTERMOST_USER:$MATTERMOST_GROUP --chdir $MATTERMOST_ROOT --background \
- --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
- || return 1
- start-stop-daemon --start --quiet \
- --chuid $MATTERMOST_USER:$MATTERMOST_GROUP --chdir $MATTERMOST_ROOT --background \
- --make-pidfile --pidfile $PIDFILE --exec $DAEMON \
- || return 2
-}
-
-#
-# Function that stops the daemon/service
-#
-do_stop() {
- # Return
- # 0 if daemon has been stopped
- # 1 if daemon was already stopped
- # 2 if daemon could not be stopped
- # other if a failure occurred
- start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 \
- --pidfile $PIDFILE --exec $DAEMON
- RETVAL="$?"
- [ "$RETVAL" = 2 ] && return 2
- # Wait for children to finish too if this is a daemon that forks
- # and if the daemon is only ever run from this initscript.
- # If the above conditions are not satisfied then add some other code
- # that waits for the process to drop all resources that could be
- # needed by services started subsequently. A last resort is to
- # sleep for some time.
- start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 \
- --exec $DAEMON
- [ "$?" = 2 ] && return 2
- # Many daemons don't delete their pidfiles when they exit.
- rm -f $PIDFILE
- return "$RETVAL"
-}
-
-case "$1" in
-start)
- [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
- do_start
- case "$?" in
- 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
- 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
- esac
- ;;
-stop)
- [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
- do_stop
- case "$?" in
- 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
- 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
- esac
- ;;
-status)
- status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
- ;;
-restart|force-reload)
- #
- # If the "reload" option is implemented then remove the
- # 'force-reload' alias
- #
- log_daemon_msg "Restarting $DESC" "$NAME"
- do_stop
- case "$?" in
- 0|1)
- do_start
- case "$?" in
- 0) log_end_msg 0 ;;
- 1) log_end_msg 1 ;; # Old process is still running
- *) log_end_msg 1 ;; # Failed to start
- esac
- ;;
- *)
- # Failed to stop
- log_end_msg 1
- ;;
- esac
- ;;
-*)
- echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
- exit 3
- ;;
-esac
-
-exit 0
-```
- * Make sure that /etc/init.d/mattermost is executable
- * ``` sudo chmod +x /etc/init.d/mattermost```
-1. On reboot, systemd will generate a unit file from the headers in this init script and install it in `/run/systemd/generator.late/`
-
-## Set up Nginx Server
-1. For the purposes of this guide we will assume this server has an IP address of 10.10.10.3
-1. We use Nginx for proxying request to the Mattermost Server. The main benefits are:
- * SSL termination
- * http to https redirect
- * Port mapping :80 to :8065
- * Standard request logs
-1. Install Nginx on Debian with
- * ``` sudo apt-get install nginx```
-1. Verify Nginx is running
- * ``` curl http://10.10.10.3```
- * You should see a *Welcome to nginx!* page
-1. You can manage Nginx with the following commands
- * ``` sudo service nginx stop```
- * ``` sudo service nginx start```
- * ``` sudo service nginx restart```
-1. Map a FQDN (fully qualified domain name) like **mattermost.example.com** to point to the Nginx server.
-1. Configure Nginx to proxy connections from the internet to the Mattermost Server
- * Create a configuration for Mattermost
- * ``` sudo touch /etc/nginx/sites-available/mattermost```
- * Below is a sample configuration with the minimum settings required to configure Mattermost
-```
- server {
- server_name mattermost.example.com;
-
- location / {
- client_max_body_size 50M;
- proxy_set_header Upgrade $http_upgrade;
- proxy_set_header Connection "upgrade";
- proxy_set_header Host $http_host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_set_header X-Forwarded-Proto $scheme;
- proxy_set_header X-Frame-Options SAMEORIGIN;
- proxy_pass http://10.10.10.2:8065;
- }
- }
-```
- * Remove the existing file with
- * ``` sudo rm /etc/nginx/sites-enabled/default```
- * Link the mattermost config by typing:
- * ```sudo ln -s /etc/nginx/sites-available/mattermost /etc/nginx/sites-enabled/mattermost```
- * Restart Nginx by typing:
- * ``` sudo service nginx restart```
- * Verify you can see Mattermost thru the proxy by typing:
- * ``` curl http://localhost```
- * You should see a page titles *Mattermost - Signup*
-
-## Set up Nginx with SSL (Recommended)
-1. You will need a SSL cert from a certificate authority.
-1. For simplicity we will generate a test certificate.
- * ``` mkdir ~/cert```
- * ``` cd ~/cert```
- * ``` sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mattermost.key -out mattermost.crt```
- * Input the following info
-```
- Country Name (2 letter code) [AU]:US
- State or Province Name (full name) [Some-State]:California
- Locality Name (eg, city) []:Palo Alto
- Organization Name (eg, company) [Internet Widgits Pty Ltd]:Example LLC
- Organizational Unit Name (eg, section) []:
- Common Name (e.g. server FQDN or YOUR name) []:mattermost.example.com
- Email Address []:admin@mattermost.example.com
-```
-1. Run `openssl dhparam -out dhparam.pem 4096` (it will take some time).
-1. Modify the file at `/etc/nginx/sites-available/mattermost` and add the following lines:
-```
- server {
- listen 80;
- server_name mattermost.example.com;
- return 301 https://$server_name$request_uri;
- }
-
- server {
- listen 443 ssl;
- server_name mattermost.example.com;
-
- ssl on;
- ssl_certificate /home/ubuntu/cert/mattermost.crt;
- ssl_certificate_key /home/ubuntu/cert/mattermost.key;
- ssl_dhparam /home/ubuntu/cert/dhparam.pem;
- ssl_session_timeout 5m;
- ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
- ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
- ssl_prefer_server_ciphers on;
- ssl_session_cache shared:SSL:10m;
-
- location / {
- gzip off;
- proxy_set_header X-Forwarded-Ssl on;
- client_max_body_size 50M;
- proxy_set_header Upgrade $http_upgrade;
- proxy_set_header Connection "upgrade";
- proxy_set_header Host $http_host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_set_header X-Forwarded-Proto $scheme;
- proxy_set_header X-Frame-Options SAMEORIGIN;
- proxy_pass http://10.10.10.2:8065;
- }
- }
-```
-
-
-## Finish Mattermost Server setup
-1. Navigate to https://mattermost.example.com and create a team and user.
-1. The first user in the system is automatically granted the `system_admin` role, which gives you access to the System Console.
-1. From the `town-square` channel click the dropdown and choose the `System Console` option
-1. Update Email Settings. We recommend using an email sending service. The example below assumes AmazonSES.
- * Set *Send Email Notifications* to true
- * Set *Require Email Verification* to true
- * Set *Feedback Name* to `No-Reply`
- * Set *Feedback Email* to `mattermost@example.com`
- * Set *SMTP Username* to `AFIADTOVDKDLGERR`
- * Set *SMTP Password* to `DFKJoiweklsjdflkjOIGHLSDFJewiskdjf`
- * Set *SMTP Server* to `email-smtp.us-east-1.amazonaws.com`
- * Set *SMTP Port* to `465`
- * Set *Connection Security* to `TLS`
- * Save the Settings
-1. Update File Settings
- * Change *Local Directory Location* from `./data/` to `/mattermost/data`
-1. Update Log Settings.
- * Set *Log to The Console* to false
-1. Update Rate Limit Settings.
- * Set *Vary By Remote Address* to false
- * Set *Vary By HTTP Header* to X-Real-IP
-1. Feel free to modify other settings.
-1. Restart the Mattermost Service by typing:
- * ``` sudo restart mattermost```
diff --git a/doc/install/Production-RHEL6.md b/doc/install/Production-RHEL6.md
deleted file mode 100644
index d73295ebc..000000000
--- a/doc/install/Production-RHEL6.md
+++ /dev/null
@@ -1,231 +0,0 @@
-# Production Installation on Red Hat Enterprise Linux 6.6
-
-## Install Red Hat Enterprise Linux (x64) 6.6
-1. Set up 3 machines with RHEL with 2GB of RAM or more. The servers will be used for the Load Balancer, Mattermost (this must be x64 to use pre-built binaries), and Database.
- - **Optional:** You can also use a single machine for all 3 components in this install guide, depending on the standards of your data center.
-2. Make sure the system is up to date with the most recent security patches.
- * ``` sudo yum update```
- * ``` sudo yum upgrade```
-
-## Set up Database Server
-1. For the purposes of this guide we will assume this server has an IP address of `10.10.10.1`
- - **Optional:** if installing on the same machine substitute `10.10.10.1` with `127.0.0.1`
-1. Install PostgreSQL 9.4+ (or MySQL 5.6+)
- * ``` sudo yum install http://yum.postgresql.org/9.4/redhat/rhel-6-x86_64/pgdg-redhat94-9.4-1.noarch.rpm```
- * ``` sudo yum install postgresql94-server postgresql94-contrib```
- * ``` sudo service postgresql-9.4 initdb```
- * ``` sudo chkconfig postgresql-9.4 on```
- * ``` sudo service postgresql-9.4 start```
-1. PostgreSQL created a user account called `postgres`. You will need to log into that account with:
- * ``` sudo -i -u postgres```
-1. You can get a PostgreSQL prompt by typing:
- * ``` psql```
-1. Create the Mattermost database by typing:
- * ```postgres=# CREATE DATABASE mattermost;```
-1. Create the Mattermost user by typing:
- * ```postgres=# CREATE USER mmuser WITH PASSWORD 'mmuser_password';```
-1. Grant the user access to the Mattermost database by typing:
- * ```postgres=# GRANT ALL PRIVILEGES ON DATABASE mattermost to mmuser;```
-1. You can exit out of PostgreSQL by typing:
- * ```postgres=# \q```
-1. You can exit the Postgres account by typing:
- * ``` exit```
-1. Allow Postgres to listen on all assigned IP Addresses:
- * ```sudo vi /var/lib/pgsql/9.4/data/postgresql.conf```
- * Uncomment 'listen_addresses' and change 'localhost' to '*'
-1. Alter `pg_hba.conf` to allow the Mattermost Server to talk to the Postgres database:
- * ```sudo vi /var/lib/pgsql/9.4/data/pg_hba.conf```
- * Add the following line to the 'IPv4 local connections':
- * host all all 10.10.10.2/32 md5
-1. Reload Postgres database:
- * ```sudo service postgresql-9.4 restart```
-1. Attempt to connect with the new created user to verify everything looks good:
- * ```psql --host=10.10.10.1 --dbname=mattermost --username=mmuser --password```
- * ```mattermost=> \q```
-
-
-## Set up Mattermost Server
-1. For the purposes of this guide we will assume this server has an IP address of `10.10.10.2`
-1. Download the latest Mattermost Server by typing:
- * ``` wget https://github.com/mattermost/platform/releases/download/v1.3.0/mattermost.tar.gz```
-1. Install Mattermost under `/opt`
- * Unzip the Mattermost Server by typing:
- * ``` tar -xvzf mattermost.tar.gz```
- * ``` sudo mv mattermost /opt```
-1. Create the storage directory for files. We assume you will have attached a large drive for storage of images and files. For this setup we will assume the directory is located at `/opt/mattermost/data`.
- * Create the directory by typing:
- * ``` sudo mkdir -p /opt/mattermost/data```
-1. Create a system user and group called mattermost that will run this service:
- * ``` sudo useradd -r mattermost -U```
- * Set the Mattermost account as the directory owner by typing:
- * ``` sudo chown -R mattermost:mattermost /opt/mattermost```
- * ``` sudo chmod -R g+w /opt/mattermost```
- * Add yourself to the mattermost group to ensure you can edit these files:
- * ``` sudo usermod -a -G mattermost USERNAME```
-1. Configure Mattermost Server by editing the `config.json` file at `/opt/mattermost/config`
- * ``` cd /opt/mattermost/config```
- * Edit the file by typing:
- * ``` sudo vi config.json```
- * replace `DriverName": "mysql"` with `DriverName": "postgres"`
- * replace `"DataSource": "mmuser:mostest@tcp(dockerhost:3306)/mattermost_test?charset=utf8mb4,utf8"` with `"DataSource": "postgres://mmuser:mmuser_password@10.10.10.1:5432/mattermost?sslmode=disable&connect_timeout=10"`
- * Optionally you may continue to edit configuration settings in `config.json` or use the System Console described in a later section to finish the configuration.
-1. Test the Mattermost Server
- * ``` cd /opt/mattermost/bin```
- * Run the Mattermost Server by typing:
- * ``` sudo su mattermost```
- * ``` ./platform```
- * You should see a console log like `Server is listening on :8065` letting you know the service is running.
- * Stop the server for now by typing `Ctrl-C`
-1. Setup Mattermost to use the Upstart daemon which handles supervision of the Mattermost process.
- * ``` sudo touch /etc/init/mattermost.conf```
- * ``` sudo vi /etc/init/mattermost.conf```
- * Copy the following lines into `/etc/init/mattermost.conf`
-```
-start on runlevel [2345]
-stop on runlevel [016]
-respawn
-chdir /opt/mattermost
-exec bin/platform
-```
- * You can manage the process by typing:
- * ``` sudo start mattermost```
- * Verify the service is running by typing:
- * ``` curl http://10.10.10.2:8065```
- * You should see a page titles *Mattermost - Signup*
- * You can also stop the process by running the command ` sudo stop mattermost`, but we will skip this step for now.
-
-## Set up Nginx Server
-1. For the purposes of this guide we will assume this server has an IP address of `10.10.10.3`
-1. We use Nginx for proxying request to the Mattermost Server. The main benefits are:
- * SSL termination
- * HTTP to HTTPS redirect
- * Port mapping :80 to :8065
- * Standard request logs
-1. Install Nginx on RHEL with
- * ``` sudo vi /etc/yum.repos.d/nginx.repo```
- * Copy the below into the file
-```
-[nginx]
-name=nginx repo
-baseurl=http://nginx.org/packages/rhel/6/$basearch/
-gpgcheck=0
-enabled=1
-```
- * ``` sudo yum install nginx.x86_64```
- * ``` sudo service nginx start```
- * ``` sudo chkconfig nginx on```
-1. Verify Nginx is running
- * ``` curl http://10.10.10.3```
- * You should see a *Welcome to nginx!* page
-1. Map a FQDN (fully qualified domain name) like **mattermost.example.com** to point to the Nginx server.
-1. Configure Nginx to proxy connections from the internet to the Mattermost Server
- * Create a configuration for Mattermost
- * ``` sudo touch /etc/nginx/conf.d/mattermost.conf```
- * Below is a sample configuration with the minimum settings required to configure Mattermost
-```
- server {
- server_name mattermost.example.com;
-
- location / {
- client_max_body_size 50M;
- proxy_set_header Upgrade $http_upgrade;
- proxy_set_header Connection "upgrade";
- proxy_set_header Host $http_host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_set_header X-Forwarded-Proto $scheme;
- proxy_set_header X-Frame-Options SAMEORIGIN;
- proxy_pass http://10.10.10.2:8065;
- }
- }
-```
- * Remove the existing file with:
- * ``` sudo mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak```
- * Restart Nginx by typing:
- * ``` sudo service nginx restart```
- * Verify you can see Mattermost thru the proxy by typing:
- * ``` curl http://localhost```
- * You should see a page titles *Mattermost - Signup*
- * Not seeing the page? Look for errors with ``` sudo cat /var/log/audit/audit.log | grep nginx | grep denied```
- * **Optional** if you're running on the same server as the Mattermost server and see 502 errors you may need to run `sudo setsebool -P httpd_can_network_connect true` because SELinux is preventing the connection
-
-## Set up Nginx with SSL (Recommended)
-1. You will need a SSL cert from a certificate authority.
-1. For simplicity we will generate a test certificate.
- * ``` mkdir /top/mattermost/cert```
- * ``` cd /top/mattermost/cert```
- * ``` sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mattermost.key -out mattermost.crt```
- * Input the following info
-```
- Country Name (2 letter code) [AU]:US
- State or Province Name (full name) [Some-State]:California
- Locality Name (eg, city) []:Palo Alto
- Organization Name (eg, company) [Internet Widgits Pty Ltd]:Example LLC
- Organizational Unit Name (eg, section) []:
- Common Name (e.g. server FQDN or YOUR name) []:mattermost.example.com
- Email Address []:admin@mattermost.example.com
-```
-1. Run `openssl dhparam -out dhparam.pem 4096` (it will take some time).
-1. Modify the file at `/etc/nginx/conf.d/mattermost.conf` and add the following lines
-```
- server {
- listen 80;
- server_name mattermost.example.com;
- return 301 https://$server_name$request_uri;
- }
-
- server {
- listen 443 ssl;
- server_name mattermost.example.com;
-
- ssl on;
- ssl_certificate /home/ubuntu/cert/mattermost.crt;
- ssl_certificate_key /home/ubuntu/cert/mattermost.key;
- ssl_dhparam /home/ubuntu/cert/dhparam.pem;
- ssl_session_timeout 5m;
- ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
- ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
- ssl_prefer_server_ciphers on;
- ssl_session_cache shared:SSL:10m;
-
- location / {
- gzip off;
- proxy_set_header X-Forwarded-Ssl on;
- client_max_body_size 50M;
- proxy_set_header Upgrade $http_upgrade;
- proxy_set_header Connection "upgrade";
- proxy_set_header Host $http_host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_set_header X-Forwarded-Proto $scheme;
- proxy_set_header X-Frame-Options SAMEORIGIN;
- proxy_pass http://10.10.10.2:8065;
- }
- }
-```
-
-## Finish Mattermost Server setup
-1. Navigate to `https://mattermost.example.com` and create a team and user.
-1. The first user in the system is automatically granted the `system_admin` role, which gives you access to the System Console.
-1. From the `town-square` channel click the dropdown and choose the `System Console` option
-1. Update Email Settings. We recommend using an email sending service. The example below assumes AmazonSES.
- * Set *Send Email Notifications* to true
- * Set *Require Email Verification* to true
- * Set *Feedback Name* to `No-Reply`
- * Set *Feedback Email* to `mattermost@example.com`
- * Set *SMTP Username* to `AFIADTOVDKDLGERR`
- * Set *SMTP Password* to `DFKJoiweklsjdflkjOIGHLSDFJewiskdjf`
- * Set *SMTP Server* to `email-smtp.us-east-1.amazonaws.com`
- * Set *SMTP Port* to `465`
- * Set *Connection Security* to `TLS`
- * Save the Settings
-1. Update File Settings:
- * Change *Local Directory Location* from `./data/` to `/opt/mattermost/data`
-1. Update Log Settings:
- * Set *Log to The Console* to `false`
-1. Update Rate Limit Settings:
- * Set *Vary By Remote Address* to false
- * Set *Vary By HTTP Header* to X-Real-IP
-1. Feel free to modify other settings
-1. Restart the Mattermost Service by typing:
- * ``` sudo restart mattermost```
diff --git a/doc/install/Production-RHEL7.md b/doc/install/Production-RHEL7.md
deleted file mode 100644
index 4e003dd46..000000000
--- a/doc/install/Production-RHEL7.md
+++ /dev/null
@@ -1,238 +0,0 @@
-# Production Installation on Red Hat Enterprise Linux 7.1+
-
-## Install Red Hat Enterprise Linux (x64) 7.1+
-1. Set up 3 machines with RHEL with 2GB of RAM or more. The servers will be used for the Load Balancer, Mattermost (this must be x64 to use pre-built binaries), and Database.
- - **Optional:** You can also use a single machine for all 3 components in this install guide, depending on the standards of your data center.
-2. Make sure the system is up to date with the most recent security patches.
- * ``` sudo yum update```
- * ``` sudo yum upgrade```
-
-## Set up Database Server
-1. For the purposes of this guide we will assume this server has an IP address of `10.10.10.1`
- - **Optional:** if installing on the same machine substitute `10.10.10.1` with `127.0.0.1`
-1. Install PostgreSQL 9.4+ (or MySQL 5.6+)
- * ``` sudo yum install http://yum.postgresql.org/9.4/redhat/rhel-6-x86_64/pgdg-redhat94-9.4-1.noarch.rpm```
- * ``` sudo yum install postgresql94-server postgresql94-contrib```
- * ``` sudo /usr/pgsql-9.4/bin/postgresql94-setup initdb```
- * ``` sudo systemctl enable postgresql-9.4.service```
- * ``` sudo systemctl start postgresql-9.4.service```
-1. PostgreSQL created a user account called `postgres`. You will need to log into that account with:
- * ``` sudo -i -u postgres```
-1. You can get a PostgreSQL prompt by typing:
- * ``` psql```
-1. Create the Mattermost database by typing:
- * ```postgres=# CREATE DATABASE mattermost;```
-1. Create the Mattermost user by typing:
- * ```postgres=# CREATE USER mmuser WITH PASSWORD 'mmuser_password';```
-1. Grant the user access to the Mattermost database by typing:
- * ```postgres=# GRANT ALL PRIVILEGES ON DATABASE mattermost to mmuser;```
-1. You can exit out of PostgreSQL by typing:
- * ```postgres=# \q```
-1. You can exit the Postgres account by typing:
- * ``` exit```
-1. Allow Postgres to listen on all assigned IP Addresses:
- * ```sudo vi /var/lib/pgsql/9.4/data/postgresql.conf```
- * Uncomment 'listen_addresses' and change 'localhost' to '*'
-1. Alter `pg_hba.conf` to allow the Mattermost Server to talk to the Postgres database:
- * ```sudo vi /var/lib/pgsql/9.4/data/pg_hba.conf```
- * Add the following line to the 'IPv4 local connections':
- * host all all 10.10.10.2/32 md5
-1. Reload Postgres database:
- * ```sudo systemctl reload postgresql-9.4.service```
-1. Attempt to connect with the new created user to verify everything looks good:
- * ```psql --host=10.10.10.1 --dbname=mattermost --username=mmuser --password```
- * ```mattermost=> \q```
-
-
-## Set up Mattermost Server
-1. For the purposes of this guide we will assume this server has an IP address of `10.10.10.2`
-1. Download the latest Mattermost Server by typing:
- * ``` wget https://github.com/mattermost/platform/releases/download/v1.3.0/mattermost.tar.gz```
-1. Install Mattermost under `/opt`
- * Unzip the Mattermost Server by typing:
- * ``` tar -xvzf mattermost.tar.gz```
- * ``` sudo mv mattermost /opt```
-1. Create the storage directory for files. We assume you will have attached a large drive for storage of images and files. For this setup we will assume the directory is located at `/opt/mattermost/data`.
- * Create the directory by typing:
- * ``` sudo mkdir -p /opt/mattermost/data```
-1. Create a system user and group called mattermost that will run this service:
- * ``` sudo useradd -r mattermost -U```
- * Set the Mattermost account as the directory owner by typing:
- * ``` sudo chown -R mattermost:mattermost /opt/mattermost```
- * ``` sudo chmod -R g+w /opt/mattermost```
- * Add yourself to the mattermost group to ensure you can edit these files:
- * ``` sudo usermod -aG mattermost USERNAME```
-1. Configure Mattermost Server by editing the `config.json` file at `/opt/mattermost/config`
- * ``` cd /opt/mattermost/config```
- * Edit the file by typing:
- * ``` sudo vi config.json```
- * replace `DriverName": "mysql"` with `DriverName": "postgres"`
- * replace `"DataSource": "mmuser:mostest@tcp(dockerhost:3306)/mattermost_test?charset=utf8mb4,utf8"` with `"DataSource": "postgres://mmuser:mmuser_password@10.10.10.1:5432/mattermost?sslmode=disable&connect_timeout=10"`
- * Optionally you may continue to edit configuration settings in `config.json` or use the System Console described in a later section to finish the configuration.
-1. Test the Mattermost Server
- * ``` cd /opt/mattermost/bin```
- * Run the Mattermost Server by typing:
- * ``` ./platform```
- * You should see a console log like `Server is listening on :8065` letting you know the service is running.
- * Stop the server for now by typing `Ctrl-C`
-1. Set up Mattermost to use the systemd init daemon which handles supervision of the Mattermost process:
- * ``` sudo touch /etc/systemd/system/mattermost.service```
- * ``` sudo vi /etc/systemd/system/mattermost.service```
- * Copy the following lines into `/etc/systemd/system/mattermost.service`
-```
-[Unit]
-Description=Mattermost
-After=syslog.target network.target
-
-[Service]
-Type=simple
-WorkingDirectory=/opt/mattermost/bin
-User=mattermost
-ExecStart=/opt/mattermost/bin/platform
-PIDFile=/var/spool/mattermost/pid/master.pid
-
-[Install]
-WantedBy=multi-user.target
-```
- * Make sure the service is executable with ``` sudo chmod 664 /etc/systemd/system/mattermost.service```
- * Reload the services with `sudo systemctl daemon-reload`
- * Start Mattermost service with `sudo systemctl start mattermost.service`
- * `sudo chkconfig mattermost on`
- * Start server on reboot `sudo systemctl enable mattermost.service`
-
-
-## Set up Nginx Server
-1. For the purposes of this guide we will assume this server has an IP address of `10.10.10.3`
-1. We use Nginx for proxying request to the Mattermost Server. The main benefits are:
- * SSL termination
- * HTTP to HTTPS redirect
- * Port mapping :80 to :8065
- * Standard request logs
-1. Install Nginx on RHEL with
- * ``` sudo vi /etc/yum.repos.d/nginx.repo```
- * Copy the below into the file
-```
-[nginx]
-name=nginx repo
-baseurl=http://nginx.org/packages/rhel/7/$basearch/
-gpgcheck=0
-enabled=1
-```
- * ``` sudo yum install nginx.x86_64```
- * ``` sudo service nginx start```
- * ``` sudo chkconfig nginx on```
-1. Verify Nginx is running
- * ``` curl http://10.10.10.3```
- * You should see a *Welcome to nginx!* page
-1. Map a FQDN (fully qualified domain name) like **mattermost.example.com** to point to the Nginx server.
-1. Configure Nginx to proxy connections from the internet to the Mattermost Server
- * Create a configuration for Mattermost
- * ``` sudo touch /etc/nginx/conf.d/mattermost.conf```
- * Below is a sample configuration with the minimum settings required to configure Mattermost
-```
- server {
- server_name mattermost.example.com;
-
- location / {
- client_max_body_size 50M;
- proxy_set_header Upgrade $http_upgrade;
- proxy_set_header Connection "upgrade";
- proxy_set_header Host $http_host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_set_header X-Forwarded-Proto $scheme;
- proxy_set_header X-Frame-Options SAMEORIGIN;
- proxy_pass http://10.10.10.2:8065;
- }
- }
-```
- * Remove the existing file with:
- * ``` sudo mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak```
- * Restart Nginx by typing:
- * ``` sudo service nginx restart```
- * Verify you can see Mattermost thru the proxy by typing:
- * ``` curl http://localhost```
- * You should see a page titles *Mattermost - Signup*
- * Not seeing the page? Look for errors with ``` sudo cat /var/log/audit/audit.log | grep nginx | grep denied```
- * **Optional** if you're running on the same server as the Mattermost server and see 502 errors you may need to run `sudo setsebool -P httpd_can_network_connect true` because SELinux is preventing the connection
-
-## Set up Nginx with SSL (Recommended)
-1. You will need a SSL cert from a certificate authority.
-1. For simplicity we will generate a test certificate.
- * ``` mkdir /top/mattermost/cert```
- * ``` cd /top/mattermost/cert```
- * ``` sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mattermost.key -out mattermost.crt```
- * Input the following info
-```
- Country Name (2 letter code) [AU]:US
- State or Province Name (full name) [Some-State]:California
- Locality Name (eg, city) []:Palo Alto
- Organization Name (eg, company) [Internet Widgits Pty Ltd]:Example LLC
- Organizational Unit Name (eg, section) []:
- Common Name (e.g. server FQDN or YOUR name) []:mattermost.example.com
- Email Address []:admin@mattermost.example.com
-```
-1. Run `openssl dhparam -out dhparam.pem 4096` (it will take some time).
-1. Modify the file at `/etc/nginx/conf.d/mattermost.conf` and add the following lines
-```
- server {
- listen 80;
- server_name mattermost.example.com;
- return 301 https://$server_name$request_uri;
- }
-
- server {
- listen 443 ssl;
- server_name mattermost.example.com;
-
- ssl on;
- ssl_certificate /home/ubuntu/cert/mattermost.crt;
- ssl_certificate_key /home/ubuntu/cert/mattermost.key;
- ssl_dhparam /home/ubuntu/cert/dhparam.pem;
- ssl_session_timeout 5m;
- ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
- ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
- ssl_prefer_server_ciphers on;
- ssl_session_cache shared:SSL:10m;
-
- location / {
- gzip off;
- proxy_set_header X-Forwarded-Ssl on;
- client_max_body_size 50M;
- proxy_set_header Upgrade $http_upgrade;
- proxy_set_header Connection "upgrade";
- proxy_set_header Host $http_host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_set_header X-Forwarded-Proto $scheme;
- proxy_set_header X-Frame-Options SAMEORIGIN;
- proxy_pass http://10.10.10.2:8065;
- }
- }
-```
-
-## Finish Mattermost Server setup
-1. Navigate to `https://mattermost.example.com` and create a team and user.
-1. The first user in the system is automatically granted the `system_admin` role, which gives you access to the System Console.
-1. From the `town-square` channel click the dropdown and choose the `System Console` option
-1. Update Email Settings. We recommend using an email sending service. The example below assumes AmazonSES.
- * Set *Send Email Notifications* to true
- * Set *Require Email Verification* to true
- * Set *Feedback Name* to `No-Reply`
- * Set *Feedback Email* to `mattermost@example.com`
- * Set *SMTP Username* to `AFIADTOVDKDLGERR`
- * Set *SMTP Password* to `DFKJoiweklsjdflkjOIGHLSDFJewiskdjf`
- * Set *SMTP Server* to `email-smtp.us-east-1.amazonaws.com`
- * Set *SMTP Port* to `465`
- * Set *Connection Security* to `TLS`
- * Save the Settings
-1. Update File Settings:
- * Change *Local Directory Location* from `./data/` to `/opt/mattermost/data`
-1. Update Log Settings:
- * Set *Log to The Console* to `false`
-1. Update Rate Limit Settings:
- * Set *Vary By Remote Address* to false
- * Set *Vary By HTTP Header* to X-Real-IP
-1. Feel free to modify other settings
-1. Restart the Mattermost Service by typing:
- * ``` sudo restart mattermost```
diff --git a/doc/install/Production-Ubuntu.md b/doc/install/Production-Ubuntu.md
deleted file mode 100644
index 8d3565d4a..000000000
--- a/doc/install/Production-Ubuntu.md
+++ /dev/null
@@ -1,215 +0,0 @@
-# Production Installation on Ubuntu 14.04 LTS
-
-## Install Ubuntu Server (x64) 14.04 LTS
-1. Set up 3 machines with Ubuntu 14.04 with 2GB of RAM or more. The servers will be used for the Load Balancer, Mattermost (this must be x64 to use pre-built binaries), and Database.
- - **Optional:** You can also use a single machine for all 3 components in this install guide, depending on the standards of your data center.
-2. Make sure the system is up to date with the most recent security patches.
- * ``` sudo apt-get update```
- * ``` sudo apt-get upgrade```
-
-## Set up Database Server
-1. For the purposes of this guide we will assume this server has an IP address of 10.10.10.1
-1. Install PostgreSQL 9.3+ (or MySQL 5.6+)
- * ``` sudo apt-get install postgresql postgresql-contrib```
-1. PostgreSQL created a user account called `postgres`. You will need to log into that account with:
- * ``` sudo -i -u postgres```
-1. You can get a PostgreSQL prompt by typing:
- * ``` psql```
-1. Create the Mattermost database by typing:
- * ```postgres=# CREATE DATABASE mattermost;```
-1. Create the Mattermost user by typing:
- * ```postgres=# CREATE USER mmuser WITH PASSWORD 'mmuser_password';```
-1. Grant the user access to the Mattermost database by typing:
- * ```postgres=# GRANT ALL PRIVILEGES ON DATABASE mattermost to mmuser;```
-1. You can exit out of PostgreSQL by typing:
- * ```postgre=# \q```
-1. You can exit the postgres account by typing:
- * ``` exit```
-1. Allow Postgres to listen on all assigned IP Addresses
- * ```sudo vi /etc/postgresql/9.3/main/postgresql.conf```
- * Uncomment 'listen_addresses' and change 'localhost' to '*'
-1. Alter pg_hba.conf to allow the mattermost server to talk to the postgres database
- * ```sudo vi /etc/postgresql/9.3/main/pg_hba.conf```
- * Add the following line to the 'IPv4 local connections'
- * host all all 10.10.10.2/32 md5
-1. Reload Postgres database
- * ```sudo /etc/init.d/postgresql reload```
-1. Attempt to connect with the new created user to verify everything looks good
- * ```psql --host=10.10.10.1 --dbname=mattermost --username=mmuser --password```
- * ```mattermost=> \q```
-
-
-## Set up Mattermost Server
-1. For the purposes of this guide we will assume this server has an IP address of 10.10.10.2
-1. For the sake of making this guide simple we located the files at `/home/ubuntu/mattermost`. In the future we will give guidance for storing under `/opt`.
-1. We have also elected to run the Mattermost Server as the `ubuntu` account for simplicity. We recommend setting up and running the service under a `mattermost` user account with limited permissions.
-1. Download the latest Mattermost Server by typing:
- * ``` wget https://github.com/mattermost/platform/releases/download/v1.4.0/mattermost.tar.gz```
-1. Unzip the Mattermost Server by typing:
- * ``` tar -xvzf mattermost.tar.gz```
-1. Create the storage directory for files. We assume you will have attached a large drive for storage of images and files. For this setup we will assume the directory is located at `/mattermost/data`.
- * Create the directory by typing:
- * ``` sudo mkdir -p /mattermost/data```
- * Set the ubuntu account as the directory owner by typing:
- * ``` sudo chown -R ubuntu /mattermost```
-1. Configure Mattermost Server by editing the config.json file at `/home/ubuntu/mattermost/config`
- * ``` cd ~/mattermost/config```
- * Edit the file by typing:
- * ``` vi config.json```
- * replace `DriverName": "mysql"` with `DriverName": "postgres"`
- * replace `"DataSource": "mmuser:mostest@tcp(dockerhost:3306)/mattermost_test?charset=utf8mb4,utf8"` with `"DataSource": "postgres://mmuser:mmuser_password@10.10.10.1:5432/mattermost?sslmode=disable&connect_timeout=10"`
- * Optionally you may continue to edit configuration settings in `config.json` or use the System Console described in a later section to finish the configuration.
-1. Test the Mattermost Server
- * ``` cd ~/mattermost/bin```
- * Run the Mattermost Server by typing:
- * ``` ./platform```
- * You should see a console log like `Server is listening on :8065` letting you know the service is running.
- * Stop the server for now by typing `ctrl-c`
-1. Setup Mattermost to use the Upstart daemon which handles supervision of the Mattermost process.
- * ``` sudo touch /etc/init/mattermost.conf```
- * ``` sudo vi /etc/init/mattermost.conf```
- * Copy the following lines into `/etc/init/mattermost.conf`
-```
-start on runlevel [2345]
-stop on runlevel [016]
-respawn
-chdir /home/ubuntu/mattermost
-setuid ubuntu
-exec bin/platform
-```
- * You can manage the process by typing:
- * ``` sudo start mattermost```
- * Verify the service is running by typing:
- * ``` curl http://10.10.10.2:8065```
- * You should see a page titles *Mattermost - Signup*
- * You can also stop the process by running the command ` sudo stop mattermost`, but we will skip this step for now.
-
-## Set up Nginx Server
-1. For the purposes of this guide we will assume this server has an IP address of 10.10.10.3
-1. We use Nginx for proxying request to the Mattermost Server. The main benefits are:
- * SSL termination
- * http to https redirect
- * Port mapping :80 to :8065
- * Standard request logs
-1. Install Nginx on Ubuntu with
- * ``` sudo apt-get install nginx```
-1. Verify Nginx is running
- * ``` curl http://10.10.10.3```
- * You should see a *Welcome to nginx!* page
-1. You can manage Nginx with the following commands
- * ``` sudo service nginx stop```
- * ``` sudo service nginx start```
- * ``` sudo service nginx restart```
-1. Map a FQDN (fully qualified domain name) like **mattermost.example.com** to point to the Nginx server.
-1. Configure Nginx to proxy connections from the internet to the Mattermost Server
- * Create a configuration for Mattermost
- * ``` sudo touch /etc/nginx/sites-available/mattermost```
- * Below is a sample configuration with the minimum settings required to configure Mattermost
-```
- server {
- server_name mattermost.example.com;
-
- location / {
- client_max_body_size 50M;
- proxy_set_header Upgrade $http_upgrade;
- proxy_set_header Connection "upgrade";
- proxy_set_header Host $http_host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_set_header X-Forwarded-Proto $scheme;
- proxy_set_header X-Frame-Options SAMEORIGIN;
- proxy_pass http://10.10.10.2:8065;
- }
- }
-```
- * Remove the existing file with
- * ``` sudo rm /etc/nginx/sites-enabled/default```
- * Link the mattermost config by typing:
- * ```sudo ln -s /etc/nginx/sites-available/mattermost /etc/nginx/sites-enabled/mattermost```
- * Restart Nginx by typing:
- * ``` sudo service nginx restart```
- * Verify you can see Mattermost thru the proxy by typing:
- * ``` curl http://localhost```
- * You should see a page titles *Mattermost - Signup*
-
-## Set up Nginx with SSL (Recommended)
-1. You will need a SSL cert from a certificate authority.
-2. For simplicity we will generate a test certificate.
- * ``` mkdir ~/cert```
- * ``` cd ~/cert```
- * ``` sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mattermost.key -out mattermost.crt```
- * Input the following info
-```
- Country Name (2 letter code) [AU]:US
- State or Province Name (full name) [Some-State]:California
- Locality Name (eg, city) []:Palo Alto
- Organization Name (eg, company) [Internet Widgits Pty Ltd]:Example LLC
- Organizational Unit Name (eg, section) []:
- Common Name (e.g. server FQDN or YOUR name) []:mattermost.example.com
- Email Address []:admin@mattermost.example.com
-```
-3. Run `openssl dhparam -out dhparam.pem 4096` (it will take some time).
-4. Modify the file at `/etc/nginx/sites-available/mattermost` and add the following lines:
-```
- server {
- listen 80;
- server_name mattermost.example.com;
- return 301 https://$server_name$request_uri;
- }
-
- server {
- listen 443 ssl;
- server_name mattermost.example.com;
-
- ssl on;
- ssl_certificate /home/ubuntu/cert/mattermost.crt;
- ssl_certificate_key /home/ubuntu/cert/mattermost.key;
- ssl_dhparam /home/ubuntu/cert/dhparam.pem;
- ssl_session_timeout 5m;
- ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
- ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
- ssl_prefer_server_ciphers on;
- ssl_session_cache shared:SSL:10m;
-
- location / {
- gzip off;
- proxy_set_header X-Forwarded-Ssl on;
- client_max_body_size 50M;
- proxy_set_header Upgrade $http_upgrade;
- proxy_set_header Connection "upgrade";
- proxy_set_header Host $http_host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_set_header X-Forwarded-Proto $scheme;
- proxy_set_header X-Frame-Options SAMEORIGIN;
- proxy_pass http://10.10.10.2:8065;
- }
- }
-```
-
-
-## Finish Mattermost Server setup
-1. Navigate to https://mattermost.example.com and create a team and user.
-1. The first user in the system is automatically granted the `system_admin` role, which gives you access to the System Console.
-1. From the `town-square` channel click the dropdown and choose the `System Console` option
-1. Update Email Settings. We recommend using an email sending service. The example shows how an Amazon SES setup might look (sample credentials shown below are not real).
- * Set *Send Email Notifications* to true
- * Set *Require Email Verification* to true
- * Set *Feedback Name* to `No-Reply`
- * Set *Feedback Email* to `mattermost@example.com`
- * Set *SMTP Username* to `AFIADTOVDKDLGERR`
- * Set *SMTP Password* to `DFKJoiweklsjdflkjOIGHLSDFJewiskdjf`
- * Set *SMTP Server* to `email-smtp.us-east-1.amazonaws.com`
- * Set *SMTP Port* to `465`
- * Set *Connection Security* to `TLS`
- * Save the Settings
-1. Update File Settings
- * Change *Local Directory Location* from `./data/` to `/mattermost/data`
-1. Update Log Settings.
- * Set *Log to The Console* to false
-1. Update Rate Limit Settings.
- * Set *Vary By Remote Address* to false
- * Set *Vary By HTTP Header* to X-Real-IP
-1. Feel free to modify other settings.
-1. Restart the Mattermost Service by typing:
- * ``` sudo restart mattermost```
diff --git a/doc/install/Release-Numbering.md b/doc/install/Release-Numbering.md
deleted file mode 100644
index 41aba109f..000000000
--- a/doc/install/Release-Numbering.md
+++ /dev/null
@@ -1,23 +0,0 @@
-# Mattermost Release Schedule and Numbering
-
-## Release Schedule
-
-Mattermost releases stable builds monthly on the 16th in [binary form](https://github.com/mattermost/platform/releases)
-
-## Release Numbering
-
-Mattermost numbers its stable releases based on the following format:
-
- `[Version Number].[Major Build Number].[Minor Build Number]`
-
-Version Number:
-
-- Indicates a major system release (e.g. 1.x.x, 2.x.x)
-
-Major Build Number:
-
-- Indicates significant new functionality, (e.g. 0.5.x, 0.6.x, 0.7.x)
-
-Minor Build Number:
-
-- Indicates a bug fix or security release (e.g. 1.2.5, 1.2.6)
diff --git a/doc/install/Requirements.md b/doc/install/Requirements.md
deleted file mode 100644
index 162caf90d..000000000
--- a/doc/install/Requirements.md
+++ /dev/null
@@ -1,91 +0,0 @@
-## Software Requirements
-
-### Web Client
-
-Supported Operating Systems and Browsers for the Mattermost Web Client include:
-
-- PC: Windows 7, Windows 8, Windows 10 (Chrome 43+, Firefox 38+, Internet Explorer 11, Edge)
-- Mac: OS 10 (Safari 9, Chrome 43+)
-- Linux: Arch 4.0.0 (Chrome 43+)
-- iPhone 4s and higher (Safari on iOS 9+, Chrome 43+)
-- Android 5 and higher (Chrome 43+)
-
-### Email Client
-
-Supported Email Clients for rendering Mattermost email notifications include:
-
-Web based clients:
-- Gmail
-- Office 365
-- Outlook
-- Yahoo
-- AOL
-
-Desktop Clients:
-- Apple Mail version 7+
-- Outlook 2016+
-- Thunderbird 38.2+
-
-Mobile Clients:
-- Gmail Mobile App (Android, iOS)
-- iOS Mail App (iOS 7+)
-- Blackberry Mail App (OS version 4+)
-
-### Server
-
-Supported Operating Systems for the Mattermost Server include:
-
-- Ubuntu
-- Debian
-- CentOS
-- RedHat Enterprise Linux
-- Oracle Linux
-
-The Mattermost roadmap does not currently include production support for Fedora, FreeBSD or Arch Linux.
-
-## Hardware Requirements
-
-Mattermost offers both real-time communication and file sharing. CPU and Memory requirements are typically driven by the number of concurrent users using real-time messaging. Storage requirements are typically driven by number and size of files shared.
-
-The below guidelines offer estimates based on real world usage of Mattermost in multi-team configurations ranging from 10-100 users per team.
-
-### CPU
-
-- 2 cores is the recommended number of cores and supports up to 250 users
-- 4 cores supports up to 1,000 users
-- 8 cores supports up to 2,500 users
-- 16 cores supports up to 5,000 users
-- 32 cores supports up to 10,000 users
-- 64 cores supports up to 20,000 users
-
-### Memory
-
-- 2GB RAM is the recommended memory size and supports up to 50 users
-- 4GB RAM supports up to 500 users
-- 8GB RAM supports up to 1,000 users
-- 16GB RAM supports up to 2,000 users
-- 32GB RAM supports up to 4,000 users
-- 64GB RAM supports up to 8,000 users
-- 128GB RAM supports up to 16,000 users
-
-### Storage
-
-To estimate initial storage requirements, begin with a Mattermost server approximately 600 MB to 800 MB in size including operating system and database, then add the multiplied product of:
-
-- Estimated storage per user per month (see below), multipled by 12 months in a year
-- Estimated mean average number of users in a year
-- A 1-2x safety factor
-
-**Estimated storage per user per month**
-
-File usage per user varies significantly across industries. The below benchmarks are recommended:
-
-- **Low usage teams** (1-5 MB/user/month) - Primarily use text-messages and links to communicate. Examples would include software development teams that heavily use web-based document creation and management tools, and therefore rarely upload files to the server.
-
-- **Medium usage teams** (5-25 MB/user/month) - Use a mix of text-messages as well as shared documents and images to communicate. Examples might include business teams that may commonly drag and drop screenshots, PDFs and Microsoft Office documents into Mattermost for sharing and review.
-
-- **High usage teams** - (25-100 MB/user/month) - Heaviest utlization comes from teams uploading a high number of large files into Mattermost on a regular basis. Examples include creative teams who share and store artwork and media with tags and commentary in a pipeline production process.
-
-*Example:* A 30-person team with medium usage (5-25 MB/user/month) with a safety factor of 2x would require between 300 MB (30 users * 5 MB * 2x safety factor) and 1500 MB (30 users * 25 MB * 2x safety factor) of free space in the next year.
-
-It's recommended to review storage utilization at least quarterly to ensure adequate free space is available.
diff --git a/doc/install/SMTP-Email-Setup.md b/doc/install/SMTP-Email-Setup.md
deleted file mode 100644
index 7d9beae89..000000000
--- a/doc/install/SMTP-Email-Setup.md
+++ /dev/null
@@ -1,107 +0,0 @@
-
-## SMTP Email Setup
-
-In product evaluation setups with single-container Docker instances, email is intentionally disabled. This allows account creation and system operation without having to set up email, but it also means email notification and password reset functionality aren't available.
-
-### How to enable email
-
-To enable email, configure an SMTP email service as follows:
-
-1. **Set up an SMTP email sending service** (if you don't yet have an SMTP service with credentials)
- 1. Any SMTP email service can be used, you just need the following information: `Server Name`, `Port`, `SMTP Username`, and `SMTP Password`.
- 2. If you don't have an SMTP service, here are simple instructions to set one up with [Amazon Simple Email Service (SES)](https://aws.amazon.com/ses/):
- 2. Go to [Amazon SES console](https://console.aws.amazon.com/ses) then `SMTP Settings > Create My SMTP Credentials`
- 3. Copy the `Server Name`, `Port`, `SMTP Username`, and `SMTP Password` for Step 2 below.
- 4. From the `Domains` menu set up and verify a new domain, then enable `Generate DKIM Settings` for the domain.
- 1. We recommend you set up _[Sender Policy Framework](https://en.wikipedia.org/wiki/Sender_Policy_Framework) (SPF)_ and/or _[Domain Keys Identified Mail](https://en.wikipedia.org/wiki/DomainKeys_Identified_Mail) (DKIM)_ for your email domain.
- 5. Choose an sender address like `mattermost@example.com` and click `Send a Test Email` to verify setup is working correctly.
-
-2. **Configure SMTP settings**
- 1. Open the **System Console** by logging into an existing team and accessing "System Console" from the main menu.
- 1. Alternatively, if a team doesn't yet exist, go to `http://dockerhost:8065/` in your browser, create a team, then from the main menu click **System Console**
- 2. Go to the **Email Settings** tab and configure the following:
- 1. **Allow Sign Up With Email:** `true`
- 2. **Send Email Notifications:** `true`
- 3. **Require Email Verification:** `true`
- 4. **Notification Display Name:** Display name on email account sending notifications
- 5. **Notification Email Address:** Email address displayed on email account used to send notifications
- 6. **SMTP Username**: `SMTP Username` from Step 1
- 7. **SMTP Password**: `SMTP Password` from Step 1
- 8. **SMTP Server**: `SMTP Server` from Step 1
- 9. **SMTP Port**: `SMTP Port` from Step 1
- 10. **Connection Security**: `TLS (Recommended)`
- 11. Then click **Save**
- 12. Then click **Test Connection**
- 13. If the test failed please look in **OTHER** > **Logs** for any errors that look like `[EROR] /api/v1/admin/test_email ...`
-
-### Known Good Sample Settings
-
-##### Amazon SES
-* Set **SMTP Username** to **AKIASKLDSKDIWEOWE**
-* Set **SMTP Password** to **AdskfjAKLSDJShflsdfjkakldADkjkjdfKAJDSlkjweiqQIWEOU**
-* Set **SMTP Server** to **email-smtp.us-east-1.amazonaws.com**
-* Set **SMTP Port** to **465**
-* Set **Connection Security** to **TLS**
-
-##### Postfix
-* Make sure Postfix is installed on the machine where Mattermost is installed
-* Set **SMTP Username** to **(empty)**
-* Set **SMTP Password** to **(empty)**
-* Set **SMTP Server** to **localhost**
-* Set **SMTP Port** to **25**
-* Set **Connection Security** to **(empty)**
-
-##### Gmail
-* Set **SMTP Username** to **your_email@gmail.com**
-* Set **SMTP Password** to **your_password**
-* Set **SMTP Server** to **smtp.gmail.com**
-* Set **SMTP Port** to **587**
-* Set **Connection Security** to **TLS**
-
-##### Office 365
-* Set **SMTP Username** to **Office 365 username**
-* Set **SMTP Password** to **Office 365 password**
-* Set **SMTP Server** to **smtp.office365.com**
-* Set **SMTP Port** to **587**
-* Set **Connection Security** to **TLS**
-
-##### Hotmail
-* Set **SMTP Username** to **your_email@hotmail.com**
-* Set **SMTP Password** to **your_password**
-* Set **SMTP Server** to **smtp-mail.outlook.com**
-* Set **SMTP Port** to **587**
-* Set **Connection Security** to **STARTTLS**
-
-
-### Troubleshooting SMTP
-
-#### Tip 1
-If you fill in **SMTP Username** and **SMTP Password** then you must set **Connection Security** to **TLS** or to **STARTTLS**
-
-#### Tip 2
-If you have issues with your SMTP install, from your Mattermost team site go to the main menu and open **System Console -> Logs** to look for error messages related to your setup. You can do a search for the error code to narrow down the issue. Sometimes ISPs require nuanced setups for SMTP and error codes can hint at how to make the proper adjustments.
-
-For example, if **System Console -> Logs** has an error code reading:
-
-```
-Connection unsuccessful: Failed to add to email address - 554 5.7.1 : Client host rejected: Access denied
-```
-
-Search for `554 5.7.1 error` and `Client host rejected: Access denied`.
-
-#### Tip 3
-* Attempt to telnet to the email service to make sure the server is reachable.
-* You must run the following commands from the same machine or virtual instance where `mattermost/bin/platform` is located. So if you're running Mattermost from docker you need to `docker exec -ti mattermost-dev /bin/bash`
-* Telnet to the email server with `telnet mail.example.com 25`. If the command works you should see something like
-```
-Trying 24.121.12.143...
-Connected to mail.example.com.
-220 mail.example.com NO UCE ESMTP
-```
-* Then type something like `HELO `. If the command works you should see something like
-```
-250-mail.example.com NO UCE
-250-STARTTLS
-250-PIPELINING
-250 8BITMIME
-```
diff --git a/doc/install/Troubleshooting.md b/doc/install/Troubleshooting.md
deleted file mode 100644
index 05cac2f48..000000000
--- a/doc/install/Troubleshooting.md
+++ /dev/null
@@ -1,66 +0,0 @@
-# Mattermost Troubleshooting
-
-#### Important notes
-
-##### **DO NOT manipulate the Mattermost database**
- - In particular, DO NOT delete data from the database, as Mattermost is designed to stop working if data integrity has been compromised. The system is designed to archive content continously and generally assumes data is never deleted.
-
-
-#### Common Issues
-
-##### Lost System Administrator account
- - If the System Administrator account becomes unavailable, a person leaving the organization for example, you can set a new system admin from the commandline using `./platform -assign_role -team_name="yourteam" -email="you@example.com" -role="system_admin"`.
- - After assigning the role the user needs to log out and log back in before the System Administrator role is applied.
-
-#### Mattermost Error Messages
-
-The following is a list of common error messages and solutions:
-
-###### `Please check connection, Mattermost unreachable. If issue persists, ask administrator to check WebSocket port.`
-- Message appears in blue bar on team site.
-- **Solution:** Check that [your websocket port is properly configured](https://github.com/mattermost/platform/blob/master/doc/install/Production-Ubuntu.md#set-up-nginx-server).
-
-
-###### `x509: certificate signed by unknown authority` in server logs when attempting to sign-up
- - This error may appear when attempt to use a self-signed certificate to setup SSL, which is not yet supported by Mattermost.
- - **Solution:** Set up a load balancer like Ngnix [per production install guide](https://github.com/mattermost/platform/blob/master/doc/install/Production-Ubuntu.md#set-up-nginx-with-ssl-recommended). A ticket exists to [add support for self-signed certificates in future](x509: certificate signed by unknown authority).
-
-###### `panic: runtime error: invalid memory address or nil pointer dereference`
- - This error can occur if you have manually manipulated the Mattermost database, typically with deletions. Mattermost is designed to serve as a searchable archive, and manual manipulation of the database elements compromises integrity and may prevent upgrade.
- - **Solution:** Restore from database backup created prior to manual database updates, or reinstall the system.
-
-### Troubleshooting GitLab Mattermost
-
-- If you're having issues installing GitLab Mattermost with GitLab Omnibus, as a first step please turn on logging by updating the [log settings](https://github.com/mattermost/platform/blob/master/doc/install/Configuration-Settings.md#log-file-settings) section in your `config.json` file installed by omnibus, and they try a general web search for the error message you receive.
-
-#### GitLab Mattermost Error Messages
-
-###### `We received an unexpected status code from the server (200)`
-
-- If you have upgraded from a pre-released version of GitLab Mattermost or if an unforseen issue has arrisen during the [upgrade procedure](https://github.com/mattermost/platform/blob/master/doc/install/Upgrade-Guide.md), you may be able to restore Mattermost using the following procedure:
- - `sudo stop mattermost`, so DB can be dropped
- - `sudo gitlab-ctl reconfigure`
- - `sudo -u gitlab-psql /opt/gitlab/embedded/bin/dropdb -h /var/opt/gitlab/postgresql mattermost_production`
- - `sudo start mattermost`
- - `sudo gitlab-ctl reconfigure`
- - [Manually set up GitLab SSO](https://github.com/mattermost/platform/blob/master/doc/integrations/Single-Sign-On/Gitlab.md) by copying Secret and ID into `/var/opt/gitlab/mattermost/config.json`
- - `sudo gitlab-ctl restart`
-
-###### `Token request failed`
- - This error can appear in the web browser after attempting to create a new team with GitLab SSO enabled
- - **Solutions:**
- 1. Check that your SSL settings for the SSO provider match the `http://` or `https://` choice selected in `config.json` under `GitLabSettings`
- 2. Follow steps 1 to 3 of the manual [GitLab SSO configuration procedure](https://github.com/mattermost/platform/blob/master/doc/integrations/Single-Sign-On/Gitlab.md) to confirm your `Secret` and `Id` settings in `config.json` match your GitLab settings, and if they don't, manually update `config.json` to the correct settings and see if this clears the issue.
-
-###### `We couldn't find the existing account ...`
- - This error appears when a user attempts to sign in using a single-sign-on option with an account that was not created using that single-sign-on option. For example, if a user creates Account A using email sign-up, then attempts to sign-in using GitLab SSO, the error appears since Account A was not created using GitLab SSO.
- - **Solution:**
- - If you're switching from email auth to GitLab SSO, and you're getting this issue on an admin account, consider deactivating your email-based account, then creating a new account with System Admin privileges using GitLab SSO. Specifically:
- 1. Deactivate your email-based System Admin account (note: this process is [scheduled to improve](https://mattermost.atlassian.net/browse/PLT-975))
- 1. Temporarily turn off email verification (**System Console** > **Email Settings** > **Require Email Verification** > **false**, or set `"RequireEmailVerification": false` in `config.json`).
- 2. Change email for account to random address so you can create a new GitLab SSO account using your regular address.
- 2. Create a new Mattermost account using GitLab SSO
- 1. With GitLab SSO enabled, go to `https://domain.com/teamname` and sign-up for a new Mattermost account using your GitLab SSO account with preferred email address.
- 2. [Upgrade the new account to System Admin privileges](https://github.com/mattermost/platform/blob/master/doc/install/Troubleshooting.md#lost-system-administrator-account).
- 3. Deactivate the previous System Admin account that used email authentication.
- 1. Using the new GitLab SSO System Admin account go to **System Console** > **[TEAMNAME]** > **Users**, find the previous account and set it to "Inactive"
diff --git a/doc/install/Upgrade-Guide.md b/doc/install/Upgrade-Guide.md
deleted file mode 100644
index 1f3ff9510..000000000
--- a/doc/install/Upgrade-Guide.md
+++ /dev/null
@@ -1,81 +0,0 @@
-# Mattermost Upgrade Guide
-
-### Upgrading Mattermost to Next Major Release
-
-Each release of Mattermost contains logic to upgrade it from the previously major build version. For example, version 1.2 upgrades the database and configuration data schema for a Mattermost version 1.1 server. The following procedure outlines how to upgrade Mattermost to the next major release version.
-
-If you're upgrading across multiple major releases, from 1.0.x to 1.2.x for example, please run the following procedure once for each incremental upgrade, in sequential order.
-
-1. Download the **next major build release** of your server
- 1. Determine the current version of your Mattermost server
- 1. Go to any team site, opening the main menu at the top right of the left-hand sidebar and selecting **About Mattermost**
- 2. Identify the next major build release of your Mattermost server from the list of [stable Mattermost releases](https://github.com/mattermost/platform/releases)
- 1. For example, if your current version is 1.1.0, you want to select version 1.2.0.
- 1. In some cases there will be **minor build releases**, such as 1.2.1 and 1.2.2. The minor build number indicates a bug fix or security issue release. Testing on minor build versions is less extensive than on major build versions and it is recommended that you use the minor build only if you need the specific additions included.
- 3. Review Release Notes
- 1. Check the release notes for the version of Mattermost you are able to install, and note any setting changes in the **Compatibility** section that apply to your deployment (Release notes across versions are available from the [CHANGELOG](https://github.com/mattermost/platform/blob/master/CHANGELOG.md)).
- 4. Download the `mattermost.tar.gz` file with the correct version for your upgrade
- 1. You can use `wget` to retrieve a specific version. For example, to download v1.1.0 run `wget https://github.com/mattermost/platform/releases/download/v1.x.x/mattermost.tar.gz`
-2. Stop the Mattermost Server
- 1. As best practice, consider posting to the Town Square channel of active teams pre-announcing the scheduled downtime to apply these upgrade procedures
- 2. To stop the server run `sudo stop mattermost`
-2. Backup your data
- 1. Back up your `config.json` file, which contains your system configuration. This will be used to restore your current settings after the new version is installed
- 2. Backup your database using your organization's standard procedures for backing up MySQL or PostgreSQL
- 3. If you're using local file storage, back up the location where files are stored
-4. Decompress `mattermost.tar.gz` and use its contents to replace the current version of Mattermost on disk
- 1. Run `tar -xvzf mattermost.tar.gz`
-5. Restore the state of your server by copying the backed up version of `config.json` in place of the default `config.json`
-6. Start your server and address any setting changes relevant in the latest version of Mattermost
- 1. Run `sudo start mattermost`
- 2. Go to the **System Console** to update any settings that have been added or modified based on the **Compatibility** section in the release notes of the version you are installing (Release notes across versions are available from the [CHANGELOG](https://github.com/mattermost/platform/blob/master/CHANGELOG.md)).
- 1. Opening the System Console and saving a change will upgrade your `config.json` schema to the latest version using default values for new settings added
-7. Test the system is working by going to the URL of an existing team. You may need to refresh your Mattermost browser page in order to get the latest updates from the upgrade
-
-### Upgrading from Mattermost Beta (Version 0.7)
-
-The following instructions apply to updating installations of Mattermost v0.7-Beta to Mattermost 1.1.
-
-## GitLab Mattermost Upgrade Troubleshooting
-
-#### Upgrading GitLab Mattermost when GitLab upgrade skips versions
-
-Mattermost is designed to be upgraded sequentially through major version releases. If you skip versions when upgrading GitLab, you may find a `panic: The database schema version of 1.1.0 cannot be upgraded. You must not skip a version` error in your `/var/log/gitlab/mattermost/current` directory. If so:
-
-1. Run `platform -version` to check your version of Mattermost
-2. If your version of the Mattermost binary doesn't match the version listed in the database error message, downgrade the version of the Mattermost binary you are using by [following the manual upgrade steps for Mattermost](https://github.com/mattermost/platform/blob/master/doc/install/Upgrade-Guide.md#upgrading-mattermost-to-next-major-release) and using the database schema version listed in the error messages for the version you select in Step 1) iv).
-3. Once Mattermost is working again, you can use the same upgrade procedure to upgrade Mattermost version by version to your current GitLab version. After this is done, GitLab automation should continue to work for future upgrades, so long as you don't skip versions.
-
-| GitLab Version | Mattermost Version |
-|----------------|---------------------|
-| 8.1.x | v1.1.0 |
-| 8.2.x | v1.2.1 |
-| 8.3.x | v1.3.0 |
-
-## Upgrade Guide for Mattermost Beta Release
-
-#### Upgrading Mattermost in GitLab 8.0 to GitLab 8.1 with omnibus
-
-Mattermost 0.7.1-beta in GitLab 8.0 was a pre-release of Mattermost and Mattermost v1.1.1 in GitLab 8.1 was [updated significantly](https://github.com/mattermost/platform/blob/master/CHANGELOG.md#configjson-changes-from-v07-to-v10) to get to a stable, forwards-compatible platform for Mattermost.
-
-The Mattermost team didn't think it made sense for GitLab omnibus to attempt an automated re-configuration of Mattermost (since 0.7.1-beta was a pre-release) given the scale of change, so we're providing instructions for GitLab users who have customized their Mattermost deployments in 8.0 to move to 8.1:
-
-1. Follow the [Upgrading Mattermost v0.7.1-beta to v1.1.1 instructions](https://github.com/mattermost/platform/blob/master/doc/install/Upgrade-Guide.md#upgrading-mattermost-v071-beta-to-v111) below to identify the settings in Mattermost's `config.json` file that differ from defaults and need to be updated from GitLab 8.0 to 8.1
-2. Upgrade to GitLab 8.1 using omnibus, and allowing it overwrite `config.json` to the new Mattermost v1.1.1 format
-3. Manually update `config.json` to new settings identified in Step 1
-
-Optionally, you can use the new [System Console user interface](https://github.com/mattermost/platform/blob/master/doc/install/Configuration-Settings.md) to make changes to your new `config.json` file.
-
-#### Upgrading Mattermost v0.7.1-beta to v1.1.1
-
-_Note: [Mattermost v1.1.1](https://github.com/mattermost/platform/releases/tag/v1.1.1) is a special release of Mattermost v1.1 that upgrades the database to Mattermost v1.1 from EITHER Mattermost v0.7 or Mattermost v1.0. The following instructions are for upgrading from Mattermost v0.7.1-beta to v1.1.1 and skipping the upgrade to Mattermost v1.0._
-
-If you've manually changed Mattermost v0.7.1-beta configuration by updating the `config.json` file, you'll need to port those changes to Mattermost v1.1.1:
-
-1. Go to the `config.json` file that you manually updated and note any differences from the [default `config.json` file in Mattermost 0.7](https://github.com/mattermost/platform/blob/v0.7.0/config/config.json).
-
-2. For each setting that you changed, check [the changelog documentation](https://github.com/mattermost/platform/blob/master/CHANGELOG.md#configjson-changes-from-v07-to-v10) on whether the configuration setting has changed between v0.7 and v1.1.1
-
-3. Update your new [`config.json` file in Mattermost v1.1](https://github.com/mattermost/platform/blob/v1.1.0/config/config.json), based on your preferences and the changelog documentation above
-
-Optionally, you can use the new [System Console user interface](https://github.com/mattermost/platform/blob/master/doc/install/Configuration-Settings.md) to make changes to your new `config.json` file.
diff --git a/doc/integrations/Single-Sign-On/GitHub-Enterprise.md b/doc/integrations/Single-Sign-On/GitHub-Enterprise.md
deleted file mode 100644
index 6f6633846..000000000
--- a/doc/integrations/Single-Sign-On/GitHub-Enterprise.md
+++ /dev/null
@@ -1,20 +0,0 @@
-## Configuring GitHub Enterprise Single-Sign-On (unofficial)
-
-Note: Because the authentication interface of GitHub Enterprise is similar to that of GitLab, the GitLab SSO feature can be used to unofficially also support GitHub Enterprise SSO.
-
-Follow these steps to configure Mattermost to use Github Enterprise as a single-sign-on (SSO) service for team creation, account creation and sign-in using the GitLab SSO interface.
-
-1. Login to your GitHub Enterprise account and go to the Applications section in Profile Settings.
-2. Add a new application called "Mattermost" with the following as Authorization callback URL:
- * `` (example: http://localhost:8065)
-
-3. Submit the application and copy the given _Id_ and _Secret_ into the appropriate _GitLabSettings_ fields in config/config.json
-
-4. Also in config/config.json, set _Enable_ to `true` for the _gitlab_ section, leave _Scope_ blank and use the following for the endpoints:
- * _AuthEndpoint_: `https:///oauth/authorize` (example https://github.com/oauth/authorize)
- * _TokenEndpoint_: `https:///oauth/access_token`
- * _UserApiEndpoint_: `https:///api/v3/user`
-
-5. (Optional) If you would like to force all users to sign-up with GitHub Enterprise only, in the _ServiceSettings_ section of config/config.json set _DisableEmailSignUp_ to `true`.
-
-6. Restart your Mattermost server to see the changes take effect.
diff --git a/doc/integrations/Single-Sign-On/GitHub.md b/doc/integrations/Single-Sign-On/GitHub.md
deleted file mode 100644
index 56e2d1c72..000000000
--- a/doc/integrations/Single-Sign-On/GitHub.md
+++ /dev/null
@@ -1,24 +0,0 @@
-## Configuring GitHub Single-Sign-On (unofficial)
-
-Note: Because the authentication interface of GitHub is similar to that of GitLab, the GitLab SSO feature can be used to unofficially also support GitHub SSO.
-
-Follow these steps to configure Mattermost to use Github as a single-sign-on (SSO) service for team creation, account creation and sign-in using the GitLab SSO interface.
-
-1. Login to your GitHub account and go to the Applications section in Profile Settings.
-2. Add a new application called "Mattermost" with the following as Authorization callback URL:
- * `` (example: http://localhost:8065)
-
-3. Submit the application and copy the given _Id_ and _Secret_ into the appropriate _GitLabSettings_ fields in config/config.json
-
-4. Also in config/config.json, set _Enable_ to `true` for the _gitlab_ section, leave _Scope_ blank and use the following for the endpoints:
- * _AuthEndpoint_: `https://github.com/login/oauth/authorize`
- * _TokenEndpoint_: `https://github.com/login/oauth/access_token`
- * _UserApiEndpoint_: `https://api.github.com/user`
-
-6. (Optional) If you would like to force all users to sign-up with GitHub only,
-in the _ServiceSettings_ section of config/config.json set _DisableEmailSignUp_
-to `true`.
-
-6. Restart your Mattermost server to see the changes take effect.
-
-7. Tell the users to set their public email for GitHub at the [Public profile page](https://github.com/settings/profile). Mattermost uses the email to create account.
diff --git a/doc/integrations/Single-Sign-On/Gitlab.md b/doc/integrations/Single-Sign-On/Gitlab.md
deleted file mode 100644
index f0acc0e66..000000000
--- a/doc/integrations/Single-Sign-On/Gitlab.md
+++ /dev/null
@@ -1,23 +0,0 @@
-## Configuring GitLab Single-Sign-On
-
-Follow these steps to configure Mattermost to use GitLab as a single-sign-on (SSO) service for team creation, account creation and sign-in.
-
-1. Login to your GitLab account and go to the Applications section either in Profile Settings or Admin Area.
-2. Add a new application called "Mattermost" with the following as Redirect URIs:
- * `/login/gitlab/complete` (example: http://localhost:8065/login/gitlab/complete)
- * `/signup/gitlab/complete`
-
- (Note: If your GitLab instance is set up to use SSL, your URIs must begin with https://. Otherwise, use http://).
-
-3. Submit the application and copy the given _Id_ and _Secret_ into the appropriate _GitLabSettings_ fields in config/config.json
-
-4. Also in config/config.json, set _Enable_ to `true` for the _gitlab_ section, leave _Scope_ blank and use the following for the endpoints:
- * _AuthEndpoint_: `https:///oauth/authorize` (example https://example.com/oauth/authorize)
- * _TokenEndpoint_: `https:///oauth/token`
- * _UserApiEndpoint_: `https:///api/v3/user`
-
- Note: Make sure your `HTTPS` or `HTTP` prefix for endpoint URLs matches your server configuration.
-
-5. (Optional) If you would like to force all users to sign-up with GitLab only, in the _ServiceSettings_ section of config/config.json set _DisableEmailSignUp_ to `true`.
-
-6. Restart your Mattermost server to see the changes take effect.
diff --git a/doc/integrations/services/Gitlab-Integration-Service-for-Mattermost.md b/doc/integrations/services/Gitlab-Integration-Service-for-Mattermost.md
deleted file mode 100644
index 2ce56bb72..000000000
--- a/doc/integrations/services/Gitlab-Integration-Service-for-Mattermost.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# [GitLab Integration Service for Mattermost](https://github.com/mattermost/mattermost-integration-gitlab)
-
-This [open source integration service](https://github.com/mattermost/mattermost-integration-gitlab) let you configure real-time notifications on GitLab issues, merge requests and comments to be delivered to selected Mattermost channels.
-
-The service can be installed on any Linux-based web server and instructions for **Heroku** and **Ubuntu 14.04** are included. Please see [Mattermost incoming webhooks documentation](https://github.com/mattermost/platform/blob/master/doc/integrations/webhooks/Incoming-Webhooks.md) for details on formatting options within the service.
-
-The Mattermost community is invited to fork, extend and repurpose this service for other applications. If you'd like your integration featured on http://mattermost.org/webhooks, please mail info@mattermost.org or tweet to us at @mattermosthq.
-
-![webhooks](https://gitlab.com/gitlab-org/omnibus-gitlab/uploads/677b0aa055693c4dcabad0ee580c61b8/730_gitlab_feature_request.png)
diff --git a/doc/integrations/webhooks/Incoming-Webhooks.md b/doc/integrations/webhooks/Incoming-Webhooks.md
deleted file mode 100644
index 7373892ad..000000000
--- a/doc/integrations/webhooks/Incoming-Webhooks.md
+++ /dev/null
@@ -1,107 +0,0 @@
-# Incoming Webhooks
-
-Incoming webhooks allow external applications, written in the programming language of your choice--to post messages into Mattermost channels, private groups and direct messages by sending a specifically formatted JSON payload via HTTP POST request to a secret Mattermost URL generated specifically for each application.
-
-A couple key points:
-
-- **Mattermost incoming webhooks are Slack-compatible.** If you've used Slack's incoming webhooks to create integrations, you can copy and paste that code to create Mattermost integrations. Mattermost automatically translates Slack's proprietary JSON payload format into markdown to render in Mattermost messages
-- **Mattermost incoming webhooks support full markdown.** A rich range of formatting unavailable in Slack is made possible through [markdown support](../../usage/Markdown.md) in Mattermost, including headings, formatted fonts, tables, inline images and other options supported by [Mattermost Markdown]
-
-_Example:_
-
-Suppose you wanted to create a notification of the status of a daily build, with a table of total tests run and total tests failed by component category, with links to failed tests by category. You could create the following JSON payload to post to a Mattermost channel using webhooks:
-
-```
-payload={"text": "
----
-##### Build Break - Project X - December 12, 2015 - 15:32 GMT +0
-| Component | Tests Run | Tests Failed |
-|:-----------|:------------|:-----------------------------------------------|
-| Server | 948 | :white_check_mark: 0 |
-| Web Client | 123 | :warning: [2 (see details)](http://linktologs) |
-| iOS Client | 78 | :warning: [3 (see details)](http://linktologs) |
----
-"}
-```
-Which would render in a Mattermost message as follows:
-
----
-##### Build Break - Project X - December 12, 2015 - 15:32 GMT +0
-| Component | Tests Run | Tests Failed |
-|:-----------|:------------|:-----------------------------------------------|
-| Server | 948 | :white_check_mark: 0 |
-| Web Client | 123 | :warning: [2 (see details)](http://linktologs) |
-| iOS Client | 78 | :warning: [3 (see details)](http://linktologs) |
----
-
-### Enabling Incoming Webhooks
-Incoming webhooks should be enabled on your Mattermost instance by default, but if they are not you'll need to get your system administrator to enable them. If you are the system administrator you can enable them by doing the following:
-
-1. Login to your Mattermost team account that has the system administrator role
-1. Enable incoming webhooks from **System Console -> Service Settings**
-1. (Optional) Configure the **Enable Overriding of Usernames from Webhooks** option to allow external applications to post messages under any name. If not enabled, the username of the creator of the webhook URL is used to post messages
-2. (Optional) Configure the **Enable Overriding of Icon from Webhooks** option to allow external applciations to change the icon of the account posting messages. If not enabled, the icon of the creator of the webhook URL is used to post messages
-
-### Setting Up Existing Integrations
-If you've already found or built an integration and are just looking to hook it up, then you should just need to follow the specific instructions of that integration. If the integration is using Mattermost incoming webhooks, then at some point in the instructions it will ask for a webhook URL. You can get this URL by following the first step in the next section _Creating Integrations using Incoming Webhooks_.
-
-### Creating Integrations using Incoming Webhooks
-You can create a webhook integration to post into Mattermost channels and private groups using these steps:
-
-**Note: Incoming webhooks must be enabled. Only your Mattermost system administrator can enable incoming webhooks if they are currently disabled.**
-
-2. Create a Mattermost Incoming Webhook URL
- 1. Login to your Mattermost team site and go to **Account Settings -> Integrations**
- 2. Next to **Incoming Webhooks** click **Edit**
- 3. Select the channel or private group to receive webhook payloads, then click **Add** to create the webhook
- 4. To see your new webhook in action, try a curl command from your terminal or command-line to send a JSON string as the `payload` parameter in a HTTP POST request
- 1. Example:
- ```
-curl -i -X POST -d 'payload={"text": "Hello, this is some text."}' http://yourmattermost.com/hooks/xxx-generatedkey-xxx
-```
-
-3. Build your integration in the programming language of your choice
- 1. Most integrations will be used to translate some sort of output from another system to an appropriately formatted input that will be passed into the Mattermost webhook URL. For example, an integration could take events generated by [GitLab outgoing webhooks](http://doc.gitlab.com/ee/web_hooks/web_hooks.html) and parse them into a JSON body to post into Mattermost
- 1. To get the message posted into Mattermost, your integration will need to create an HTTP POST request that will submit to the incoming webhook URL you created before. The body of the request must have a `payload` that contains a JSON object that specifies a `text` parameter. For example, `payload={"text": "Hello, this is some text."}` is a valid body for a request
- 2. Set up your integration running on Heroku, an AWS server or a server of your own to start sending real time updates to Mattermost channels and private groups
-
-Additional Notes:
-
-1. For the HTTP request body, if `Content-Type` is specified as `application/json` in the headers of the HTTP request then the body of the request can be direct JSON. For example, ```{"text": "Hello, this is some text."}```
-
-2. You can override the channel specified in the webhook definition by specifying a `channel` parameter in your payload. For example, you might have a single webhook created for _Town Square_, but you can use ```payload={"channel": "off-topic", "text": "Hello, this is some text."}``` to send a message to the _Off-Topic_ channel using the same webhook URL. If an `@` symbol followed by a username is specified, then the message will be sent to that user's direct message channel
-
-1. In addition, with **Enable Overriding of Usernames from Webhooks** turned on, you can also override the username the message posts as by providing a `username` parameter in your JSON payload. For example, you might want your message looking like it came from a robot so you can use ```payload={"username": "robot", "text": "Hello, this is some text."}``` to change the username of the post to robot. Note, to combat any malicious users from trying to use this to perform [phishing attacks](https://en.wikipedia.org/wiki/Phishing) a `BOT` indicator appears next to posts coming from webhooks
-
-2. With **Enable Overriding of Icon from Webhooks** turned on, you can similarly change the icon the message posts with by providing a link to an image in the `icon_url` parameter of your payload. For example, ```payload={"icon_url": "http://somewebsite.com/somecoolimage.jpg", "text": "Hello, this is some text."}``` will post using whatever image is located at `http://somewebsite.com/somecoolimage.jpg` as the icon for the post
-
-3. Also, as mentioned previously, [markdown](../../usage/Markdown.md) can be used to create richly formatted payloads, for example: ```payload={"text": "# A Header\nThe _text_ below **the** header."}``` creates a messages with a header, a carriage return and bold text for "the"
-
-4. Just like regular posts, the text will be limited to 4000 characters at maximum
-
-### Slack Compatibility
-
-Mattermost makes it easy to take integrations written for Slack's proprietary JSON payload format and repurpose them to become Mattermost integrations. For example:
-
-#### Connecting Mattermost to GitLab using Slack UI
-
-GitLab is the leading open-source alternative to GitHub and offers built-in integrations with Slack. Rather than having to change code to support Mattermost, users can add Mattermost webhooks directly into the interface for Slack.
-
-1. In GitLab, go to **Settings** > **Services** and select **Slack**.
-2. Paste in the incoming webhook URL provided by Mattermost from under **Account Settings** > **Integration** > **Incoming Webhooks**.
-3. Optionally set the **Username** you'd like displayed when the notification is made. Leave the **Channel** field blank
-4. Click **Save** then test the settings to confirm posts will be made to Mattermost
-
-#### Translating Slack's proprietary data format to Mattermost
-
-The following describes the automatic translations Mattermost performance to process data coming from Slack:
-
-1. Payloads designed for Slack using `<>` to note the need to hyperlink a URL, such as ```payload={"text": ""}```, are translated to the equivalent markdown in Mattermost and rendered the same as you would see in Slack
-2. Similiarly, payloads designed for Slack using `|` within a `<>` to define linked text, such as ```payload={"text": "Click for a link."}```, are also translated to the equivalent markdown in Mattermost and rendered the same as you would see in Slack
-3. Like Slack, by overriding the channel name with a `@username`, such as `payload={"text": "Hi", channel: "@jim"}`, you can send the message to a user through your direct message chat
-4. Channel names can be prepended with a `#`, like they are in Slack incoming webhooks, and the message will still be sent to the correct channel
-
-To see samples and community contributions, please visit .
-
-#### Known Issues
-- Mattermost does not yet support Slack's feature of using _icon_emoji_ to override the message icon.
diff --git a/doc/integrations/webhooks/Outgoing-Webhooks.md b/doc/integrations/webhooks/Outgoing-Webhooks.md
deleted file mode 100644
index 5fbbb9d87..000000000
--- a/doc/integrations/webhooks/Outgoing-Webhooks.md
+++ /dev/null
@@ -1,118 +0,0 @@
-# Outgoing Webhooks
-
-Outgoing webhooks allow external applications, written in the programming language of your choice--to receive HTTP POST requests whenever a user posts to a certain channel, with a trigger word at the beginning of the message, or a combination of both. If the external application responds appropriately to the HTTP request, as response post can be made in the channel where the original post occurred.
-
-A couple key points:
-
-- **Mattermost outgoing webhooks are Slack-compatible.** If you've used Slack's outgoing webhooks to create integrations, you can copy and paste that code to create Mattermost integrations. Mattermost automatically translates Slack's proprietary JSON payload format into markdown to render in Mattermost messages
-- **Mattermost outgoing webhooks support full markdown.** When an integration responds with a message to post, it will have access to a rich range of formatting unavailable in Slack that is made possible through [markdown support](../../usage/Markdown.md) in Mattermost. This includes headings, formatted fonts, tables, inline images and other options supported by [Mattermost Markdown]
-
-_Example:_
-
-Suppose you had an external application that recieved a post event whenever a message starting with `#build`. If a user posted the message `#build Let's see the status`, then the external application would receive an HTTP POST with data about that message. The application could then respond with a table of total tests run and total tests failed by component category, with links to failed tests by category. An example response might be:
-```
-{"text": "
----
-##### Build Break - Project X - December 12, 2015 - 15:32 GMT +0
-| Component | Tests Run | Tests Failed |
-|:-----------|:------------|:-----------------------------------------------|
-| Server | 948 | :white_check_mark: 0 |
-| Web Client | 123 | :warning: [2 (see details)](http://linktologs) |
-| iOS Client | 78 | :warning: [3 (see details)](http://linktologs) |
----
-"}
-```
-Which would render in a Mattermost message as follows:
-
----
-##### Build Break - Project X - December 12, 2015 - 15:32 GMT +0
-| Component | Tests Run | Tests Failed |
-|:-----------|:------------|:-----------------------------------------------|
-| Server | 948 | :white_check_mark: 0 |
-| Web Client | 123 | :warning: [2 (see details)](http://linktologs) |
-| iOS Client | 78 | :warning: [3 (see details)](http://linktologs) |
----
-
-### Enabling Outgoing Webhooks
-Outgoing webhooks are off by default, and can be enabled by the system administrator. If you are the system administrator you can enable them by doing the following:
-
-1. Login to your Mattermost team account that has the system administrator role.
-1. Enable outgoing webhooks from **System Console -> Service Settings**.
-1. (Optional) Configure the **Enable Overriding of Usernames from Webhooks** option to allow external applications to post messages under any name. If not enabled, the username of the creator of the webhook URL is used to post messages.
-2. (Optional) Configure the **Enable Overriding of Icon from Webhooks** option to allow external applciations to change the icon of the account posting messages. If not enabled, the icon of the creator of the webhook URL is used to post messages.
-
-### Set Up an Outgoing Webhook
-Once outgoing webhooks are enabled, you will be able to set one up through the Mattermost UI. You will need to know the following
-
-1. The channel (if not all of them) you want to listen to post events from
-2. The trigger words (if any) that will trigger a post event if they are the **first word** of the post
-3. The URL you want Mattermost to report the events to
-
-Once you have those, you can follow these steps to set up your webhook:
-
-1. Login to your Mattermost team site and go to **Account Settings -> Integrations**
-2. Next to **Outgoing Webhooks** click **Edit**
-3. Under **Add a new outgoing webhook** select your options
- 1. Select a channel from the **Channel** dropdown to only report events from a certain channel (optional if Trigger Words selected)
- 2. Enter comma separated words into **Trigger Words** to only report events from posts that start with one of those words (optional if **Channel** selected)
- 3. Enter new line separated URLs that the post events will be sent too
-4. Click **Add** to add your webhook to the system
-5. Your new outgoing webhook will be displayed below with a **Token** that any external application that wants to listen to the webhook should ask for in it's instructions
-
-### Creating Integrations using Outgoing Webhooks
-
-If you'd like to build your own integration that uses outgoing webhooks, you can follow these general guidelines:
-
-1. In the programming language of your choice, write your integration to perform what you had in mind
- 1. Your integration should have a function for receiving HTTP POSTs from Mattermost that look like this example:
- ```
- Content-Length: 244
- User-Agent: Go 1.1 package http
- Host: localhost:5000
- Accept: application/json
- Content-Type: application/x-www-form-urlencoded
-
- channel_id=hawos4dqtby53pd64o4a4cmeoo&
- channel_name=town-square&
- team_domain=someteam&
- team_id=kwoknj9nwpypzgzy78wkw516qe&
- text=some text here&
- timestamp=1445532266&
- token=zmigewsanbbsdf59xnmduzypjc&
- trigger_word=some&
- user_id=rnina9994bde8mua79zqcg5hmo&
- user_name=somename
- ```
- 2. Your integration must have a configurable **MATTERMOST_TOKEN** variable that is the Token given to you when you set up the outgoing webhook in Mattermost as decribed in the previous section _Set Up an Outgoing Webhook_. This configurable **MATTERMOST_TOKEN** must match the token in the request body so your application can be sure the request came from Mattermost
- 3. If you want your integration to post a message back to the same channel, it can respond to the HTTP POST request from Mattermost with a JSON response body similar to this example:
- ```
- {
- "text": "This is some response text."
- }
- ```
-3. Set up your integration running on Heroku, an AWS server or a server of your own to start getting real time post events from Mattermost channels
-
-Additional Notes:
-
-1. With **Enable Overriding of Usernames from Webhooks** turned on, you can also override the username the message posts as by providing a `username` parameter in your JSON payload. For example, you might want your message looking like it came from a robot so you can use the JSON response ```{"username": "robot", "text": "Hello, this is some text."}``` to change the username of the post to robot. Note, to combat any malicious users from trying to use this to perform [phishing attacks](https://en.wikipedia.org/wiki/Phishing) a `BOT` indicator appears next to posts coming from webhooks
-
-2. With **Enable Overriding of Icon from Webhooks** turned on, you can similarly change the icon the message posts with by providing a link to an image in the `icon_url` parameter of your JSON response. For example, ```{"icon_url": "http://somewebsite.com/somecoolimage.jpg", "text": "Hello, this is some text."}``` will post using whatever image is located at `http://somewebsite.com/somecoolimage.jpg` as the icon for the post
-
-3. Also, as mentioned previously, [markdown](../../usage/Markdown.md) can be used to create richly formatted payloads, for example: ```payload={"text": "# A Header\nThe _text_ below **the** header."}``` creates a messages with a header, a carriage return and bold text for "the"
-
-4. Just like regular posts, the text will be limited to 4000 characters at maximum
-
-### Slack Compatibility
-
-As mentioned above, Mattermost makes it easy to take integrations written for Slack's proprietary JSON payload format and repurpose them to become Mattermost integrations. The following automatic translations are supported:
-
-1. The HTTP POST request body is formatted the same as Slack's, which means your Slack integration's receiving function should not need to change at all to be compatible with Mattermost
-2. JSON responses designed for Slack using `<>` to note the need to hyperlink a URL, such as ```{"text": ""}```, are translated to the equivalent markdown in Mattermost and rendered the same as you would see in Slack
-3. Similiarly, responses designed for Slack using `|` within a `<>` to define linked text, such as ```{"text": "Click for a link."}```, are also translated to the equivalent markdown in Mattermost and rendered the same as you would see in Slack
-
-To see samples and community contributions, please visit .
-
-#### Known Issues in v1.1
-
-- Overriding of usernames does not yet apply to notifications
-- Cannot supply `icon_emoji` to override the message icon
diff --git a/doc/process/accepting-pull-request.md b/doc/process/accepting-pull-request.md
deleted file mode 100644
index f2bbb3f05..000000000
--- a/doc/process/accepting-pull-request.md
+++ /dev/null
@@ -1,28 +0,0 @@
-# Accepting Pull Requests (APRs)
-
-Per the [Contributor Guide](https://github.com/mattermost/platform/blob/master/CONTRIBUTING.md), only PRs that reference Jira tickets with the "accepting pull requests" label should be submitted to this repo. This system ensures:
-
-1. Proposed changes have been thoughtfully reviewed
-2. Proposed changes can be tested, documented, and supported by volunteers
-3. The change meets the [fast, obvious, forgiving](http://www.mattermost.org/design-principles/) design principle for the project.
-4. The change [aligns to the stated purpose of the project](http://www.mattermost.org/vision/#mattermost-teams-v1)
-
-Key contributors and core team members are responsible opening Jira tickets that meet the above requirements, which are then reviewed in triage meetings.
-
-When opening Jira tickets for accepting-pull-requests, please:
-
-1. Use titles that clearly describe the needed change and its value
-2. Include (Proposed APR) in title, so triage team knows to add the APR tag if appropriate
-3. Provide unambiguous description so that feature can be tested by any volunteer
-4. Link back to community discussions related to this change
-5. Apply "accepting-pull-requests", and optionally as "good-first-contribution".
-6. Post link back to community channels
-
-Example of post back to the community:
-
-```
-Thanks @[USERNAME],
-
-I created a ticket [for accepting pull requests on this issue](http://link). It will be reviewed in the triage meeting for addition to [the Accepting Pull Requests issues list](https://mattermost.atlassian.net/browse/PLT-797?filter=10101). [Code Contribution Guidelines](https://github.com/mattermost/platform/blob/master/CONTRIBUTING.md) are available for anyone interested in contributing to this project.
-```
-
diff --git a/doc/process/documentation-guidelines.md b/doc/process/documentation-guidelines.md
deleted file mode 100644
index cbfeec850..000000000
--- a/doc/process/documentation-guidelines.md
+++ /dev/null
@@ -1,209 +0,0 @@
-# Documentation Conventions
-
-The most important thing about documentation is getting it done and out to the community.
-
-After that, we can work on upgrading the quality of documentation. The below chart summarizes the different levels of documentation and how the quality gates are applied.
-
-_Note: Documentation Guidelines are new, and iterating. Documentation has started to balloon and this is our attempt at reducing ambiguity and increasing consistency, but the conventions here are very open to discussion._
-
-| Stars | Benchmark | Timeline |
-|:-------------|:--------------------------------|:--------------------------------|
-| 1 | Documentation is correct. | First draft checked in by developer. Okay to ship in first release of new feature. |
-| 2 | Documentation a) follows all objective formatting criteria, b) is tested by someone other than the author, c) satisfies above. | First edit under objective rules. Required before second release cycle with this feature included. |
-| 3 | Documentation a) follows all subjective style criteria, b) is reviewed and edited by someone who has previously authored 3-star documentation, and c) satisfies above. | Second edit under subjective rules. Required before third release cycle with this feature included |
-| 4 | Documentation a) has received at least 1 edit due to user feedback, b) has received at least one unprompted compliment from user community on quality, c) satisfies above. | Additional edits to refine documentation based on user feedback |
-
-## 1-Star Requirements: Correctness
-
-### List precise dependencies
-
-1. Be explicit about what specific dependencies have been tested as part of an installation procedure.
-2. Be explicit about assumptions of compatibility on systems that have not been tested.
-3. Do not claim the system works on later versions of a platform if backwards compatibility is not a priority for the dependency (It's okay to say Chrome version 43 and higher, but not Python 2.6 and higher, because Python 3.0 is explicitly incompatible with previous versions).
-
-#### Correct
-
-----
-This procedure works on an Ubuntu 14.04 server with Python 2.6 installed and should work on compatible Linux-based operating systems and compatible versions of Python.
-
-----
-#### Incorrect
-
-----
-This procedure works on Linux servers running Python.
-
-also:
-
-This procedure works on Linux servers running Python 2.6 and higher.
-
-----
-## 2-Star Requirements: Objective Formatting Checklist
-
-### Use headings
-
-Headings in markdown provide anchors that can be used to easily reference sub-sections of long pieces of documentation. This is preferable to just numbering sections without headings.
-
-##### Correct:
-
-----
-##### Step 1: Add a heading
-This makes things easier to reference via hyperlinks
-##### Step 2: Link to headings
-So things are easier to find
-
-----
-##### Incorrect:
-
-----
-**Step 1: Add a heading**
-This makes things easier to reference via hyperlinks
-**Step 2: Link to headings**
-So things are easier to find
-----
-
-### Use appropriate heading case
-
-Cases in headings may vary depending on usage.
-
-#### When to use Title Case
-
-H1, H2, H3 headings should be "Title Case" and less than four words, except if a colon is used, then four words per segment separated by the colon.
-
-These large headings are typically shorter and help with navigating large documents
-
-#### When to use sentence case
-
-H3, H4, H5 headings should be "Sentence case" and can be any length.
-
-These headers are smaller and used to summarize sections. H3 can be considered either a large or small heading.
-
-These conventions are new, so there's flexibility around them, when you're not sure, consider the convention here as default.
-
-### Sub-section headings should end with a colon
-
-For readability and clear layout, end a sub-section heading with a colon
-
-##### Correct:
-
-----
-
-Service Based:
-
-- [AWS Elastic Beanstalk Setup](https://github.com/mattermost/platform/blob/master/doc/install/Amazon-Elastic-Beanstalk.md)
-
-----
-##### Incorrect:
-
-----
-
-Service Based
-
-- [AWS Elastic Beanstalk Setup](https://github.com/mattermost/platform/blob/master/doc/install/Amazon-Elastic-Beanstalk.md)
-
-
-----
-
-### One instruction per line
-
-It's easy to miss instructions when they're compounded. Have only one instruction per line, so documentation looks more like a checklist.
-
-A support person should be able to say "Did you complete step 7?" instead of "Did you complete the second part of step 7 after doing XXX?"
-
-##### Correct:
-
-----
-
-6. For **Predefined configuration** look under **Generic** and select **Docker**.
- 7. For **Environment type** select **Single instance**
-
-----
-
-##### Incorrect:
-
-----
-
-6. For **Predefined configuration** look under **Generic** and select **Docker**. For **Environment type** select **Single instance**
-
-----
-
-### End Lists Consistently
-
-Full sentences in lists should end with proper punctuation. If one point in a bulleted list or numbered list ends with a period, end all points in the list with a period. If all points in the list are fragments, use no end punctuation.
-
-##### Correct
-
-----
-- This is an example of a bullet point that ends with a period.
-
-----
-##### Incorrect
-
-----
-- Example of an incorrect period at the end of a bullet point.
-
-----
-### Avoid Passive Phrases
-
-Examples of passive phrases include "have", "had", "was", "can be", "has been" and documentation is shorter and clearer without them.
-
-##### Correct
-
-----
-This software **runs** on any server that supports Python.
-
-----
-##### Incorrect
-
-----
-This software **can be run** on any server that supports Python.
-
-----
-## 3-Star Requirements: Subjective Style Guidelines
-
-### Be Concise
-
-Try to use fewer words when possible.
-
-##### Correct:
-
-----
-This integration posts [issue](http://doc.gitlab.com/ee/web_hooks/web_hooks.html#issues-events), [comment](http://doc.gitlab.com/ee/web_hooks/web_hooks.html#comment-events) and [merge request](http://doc.gitlab.com/ee/web_hooks/web_hooks.html#merge-request-events) events from a GitLab repository into specific Mattermost channels by formatting output from [GitLab's outgoing webhooks](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/web_hooks/web_hooks.md) to [Mattermost's incoming webhooks](https://github.com/mattermost/platform/blob/master/doc/integrations/webhooks/Incoming-Webhooks.md).
-
-----
-##### Incorrect:
-
-----
-This integration makes use of GitLab's outgoing webhooks and Mattermost's incoming webhooks to post GitLab events into Mattermost. You can find GitLab's outgoing webhooks described [here](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/web_hooks/web_hooks.md) and Mattermost's incoming webhooks described [here](https://github.com/mattermost/platform/blob/master/doc/integrations/webhooks/Incoming-Webhooks.md).
-
-----
-
-### Use appropriate emphasis
-
-Mention Clickable Controls in **Bold**, Sections and Setting Names in *Italics*, and Key Strokes in `pre-formatted text`.
-
-To make it clear and consistent across documentation on how we describe controls that a user is asked to manipulate, we have a number of guidelines:
-
-**Bold**
-- Please **bold** the names of controls you're asking users to click. The text that is bolded should match the label of the control in the user interface. Do not format these references with _italics_, ALL-CAPS or `pre-formatted text`.
-- Use `>` to express a series of clicks, for example clicking on **Button One** > **Button Two** > **Button Three**.
-- If a button might be difficult to find, give a hint about its location _before_ mentioning the name of the control (this helps people find the hint before they start searching, if the see the name of the button first, they might not continue reading to find the hint before starting to look).
-
-***Italics***
-- Please *italicize* setting names or section headings that identify that the user is looking in the correct area. The text that is italicized should match the name of the setting or section in the user interface.
-- It is helpful to use italics to guide the user to the correct area before mentioning a clickable action in bold.
-
-**`pre-formatted text`**
-- Please use `pre-formatted text` to identify when a user must enter key strokes or paste text into an input box.
-
-#### Correct
-
-----
-Type `mattermost-integration-giphy` in the *repo-name* field, then click **Search** and then the **Connect** button once Heroku finds your repository
-
-----
-#### Incorrect
-
-----
-Type "mattermost-integration-giphy" in the **repo-name** field, then click Search and then the *Connect* button once Heroku finds your repository
-
-----
diff --git a/doc/process/overview.md b/doc/process/overview.md
deleted file mode 100644
index 8a4c0459d..000000000
--- a/doc/process/overview.md
+++ /dev/null
@@ -1,143 +0,0 @@
-# Development Process Overview
-
-This document describes the process through which feedback and design discussions flow into community systems, then into tickets, then into pull requests, then into monthly releases based on the purpose of the product.
-
-## Purpose
-
-The core offer for users of Mattermost is:
-
-- **All your team communication in one place, searchable and accessible anywhere.**
-
-The design is successful if 100% of team members use Mattermost for internal communications, and are largely off of email and propreitary SaaS products that lock-in user data as part of their business model.
-
-See [Mattermost scope statement](http://www.mattermost.org/vision/#mattermost-teams-v1) for more details.
-
-## Community Systems
-
-The process for managing bugs, feature ideas, troubleshooting, and general discussions are different, so different systems are used to best support each process. Each system ties into Mattermost through notifications to internal channels, so the core team and key contributors can keep up-to-date with community feedback across all systems throughout the day.
-
-Systems include:
-
-### Feature Idea Forum
-
-A forum for filing, upvoting and discussing feature ideas. Reviewed monthly by the core team as part of the planning process for new releases.
-
-See [Contributing Feature Ideas](http://www.mattermost.org/feature-requests/) for more details on how to use this system.
-
-_Note: If you want to promote an idea filed in the feature idea forum, or if you are out of votes and want to find like-minded colleagues to vote for you, consider posting to the [Feature Idea Discussion ](https://forum.mattermost.org/t/how-to-use-feature-idea-discussion/63/1) category in the General Forum._
-
-
-### Troubleshooting Forum
-
-A system for peer-to-peer support of installation and configuration questions.
-
-See [Troubleshooting Forum](https://forum.mattermost.org/t/about-the-trouble-shooting-category/150/1).
-
-
-### GitHub Issues
-
-A system primarily used by Mattermost for reporting bugs with clear statements on repro steps and expected behavior. While it's okay to add feature requests and questions here to start conversations, moderators may ask a submitter's help to move discussions to one of the other channels.
-
-See [Filing Issues](http://www.mattermost.org/filing-issues/) for details on how to file issues for Mattermost in GitHub.
-
-Please consider using more mainstream processes for [filing feature ideas to be upvoted](https://github.com/mattermost/platform/blob/master/doc/process/overview.md#feature-idea-forum), to ask [troubleshooting questions](https://github.com/mattermost/platform/blob/master/doc/process/overview.md#troubleshooting-forum), or [general questions](https://github.com/mattermost/platform/blob/master/doc/process/overview.md#general-forum).
-
-### GitHub Pull Requests
-
-A system for submitting pull requests for changes to Mattermost. See [Pull Requests](https://github.com/mattermost/platform/blob/master/doc/process/overview.md#merge-requests) section below.
-
-### General Forum
-
-A general, peer-to-peer discussion forum with topics organized by category for general questions, trouble shooting, design feedback requests, and FAQs. Monitored and moderated by core team, which is also active on the forum.
-
-Read more about the [General Forum](https://forum.mattermost.org/t/welcome-to-mattermost-community-discussion/8).
-
-### Primary Research
-
-Core team members and key contributors may discuss Mattermost directly with users in a range of systems outside those listed here--in-person meetings, video-conference, usability testing, Twitter, email, etc. Those notes are shared in various Mattermost channels to inform designs.
-
-## Tickets
-
-Mattermost priorities are managed in Jira tickets, which are created by the core team via feedback from community systems as well as through the planning processes.
-
-### Triage
-
-On non-holiday weekdays new tickets are reviewed in a process called "triage", and assigned a Fix Version of "backlog", indicating the ticket has enough specificity that it can be assigned to a developer to be completed.
-
-By default, all tickets are created as public unless they contain sensitive information. The triage process reviews them for sufficient specifity. If the ticket is unclear, triage may reassign the ticket back to the original reporter to add more details.
-
-View [current issues scheduled for the next triage meeting](https://mattermost.atlassian.net/browse/PLT-1203?filter=10105).
-
-#### Re-triage
-
-If someone feels an existing ticket should be reexamined, they can add "triage" to the Fix Version and it will be routed to the triage team for review at the next meeting.
-
-### Release Planning
-
-Release planning sets the "Fix Version" of tickets to one of the upcoming monthly releases. The Fix Version is an estimate of when a feature might ship, which may change as the planning process continues, until the ticket is scheduled for a Sprint.
-
-### Sprint Planning
-
-Tickets to be completed in the upcoming two weeks are organized on Tuesdays, with input from developers, and finalized on Fridays.
-
-## Pull Requests
-
-### Core Team Weekly Rhythm
-
-Core team work on tickets in the active sprint on a weekly basis, which flow into GitHub Pull Requests.
-
-Each Pull Request needs a minimum of two reviews by other core team developers before it is merged, with possible feedback shared as reviews happen.
-
-Key contributors might also pick up tickets, or through conversations with the core team contribute pull requests as needed.
-
-### Community Contributions
-
-Community members following the [Contribution Guidelines](https://github.com/mattermost/platform/blob/master/CONTRIBUTING.md) might also submit pull requests. Pull requests should not disable existing functionality without a Jira ticket, which are opened [via the feature ideas process](http://www.mattermost.org/feature-requests/).
-
-#### Bug Fixes
-
-If you see an obvious bug and want to submit a fix, pull requests following the [contribution guidelines](https://github.com/mattermost/platform/blob/master/CONTRIBUTING.md) are gladly accepted.
-
-Examples:
-- [Fix: Unable to change password #1390](https://github.com/mattermost/platform/pull/1390)
-- [Fix isBrowserEdge typo #1260](https://github.com/mattermost/platform/pull/1260)
-
-#### Tickets Accepting Pull Requests
-
-If you'd like to improve the product beyond bug fixes, you can select from a list of tickets accepting pull requests prepared by the core team.
-
-Tickets labelled "accepting pull requests" are intended to be unambiguous projects that could be reasonably completed by contributors outside the core team and are welcome contributions.
-
-Tickets may have a "mana" value assigned, which is an estimate of the relative complexity of each ticket (2 is "small", "4" is medium, "8" is large).
-
-Even if the ticket is assigned to someone else, so long as the ticket has Status set to Open and the ticket is not in the [Active Sprint](https://mattermost.atlassian.net/browse/PLT-839?jql=status%20%3D%20Open%20AND%20sprint%20in%20openSprints%20()) contributors following the contribution guidelines are welcome to submit pull requests.
-
-For a list of tickets that meet this criteria, please the list of [Tickets Accepting Pull Requests](https://mattermost.atlassian.net/browse/PLT-1263?filter=10101).
-
-#### Documentation Improvements
-
-Improvements to documentation on master is highly welcome.
-
-Please see [documentation contribution guidelines](https://forum.mattermost.org/t/help-improve-mattermost-documentation/194) for more details.
-
-Examples:
-- [Production installation instructions for Debian Jessie with Systemd #1134](https://github.com/mattermost/platform/pull/1134)
-- [Fix deadlink to AWS file in doc #622]( https://github.com/mattermost/platform/pull/622)
-
-#### Minor Improvements
-
-Minor improvements without an Accepting Pull Request ticket may be accepted if:
-
-1. The contribution aligns with product scope
-2. The change is high quality, and does not impose a significant burden for others to test, document and maintain your change.
-3. The change aligns with the [fast, obvious, forgiving](http://www.mattermost.org/design-principles/) design principle.
-
-Examples:
-- [Do not clear LastActivityAt for GetProfiles #1396](https://github.com/mattermost/platform/pull/1396/files)
-- [Update to proxy_pass #1331](https://github.com/mattermost/platform/pull/1331)
-
-## Release
-
-Mattermost ships stable releases on the 16th of the month. Releases begin with a planning process reviewing internal designs and community feedback in the context of the product purpose. Feature development is done in weekly sprints, and releases end with feature complete, stablization, code complete and release candidate milestones prior to final release.
-
-See [release process documentation](https://github.com/mattermost/platform/blob/master/doc/process/release-process.md) for more details.
diff --git a/doc/process/release-process.md b/doc/process/release-process.md
deleted file mode 100644
index 6e1cf6a77..000000000
--- a/doc/process/release-process.md
+++ /dev/null
@@ -1,156 +0,0 @@
-# Mattermost Release Process
-
-Mattermost core team works on a monthly release process, with a new version shipping on the 16th of each month.
-
-This document outlines the development process for the Mattermost core team, which draws from what we find works best for us from Agile, Scrum and Software Development Lifecycle approaches.
-
-Notes:
-- All cut-off dates are based on 10am PST (UTC-07/08) on the day stated.
-- T-minus counts are measured in "working days" (weekdays other than major holidays concurrent in US and Canada) prior to release day.
-
-### (Code complete date of previous release) Beginning of release
-
-Pre-work for the current release begins at the code complete date of the previous release. See "Code Complete" section below for details.
-
-### (T-minus 10 working days) Cut-off for major features
-
-No pull requests for major features should be submitted to the current release after this date (except if release manager decides to add "release-exception" label to Jira ticket).
-
-1. Logistics:
- 1. Post this checklist in Release channel
-2. PM:
- 1. Write compatibility updates for config.json and database changes [See example](https://github.com/mattermost/platform/blob/master/CHANGELOG.md#compatibility)
- - Confirm changes to config.json in compatibility section of Changelog are written back to [settings documentation](https://github.com/mattermost/platform/blob/master/doc/install/Configuration-Settings.md)
- - Update [Upgrade Guide](https://github.com/mattermost/platform/blob/master/doc/install/Upgrade-Guide.md) for any steps needed to upgrade to new version
- - Prepare tickets for [cutting RC builds](https://mattermost.atlassian.net/browse/PLT-985), [creating the final release candidate](https://mattermost.atlassian.net/browse/PLT-986), [creating AMIs](https://mattermost.atlassian.net/browse/PLT-1213), and [testing GitLab RC with Mattermost](https://mattermost.atlassian.net/browse/PLT-1013)
-3. Dev:
- 1. Prioritize reviewing, updating, and merging of pull requests for current release until there are no more tickets in the [pull request queue](https://github.com/mattermost/platform/pulls) marked for the current release
-4. Leads: Meet to prioritize the final tickets of the release
- 1. Backlog is reviewed and major features that won’t make it are moved to next release
- - Triage tickets
- - Finalize roadmap for next release
- - Draft roadmap for release after next (used to prioritize design tasks)
-5. Marketing:
- 1. Drafts marketing bullet points for next release based off of roadmap
- - Submits pull request for "Highlights" section of the Changelog
- - Notes date of announcements in release channel
-6. Team:
- 1. In Stand-up, each team member discusses worst bug (10-15s)
-
-### (T-minus 8 working days) Feature Complete and Stabilization
-
-**Stablization** period begins when all features for release have been committed. During this period, only **bugs** can be committed to master. Non-bug pull requests are tagged for next version, and are not committed to master until after a release candidate is cut.
-
-Exceptions can be made by the release manager setting priority to "Highest" and adding a "release-exception" label to the Jira ticket. This will add the ticket to the [hotfix list for release candidate](https://mattermost.atlassian.net/issues/?filter=10204).
-
-1. Logistics:
- 1. Post this checklist in Release channel
- - Update the channel header to reflect date
- - Mail out mugs to any new contributors
-- Dev:
- 1. Prioritize reviewing, updating, and merging of pull requests for current release until there are no more tickets in the [pull request queue](https://github.com/mattermost/platform/pulls) marked for the current release
-- PM:
- 1. Review all [Severity 1 bugs (data loss or security)](https://mattermost.atlassian.net/secure/IssueNavigator.jspa?mode=hide&requestId=10600) to consider for adding to Hotfix list
- - Update documentation:
- 1. Make Changelog PR with updates for latest feature additions, known issues, and contributors
- - Make NOTICE.txt PR for any new libraries added from dev, if not added already
- - Prioritize any developer documentation tickets
- - Draft [GitLab ticket](https://gitlab.com/gitlab-org/omnibus-gitlab/issues/942) to take next Mattermost version in the Omnibus, but do not post until RC1 is cut
- - Coordinate testing:
- 1. Work with Ops to check the [Quality Gate](https://github.com/mattermost/process/blob/master/release/quality-gates.md) for feature complete
- - Receive testing sign-off from feature area owners (i.e. PM/Dev either signs-off that their area is well tested, or flags potential quality issues that may exist)
- - Check that Release Candidate Testing Spreadsheet is up to date
-- **(Team) Feature Complete Meeting (10:15am PST)**:
- 1. (PM) Leads review of Changelog
- - (Team) Each team member discusses worst bug (10-15s)
- - (PM) Review feature list for next release
- - (Marketing) Share draft of marketing bullet points for next release
-- Marketing:
- 1. Communicate checklist of items needed by specific dates to write the blog post announce (e.g. screenshots, GIFs, documentation) and begins to write the blog post, tweet, and email for the release announcement
-
-### (T-minus 5 working days) Code Complete and Release Candidate Cut
-
-1. Logistics:
- 1. Post this checklist in Release channel
- - For the next release, create team meetings on Feature Complete and Code Complete dates
-- PM:
- 1. Remove "Under Development" notice for current release from Changelog on master
- - Assign each area of the release testing spreadsheet to a team member
-- **(Team) Code Complete Meeting (10:15am PST meeting)**
- 1. (Logistics) Walk through each item of this checklist
- - (Dev) Last check of tickets that need to be merged before RC1
- - (Team) Each team member discusses worst bug (10-15s)
-- **Code Complete** is declared after meeting
-- Dev:
- 1. Prioritize reviewing, updating, and merging of pull requests for current release until there are no more tickets in the [pull request queue](https://github.com/mattermost/platform/pulls) marked for the current release
-- Build:
- 1. Master is tagged and branched and “Release Candidate 1″ is cut (e.g. 1.1.0-RC1) according to the [Release Candidate Checklist](https://github.com/mattermost/process/blob/master/release/create-release-candidate.md)
-- PM:
- 1. Create meta issue for regressions in GitHub (see [example](https://github.com/mattermost/platform/issues/574))
- - Include link to meta-issue in release notes of RC1
- - Submit GitLab ticket to take next Mattermost version in the Omnibus
-- Marketing:
- 1. Tweet announcement that RC1 is ready (see [example](https://twitter.com/mattermosthq/status/664172166368264192))
-
-### (T-minus 4 working days) Release Candidate Testing
-
-1. Logistics:
- 1. Post this checklist in Release channel
- - Queue an agenda item for next team meeting for Release Process Kaizen/Q&A
-- Build:
- 1. Test upgrade from previous version to current version, following the [Upgrade Guide](https://github.com/mattermost/platform/blob/master/doc/install/Upgrade-Guide.md)
- - Database upgrade should be tested on both MySQL and Postgres
-- Team:
- 1. Test assigned areas of the Release Candidate Testing Spreadsheet and file any bugs found in Jira
- - Post a link to any "Blocking" issue that may need a hotfix to the RC in the Release room, with the **#p1** tag. If the issue is security related or contains confidential information, post the link in the Confidential Bugs private group. Blocking issues are considered to be security issues, data loss issues, issues that break core functionality, or significantly impact aesthetics.
- - Triage hotfix candidates and decide on whether and when to cut next RC or final
- - If no blocking issues are found, PM, Dev and Ops signs off on the release
-- PM:
- 1. Post links to all issues found in RC as comments on the meta issue
- - Update the meta issue description to include approved fixes
- - Post screenshot and link to final tickets for next RC to the Release room
- - Update Changelog “Known Issues” section with any significant issues that were found and not fixed for the final release
-- Dev:
- 1. PRs for hotfixes made to release branch, and changes from release branch are merged into master
-- Logistics:
- 1. For potentially destabilizing changes, test approved fixes on a spinmint private build
-- Build:
- 1. Push next RC to acceptance after testing is complete and approved fixes merged, announces in Town Square on pre-release.mattermost.com/core
-- PM:
- 1. Closes the meta issue after the next RC is cut, and opens another ticket for new RC
-- Ops:
- 1. Verifies each of the issues in meta ticket is fixed
-
-### (T-minus 2 working days) Release Build Cut
-
-The final release is cut. If an urgent and important issue needs to be addressed between major releases, a bug fix release (e.g. 1.1.1) may be created
-
-1. Logistics:
- 1. Post this checklist in Release channel
-- Build:
- 1. Tags a new release (e.g. 1.1.0) and runs an official build which should be essentially identical to the last RC
- - Delete RCs after final version is shipped
-- PM:
- 1. Copy and paste the Release Notes from the Changelog to the Release Description
- - Update the mattermost.org/download page
- - Update the AMI links on mattermost.org/download and mattermost.org/installation
- - Close final GitHub RC meta ticket
-- Marketing:
- 1. Finalize mailchimp email blast
- - Finalize blog post and put on timer for release
- - Finalize tweet announcement
- - Finalize announcement on general mailing list
- - Finalize announcement for gitlab.mattermost.com
-
-### (T-minus 0 working days) Release Day
-
-1. Logistics:
- 1. Post this checklist in Release channel
- - Post key dates for the next release in the header of the Release channel
-- PM:
- 1. Close the release in Jira
- - Set header of next release as UNDER DEVELOPMENT in CHANGELOG on master
-- Dev:
- 1. Check if any libraries need to be updated for the next release, and if so bring up in weekly team meeting
-- Marketing:
- 1. Confirm marketing has been posted (animated GIFs, screenshots, mail announcement, tweets, blog posts)
diff --git a/doc/usage/Markdown.md b/doc/usage/Markdown.md
deleted file mode 100644
index 65e6f2121..000000000
--- a/doc/usage/Markdown.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Markdown Help
-
-Moved to [help/Markdown.md](../help/Markdown.md)
diff --git a/tests/README.md b/tests/README.md
new file mode 100644
index 000000000..a7b36f18d
--- /dev/null
+++ b/tests/README.md
@@ -0,0 +1,18 @@
+# Testing Text Processing
+The text processing tests located in the [doc/developer/tests folder](https://github.com/mattermost/platform/tree/master/doc/developer/tests) are designed for use with the `/loadtest url` command. This command posts the raw contents of a specified .md file in the doc/developer/test folder into Mattermost.
+
+## Turning on /loadtest
+Access the **System Console** from the Main Menu. Under *Service Settings* make sure that *Enable Testing* is set to `true`, then click **Save**. You may also change this setting from `config.json` by setting `”EnableTesting”: true`. Changing this setting requires a server restart to take effect.
+
+## Running the Tests
+In the text input box in Mattermost, type: `/loadtest url [file-name-in-testing-folder].md`. Some examples:
+
+`/loadtest url test-emoticons.md`
+`/loadtest url test-links.md`
+
+#### Notes:
+1. If a test has prerequisites, make sure your Mattermost setup meets the requirements described at the top of the test file.
+2. Some tests are over 4000 characters in length and will render across multiple posts.
+
+## Manual Testing
+It is possible to manually test specific sections of any test, instead of using the /loadtest command. Do this by clicking **Raw** in the header for the file when it’s open in GitHub, then copy and paste any section into Mattermost to post it. Manual testing only supports sections of 4000 characters or less per post.
diff --git a/tests/test-attachments.md b/tests/test-attachments.md
new file mode 100644
index 000000000..75a2285f8
--- /dev/null
+++ b/tests/test-attachments.md
@@ -0,0 +1,144 @@
+# Testing Files and Attachments
+This test contains instructions for the core team to manually test common attachment types. All files for testing are stored in the [mm_file_testing](https://www.dropbox.com/sh/i7ft8is5hbhk8ii/AAAyM-WG-X2jiQOgg6-E3MmLa?dl=0) dropbox folder. Follow these instructions:
+
+1. Download the entire [mm_file_testing](https://www.dropbox.com/sh/i7ft8is5hbhk8ii/AAAyM-WG-X2jiQOgg6-E3MmLa?dl=0) folder.
+2. Drag and drop each file type into Mattermost to upload it.
+3. Post the file attachment
+
+**Notes:**
+- All file types should upload and post.
+- Read the expected for details on the behavior of the thumbnail and preview window.
+- The expected behavior of video and audio formats depends on the operating system, browser and plugins. View the permalinks to the Public Test Channel on Pre-Release Core to see the expected cases.
+- If the browser can play the media file, media player controls should appear. If the browser cannot play the file, it should show appear as a regular attachment without the media controls.
+
+
+### Images
+**JPG**
+`Images/JPG.jpg`
+Expected: Scaled thumbnail & preview window
+[Permalink](https://pre-release.mattermost.com/core/pl/bgx3wcd9ppdo7fz9zqokofg7sc)
+
+**PNG**
+`Images/PNG.png`
+Expected: Scaled thumbnail & preview window
+[Permalink](https://pre-release.mattermost.com/core/pl/zra4yhm69j8ij81iy5hw7983qe)
+
+**BMP**
+`Images/BMP.bmp`
+Expected: Scaled thumbnail & preview window
+[Permalink](https://pre-release.mattermost.com/core/pl/1hx7x7t1npn4jqyr5rb1qhbj3h)
+
+**GIF**
+`Images/GIF.gif`
+Expected: Scaled thumbnail & preview window. GIF should auto-play in the preview window.
+[Permalink](https://pre-release.mattermost.com/core/pl/j49fowdkstr57g3ed9bgpfoo5w)
+
+**TIFF**
+`Images/TIFF.tiff`
+Expected: Generic attachment thumbnail & preview window
+[Permalink](https://pre-release.mattermost.com/core/pl/6yad4jydaidr3pc3tihp8n8bge)
+
+**PSD**
+`Images/PSD.psd`
+Expected: Generic attachment thumbnail & preview window
+[Permalink](https://pre-release.mattermost.com/core/pl/4kitwk7pi78c9ck4i98f9xnzoe)
+
+
+### Documents
+
+**PDF Files**
+`Documents/PDF.pdf`
+Expected: Generic PDF thumbnail & preview window.
+[Permalink](https://pre-release.mattermost.com/core/pl/o1dg6menetdszrhyxmtoqjfi8h)
+
+
+**Excel**
+`Documents/Excel.xlsx`
+Expected: Generic Excel thumbnail & preview window.
+[Permalink](https://pre-release.mattermost.com/core/pl/71wwezy3f7drze6ipundscb17y)
+
+
+**PPT**
+`Documents/PPT.pptx`
+Expected: Generic Powerpoint thumbnail & preview window.
+[Permalink](https://pre-release.mattermost.com/core/pl/mx37h4znwb8f5ffuoajusqhiew)
+
+**Word**
+`Documents/Word.docx`
+Expected: Generic Word thumbnail & preview window.
+[Permalink](https://pre-release.mattermost.com/core/pl/d7s76wp6kjdwfp4hgrwpijsnyy)
+
+
+### Videos
+
+**MP4**
+`Videos/MP4.mp4`
+Expected: Generic video thumbnail, view Permalink for preview window behavior. Expected depends on the operating system, browser and plugins.
+[Permalink](https://pre-release.mattermost.com/core/pl/5dx5qx9t9brqfnhohccxjynx7c)
+
+**AVI**
+`Videos/AVI.avi`
+Expected: Generic video thumbnail, view Permalink for preview window behavior. Expected depends on the operating system, browser and plugins.
+[Permalink](https://pre-release.mattermost.com/core/pl/qwn9eiy7j3rkjyruxhcugpogdw)
+
+**MKV**
+`Videos/MKV.mkv`
+Expected: Generic video thumbnail, view Permalink for preview window behavior. Expected depends on the operating system, browser and plugins.
+[Permalink](https://pre-release.mattermost.com/core/pl/tszyjkr1cidhxjgiusa4mde3ja)
+
+**MOV**
+`Videos/MOV.mov`
+Expected: Generic video thumbnail, view Permalink for preview window behavior. Expected depends on the operating system, browser and plugins.
+[Permalink](https://pre-release.mattermost.com/core/pl/ienzppz5i3f7tbt5jiujn8uuir)
+
+**MPG**
+`Videos/MPG.mpg`
+Expected: Generic video thumbnail, view Permalink for preview window behavior. Expected depends on the operating system, browser and plugins.
+[Permalink](https://pre-release.mattermost.com/core/pl/skggdq1hfpritc6c88bi481p5a)
+
+**Webm**
+`Videos/WEBM.webm`
+Expected: Generic video thumbnail, view Permalink for preview window behavior. Expected depends on the operating system, browser and plugins.
+[Permalink](https://pre-release.mattermost.com/core/pl/7h8tysuxgfgsxeht3sbn7e4h6y)
+
+**WMV**
+`Videos/WMV.wmv`
+Expected: Generic video thumbnail, view Permalink for preview window behavior. Expected depends on the operating system, browser and plugins.
+[Permalink](https://pre-release.mattermost.com/core/pl/kaom7j7uyjra7bzhrre6qwdrbw)
+
+### Audio
+
+**MP3**
+`Audio/MP3.mp3`
+Expected: Generic audio thumbnail & playable preview window
+[Permalink](https://pre-release.mattermost.com/core/pl/if4gn8dbrjgx8fmqmkukzefyme)
+
+**M4A**
+`Audio/M4a.m4a`
+Expected: Generic audio thumbnail, view Permalink for preview window behavior. Expected depends on the operating system, browser and plugins.
+[Permalink](https://pre-release.mattermost.com/core/pl/6c7qsw48ybd88bktgeykodsrrc)
+
+**AAC**
+`Audio/AAC.aac`
+Expected: Generic audio thumbnail, view Permalink for preview window behavior. Expected depends on the operating system, browser and plugins.
+[Permalink](https://pre-release.mattermost.com/core/pl/3naoy5pr5tydbk1m6yo1ast9ny)
+
+**FLAC**
+`Audio/FLAC.flac`
+Expected: Generic audio thumbnail, view Permalink for preview window behavior. Expected depends on the operating system, browser and plugins.
+[Permalink](https://pre-release.mattermost.com/core/pl/kf4cmy44dfya5efmse7rg43eih)
+
+**OGG**
+`Audio/OGG.ogg`
+Expected: Generic audio thumbnail, view Permalink for preview window behavior. Expected depends on the operating system, browser and plugins.
+[Permalink](https://pre-release.mattermost.com/core/pl/dezrcpbxapyexe77rjuzkrp63r)
+
+**WAV**
+`Audio/WAV.wav`
+Expected: Generic audio thumbnail, view Permalink for preview window behavior. Expected depends on the operating system, browser and plugins.
+[Permalink](https://pre-release.mattermost.com/core/pl/pdkxx1udepdnbmi9j8kyas5xbh)
+
+**WMA**
+`Audio/WMA.wma`
+Expected: Generic audio thumbnail, view Permalink for preview window behavior. Expected depends on the operating system, browser and plugins.
+[Permalink](https://pre-release.mattermost.com/core/pl/756wrmdd57dcig3m4emypp6i1h)
diff --git a/tests/test-emoticons.md b/tests/test-emoticons.md
new file mode 100644
index 000000000..fc2594d9e
--- /dev/null
+++ b/tests/test-emoticons.md
@@ -0,0 +1,22 @@
+# Emoticon Testing
+Verify that all emoticons render. This test should render in three separate messages since it's ~11000 characters.
+
+### Emoticon - Punctuation
+
+:) :-) ;) ;-) :o :O :-o :-O :] :-] :d :-D x-d x-D :p :-P :@ :( :-( :'( :/ :-/ :s :-s :| :-| :$ :-$ :-x <3 :+1: :-1:
+
+### Emoticons - People
+:bowtie: :smile: :laughing: :blush: :smiley: :relaxed: :smirk: :heart_eyes: :kissing_heart: :kissing_closed_eyes: :flushed: :relieved: :satisfied: :grin: :wink: :stuck_out_tongue_winking_eye: :stuck_out_tongue_closed_eyes: :grinning: :kissing: :kissing_smiling_eyes: :stuck_out_tongue: :sleeping: :worried: :frowning: :anguished: :open_mouth: :grimacing: :confused: :hushed: :expressionless: :unamused: :sweat_smile: :sweat: :disappointed_relieved: :weary: :pensive: :disappointed: :confounded: :fearful: :cold_sweat: :persevere: :cry: :sob: :joy: :astonished: :scream: :neckbeard: :tired_face: :angry: :rage: :triumph: :sleepy: :yum: :mask: :sunglasses: :dizzy_face: :imp: :smiling_imp: :neutral_face: :no_mouth: :innocent: :alien: :yellow_heart: :blue_heart: :purple_heart: :heart: :green_heart: :broken_heart: :heartbeat: :heartpulse: :two_hearts: :revolving_hearts: :cupid: :sparkling_heart: :sparkles: :star: :star2: :dizzy: :boom: :collision: :anger: :exclamation: :question: :grey_exclamation: :grey_question: :zzz: :dash: :sweat_drops: :notes: :musical_note: :fire: :hankey: :poop: :shit: :+1: :thumbsup: :-1: :thumbsdown: :ok_hand: :punch: :facepunch: :fist: :v: :wave: :hand: :raised_hand: :open_hands: :point_up: :point_down: :point_left: :point_right: :raised_hands: :pray: :point_up_2: :clap: :muscle: :metal: :fu: :runner: :running: :couple: :family: :two_men_holding_hands: :two_women_holding_hands: :dancer: :dancers: :ok_woman: :no_good: :information_desk_person: :raising_hand: :bride_with_veil: :person_with_pouting_face: :person_frowning: :bow: :couplekiss: :couple_with_heart: :massage: :haircut: :nail_care: :boy: :girl: :woman: :man: :baby: :older_woman: :older_man: :person_with_blond_hair: :man_with_gua_pi_mao: :man_with_turban: :construction_worker: :cop: :angel: :princess: :smiley_cat: :smile_cat: :heart_eyes_cat: :kissing_cat: :smirk_cat: :scream_cat: :crying_cat_face: :joy_cat: :pouting_cat: :japanese_ogre: :japanese_goblin: :see_no_evil: :hear_no_evil: :speak_no_evil: :guardsman: :skull: :feet: :lips: :kiss: :droplet: :ear: :eyes: :nose: :tongue: :love_letter: :bust_in_silhouette: :busts_in_silhouette: :speech_balloon: :thought_balloon: :feelsgood: :finnadie: :goberserk: :godmode: :hurtrealbad: :rage1: :rage2: :rage3: :rage4: :suspect: :trollface:
+
+### Emoticons - Nature
+:sunny: :umbrella: :cloud: :snowflake: :snowman: :zap: :cyclone: :foggy: :ocean: :cat: :dog: :mouse: :hamster: :rabbit: :wolf: :frog: :tiger: :koala: :bear: :pig: :pig_nose: :cow: :boar: :monkey_face: :monkey: :horse: :racehorse: :camel: :sheep: :elephant: :panda_face: :snake: :bird: :baby_chick: :hatched_chick: :hatching_chick: :chicken: :penguin: :turtle: :bug: :honeybee: :ant: :beetle: :snail: :octopus: :tropical_fish: :fish: :whale: :whale2: :dolphin: :cow2: :ram: :rat: :water_buffalo: :tiger2: :rabbit2: :dragon: :goat: :rooster: :dog2: :pig2: :mouse2: :ox: :dragon_face: :blowfish: :crocodile: :dromedary_camel: :leopard: :cat2: :poodle: :paw_prints: :bouquet: :cherry_blossom: :tulip: :four_leaf_clover: :rose: :sunflower: :hibiscus: :maple_leaf: :leaves: :fallen_leaf: :herb: :mushroom: :cactus: :palm_tree: :evergreen_tree: :deciduous_tree: :chestnut: :seedling: :blossom: :ear_of_rice: :shell: :globe_with_meridians: :sun_with_face: :full_moon_with_face: :new_moon_with_face: :new_moon: :waxing_crescent_moon: :first_quarter_moon: :waxing_gibbous_moon: :full_moon: :waning_gibbous_moon: :last_quarter_moon: :waning_crescent_moon: :last_quarter_moon_with_face: :first_quarter_moon_with_face: :crescent_moon: :earth_africa: :earth_americas: :earth_asia: :volcano: :milky_way: :partly_sunny: :octocat: :squirrel:
+
+### Emoticons - Objects
+:bamboo: :gift_heart: :dolls: :school_satchel: :mortar_board: :flags: :fireworks: :sparkler: :wind_chime: :rice_scene: :jack_o_lantern: :ghost: :santa: :christmas_tree: :gift: :bell: :no_bell: :tanabata_tree: :tada: :confetti_ball: :balloon: :crystal_ball: :cd: :dvd: :floppy_disk: :camera: :video_camera: :movie_camera: :computer: :tv: :iphone: :phone: :telephone: :telephone_receiver: :pager: :fax: :minidisc: :vhs: :sound: :speaker: :mute: :loudspeaker: :mega: :hourglass: :hourglass_flowing_sand: :alarm_clock: :watch: :radio: :satellite: :loop: :mag: :mag_right: :unlock: :lock: :lock_with_ink_pen: :closed_lock_with_key: :key: :bulb: :flashlight: :high_brightness: :low_brightness: :electric_plug: :battery: :calling: :email: :mailbox: :postbox: :bath: :bathtub: :shower: :toilet: :wrench: :nut_and_bolt: :hammer: :seat: :moneybag: :yen: :dollar: :pound: :euro: :credit_card: :money_with_wings: :e-mail: :inbox_tray: :outbox_tray: :envelope: :incoming_envelope: :postal_horn: :mailbox_closed: :mailbox_with_mail: :mailbox_with_no_mail: :package: :door: :smoking: :bomb: :gun: :hocho: :pill: :syringe: :page_facing_up: :page_with_curl: :bookmark_tabs: :bar_chart: :chart_with_upwards_trend: :chart_with_downwards_trend: :scroll: :clipboard: :calendar: :date: :card_index: :file_folder: :open_file_folder: :scissors: :pushpin: :paperclip: :black_nib: :pencil2: :straight_ruler: :triangular_ruler: :closed_book: :green_book: :blue_book: :orange_book: :notebook: :notebook_with_decorative_cover: :ledger: :books: :bookmark: :name_badge: :microscope: :telescope: :newspaper: :football: :basketball: :soccer: :baseball: :tennis: :8ball: :8ball: :rugby_football: :bowling: :golf: :mountain_bicyclist: :bicyclist: :horse_racing: :snowboarder: :swimmer: :surfer: :ski: :spades: :hearts: :clubs: :diamonds: :gem: :ring: :trophy: :musical_score: :musical_keyboard: :violin: :space_invader: :video_game: :black_joker: :flower_playing_cards: :game_die: :dart: :mahjong: :clapper: :memo: :pencil: :book: :art: :microphone: :headphones: :trumpet: :saxophone: :guitar: :shoe: :sandal: :high_heel: :lipstick: :boot: :shirt: :tshirt: :necktie: :womans_clothes: :dress: :running_shirt_with_sash: :jeans: :kimono: :bikini: :ribbon: :tophat: :crown: :womans_hat: :mans_shoe: :closed_umbrella: :briefcase: :handbag: :pouch: :purse: :eyeglasses: :fishing_pole_and_fish: :coffee: :tea: :sake: :baby_bottle: :beer: :beers: :cocktail: :tropical_drink: :wine_glass: :fork_and_knife: :pizza: :hamburger: :fries: :poultry_leg: :meat_on_bone: :spaghetti: :curry: :fried_shrimp: :bento: :sushi: :fish_cake: :rice_ball: :rice_cracker: :rice: :ramen: :stew: :oden: :dango: :egg: :bread: :doughnut: :custard: :icecream: :ice_cream: :shaved_ice: :birthday: :cake: :cookie: :chocolate_bar: :candy: :lollipop: :honey_pot: :apple: :green_apple: :tangerine: :lemon: :cherries: :grapes: :watermelon: :strawberry: :peach: :melon: :banana: :pear: :pineapple: :sweet_potato: :eggplant: :tomato: :corn:
+
+### Emoticons - Places
+
+:house: :house_with_garden: :school: :office: :post_office: :hospital: :bank: :convenience_store: :love_hotel: :hotel: :wedding: :church: :department_store: :european_post_office: :city_sunrise: :city_sunset: :japanese_castle: :european_castle: :tent: :factory: :tokyo_tower: :japan: :mount_fuji: :sunrise_over_mountains: :sunrise: :stars: :statue_of_liberty: :bridge_at_night: :carousel_horse: :rainbow: :ferris_wheel: :fountain: :roller_coaster: :ship: :speedboat: :boat: :sailboat: :rowboat: :anchor: :rocket: :airplane: :helicopter: :steam_locomotive: :tram: :mountain_railway: :bike: :aerial_tramway: :suspension_railway: :mountain_cableway: :tractor: :blue_car: :oncoming_automobile: :car: :red_car: :taxi: :oncoming_taxi: :articulated_lorry: :bus: :oncoming_bus: :rotating_light: :police_car: :oncoming_police_car: :fire_engine: :ambulance: :minibus: :truck: :train: :station: :train2: :bullettrain_front: :bullettrain_side: :light_rail: :monorail: :railway_car: :trolleybus: :ticket: :fuelpump: :vertical_traffic_light: :traffic_light: :warning: :construction: :beginner: :atm: :slot_machine: :busstop: :barber: :hotsprings: :checkered_flag: :crossed_flags: :izakaya_lantern: :moyai: :circus_tent: :performing_arts: :round_pushpin: :triangular_flag_on_post: :jp: :kr: :cn: :us: :fr: :es: :it: :ru: :gb: :uk: :de:
+
+### Emoticons - Symbols
+:one: :two: :three: :four: :five: :six: :seven: :eight: :nine: :keycap_ten: :1234: :zero: :hash: :symbols: :arrow_backward: :arrow_down: :arrow_forward: :arrow_left: :capital_abcd: :abcd: :abc: :arrow_lower_left: :arrow_lower_right: :arrow_right: :arrow_up: :arrow_upper_left: :arrow_upper_right: :arrow_double_down: :arrow_double_up: :arrow_down_small: :arrow_heading_down: :arrow_heading_up: :leftwards_arrow_with_hook: :arrow_right_hook: :left_right_arrow: :arrow_up_down: :arrow_up_small: :arrows_clockwise: :arrows_counterclockwise: :rewind: :fast_forward: :information_source: :ok: :twisted_rightwards_arrows: :repeat: :repeat_one: :new: :top: :up: :cool: :free: :ng: :cinema: :koko: :signal_strength: :u5272: :u5408: :u55b6: :u6307: :u6708: :u6709: :u6e80: :u7121: :u7533: :u7a7a: :u7981: :sa: :restroom: :mens: :womens: :baby_symbol: :no_smoking: :parking: :wheelchair: :metro: :baggage_claim: :accept: :wc: :potable_water: :put_litter_in_its_place: :secret: :congratulations: :m: :passport_control: :left_luggage: :customs: :ideograph_advantage: :cl: :sos: :id: :no_entry_sign: :underage: :no_mobile_phones: :do_not_litter: :non-potable_water: :no_bicycles: :no_pedestrians: :children_crossing: :no_entry: :eight_spoked_asterisk: :sparkle: :eight_pointed_black_star: :heart_decoration: :vs: :vibration_mode: :mobile_phone_off: :chart: :currency_exchange: :aries: :taurus: :gemini: :cancer: :leo: :virgo: :libra: :scorpius: :sagittarius: :capricorn: :aquarius: :pisces: :ophiuchus: :six_pointed_star: :negative_squared_cross_mark: :a: :b: :ab: :o2: :diamond_shape_with_a_dot_inside: :recycle: :end: :back: :on: :soon: :clock1: :clock130: :clock10: :clock1030: :clock11: :clock1130: :clock12: :clock1230: :clock2: :clock230: :clock3: :clock330: :clock4: :clock430: :clock5: :clock530: :clock6: :clock630: :clock7: :clock730: :clock8: :clock830: :clock9: :clock930: :heavy_dollar_sign: :copyright: :registered: :tm: :x: :heavy_exclamation_mark: :bangbang: :interrobang: :o: :heavy_multiplication_x: :heavy_plus_sign: :heavy_minus_sign: :heavy_division_sign: :white_flower: :100: :heavy_check_mark: :ballot_box_with_check: :radio_button: :link: :curly_loop: :wavy_dash: :part_alternation_mark: :trident: :black_small_square: :white_small_square: :black_medium_small_square: :white_medium_small_square: :black_medium_square: :white_medium_square: :black_large_square: :white_large_square: :white_check_mark: :black_square_button: :white_square_button: :black_circle: :white_circle: :red_circle: :large_blue_circle: :large_blue_diamond: :large_orange_diamond: :small_blue_diamond: :small_orange_diamond: :small_red_triangle: :small_red_triangle_down: :shipit:
diff --git a/tests/test-hashtags.md b/tests/test-hashtags.md
new file mode 100644
index 000000000..0c26042ba
--- /dev/null
+++ b/tests/test-hashtags.md
@@ -0,0 +1,20 @@
+# Hashtag Testing
+
+Hashtags in Mattermosts should render as specified below.
+
+#### These strings should auto-link:
+
+#testing
+#testing123
+#test-test
+#test_test
+#test! (punctuation should be excluded from linking)
+#test1 #test2
+#hüllo
+
+#### These strings should not auto-link:
+
+#123test
+#?test
+#-test
+
diff --git a/tests/test-link-preview.md b/tests/test-link-preview.md
new file mode 100644
index 000000000..4061bda35
--- /dev/null
+++ b/tests/test-link-preview.md
@@ -0,0 +1,23 @@
+# Link Preview Tests
+
+Link previews should embed previews of the contents of a hyperlink from a message or comment in the center channel directly below the message or comment.
+
+Post location variation:
+
+1. Post as message in center channel with RHS closed (link preview should render under message)
+2. Post as message in center channel with RHS open (link preview should render under message)
+3. Post as comment in RHS (link preview should not render)
+4. View comment in center channel with RHS closed (link preview should render under message)
+5. View comment in center channel with RHS open (link preview should render under message)
+6. Search for post in RHS with link
+
+Post the following links one per message in the above variations:
+
+Twitter Link Preview:
+https://twitter.com/mattermosthq/status/664928489078820865
+
+Vine:
+https://vine.co/v/eDeVgbFrt9L
+
+Wikipedia
+https://en.wikipedia.org/wiki/Princess_Bubblegum
diff --git a/tests/test-links.md b/tests/test-links.md
new file mode 100644
index 000000000..b4a04e439
--- /dev/null
+++ b/tests/test-links.md
@@ -0,0 +1,69 @@
+# Link Testing
+
+Links in Mattermosts should render as specified below.
+
+#### These strings should auto-link:
+
+http://example.com
+https://example.com
+www.example.com
+www.example.com/index
+www.example.com/index.html
+www.example.com/index/sub
+www.example.com/index?params=1
+www.example.com/index?params=1&other=2
+www.example.com/index?params=1;other=2
+http://example.com:8065
+http://www.example.com/_/page
+www.example.com/_/page
+https://en.wikipedia.org/wiki/🐬
+https://en.wikipedia.org/wiki/Rendering_(computer_graphics)
+http://127.0.0.1
+http://192.168.1.1:4040
+http://[::1]:80
+http://[::1]:8065
+https://[::1]:80
+http://[2001:0:5ef5:79fb:303a:62d5:3312:ff42]:80
+http://[2001:0:5ef5:79fb:303a:62d5:3312:ff42]:8065
+https://[2001:0:5ef5:79fb:303a:62d5:3312:ff42]:443
+http://username:password@example.com
+http://username:password@127.0.0.1
+http://username:password@[2001:0:5ef5:79fb:303a:62d5:3312:ff42]:80
+test@example.com
+
+#### These strings should not auto-link:
+
+example.com
+readme.md
+http://
+@example.com
+./make-compiled-client.sh
+test.:test
+https:///signup/gitlab
+
+#### Only the links within these sentences should auto-link:
+
+(http://example.com)
+(test@example.com)
+This is a sentence with a http://example.com in it.
+This is a sentence with a [link](http://example.com) in it.
+This is a sentence with a http://example.com/_/underscore in it.
+This is a sentence with a link (http://example.com) in it.
+This is a sentence with a (https://en.wikipedia.org/wiki/Rendering_(computer_graphics)) in it.
+This is a sentence with a http://192.168.1.1:4040 in it.
+This is a sentence with a https://[::1]:80 in it.
+This is a link to http://example.com.
+
+#### These links should auto-link to the specified location:
+
+[example link](example.com) links to `http://example.com`
+[example.com](example.com) links to `http://example.com`
+[example.com/other](example.com) links to `http://example.com`
+[example.com/other_link](example.com/example) links to `http://example.com/example`
+www.example.com links to `http://www.example.com`
+https://example.com links to `https://example.com` and not `http://example.com`
+https://en.wikipedia.org/wiki/🐬 links to the Wikipedia article on dolphins
+https://en.wikipedia.org/wiki/URLs#Syntax links to the Syntax section of the Wikipedia article on URLs
+test@example.com links to `mailto:test@example.com`
+[email link](mailto:test@example.com) links to `mailto:test@example.com` and not `http://mailto:test@example.com`
+[other link](ts3server://example.com) links to `ts3server://example.com` and not `http://ts3server://example.com`
diff --git a/tests/test-markdown-basics.md b/tests/test-markdown-basics.md
new file mode 100644
index 000000000..cea9a0867
--- /dev/null
+++ b/tests/test-markdown-basics.md
@@ -0,0 +1,151 @@
+# Basic Markdown Testing
+Tests for text style, code blocks, in-line code and images, lines, block quotes, and headings.
+
+### Text Style
+
+**The following text should render as:**
+_Italics_
+*Italics*
+**Bold**
+***Bold-italics***
+**_Bold-italics_**
+~~Strikethrough~~
+
+This sentence contains **bold**, _italic_, ***bold-italic***, and ~~stikethrough~~ text.
+
+**The following should render as normal text:**
+Normal Text_
+_Normal Text
+_Normal Text*
+
+### Carriage Return
+
+**The following text should render as:**
+Line #1 followed by Line #2
+Line #2 followed by one blank line
+
+Line #3 followed by one blank line
+
+
+Line #4 following one blank line
+
+
+### Code Blocks
+
+```
+This text should render in a code block
+```
+
+**The following markdown should not render:**
+```
+_Italics_
+*Italics*
+**Bold**
+***Bold-italics***
+**Bold-italics_**
+~~Strikethrough~~
+:) :-) ;) ;-) :o :O :-o :-O
+:bamboo: :gift_heart: :dolls: :school_satchel: :mortar_board:
+# Heading 1
+## Heading 2
+### Heading 3
+#### Heading 4
+##### Heading 5
+###### Heading 6
+> Block Quote
+- List
+ - List Sub-item
+[Link](http://i.giphy.com/xNrM4cGJ8u3ao.gif)
+[![Github](https://assets-cdn.github.com/favicon.ico)](https://github.com/mattermost/platform)
+| Left-Aligned Text | Center Aligned Text | Right Aligned Text |
+| :------------ |:---------------:| -----:|
+| Left column 1 | this text | $100 |
+```
+
+**The following links should not auto-link or generate previews:**
+```
+GIF: http://i.giphy.com/xNrM4cGJ8u3ao.gif
+Website: https://en.wikipedia.org/wiki/Dolphin
+```
+
+**The following should appear as a carriage return separating two lines of text:**
+```
+Line #1 followed by a blank line
+
+Line #2 following a blank line
+```
+
+### In-line Code
+
+The word `monospace` should render as in-line code.
+
+The following markdown in-line code should not render:
+`_Italics_`, `*Italics*`, `**Bold**`, `***Bold-italics***`, `**Bold-italics_**`, `~~Strikethrough~~`, `:)` , `:-)` , `;)` , `:-O` , `:bamboo:` , `:gift_heart:` , `:dolls:` , `# Heading 1`, `## Heading 2`, `### Heading 3`, `#### Heading 4`, `##### Heading 5`, `###### Heading 6`
+
+This GIF link should not preview: `http://i.giphy.com/xNrM4cGJ8u3ao.gif`
+This link should not auto-link: `https://en.wikipedia.org/wiki/Dolphin`
+
+This sentence with `
+in-line code
+` should appear on one line.
+
+### In-line Images
+
+Mattermost/platform build status: [![Build Status](https://travis-ci.org/mattermost/platform.svg?branch=master)](https://travis-ci.org/mattermost/platform)
+
+GitHub favicon: ![Github](https://assets-cdn.github.com/favicon.ico)
+
+GIF Image:
+![gif](http://i.giphy.com/xNrM4cGJ8u3ao.gif)
+
+4K Wallpaper Image (11Mb):
+![4K Image](http://4kwallpaper.xyz/wallpaper/Large-Galaxy-Lightyears-Space-4K-wallpaper.png)
+
+Panorama Image:
+![Pano](http://amardeepphotography.com/wp-content/uploads/2012/11/Untitled_Panorama6small.jpg)
+
+Tall Portrait Image:
+![Portrait](http://www.maniacworld.com/now-this-is-a-tall-building.jpg)
+
+
+### Lines
+
+Three lines should render with text between them:
+
+Text above line
+
+***
+
+Text between lines
+
+---
+
+Text between lines
+___
+
+Text below line
+
+### Block Quotes
+
+>This text should render in a block quote.
+
+**The following markdown should render within the block quote:**
+> #### Heading 4
+> _Italics_, *Italics*, **Bold**, ***Bold-italics***, **_Bold-italics_**, ~~Strikethrough~~
+> :) :-) ;) :-O :bamboo: :gift_heart: :dolls:
+
+**The following text should render in two block quotes separated by one line of text:**
+> Block quote 1
+
+Text between block quotes
+
+> Block quote 2
+
+### Headings
+
+# Heading 1 font size
+## Heading 2 font size
+### Heading 3 font size
+#### Heading 4 font size
+##### Heading 5 font size
+###### Heading 6 font size
diff --git a/tests/test-markdown-lists.md b/tests/test-markdown-lists.md
new file mode 100644
index 000000000..7d080526a
--- /dev/null
+++ b/tests/test-markdown-lists.md
@@ -0,0 +1,250 @@
+# Markdown List Testing
+Verify that all list types render as expected.
+
+### Single-item Ordered List
+
+**Expected:**
+```
+7. Single Item
+```
+
+**Actual:**
+7. Single Item
+
+### Multi-item Ordered List
+
+**Expected:**
+```
+1. One
+2. Two
+3. Three
+```
+
+**Actual:**
+
+3. One
+2. Two
+1. Three
+
+### Nested Ordered List
+
+**Expected:**
+```
+1. Alpha
+ 1. Bravo
+2. Charlie
+3. Delta
+ 1. Echo
+ 2. Foxtrot
+```
+
+**Actual:**
+
+1. Alpha
+ 1. Bravo
+1. Charlie
+1. Delta
+ 1. Echo
+ 1. Foxtrot
+
+### Single-item Unordered List
+
+**Expected:**
+```
+• Single Item
+```
+
+**Actual:**
+* Single Item
+
+### Multi-item Unordered List
+
+**Expected:**
+```
+• One
+• Two
+• Three
+```
+
+**Actual:**
+* One
+- Two
++ Three
+
+### Nested Unordered List
+
+**Expected:**
+```
+• Alpha
+ • Bravo
+• Charlie
+• Delta
+ • Echo
+ • Foxtrot
+```
+
+**Actual:**
++ Alpha
+ * Bravo
+- Charlie
+* Delta
+ + Echo
+ - Foxtrot
+
+### Mixed List Starting Ordered
+
+**Expected:**
+```
+1. One
+2. Two
+3. Three
+```
+
+**Actual:**
+
+1. One
++ Two
+- Three
+
+### Mixed List Starting Unordered
+
+**Expected:**
+```
+• Monday
+• Tuesday
+• Wednesday
+```
+
+**Actual:**
++ Monday
+1. Tuesday
+* Wednesday
+
+### Nested Mixed List
+
+**Expected:**
+```
+• Alpha
+ 1. Bravo
+ • Charlie
+ • Delta
+• Echo
+• Foxtrot
+ • Golf
+ 1. Hotel
+ • India
+ 1. Juliet
+ 2. Kilo
+ • Lima
+• Mike
+ 1. November
+ 1. Oscar
+ 1. Papa
+```
+
+**Actual:**
+- Alpha
+ 1. Bravo
+ * Charlie
+ + Delta
+- Echo
+* Foxtrot
+ + Golf
+ 1. Hotel
+ - India
+ 2. Juliet
+ 3. Kilo
+ * Lima
+1. Mike
+ 1. November
+ 4. Oscar
+ 5. Papa
+
+### Ordered Lists Separated by Carriage Returns
+
+**Expected:**
+```
+1. One
+ • Two
+
+1. One
+2. Two
+```
+
+**Actual:**
+
+1. One
+ - Two
+
+
+1. One
+2. Two
+
+### Carriage Return and New Line After a List
+
+**Expected:**
+```
+1. One
+ - Two
+This text should be on a new line.
+```
+
+**Actual:**
+
+1. One
+ - Two
+This text should be on a new line.
+
+**Expected:**
+```
+List:
+
+- One
+- Two
+
+This line should have a line break above it.
+```
+
+**Actual:**
+
+List:
+
+- One
+- Two
+
+This line should have a line break above it.
+
+### Task Lists
+
+**Expected:**
+```
+[ ] One
+ [ ] Subpoint one
+ - Normal Bullet
+[ ] Two
+[x] Completed item
+```
+
+**Actual:**
+
+- [ ] One
+ - [ ] Subpoint one
+ - Normal Bullet
+- [ ] Two
+- [x] Completed item
+
+### Numbered Task Lists
+
+**Expected:**
+```
+1. [ ] One
+2. [ ] Two
+3. [x] Completed item
+```
+
+**Actual:**
+
+1. [ ] One
+2. [ ] Two
+3. [x] Completed item
+
diff --git a/tests/test-mentions.md b/tests/test-mentions.md
new file mode 100644
index 000000000..99a47e337
--- /dev/null
+++ b/tests/test-mentions.md
@@ -0,0 +1,13 @@
+# Mentions Testing
+
+To test the following mention functional:
+
+1. Add a user 'alice' to the system
+2. Paste the below text to test if mentions is properly highlighting
+
+
+```
+To run this test, if a user named @alice doesn't yet exist, create one.
+
+I saw @alice--and I said "Hi @alice!" then "What's up @alice?" and then @alice, was totally @alice; she just "@alice"'d me and walked on by. That's @alice...
+```
diff --git a/tests/test-search.md b/tests/test-search.md
new file mode 100644
index 000000000..0f0ba1153
--- /dev/null
+++ b/tests/test-search.md
@@ -0,0 +1,43 @@
+# Search Testing
+
+### Basic Search Testing
+
+This post is used by the core team to test search. It should be returned for the test cases for search, with proper highlighting in the search results.
+
+**Basic word search:** Hello world!
+**Emoji search:** :strawberry:
+**Accent search:** Crème friache
+**Non-latin search:**
+您好吗
+您好
+**Email search:** person@domain.org
+**Link search:** www.dropbox.com
+**Markdown search:**
+##### Hello
+```
+Hello
+```
+`Hello`
+
+
+### Hashtags:
+
+Click on the linked hashtags below, and confirm that the search results match the linked hashtags. Confirm that the highlighting in the search results is correct.
+
+#### Basic Hashtags
+
+#hello #world
+
+#### Hashtags containing punctuation:
+
+*Note: Make a separate post containing only the word “hashtag”, and confirm the hashtags below do not return the separate post.*
+
+#hashtag #hashtag-dash #hashtag_underscore #hashtag.dot
+
+#### Punctuation following a hashtag:
+
+#colon: #slash/ #backslash\ #percent% #dollar$ #semicolon; #ampersand& #bracket( #bracket) #lessthan< #greaterthan> #dash- #plus+ #equals= #caret^ #hashtag# #asterisk* #verticalbar| #invertedquestion¿ #atsign@ #quote” #apostrophe' #curlybracket{ #curlybracket} #squarebracket[ #squarebracket]
+
+#### Markdown surrounding a hashtag:
+
+*#markdown-hashtag*
diff --git a/tests/test-syntax-highlighting.md b/tests/test-syntax-highlighting.md
new file mode 100644
index 000000000..b1568c385
--- /dev/null
+++ b/tests/test-syntax-highlighting.md
@@ -0,0 +1,231 @@
+# Code Syntax Highlighting
+
+Verify the following code blocks render as code blocks and highlight properly.
+
+### Diff
+
+``` diff
+*** /path/to/original ''timestamp''
+--- /path/to/new ''timestamp''
+***************
+*** 1 ****
+! This is a line.
+--- 1 ---
+! This is a replacement line.
+It is important to spell
+-removed line
++new line
+```
+
+### Apache
+
+``` apache
+
+DocumentRoot /www/example1
+ServerName www.example.com
+
+```
+
+### Makefile
+
+``` makefile
+CC=gcc
+CFLAGS=-I.
+
+hellomake: hellomake.o hellofunc.o
+ $(CC) -o hellomake hellomake.o hellofunc.o -I.
+```
+
+### HTTP
+
+``` http
+HTTP/1.1 200 OK
+Date: Sun, 28 Dec 2014 08:56:53 GMT
+Content-Length: 44
+Content-Type: text/html
+
+It works!
+```
+
+### JSON
+
+``` json
+{"employees":[
+ {"firstName":"John", "lastName":"Doe"},
+]}
+```
+
+### Markdown
+
+``` markdown
+**bold**
+*italics*
+[link](www.example.com)
+```
+
+### JavaScript
+
+``` javascript
+document.write('Hello, world!');
+```
+
+### CSS
+
+``` css
+body {
+ background-color: red;
+}
+```
+
+### NGINX
+
+``` nginx
+server { # simple reverse-proxy
+ listen 80;
+ server_name domain2.com www.domain2.com;
+ access_log logs/domain2.access.log main;
+```
+
+### Objective C
+
+``` objectivec
+#import
+
+int main (void)
+{
+ printf ("Hello world!\n");
+}
+```
+
+### Python
+
+``` python
+print "Hello, world!"
+```
+
+### XML
+
+``` xml
+
+
+ John Doe
+
+
+```
+
+### Perl
+
+``` perl
+print "Hello, World!\n";
+```
+
+### Bash
+
+``` bash
+echo "Hello World"
+```
+
+### PHP
+
+``` php
+ Hello World'; ?>
+```
+
+### CoffeeScript
+
+``` coffeescript
+console.log(“Hello world!”);
+```
+
+### C#
+
+``` cs
+using System;
+class Program
+{
+ public static void Main(string[] args)
+ {
+ Console.WriteLine("Hello, world!");
+ }
+}
+```
+
+### C++
+
+``` cpp
+#include
+
+main()
+{
+ cout << "Hello World!";
+ return 0;
+}
+```
+
+### SQL
+
+``` sql
+SELECT column_name,column_name
+FROM table_name;
+```
+
+### Go
+
+``` go
+package main
+import "fmt"
+func main() {
+ fmt.Println("Hello, 世界")
+}
+```
+
+### Ruby
+
+``` ruby
+puts "Hello, world!"
+```
+
+### Java
+
+``` java
+import javax.swing.JFrame; //Importing class JFrame
+import javax.swing.JLabel; //Importing class JLabel
+public class HelloWorld {
+ public static void main(String[] args) {
+ JFrame frame = new JFrame(); //Creating frame
+ frame.setTitle("Hi!"); //Setting title frame
+ frame.add(new JLabel("Hello, world!"));//Adding text to frame
+ frame.pack(); //Setting size to smallest
+ frame.setLocationRelativeTo(null); //Centering frame
+ frame.setVisible(true); //Showing frame
+ }
+}
+```
+
+### INI
+
+``` ini
+; last modified 1 April 2011 by John Doe
+[owner]
+name=John Doe
+organization=Mattermost
+```
+
+### Latex Equation
+
+``` latex
+\frac{d}{dx}\left( \int_{0}^{x} f(u)\,du\right)=f(x).
+```
+
+### Latex Document
+
+``` latex
+\documentclass{article}
+\begin{document}
+\noindent
+Are $a, b \in \mathbb{R}, then applies (a+b)^{2} = a^{2} + ab + b^{2} $ \\
+better \\
+are $a, b \in \mathbb{R}, \textrm{then applies} \, (a+b)^{2 } = a^{2 } + ab + b^{2}$\\
+\end{document}
+```
+
diff --git a/tests/test-tables.md b/tests/test-tables.md
new file mode 100644
index 000000000..87d8af856
--- /dev/null
+++ b/tests/test-tables.md
@@ -0,0 +1,80 @@
+# Markdown Tables
+
+Verify that all tables render as described.
+
+### Normal Tables
+
+These tables use different raw text as inputs, but all three should render as the same table.
+
+#### Table 1
+
+Raw text:
+
+```
+First Header | Second Header
+------------- | -------------
+Content Cell | Content Cell
+Content Cell | Content Cell
+```
+
+Renders as:
+
+First Header | Second Header
+------------- | -------------
+Content Cell | Content Cell
+Content Cell | Content Cell
+
+#### Table 2
+
+Raw Text:
+
+```
+| First Header | Second Header |
+| ------------- | ------------- |
+| Content Cell | Content Cell |
+| Content Cell | Content Cell |
+```
+
+Renders as:
+
+| First Header | Second Header |
+| ------------- | ------------- |
+| Content Cell | Content Cell |
+| Content Cell | Content Cell |
+
+#### Table 3
+
+Raw Text:
+
+```
+| First Header | Second Header |
+| ------------- | ----------- |
+| Content Cell | Content Cell|
+| Content Cell | Content Cell |
+```
+
+Renders as:
+
+| First Header | Second Header |
+| ------------- | ----------- |
+| Content Cell | Content Cell|
+| Content Cell | Content Cell |
+
+### Tables Containing Markdown
+
+This table should contain A1: Strikethrough, A2: Bold, B1: Italics, B2: Dolphin emoticon.
+
+| Column\Row | 1 | 2 |
+| ------------- | ------------- |------------- |
+| A | ~~Strikethrough~~ | **Bold** |
+| B | _italics_ | :dolphin: |
+
+### Table with Left, Center, and Right Aligned Columns
+
+The left column should be left aligned, the center column centered and the right column should be right aligned.
+
+| Left-Aligned | Center Aligned | Right Aligned |
+| :------------ |:---------------:| -----:|
+| 1 | this text | $100 |
+| 2 | is | $10 |
+| 3 | centered | $1 |
--
cgit v1.2.3-1-g7c22