summaryrefslogtreecommitdiffstats
path: root/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc')
-rw-r--r--doc/README.md11
-rw-r--r--doc/developer/API.md14
-rw-r--r--doc/developer/Setup.md28
-rw-r--r--doc/developer/tests/README.md18
-rw-r--r--doc/developer/tests/test-attachments.md144
-rw-r--r--doc/developer/tests/test-emoticons.md936
-rw-r--r--doc/developer/tests/test-link-preview.md23
-rw-r--r--doc/developer/tests/test-links.md70
-rw-r--r--doc/developer/tests/test-markdown-basics.md139
-rw-r--r--doc/developer/tests/test-markdown-lists.md231
-rw-r--r--doc/developer/tests/test-mentions.md13
-rw-r--r--doc/developer/tests/test-syntax-highlighting.md231
-rw-r--r--doc/developer/tests/test-tables.md80
-rw-r--r--doc/help/Account-Settings.md115
-rw-r--r--doc/help/Channels.md45
-rw-r--r--doc/help/Markdown.md191
-rw-r--r--doc/help/Messaging.md47
-rw-r--r--doc/help/Notifications.md31
-rw-r--r--doc/help/README.md31
-rw-r--r--doc/help/Search.md3
-rw-r--r--doc/help/Sign-in.md27
-rw-r--r--doc/help/Slack-Import.md29
-rw-r--r--doc/help/Team-Settings.md71
-rw-r--r--doc/help/Team-Statistics.md24
-rw-r--r--doc/help/system-console/Team-Statistics.md24
-rw-r--r--doc/install/Administration.md95
-rw-r--r--doc/install/Command-Line-Tools.md81
-rw-r--r--doc/install/Configuration-Settings.md45
-rw-r--r--doc/install/Production-Ubuntu.md18
-rw-r--r--doc/install/Requirements.md6
-rw-r--r--doc/install/Troubleshooting.md34
-rw-r--r--doc/install/Upgrade-Guide.md12
-rw-r--r--doc/integrations/Single-Sign-On/GitHub-Enterprise.md20
-rw-r--r--doc/integrations/Single-Sign-On/GitHub.md24
-rw-r--r--doc/integrations/Single-Sign-On/Gitlab.md2
-rw-r--r--doc/integrations/webhooks/Incoming-Webhooks.md31
-rw-r--r--doc/process/documentation-guidelines.md36
-rw-r--r--doc/process/overview.md143
-rw-r--r--doc/process/release-process.md141
-rw-r--r--doc/usage/Markdown.md151
40 files changed, 2142 insertions, 1273 deletions
diff --git a/doc/README.md b/doc/README.md
index 7ed20fba6..15d1d731b 100644
--- a/doc/README.md
+++ b/doc/README.md
@@ -51,13 +51,4 @@ Procedures for upgrading the Mattermost server
## Help
-_Note: End user help documentation is a new feature being completed for the v1.2 release. The materials below are work in progress._
-
-- User Interface
- - [Manage Members](help/Manage-Members.md)
- - Team Settings
- - [Slack Import](help/Slack-Import.md)
-
-- Messaging
- - [Mattermost Markdown Formatting](usage/Markdown.md)
-
+See [End User Help](help/README.md).
diff --git a/doc/developer/API.md b/doc/developer/API.md
index 4c4b2f04e..1da1a475b 100644
--- a/doc/developer/API.md
+++ b/doc/developer/API.md
@@ -12,7 +12,7 @@ Incoming webhooks allow external applications to post messages into Mattermost c
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 (in Mattermost v1.2)](https://github.com/mattermost/platform/blob/master/doc/integrations/webhooks/Outgoing-Webhooks.md)
+### [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.
@@ -33,3 +33,15 @@ Mattermost drivers offer access to the Mattermost web service API in different l
### [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/Setup.md b/doc/developer/Setup.md
index e78d4dff2..24e7d6a90 100644
--- a/doc/developer/Setup.md
+++ b/doc/developer/Setup.md
@@ -11,7 +11,10 @@ Developer Machine Setup
`docker-machine ip dev`
3. Add a line to your /etc/hosts that goes `<Docker IP> dockerhost`
4. Run `docker-machine env dev` and copy the export statements to your ~/.bash_profile
-2. Download Go (version 1.4.2 or 1.5.1. Final release bits are built with 1.4.2) from http://golang.org/dl/
+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
@@ -21,20 +24,17 @@ Developer Machine Setup
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 Node.js using Homebrew
- 1. Download Homebrew from http://brew.sh/
- 2. `brew install node`
-5. Install Compass
+4. Install Compass
1. Run `ruby -v` and check the ruby version is 1.8.7 or higher
2. `sudo gem install compass`
-6. Download Mattermost
+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`
-7. Run unit tests on Mattermost using `make test` to make sure the installation was successful
-8. If tests passed, you can now run Mattermost using `make run`
+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
@@ -53,7 +53,7 @@ Any issues? Please let us know on our forums at: http://forum.mattermost.org
`127.0.0.1 dockerhost`
3. Install build essentials
1. `apt-get install build-essential`
-4. Download Go (version 1.4.2 or 1.5.1. Final release bits are built with 1.4.2) from http://golang.org/dl/
+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
@@ -64,13 +64,9 @@ Any issues? Please let us know on our forums at: http://forum.mattermost.org
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
- 1. Download the newest version of the Node.js sources from https://nodejs.org/en/download/
- 2. Extract the contents of the package and cd into the extracted files
- 3. Compile and install Node.js
- `./configure`
- `make`
- `make install`
+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`
diff --git a/doc/developer/tests/README.md b/doc/developer/tests/README.md
new file mode 100644
index 000000000..a7b36f18d
--- /dev/null
+++ b/doc/developer/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/doc/developer/tests/test-attachments.md b/doc/developer/tests/test-attachments.md
new file mode 100644
index 000000000..71cc496ce
--- /dev/null
+++ b/doc/developer/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.
+
+
+### 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. Click to play GIF.
+[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 & playable preview window
+[Permalink](https://pre-release.mattermost.com/core/pl/5dx5qx9t9brqfnhohccxjynx7c)
+
+**AVI**
+`Videos/AVI.avi`
+Expected: View Permalink. Expected depends on the operating system, browser and plugins.
+[Permalink](https://pre-release.mattermost.com/core/pl/qwn9eiy7j3rkjyruxhcugpogdw)
+
+**MKV**
+`Videos/MKV.mkv`
+Expected: View Permalink. Expected depends on the operating system, browser and plugins.
+[Permalink](https://pre-release.mattermost.com/core/pl/tszyjkr1cidhxjgiusa4mde3ja)
+
+**MOV**
+`Videos/MOV.mov`
+Expected: View Permalink. Expected depends on the operating system, browser and plugins.
+[Permalink](https://pre-release.mattermost.com/core/pl/ienzppz5i3f7tbt5jiujn8uuir)
+
+**MPG**
+`Videos/MPG.mpg`
+Expected: View Permalink. Expected depends on the operating system, browser and plugins.
+[Permalink](https://pre-release.mattermost.com/core/pl/skggdq1hfpritc6c88bi481p5a)
+
+**Webm**
+`Videos/WEBM.webm`
+Expected: View Permalink. Expected depends on the operating system, browser and plugins.
+[Permalink](https://pre-release.mattermost.com/core/pl/7h8tysuxgfgsxeht3sbn7e4h6y)
+
+**WMV**
+`Videos/WMV.wmv`
+Expected: View Permalink. 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 & playable preview window
+[Permalink](https://pre-release.mattermost.com/core/pl/6c7qsw48ybd88bktgeykodsrrc)
+
+**AAC**
+`Audio/AAC.aac`
+Expected: View Permalink. Expected depends on the operating system, browser and plugins.
+[Permalink](https://pre-release.mattermost.com/core/pl/3naoy5pr5tydbk1m6yo1ast9ny)
+
+**FLAC**
+`Audio/FLAC.flac`
+Expected: View Permalink. Expected depends on the operating system, browser and plugins.
+[Permalink](https://pre-release.mattermost.com/core/pl/kf4cmy44dfya5efmse7rg43eih)
+
+**OGG**
+`Audio/OGG.ogg`
+Expected: View Permalink. Expected depends on the operating system, browser and plugins.
+[Permalink](https://pre-release.mattermost.com/core/pl/dezrcpbxapyexe77rjuzkrp63r)
+
+**WAV**
+`Audio/WAV.wav`
+Expected: View Permalink. Expected depends on the operating system, browser and plugins.
+[Permalink](https://pre-release.mattermost.com/core/pl/pdkxx1udepdnbmi9j8kyas5xbh)
+
+**WMA**
+`Audio/WMA.wma`
+Expected: View Permalink. 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
index 9ea1afec0..fc2594d9e 100644
--- a/doc/developer/tests/test-emoticons.md
+++ b/doc/developer/tests/test-emoticons.md
@@ -1,930 +1,22 @@
-# Emoticon Testing
+# Emoticon Testing
+Verify that all emoticons render. This test should render in three separate messages since it's ~11000 characters.
-The below text can be used to check for regressions in changes to text processing. Paste the below text into messages and check that emoticons continue to render after text processing changes.
+### Emoticon - Punctuation
-```
-# Emoticon - Punctuation
+:) :-) ;) ;-) :o :O :-o :-O :] :-] :d :-D x-d x-D :p :-P :@ :( :-( :'( :/ :-/ :s :-s :| :-| :$ :-$ :-x <3 :+1: :-1:
-:) :-)
-;) ;-)
-: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 - People
+### 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:
-: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 - 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 - Nature
+### Emoticons - Places
-: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:
-```
+: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 - 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:
-```
+### 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-link-preview.md b/doc/developer/tests/test-link-preview.md
new file mode 100644
index 000000000..4061bda35
--- /dev/null
+++ b/doc/developer/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/doc/developer/tests/test-links.md b/doc/developer/tests/test-links.md
new file mode 100644
index 000000000..91e3e9403
--- /dev/null
+++ b/doc/developer/tests/test-links.md
@@ -0,0 +1,70 @@
+# 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://<your-mattermost-url>/signup/gitlab
+https://your-mattermost-url>/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
new file mode 100644
index 000000000..7a46adeb0
--- /dev/null
+++ b/doc/developer/tests/test-markdown-basics.md
@@ -0,0 +1,139 @@
+# 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*
+
+### 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
new file mode 100644
index 000000000..d5bbd82ac
--- /dev/null
+++ b/doc/developer/tests/test-markdown-lists.md
@@ -0,0 +1,231 @@
+# 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.
+
+### 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
new file mode 100644
index 000000000..99a47e337
--- /dev/null
+++ b/doc/developer/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/doc/developer/tests/test-syntax-highlighting.md b/doc/developer/tests/test-syntax-highlighting.md
new file mode 100644
index 000000000..7f8f4cdaa
--- /dev/null
+++ b/doc/developer/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
+<VirtualHost *:80>
+DocumentRoot /www/example1
+ServerName www.example.com
+</VirtualHost>
+```
+
+### 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
+
+<html><body><h1>It works!</h1></body></html>
+```
+
+### 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 <stdio.h>
+
+int main (void)
+{
+ printf ("Hello world!\n");
+}
+```
+
+### Python
+
+``` python
+print "Hello, world!"
+```
+
+### XML
+
+``` xml
+<employees>
+ <employee>
+ <firstName>John</firstName> <lastName>Doe</lastName>
+ </employee>
+</employees>
+```
+
+### Perl
+
+``` perl
+print "Hello, World!\n";
+```
+
+### Bash
+
+``` bash
+echo "Hello World"
+```
+
+### PHP
+
+``` php
+ <?php echo '<p>Hello World</p>'; ?>
+```
+
+### CoffeeScript
+
+``` coffee
+console.log(“Hello world!”);
+```
+
+### C#
+
+``` cs
+using System;
+class Program
+{
+ public static void Main(string[] args)
+ {
+ Console.WriteLine("Hello, world!");
+ }
+}
+```
+
+### C++
+
+``` cpp
+#include <iostream.h>
+
+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
new file mode 100644
index 000000000..87d8af856
--- /dev/null
+++ b/doc/developer/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 |
diff --git a/doc/help/Account-Settings.md b/doc/help/Account-Settings.md
new file mode 100644
index 000000000..1e05ef2ad
--- /dev/null
+++ b/doc/help/Account-Settings.md
@@ -0,0 +1,115 @@
+# 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
new file mode 100644
index 000000000..531cc047c
--- /dev/null
+++ b/doc/help/Channels.md
@@ -0,0 +1,45 @@
+# 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/Markdown.md b/doc/help/Markdown.md
new file mode 100644
index 000000000..64ce4fc83
--- /dev/null
+++ b/doc/help/Markdown.md
@@ -0,0 +1,191 @@
+# 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, coffee (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://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/Messaging.md b/doc/help/Messaging.md
new file mode 100644
index 000000000..548892650
--- /dev/null
+++ b/doc/help/Messaging.md
@@ -0,0 +1,47 @@
+# Messaging
+
+## Writing Messages
+
+You can write messages using the input box with the text "Write a message..." at the bottom of Mattermost.
+
+Press **ENTER** to send a message. Use **Shift+ENTER** to create a new line without sending a message.
+
+## Formatting Messages
+
+Mattermost messages are formatted using a standard called "markdown". Here are examples:
+
+| Text Entered | How it appears |
+|:---------------|:---------------|
+|`**bold**`| **bold** |
+| `_italic_`|_italic_|
+|`[hyperlink](http://mattermost.org)`|[hyperlink](http://mattermost.org)|
+|`![embedded image](https://travis-ci.org/mattermost/platform.svg)`|![embedded image](https://travis-ci.org/mattermost/platform.svg)|
+|`:smile:` `:sheep:` `:alien:`|:smile: :sheep: :alien:|
+
+Emojis provided free from [Emoji One](http://emojione.com/). Check out a full list of Emojis [here](http://emoji.codes/).
+
+
+## Mentioning Teammates
+
+You can mention a teammate by using the `@` symbol plus their username to send them a special notification to draw their attention.
+
+For example, you might write:
+
+```
+@alice how did your interview go with the new candidate?
+```
+
+Which sends a special mention notification to **alice** to check your message.
+
+To mention a teammate, press `@` and you should see a list of team members who can be messaged. You can either type their username or use the **Up** and **Down** arrow keys and then **ENTER** to select them to be mentioned.
+
+You can configure how you'd like to be alerted about mentions of your username, your first name, your nickname, or other keywords from **Account Settings** > **Notifications** and you can set channel-specific preferences from **[Channel Name]** > **Notification Preferences**
+
+## Messages Dropdown Menu
+
+To get to the Messages Dropdown Menu, hover over a message and click on the [...] menu. This shows a dropdown list containing additional actions you can perform on a message:
+
+- **Reply:** Opens up the sidebar so you can reply to a message in a comment thread.
+- **Permalink:** Creates a link to the message. Sharing this link with other users in the channel lets them view the linked message in the Message Archives.
+- **Delete:** Deletes the message so it is no longer visible. Team Administrators and System Administrators can also delete another user's message.
+- **Edit:** Lets you edit your own message.
diff --git a/doc/help/Notifications.md b/doc/help/Notifications.md
new file mode 100644
index 000000000..31f06e713
--- /dev/null
+++ b/doc/help/Notifications.md
@@ -0,0 +1,31 @@
+# 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
index 9271d64dd..23c8b192d 100644
--- a/doc/help/README.md
+++ b/doc/help/README.md
@@ -1,12 +1,23 @@
-# Help
+## Help
-The help section of the Mattermost documentation is intended for use by end users learning about the Mattermost concepts, usage, terminology and user interface.
-
-_Note: Help documentation is a work-in-progress. Community contributions highly welcome. Please see [guidelines for contributing](https://forum.mattermost.org/t/help-improve-mattermost-documentation/194)._
-
-## Team Site Main Menu
-
-You can access the **Team Site Main Menu** by clicking on the three vertical dots at the top of the left sidebar in a team site. Here we describe the various options available from the menu:
-
-- [Manage Members](Manage-Members.md)
+- Getting Started
+ - [Sign-in](Sign-in.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)
+
+- System Console
+ - Team
+ - [Team Statistics](system-console/Team-Statistics.md)
diff --git a/doc/help/Search.md b/doc/help/Search.md
index 51095aac6..354e29a43 100644
--- a/doc/help/Search.md
+++ b/doc/help/Search.md
@@ -7,7 +7,8 @@ The search box in Mattermost brings back results from any channel of which you
- 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`.
+- 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:
diff --git a/doc/help/Sign-in.md b/doc/help/Sign-in.md
new file mode 100644
index 000000000..5b7b375c7
--- /dev/null
+++ b/doc/help/Sign-in.md
@@ -0,0 +1,27 @@
+# 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 the teams you are signed-in to that share the same email address.
diff --git a/doc/help/Slack-Import.md b/doc/help/Slack-Import.md
deleted file mode 100644
index f834d5177..000000000
--- a/doc/help/Slack-Import.md
+++ /dev/null
@@ -1,29 +0,0 @@
-### Slack Import
-
-*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).*
-
-#### Usage
-
-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:
-
-- Newly added markdown suppport 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 username or email address collisions with 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/Team-Settings.md b/doc/help/Team-Settings.md
new file mode 100644
index 000000000..fead9f4ca
--- /dev/null
+++ b/doc/help/Team-Settings.md
@@ -0,0 +1,71 @@
+## 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
+
+When allowing anyone to sign-up from the login page, the **Invite Code** is used as part of the sign-up process. Clicking **Re-Generate** will invalidate the previous invitations and invitation URLs.
+
+### 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/Team-Statistics.md b/doc/help/Team-Statistics.md
deleted file mode 100644
index 05d63794b..000000000
--- a/doc/help/Team-Statistics.md
+++ /dev/null
@@ -1,24 +0,0 @@
-## Team Statistics
-___
-Statistics on users, posts and channels are tracked for each team and viewable in the System Console. System Administrators can access statistics for your Mattermost teams by clicking the **three-dot menu**, then click **System Console**. Under the *Teams* section on the left side you’ll see a list of the teams that belong to your domain. Click **Statistics** under the team of interest to open the stats page. Here is some helpful terminology:
-
-**Total Users**
-The total number of accounts created, regardless of if the accounts are active or inactive.
-
-**Total Posts**
-The total number of posts made by your team, including deleted posts or those made by incoming and outgoing webhook integrations.
-
-**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 signup process to create a Mattermost account on the team.
diff --git a/doc/help/system-console/Team-Statistics.md b/doc/help/system-console/Team-Statistics.md
new file mode 100644
index 000000000..5e4bcb5c5
--- /dev/null
+++ b/doc/help/system-console/Team-Statistics.md
@@ -0,0 +1,24 @@
+# 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
index ee996088c..c51022da1 100644
--- a/doc/install/Administration.md
+++ b/doc/install/Administration.md
@@ -17,3 +17,98 @@ This document provides instructions for common administrator tasks
- 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/Command-Line-Tools.md b/doc/install/Command-Line-Tools.md
new file mode 100644
index 000000000..ff6f110fd
--- /dev/null
+++ b/doc/install/Command-Line-Tools.md
@@ -0,0 +1,81 @@
+# 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
index a92893753..5f9b3b62d 100644
--- a/doc/install/Configuration-Settings.md
+++ b/doc/install/Configuration-Settings.md
@@ -29,7 +29,12 @@ Set this key to enable embedding of YouTube video previews based on hyperlinks a
#### 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 tab of Account Settings is hidden and incoming webhooks are disabled.
+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.
@@ -58,6 +63,12 @@ Maximum number of users per team, including both active and inactive users.
```"RestrictCreationToDomains": ""```
Teams 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
@@ -130,9 +141,16 @@ Port of SMTP email server.
```"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.
+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
@@ -257,19 +275,19 @@ Settings to configure account and team creation using GitLab OAuth.
“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://<your-mattermost-url>/login/gitlab/complete" (example: https://example.com:8065/login/gitlab/complete) and "https://<your-mattermost-url>/signup/gitlab/complete".
+Obtain this value by logging into your GitLab account. Go to Profile Settings -> Applications -> New Application, enter a Name, then enter Redirect URLs `https://<your-mattermost-url>/login/gitlab/complete` (example: `https://example.com:8065/login/gitlab/complete`) and `https://<your-mattermost-url>/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://<your-mattermost-url>/login/gitlab/complete" (example: https://example.com:8065/login/gitlab/complete) and "https://<your-mattermost-url>/signup/gitlab/complete".
+Obtain this value by logging into your GitLab account. Go to Profile Settings -> Applications -> New Application, enter a Name, then enter Redirect URLs `https://<your-mattermost-url>/login/gitlab/complete` (example: `https://example.com:8065/login/gitlab/complete`) and `https://<your-mattermost-url>/signup/gitlab/complete`.
```"AuthEndpoint": ""```
-Enter https://<your-gitlab-url>/oauth/authorize (example: https://example.com:3000/oauth/authorize). Use HTTP or HTTPS depending on how your server is configured.
+Enter `https://<your-gitlab-url>/oauth/authorize` (example: `https://example.com:3000/oauth/authorize`). Use HTTP or HTTPS depending on how your server is configured.
```"TokenEndpoint": ""```
-Enter https://<your-gitlab-url>/oauth/authorize (example: https://example.com:3000/oauth/token). Use HTTP or HTTPS depending on how your server is configured.
+Enter `https://<your-gitlab-url>/oauth/authorize` (example: `https://example.com:3000/oauth/token`). Use HTTP or HTTPS depending on how your server is configured.
```"UserApiEndpoint": ""```
-Enter https://<your-gitlab-url>/oauth/authorize (example: https://example.com:3000/api/v3/user). Use HTTP or HTTPS depending on how your server is configured.
+Enter `https://<your-gitlab-url>/oauth/authorize` (example: `https://example.com:3000/api/v3/user`). Use HTTP or HTTPS depending on how your server is configured.
## Config.json Settings Not in System Console
@@ -280,17 +298,6 @@ System Console allows an IT Admin to update settings defined in `config.json`. H
```"EnableOAuthServiceProvider": false```
”true”: Allow Mattermost to function as an OAuth provider, allowing 3rd party apps access to your user store for authentication.
-### Push Notification Settings
-
-```"ApplePushServer": ""```
-Setting for features in development.
-
-```"ApplePushCertPublic": ""```
-Setting for features in development.
-
-```"ApplePushCertPrivate": ""```
-Setting for features in development.
-
### File Settings
```"InitialFont": "luximbi.ttf"```
diff --git a/doc/install/Production-Ubuntu.md b/doc/install/Production-Ubuntu.md
index e792a551c..d6b98981c 100644
--- a/doc/install/Production-Ubuntu.md
+++ b/doc/install/Production-Ubuntu.md
@@ -24,21 +24,31 @@
* ```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```
+
## 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.1.0/mattermost.tar.gz```
+ * ``` wget https://github.com/mattermost/platform/releases/download/v1.2.1/mattermost.tar.gz```
1. Unzip the Mattermost Server by typing:
* ``` tar -xvzf mattermost.tar.gz```
-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. 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`
+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```
diff --git a/doc/install/Requirements.md b/doc/install/Requirements.md
index b877b6dc0..162caf90d 100644
--- a/doc/install/Requirements.md
+++ b/doc/install/Requirements.md
@@ -4,10 +4,10 @@
Supported Operating Systems and Browsers for the Mattermost Web Client include:
-- PC: Windows 7, Windows 8 (Chrome 43+, Firefox 38+, Internet Explorer 10+)
-- Mac: OS 10 (Safari 7, Chrome 43+)
+- 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 8.3+, Chrome 43+)
+- iPhone 4s and higher (Safari on iOS 9+, Chrome 43+)
- Android 5 and higher (Chrome 43+)
### Email Client
diff --git a/doc/install/Troubleshooting.md b/doc/install/Troubleshooting.md
index 51699a39c..deae7717d 100644
--- a/doc/install/Troubleshooting.md
+++ b/doc/install/Troubleshooting.md
@@ -12,7 +12,7 @@
- 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.
-#### Error Messages
+#### Mattermost Error Messages
The following is a list of common error messages and solutions:
@@ -22,15 +22,45 @@ The following is a list of common error messages and solutions:
###### `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. You
+ - 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
index 7f4eeaeb9..edcc754f8 100644
--- a/doc/install/Upgrade-Guide.md
+++ b/doc/install/Upgrade-Guide.md
@@ -4,6 +4,8 @@
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**
@@ -11,9 +13,9 @@ Each release of Mattermost contains logic to upgrade it from the previously majo
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
+ 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.1.0/mattermost.tar.gz`
+ 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`
@@ -26,9 +28,9 @@ Each release of Mattermost contains logic to upgrade it from the previously majo
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. The server will upgrade your database schema to be compatibile with the new release, as well as upgrade your `config.json` file to the latest format, using default values for new settings added
- 3. Go to the System Console to update any settings that have been added or modified based on the **Compatibility** documentation in the release notes
-7. Test the system is working by going to the URL of an existing team
+ 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)
diff --git a/doc/integrations/Single-Sign-On/GitHub-Enterprise.md b/doc/integrations/Single-Sign-On/GitHub-Enterprise.md
new file mode 100644
index 000000000..6f6633846
--- /dev/null
+++ b/doc/integrations/Single-Sign-On/GitHub-Enterprise.md
@@ -0,0 +1,20 @@
+## 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:
+ * `<your-mattermost-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://<your-github-enterprise-url>/oauth/authorize` (example https://github.com/oauth/authorize)
+ * _TokenEndpoint_: `https://<your-github-enterprise-url>/oauth/access_token`
+ * _UserApiEndpoint_: `https://<your-github-enterprise-url>/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
new file mode 100644
index 000000000..56e2d1c72
--- /dev/null
+++ b/doc/integrations/Single-Sign-On/GitHub.md
@@ -0,0 +1,24 @@
+## 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:
+ * `<your-mattermost-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
index 1242fd13e..f0acc0e66 100644
--- a/doc/integrations/Single-Sign-On/Gitlab.md
+++ b/doc/integrations/Single-Sign-On/Gitlab.md
@@ -9,7 +9,7 @@ Follow these steps to configure Mattermost to use GitLab as a single-sign-on (SS
(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 _SSOSettings_ fields in config/config.json
+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://<your-gitlab-url>/oauth/authorize` (example https://example.com/oauth/authorize)
diff --git a/doc/integrations/webhooks/Incoming-Webhooks.md b/doc/integrations/webhooks/Incoming-Webhooks.md
index b5ae0fde2..7373892ad 100644
--- a/doc/integrations/webhooks/Incoming-Webhooks.md
+++ b/doc/integrations/webhooks/Incoming-Webhooks.md
@@ -1,6 +1,6 @@
# Incoming Webhooks
-Incoming webhooks allow external applications, written in the programming language of your choice--to post messages into Mattermost channels and private groups by sending a specifically formatted JSON payload via HTTP POST request to a secret Mattermost URL generated specifically for each application.
+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:
@@ -69,7 +69,7 @@ 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
+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
@@ -81,18 +81,27 @@ Additional Notes:
### 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:
+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": "<http://www.mattermost.com/>"}```, 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 <http://www.mattermost.com/|here> 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 an @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
+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 <http://mattermost.org/webhooks>.
-#### Known Issues in v1.1
-
-- The `attachments` payload used in Slack is not yet supported
-- Overriding of usernames does not yet apply to notifications (fixed on master)
-- Cannot supply `icon_emoji` to override the message icon
-- Webhook UI fails when connected to deleted channel (fixed on master)
+#### Known Issues
+- Mattermost does not yet support Slack's feature of using _icon_emoji_ to override the message icon.
diff --git a/doc/process/documentation-guidelines.md b/doc/process/documentation-guidelines.md
index 59ed0a445..cbfeec850 100644
--- a/doc/process/documentation-guidelines.md
+++ b/doc/process/documentation-guidelines.md
@@ -41,7 +41,7 @@ This procedure works on Linux servers running Python 2.6 and higher.
### Use headings
-Headings in markdown provide anchors that can be used to easily reference sub-sections of long pieces of documentation. This is preferrable to just numbering sections without 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:
@@ -77,7 +77,31 @@ 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.
+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
@@ -102,20 +126,20 @@ A support person should be able to say "Did you complete step 7?" instead of "Di
----
-### Lists end without periods
+### End Lists Consistently
-Sentences within bullet points or numbered lists should end in normal punctuation. The sentence or fragment at the end of a bullet point should not have a period.
+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 a sentence within a bullet point. This is the end of a bullet point without a period
+- This is an example of a bullet point that ends with a period.
----
##### Incorrect
----
-- This is an incorrect ending of a bullet point with a period.
+- Example of an incorrect period at the end of a bullet point.
----
### Avoid Passive Phrases
diff --git a/doc/process/overview.md b/doc/process/overview.md
new file mode 100644
index 000000000..8a4c0459d
--- /dev/null
+++ b/doc/process/overview.md
@@ -0,0 +1,143 @@
+# 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
index 96bd2b050..294f5aa79 100644
--- a/doc/process/release-process.md
+++ b/doc/process/release-process.md
@@ -1,68 +1,81 @@
-We're working on making internal processes in the Mattermost core team more transparent for the community. Below is a working draft of our software development process, which will be updated live as we refine our process.
-
-Questions, feedback, comments always welcome,
-
-----------
+# 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.
-This is a working document that will update as our process evolves.
-
+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.
-### - Beginning of release
-- (Ops) Queue an agenda item for first team meeting of the release to review Roadmap
+### (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.
-### - (10 weekdays before release date) Cut-off for major features
-- No major features can be committed to the current release after this date
-- (Dev) Prioritize reviewing, updating, and merging of all pull requests that are going to make it into the release
- - There should be no more tickets in the [pull request queue](https://github.com/mattermost/platform/pulls) marked for the current release
+### (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)
+- (Ops) Post this checklist in Release channel
+- (PM) Write compatibility updates for config.json and database changes [See example](https://github.com/mattermost/platform/blob/master/CHANGELOG.md#compatibility)
+- (PM) 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)
+- (Dev) 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
- (Leads) Meets to prioritize the final tickets of the release
- Backlog is reviewed and major features that won’t make it are moved to next release
- Triage tickets
- - Review roadmap for next release
-- (Marketing) Writes the "Highlights" section of the Changelog
-- (PM) Write compatibility updates for config.json and database changes [See example](https://github.com/mattermost/platform/blob/master/CHANGELOG.md#compatibility)
+ - Finalize roadmap for next release
+ - Draft roadmap for release after next (used to prioritize design tasks)
+- (Marketing) Drafts marketing bullet points for next release based off of roadmap
+- (Marketing) Submits pull request for "Highlights" section of the Changelog
+- (Marketing) Notes date of announcements in release channel
- (PM) Update [Upgrade Guide](https://github.com/mattermost/platform/blob/master/doc/install/Upgrade-Guide.md) for any steps needed to upgrade to new version
-- (PM) Prepare tickets for cutting RCs builds, filing issue in GitLab omnibus to take RC candidate, testing GitLab RC with Mattermost
-- (Stand-up) Each team member discusses worst bug
-
-### - (8 weekdays before release date) Feature Complete and Stabilization
-- After the cut-off time for Feature Complete, Dev prioritizes reviewing PRs and committing to master so Stabilization period can begin, with testing and high priority bug fixes
-- During Stabilization period only BUGS can be committed to master, non-bug tickets are tagged for next version and wait until after a release candidate is cut to be added to master
- - (PM) Review all [S1 bugs](https://mattermost.atlassian.net/secure/IssueNavigator.jspa?mode=hide&requestId=10600) and mark important ones as high priority
- - (Dev + PM) Exceptions can be made by triage team consensus across PM and Dev. List of approved changes for release candidate 1 here: https://mattermost.atlassian.net/issues/?filter=10204
-- (PM) Documentation
+- (PM) 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)
+- (Stand-up) Each team member discusses worst bug (10-15s)
+
+### (T-minus 8 working days) Feature Complete and Stabilization
+- No pull requests for features can be submitted to the current release after this date (except if release manager add "release-exception" label to Jira ticket)
+- (Ops) Post this checklist in Release channel
+- (Dev) 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
+- **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 wait until after a release candidate is cut to be committed to master
+ - (RM) Exceptions can be made by release manager by setting priority to "Highest" and labelling "release-exception", which will add ticket to [Hotfix list for release candidate](https://mattermost.atlassian.net/issues/?filter=10204).
+ - (PM) 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.
+- (PM) Complete documentation
- (PM) Make Changelog PR with updates for latest feature additions and changes
- (PM) Make Changelog PR with updates to contributors
- (PM) Make NOTICE.txt PR for any new libraries added from dev, if not added already
- (PM) Prioritize any developer documentation tickets
-- (PM and devs) Sign-off testing of their feature areas (i.e. PM/dev either signs-off that their area is well tested, or they flag that potential quality issues may exist)
-- (Ops) Mail out mugs to any new contributors
-- (Team) Select "Top Contributor" for the release from external contributions to be mentioned in release announcement
-- (Marketing) Decides announce date (discuss in meeting)
+ - (PM) 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
+- (PM) Check testing is complete
+ - (PM) Works with Ops to check the [Quality Gate](https://github.com/mattermost/process/blob/master/release/quality-gates.md) for feature complete
+ - (PM + Dev) Sign-off testing of their feature areas (i.e. PM/dev either signs-off that their area is well tested, or they flag that potential quality issues may exist)
+- **(Team) Feature Complete Meeting (10:15am PST)**
+ - (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 announce for next release
+- (Marketing) Communicates checklist of items needed by specific dates to write the blog post announce (e.g. screenshots, GIFs,
- (Ops) Post Announce Date in Release channel + update the channel header to reflect date
-- (Marketing) Communicates 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
-- (PM) Works with Ops to check the Quality Gate for feature complete
-- (PM) Communicate to team the plan for next release
-- (Stand-up) Each team member discusses worst bug
+- (Ops) Mail out mugs to any new contributors
-### - (5 weekdays before release date) Code Complete and Release Candidate Cut
-- (Team) Meets to discuss release at 10am PST
- - (PM) Each area changed in latest release is assigned a PM owner to lead testing
- - (Ops) Walks through each item of the **Code Complete and Release Candidate Cut** checklist
+### (T-minus 5 working days) Code Complete and Release Candidate Cut
+- (Ops) Post this checklist in Release channel
+- (Ops) For the next release, create team meetings on Feature Complete and Code Complete dates
+- (PM) Remove "Under Development" notice for current release from Changelog on master
+- **(Team) Code Complete Meeting (10:15am PST meeting)**
+ - (Ops) Walks through each item of this checklist
+ - (PM) Assigns each area of the release testing spreadsheet to a team member
- (Dev) Last check of tickets that need to be merged before RC1
- - (Team) Each team member discusses worst bug
-- After 10am PST meeting the release is considered “Code Complete”.
- - (Dev) Completes final reviews and updates of PRs marked for the release version
- - There should be no more tickets in the [pull request queue](https://github.com/mattermost/platform/pulls) marked for the current release
- - Master is tagged and branched and “Release Candidate 1″ is cut (e.g. 1.1.0-RC1) according to the Release Candidate Checklist
+ - (Team) Each team member discusses worst bug (10-15s)
+- **Code Complete** is declared after meeting
+ - (Dev) 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) 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) Create meta issue for regressions in GitHub (see [example](https://github.com/mattermost/platform/issues/574))
-
-### - (4 weekdays before release date) Release Candidate Testing
-- Final testing is conducted by the team on the acceptance server and any issues found are filed
- - (Dev) Tests upgrade from previous version to current version, following the [Upgrade Guide](https://github.com/mattermost/platform/blob/master/doc/install/Upgrade-Guide.md)
+ - (PM) Include link to meta-issue in release notes of RC1
+ - (PM) Tweet announcement that RC1 is ready (see [example](https://twitter.com/mattermosthq/status/664172166368264192))
+ - (PM) Submit GitLab ticket to take next Mattermost version in the Omnibus
+
+### (T-minus 4 working days) Release Candidate Testing
+- (Team) Final testing is conducted by the team on the acceptance server and any issues found are filed
+- (Build) Tests 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
- (Ops) Posts copy of the **Release Candidate Testing** checklist into Town Square in PRODUCTION
- (Ops) Moves meeting, test and community channels over to the production version of RC, and posts in Town Square asking everyone to move communication over to the new team for testing purposes
- (PM) Test feature areas and post bugs to Bugs/Issues in PRODUCTION
@@ -72,6 +85,7 @@ This is a working document that will update as our process evolves.
- (PM) Posts links to all issues found in RC as comments on the meta issue
- (PM) Updates description to include approved fixes
- (PM) Posts screenshot and link to final tickets for next RC to the Release room
+ - (PM) Updates Release Notes with any new issues that will not be fixed for the current version
- (PM & DEV leads) Triage hotfix candidates and decide on whether and when to cut next RC or final
- (Dev) PRs for hotfixes made to release branch, and changes from release branch are merged into master
- (Ops) Tests approved fixes on master
@@ -81,19 +95,28 @@ This is a working document that will update as our process evolves.
- (Ops) verifies each of the issues in meta ticket is fixed
- (PM) If no blocking issues are found, PM, Dev and Ops signs off on the release
-### - (2 weekdays before release date) Release
- - (Dev) Tags a new release (e.g. 1.1.0) and runs an official build which should be essentially identical to the last RC
+### (T-minus 2 working days) Release Build Cut
+- (Ops) Post this checklist in Release channel
+- (Build) Tags a new release (e.g. 1.1.0) and runs an official build which should be essentially identical to the last RC
- (PM) Any significant issues that were found and not fixed for the final release are noted in the release notes
- - If an urgent and important issue needs to be addressed between major releases, a hotfix release (e.g. 1.1.1) may be released, however this should be very rare, given a monthly cadence
- - (PM) Copy and paste the Release Notes from the Changelog to the Release Description
- - (PM) Update the mattermost.org/download page
- - (Dev) Delete RCs after final version is shipped
- - (PM) Close final GitHub RC meta ticket
-
-### - (0 weekdays before release date) End of Release
-- (PM) Makes sure marketing has been posted (animated GIFs, screenshots, mail announcement, Tweets, blog posts)
+ - 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
+- (PM) Copy and paste the Release Notes from the Changelog to the Release Description
+- (PM) Update the mattermost.org/download page
+- (PM) Update the AMI links on mattermost.org/installation
+- (PM) Close final GitHub RC meta ticket
+- (Dev) Delete RCs after final version is shipped
+- (Marketing) Finalize marketing
+ - (Marketing) Finalize mailchimp email blast
+ - (Marketing) Finalize blog post and put on timer for release
+ - (Marketing) Finalize tweet announcement
+ - (Marketing) Finalize announcement on general mailing list
+ - (Marketing) Finalize announcement for gitlab.mattermost.com
+
+### (T-minus 0 working days) Release Day
+- (Ops) Post this checklist in Release channel
+- (PM) Confirm marketing has been posted (animated GIFs, screenshots, mail announcement, Tweets, blog posts)
- (PM) Close the release in Jira
+- (PM) Set header of next release as UNDER DEVELOPMENT in CHANGELOG on master
- (Dev) Check if any libraries need to be updated for the next release, and if so bring up in weekly team meeting
-- (Ops) Post important dates for the next release in the header of the Release channel
-- (Ops) Queue an agenda item for next team meeting for "Stepping Back" Q&A
-- (Ops) Queue an agenda item for next team meeting for Roadmap review
+- (Ops) Post key dates for the next release in the header of the Release channel
+- (Ops) Queue an agenda item for next team meeting for Release Process Kaizen/Q&A
diff --git a/doc/usage/Markdown.md b/doc/usage/Markdown.md
index 055f47619..65e6f2121 100644
--- a/doc/usage/Markdown.md
+++ b/doc/usage/Markdown.md
@@ -1,152 +1,3 @@
# 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:
-
-Create a code block by indenting four spaces, or by placing ``` on the line above and below your code.
-
-Example:
-
- ```
- code block
- ```
-
-Renders as:
-```
-code block
-```
-
-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
-
-Check out a full list of emojis [here](http://www.emoji-cheat-sheet.com/).
-
-```
-: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
-
-## 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
---------------
+Moved to [help/Markdown.md](../help/Markdown.md)