Skip to content
An easy and free video conference service based on WebRTC
Branch: master
Clone or download
tuanlc Merge branch 'hublin#629' into 'master'
#629 add missing dependency 'pug'

See merge request linagora/lgs/openpaas/hublin!55
Latest commit 72ead89 May 25, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
.gitlab/issue_templates #531 add gitlab template Jan 4, 2018
backend #599: Sort i18n locale files Feb 12, 2018
config #586: Use easyrtc connector Feb 6, 2018
doc MEET-558 Installation doc for with Janus Feb 6, 2018
fixtures Update redis and mongo env variables Feb 6, 2018
frontend #623 use myRtcId with promise Feb 20, 2018
log MEET-1 Initialize the webserver backend AwesomeModule Feb 16, 2015
tasks MEET-1 Add some jsdocs for each js files Feb 17, 2015
templates #529: Rename jade to pug Feb 6, 2018
test #612 Create a dedicated speak module Feb 13, 2018
.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
.eslintignore #541 Use eslint Feb 6, 2018
.eslintrc.json #541 Use eslint Feb 6, 2018
.gitignore #530 Update gitignore Feb 6, 2018
.gitlab-ci.yml #586: Use easyrtc connector Feb 6, 2018
.nvmrc #530 Use node LTS Feb 6, 2018
.travis.yml #606 Build both images on travis and push them on docker hub Feb 7, 2018
Dockerfile #602 Provide docker files for both janus and easyrtc Feb 6, 2018
Dockerfile.janus #602 Provide docker files for both janus and easyrtc Feb 6, 2018
Gruntfile-tests.js MEET-228 Frontend test on the distribution once generated Mar 23, 2015
Gruntfile.js #529: Fix translated link Feb 6, 2018
LICENSE MEET-169 - License update for copyright notice Mar 11, 2015 Add instructions to run compose in dev mode Mar 2, 2018
bower.json #599: Add i18n in frontend Feb 9, 2018
docker-compose.janus.yml #602 Provide docker files for both janus and easyrtc Feb 6, 2018
docker-compose.yml #602 Provide docker files for both janus and easyrtc Feb 6, 2018
package.json linagora/lgs/openpaas/hublin#629 add missing dependency 'pug' May 25, 2018
server.js #526 Clean server.js Feb 6, 2018

Join the chat at

Code Climate Codacy Badge CodeFactor Build Status Docker 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.


A complete and more advanced documentation is available at The following instructions assumes that you are installing Hublin on a debian distribution.

  1. clone the repository
git clone
  1. Install node.js

Hublin uses Node 8. It is highly recommended that you use nvm to install a specific version of node.

nvm use
# will install and use required node version (lts/carbon)
  1. Go into the project root directory and install project dependencies
npm install
  1. Install and configure MongoDB

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

sudo apt-key adv --keyserver hkp:// --recv 7F0CEB10
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
  1. Copy the sample db.json configuration file and adapt it to your needs (especially the mongodb URL)
cp config/db.json.sample config/db.json
  1. Install Redis
apt-get install redis-server

A more advanced deployment using the Janus WebRTC Gateway is possible and described in the Hublin + Janus documentation.

Starting the server

Once all your services are ready and started (Mongo, Redis and optionally Janus), use npm start to start the server

npm start

Hublin is now available on http://localhost:8080.


First, install the required npm dependencies (as an administrator):

npm install -g mocha grunt-cli bower karma-cli

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 also available, check the Gruntfile.js file 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


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.


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 services beforehand.

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 JS 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.pug file:

// <!--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://mongo: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).

You can launch Hublin with compose from the current directory:

DOCKER_IP=<YOUR DOCKER IP> docker-compose up

Where DOCKER_IP is the public IP address where Docker services can be reached. This will be used by Janus to send back the right IP to Web clients (ICE candidates) so that they can communicate with Janus correctly.

Janus with docker

The docker image configured for Janus is available on the Hub as linagora/hublin:janus.

docker pull linagora/hublin:janus

Or you can build it from the current repository

docker build -t linagora/hublin:janus -f Dockerfile.janus .

You can launch Hublin with Janus and all required services with Docker compose like:

DOCKER_IP=<YOUR DOCKER IP> docker-compose -f docker-compose.yml -f docker-compose.janus.yml up

If you want to launch required services except Hublin container to start it on your own for development purposes for example, you can do:

DOCKER_IP=<YOUR DOCKER IP> docker-compose -f docker-compose.yml -f docker-compose.janus.yml up janus-gateway mongo redis

And then start Hublin

NODE_ENV=dev npm start


Want to embed on your website? Read more here.


Affero GPL v3

You can’t perform that action at this time.