An easy and free video conference service #webrtc
JavaScript HTML CSS
Latest commit 4db32d3 Jan 5, 2017 @chamerling chamerling Merge pull request #279 in MEET/meetings from MEET-544 to master
* commit '572f57a209317705976ccdf3e232d893fa3fa7b6':
  MEET-544 Update webrtc-backend version
Failed to load latest commit information.
backend MEET-537 Fix depecration methods of Express Nov 9, 2016
config MEET-527 Plug the new hublin-easyrtc-connector, remove easyrtc mentio… Jun 15, 2016
doc MEET-496 Use baseUrl property in email template Nov 4, 2015
fixtures MEET-5 Add authentication, midway-tests and fixtures Feb 19, 2015
frontend MEET-534 Show error warning in webpage for 'easyrtc.setGotMedia is no… Sep 9, 2016
log MEET-1 Initialize the webserver backend AwesomeModule Feb 16, 2015
modules MEET-538 Update easyrtc version for inaccessible camera issue on Chro… Dec 9, 2016
tasks MEET-1 Add some jsdocs for each js files Feb 17, 2015
templates/email MEET-496 Use baseUrl property in email template Nov 4, 2015
test MEET-537 Make unit test frontend pass Nov 10, 2016
.bowerrc Update packages.json and .bowerrc to allow ansible deployment Mar 12, 2015
.dockerignore MEET-282 Add docker and docker-compose support Mar 31, 2015
.gitignore MEET-219 Add the daily rotate log transport Mar 24, 2015
.gitmodules MEET-527 add submodule for hublin-easyrtc-connector module Jun 21, 2016
.gjslintrc MEET-40 update .gjslint file to reflect the no js doc option of Grunt… Mar 9, 2015
.jshintrc MEET-537 Make test unit backend pass Nov 10, 2016
.travis.yml MEET-230 Add Travis-ci support and badge Mar 19, 2015
Dockerfile MEET-539 Fix Docker build Nov 30, 2016
Gruntfile-tests.js MEET-228 Frontend test on the distribution once generated Mar 23, 2015
Gruntfile.js MEET-537 Make test unit backend pass Nov 10, 2016
LICENSE MEET-169 - License update for copyright notice Mar 11, 2015 [MEET-541] Add a tab to not break the list Dec 19, 2016
bower.json MEET-525 Fix the lightbox2 version Apr 28, 2016
docker-compose.yml MEET-282 Add docker and docker-compose support Mar 31, 2015
package.json MEET-544 Update webrtc-backend version Jan 5, 2017
server.js MEET-27 Create local WSServer Feb 20, 2015

Join the chat at

Code Climate Build Status is a free and open source video conference solution built with love and designed with ethics in mind. It's the best way to initiate a communication anywhere with anybody and brings real time conversation to the next level. allows free communication without additional plugins.


  1. clone the repository

    git clone --recursive
  2. Install and configure MongoDB

    You must install mongoDB. We suggest you to use mongoDB version 2.6.5.

      echo 'deb dist 10gen' | tee /etc/apt/sources.list.d/mongodb.list
      apt-get install -y mongodb-org=2.6.5 mongodb-org-server=2.6.5 mongodb-org-shell=2.6.5 mongodb-org-mongos=2.6.5 mongodb-org-tools=2.6.5
      service mongod start
  3. install node.js

    We are currently using Node 6. It is highly recommended that you use nvm to install a specific version of node.

  4. Install Redis

    apt-get install redis-server
  5. Copy the sample db.json configuration file and adapt it to your need (especially the mongodb URL if you do not use default parameters from step 2)

    cp config/db.json.sample config/db.json
  6. Install the npm dependencies (as an administrator)

    npm install -g mocha grunt-cli bower karma-cli
  7. Go into the modules directory and install easyrtc connector module dependecies

    cd modules/hublin-easyrtc-connector
    npm install
  8. Go into the project directory and install project dependencies

    cd meetings
    npm install


You can check that everything works by launching the test suite:


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 :

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-bakend # only run the midway backend tests
grunt test # launch all the testsuite


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

grunt fixtures

Note that this will override all the current configuration resources with the fixtures ones.

Starting the server

Use npm start to start the server !

npm start

Develop into

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 mongodb and redis servers beforehand.

In addition, you can run grunt debug to start the node-inspector debugger server. Visit the displayed URL in Chrome or Opera to start the graphical debugging session. Note that startup takes a while, you must wait until the webserver starts to do anything meaningful.

Updating files for distribution

grunt plugins are used to process files and generate distribution. You will have to follow some rules to not break the distribution generation which are defined here.


Any project frontend file which is under frontend/js and used in a web page must be placed between generator tags. For example, in frontend/views/meetings/index.jade:

// <!--build:js({.tmp,frontend}) meetings.js-->
// <!--endbuild-->

The files placed between the two comment lines will be used to generate a meetings.js file (concatenate and minify all).


All the files from backend are copied into the dist/backend folder without any change.

Static files

These folders are pushed in the distribution:

  • config
  • templates

If you need to add more, you will have to change the 'copy:dist' and 'dist-files' tasks in Gruntfile.js

Create a distribution

To create a distribution with clean environment, minified files and install production dependencies:

grunt dist-all
cd dist
npm install --production

Then you can start the server with 'npm start', 'node server', or your favorite tool (Kudos to forever).

Docker is available on the Docker Hub as linagora/hublin, so you can pull it from there:

docker pull linagora/hublin

Or you can build it from the current git repository

docker build -t linagora/hublin .

The linagora/hublin container is configured to get the mongodb connection from mongodb://db:27017 URL. You can modify the config/db.json file and adapt to use your own instance, or continue to use Docker and use one of the solutions below.


docker-compose allows to describe and run distributed applications (cf docker-compose.yml file).

Note: A docker-compose based image is available on the Docker Hub at linagora/hublin-all.


docker-compose up


docker-compose build

docker containers

You can pull all the required containers by hand (mongodb, redis), start them, and create the links when starting

# get mongo and start it as a container named 'db'
docker pull mongo
docker run -d --name db mongo

docker pull redis
docker run -d --name redis redis

# start
docker run -p 8080:8080 --link db:db --link redis:redis linagora/hublin

Once started, is available on http://:8080.

Note: If you are on OS X and/or use boot2docker, DOCKER_HOST value will be the result of the 'boot2docker ip' call.


Want to embed on your website? Read more here.


Affero GPL v3