Mattermost Platform

Mattermost plugins: How to set up your developer environment

Learn how to get a local Mattermost and webapp instance up and running to create Mattermost plugins

(Originally published at

The goal of this four-part series is to help you learn how to write your own Mattermost plugins for the first time. To kick things off, this article teaches you how to set up your developer environment.

My test computer is a five-year-old laptop with an Intel i5 processor and 4GB of RAM. You need at least 30GB of hard disk for this project. Of course, you’ll also need an internet connection.

We start with a freshly installed Ubuntu 20.04. You don’t need to install the desktop environment. If you do, you can browse to your Mattermost instance on the laptop, but you can also reach it from devices in your network as well.

Install the dependences

First, we have to install some dependencies:

sudo apt-get install -y build-essential curl git gcc  nodejs npm 

Install Docker

Since you’ll run Mattermost in a Docker container, you’ll need a free Docker account to get started. If you don’t have one, sign up here.

Now, it’s time to install Docker:

curl -fsSL -o
sudo sh
sudo usermod -aG docker $(whoami)
docker login
Installing Docker
Getting Docker set up

Install docker-compose

sudo curl -L "$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Installing Docker-compose

Install Go

Mattermost is written in Golang and React. To build Mattermost plugins, you need to install Go:

sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf go1.15.6.linux-386.tar.gz
sudo apt-get remove -y gccgo-go && wget 
sudo tar -C /usr/local -xzf go1.15.6.linux-amd64.tar.gz
echo "export PATH=\$PATH:/usr/local/go/bin" >> ~/.bashrc
Installing Go

Add Go to your shell

Next, you need to add Go to your shell. To do that, add the following lines to .bashrc in your home folder:

echo 'export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
export PATH=$PATH:/usr/local/go/bin' >> /YOUR/HOME/FOLDER/.bashrc
Adding Go to your shell

Modify /etc/security/limits.conf

After that, you need to modify /etc/security/limits.conf. Use Sudo, since you need to do this as an administrator. To do this, add the following two lines, replacing YOURUSERNAME with your username:

YOURUSERNAME  soft  nofile  8096
YOURUSERNAME  hard  nofile  8096
Modifying /etc/security/limits.conf

Clone and install the Mattermost server

To do this, fork the mattermost-server to your own GitHub account. Then create a folder called mmplugins and clone the mattermost-server into that folder. Once that’s done, you need to build the server. When the process is complete, you’ll see its listing on port 8065.

mkdir mmplugins
cd mmplugins
git clone
cd mattermost-server
make run-server
Cloning and installing the Mattermost server
Clone and install the Mattermost server

Test your server

Now, it’s time to send a ping command to the API server to test it:

curl http://localhost:8065/api/v4/system/ping

You’ll receive a JSON response like this:

Testing your server

Now it’s time to shutdown your server for the time being:

make stop-server

Modify the configuration file

Next, go to the mattermost-server/config/ folder and modify the config.json file.

You’ll need to enable plugins. So, look for PluginSettings and make sure they are enabled.

Modify the configuration file

Install the webapp

At this point, you’ve successfully installed the Mattermost server. Now, it’s time to install the webapp.

To do that, you first need to fork the mattermost-server into your own GitHub account.

Go back to the mmplugins folder we created earlier and clone the mattermost-webapp into that folder:

git clone
Install the webapp

The next step involves linking your webapp folder to your Mattermost server, like this:

mkdir -p mattermost-webapp/dist
  cd mattermost-server
  ln -nfs ../mattermost-webapp/dist client
  cd ..
Link your webapp to your server

Test and run your webapp

Now, go to the webapp folder, test your environment, and run your webapp. Don’t forget to start your server again!

cd mattermost-webapp
make test
make run
cd ../mattermost-server
make run-server
Test and run your webapp
Test and run your webapp

Fill your server with some test data

Next, fill your server with some demo data. You can login with a system admin account (e.g., username=systemadmin and password=Sys@admin-sample1) or with a regular account (e.g., username=user-1 and password=SampleUs@r-1).

We will do this in the next step.

cd mattermost-webapp
 make test-data
Fill your server with some test data

Store your credentials for uploading

Next, we’ll store your credentials for uploading like this:

cd mattermost-server/bin/
./mmctl auth login http://localhost:8065 --name local-name --username sysadmin --password Sys@dmin-sample1
Store your credentials for uploading

Browse to your Mattermost server

At this point, you can open your browser and surf to your Mattemrost server. You’ll be greeted by the webapp and can log in!

Mattermost webapp

That’s it: You’re finished!

Once you’ve reached this point, you’ve successfully set up your own developer environment. Congratulations!

Now, it’s time to write some code. If you want to stop your server and your container, you have to run make stop-docker in the mattermost-webapp folder.

cd mattermost-webapp
  make stop-docker

Did you run into a ‘Permission Denied’ error?

When you’re starting your server and get a “Permission Denied” error, you don’t have the ability to start Docker with your account. An ugly way to solve this is by making the Docker-socket world read-writeable:

sudo  chmod 666 /var/run/docker.sock
Fixing permissions errors

Stay tuned!

In the next installment in this series, I’ll walk you through the structure of plugins, including the differences between webapp and server plugins, and how to deploy them.

In the meantime, you might be interested in checking out my previous series on Mattermost integrations:

Read more about:


Tom De Moor is the official reviewer of the Dutch translation of Mattermost. He is a technology lover with a broad outlook who uses PHP, Python, NodeJS, MariaDB, MongoDB, and Raspberry Pis on a daily basis. He is also an official drone pilot.