JavaScript HTML CSS Other
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
.gitlab/issue_templates Edit the bug issue report template Jan 5, 2018
backend linagora.esn.admin#440 revert dirty check in taget user middleware Aug 15, 2018
bin #2451 & linagora/lgs/k8s/k8s#67 allow creating domain without config… Jul 9, 2018
config enable dav.import by default Jun 21, 2018
doc Merge branch 'maintenance-doc' into 'master' Aug 13, 2018
docker Enable to use Cassandra mail repository Aug 1, 2018
fixtures #2451 & linagora/lgs/k8s/k8s#67 allow creating domain without config… Jul 9, 2018
frontend linagora.esn.admin#455 - Update user states service Aug 3, 2018
log OR-12 .gitkeep for log folder Jan 28, 2014
modules Support live update for editting an addressbook Aug 21, 2018
packaging Enable to use Cassandra mail repository Aug 1, 2018
tasks Use docker runner to run all our tests (except one) Aug 1, 2018
templates #2278 Add a constant for displaying reset password button in login page Jan 9, 2018
test Fix linagora/lgs/k8s/k8s#90 Normalize env variables name Aug 14, 2018
.bowerrc OR-6 initial bower setup Jan 17, 2014
.dockerignore OR-2430 Ignore e2e-videos folder when build docker image Oct 3, 2016
.eslintignore OR-2532 Added an entry in control center to download TB extension. Feb 3, 2017
.eslintrc.json ADM-155 Do not expose HTTP API to init platformadmin Apr 5, 2017
.gitignore linagora/lgs/openpaas/linagora.esn.calendar#773 Split the email modul… Aug 30, 2017
.gitlab-ci.yml Gitlab-ci.yaml improved (tests are now skipped for tags) Aug 16, 2018
.nvmrc OR-2655 Upgrade to use node 8 Jul 18, 2017
Dockerfile First step to docker build in docker for esn. Aug 1, 2018
Gruntfile-tests.js linagora/lgs/openpaas/linagora.esn.admin#212 fix RAM limit per node Aug 18, 2017
Gruntfile.js Use docker runner to run all our tests (except one) Aug 1, 2018
LICENSE OR-413 add a LICENSE file at the root Jul 1, 2014 Adding Browserstack logo and link #2434 Jun 26, 2018
bower.json linagora/lgs/openpaas/linagora.esn.calendar#1389 Remove fullcalendar … Jul 9, 2018
docker-compose.yml Fix #2425 support credentials for AMQP connection Jun 15, 2018
index.js OR-2444 expose core, module-manager and test helpers in an index.js t… Oct 27, 2016
package.json Revert "Merge branch 'bump-npm-dependency-socketio' into 'master'" Aug 21, 2018
server.js Handle "modules_append" element in config Jun 27, 2018


Code Climate

OpenPaaS is a collaboration platform for enterprises & organizations.

Installation (see there for Ubuntu install)

1.clone the repository

git clone
# or
git clone

2.Install dependencies

You can install dependencies yourself, or use the Docker environment as described in ./docker/doc/

  • ElasticSearch v2.3.2
  • MongoDB v2.6.5
  • Redis 3.x
  • RabbitMQ 3.6.x

3.Install node.js

You can use nvm to install Node.js. Once nvm is installed, type the following commands in the directory of your project :

nvm install `cat .nvmrc`
nvm use

4.You may need some additional packages. For example with a Debian installation, as an administrator you should use the following command:

apt-get install build-essential redis-server rabbitmq-server python-setuptools graphicsmagick graphicsmagick-imagemagick-compat libjpeg-dev

5.Install Sabre/dav

Follow sabre installation instructions.

6.Install the npm dependency

npm install -g bower

7.Go into the project directory and install project dependencies (not as an administrator)

npm install

If you have any problem relating to node-canvas during the dependencies installation, make sure your system has installed Cairo. Documentation can be found here.

If during further manipulations you encounter errors with node modules, try to reinstall them

rm -rf node_modules/
npm install


You must install npm dependency first

npm install -g grunt-cli

You can check that everything works by launching the test suite (this may be long):

grunt --chunk=1

Note that, due to the large amount of tests, you eventually need the --chunk=1 option. It will create one new nodejs process per js test file. It prevents the memory to be overused by mocha, which would lead to tests failures. If you want to launch tests from a single test, you can specify the file as command line argument. For example, you can launch the backend tests on the test/unit-backend/webserver/index.js file like this:

grunt test-unit-backend --test=test/unit-backend/webserver/index.js

Note: This works for backend and midway tests.

Some specialized Grunt tasks are available, check the Gruntfile.js for more:

grunt linters # launch hinter and linter against the codebase
grunt test-frontend # only run the fontend unit tests
grunt test-unit-backend # only run the unit backend tests
grunt test-midway-backend # only run the midway backend tests
grunt test # launch all the testsuite


You can debug the backend thanks to Node debugger. Launch with the --inspect flag or --inspect-brk if you want to break on the first line of the application

node --inspect server.js

Debugger listening on ws://
For help see

This debugger can be reached in two ways as explained here. Once done you will have the message Debugger attached in your terminal. Now you can add breakpoints, inspect, have fun and feel the power.

If you need to have access to the source code (not the minified one), then you should do:

NODE_ENV="dev" node --inspect --inspect-brk server.js

Yon can also debug backend tests using INSPECT=true environment variable:

INSPECT=true grunt test-midway-backend
Debugger listening on ws://
For help see


Fixtures can be configured in the fixtures folder and injected in the system using grunt:

grunt fixtures

Note that you must configure contents of files inside fixtures/config/data and fixtures/esn-config/data/ to match your environment, particularly fixtures/config/data/db.js in which the host of the mongodb database is defined. Also note that this will override all the current configuration resources with the fixtures ones.

Elasticsearch Index

Before start using OpenPaaS, you should create indexes on Elasticsearch. If you are not familiar with elasticsearch indexes then please have a look here.

To do so, you can simply run the following command from your OpenPaaS folder:

node ./bin/cli.js elasticsearch

Starting the server

You should first start mongodb, redis and elasticsearch and configure OpenPaaS.

Then 'npm start' to start the OpenPaaS web application:

npm start

If you encounter the following problem when starting OpenPaaS: Getting error : [nodemon] Internal watch failed: watch ENOSPC, then the limit set per user for the max number of watches is reached. To deal with this error, you should do the following:

echo fs.inotify.max_user_watches=582222 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

Your ESN can be reached at the following address: http://localhost:8080. Now simply follow the setup wizard.

Develop OpenPaaS

Running grunt dev will start the server in development mode. Whenever you make changes to server files, the server will be restarted. Make sure you have started the mongo, redis, rabbitmq and elasticsearch servers beforehand.

While developing, you have some environement variables, to help you speed up on your job.

ESN_CSS_CACHE_OFF=true grunt dev

Will force the less->css to be generated on every call.

ESN_CSS_CACHE_ON=true grunt dev

Will enable the less->css cache: the compilation will happen only once.


A Docker environment is provided to ease all the setup for various environments (development, demonstration, ...). It allows to start Docker containers for all the dependencies without having to install anything else than Docker and without having to configure all by hand.

For more details, check the documentation on ./docker/doc/


Affero GPL v3

Special thanks


BrowserStack for supporting open source projects.