WebRTC audio/video call and conferencing server.
JavaScript Go CSS HTML M4 Makefile Other
Latest commit 92a885e Apr 13, 2017
longsleep committed Apr 13, 2017 Merge pull request #425 from cguentherTUChemnitz/patch-1
fix broken docker build
Failed to load latest commit information.
build Make sure to build pdf js separatly. Jul 2, 2015
doc Added API to leave a room. Jun 27, 2016
go Compare HMACs in constant time to mitigate timing attack Jul 6, 2016
html Add support for extra.d directory Jun 29, 2016
m4 Use autoconf macro to compare versions. May 30, 2014
scripts Docker: Use /dev/urandom instead of /dev/random Sep 14, 2016
src Add special "hook" mode to polint to fix language detection. Aug 12, 2016
static Filter rtx support from remote SDP for Chrone <= 38 Sep 7, 2016
.gitignore Add support for extra.d directory Jun 29, 2016
.hound.yml Point hound to correct config. Feb 24, 2015
.javascript_ignore Ensure that files and folders under static/js/libs/ are ignored by ho… Nov 2, 2015
.jshint Merge branch 'release-0.23' Dec 9, 2014
.travis.yml Add make tarball to travis Aug 12, 2016
AUTHORS Merge branch 'master' of https://github.com/irek-zaripov/spreed-webrtc Jun 6, 2016
CHANGELOG.md 0.28.1 Sep 7, 2016
COPYING Added autoconf/automake support. May 23, 2014
ChangeLog Added hints how CHANGELOG.md is created. Mar 2, 2016
Dockerfile fix broken docker build Apr 13, 2017
Dockerfile.build Add Dockerfiles to build minimal Docker Aug 10, 2016
Dockerfile.run Add Dockerfiles to build minimal Docker Aug 10, 2016
LICENSE Initial public release. Feb 13, 2014
Makefile.am Don't run target binary before get is run Sep 25, 2016
NEWS Added autoconf/automake support. May 23, 2014
README Added autoconf/automake support. May 23, 2014
README.md Add Docker instructions to README.md Aug 10, 2016
autogen.sh Only install git hook if cloned from git. Jun 28, 2016
configure.ac Fix Go 1.4 detection for minor versions Sep 7, 2016
dependencies.tsv Bump go.uuid to 1.1.0 Aug 3, 2016
package.json Autoprefixer moved to postcss-cli, limit version for now to keep auto… Oct 1, 2015
server.conf.in Add support for extra.d directory Jun 29, 2016
spreed-webrtc-server Use sh shebang instead of bash to be less Linux specific (#244). Feb 10, 2016


Spreed WebRTC

Spreed WebRTC implements a WebRTC audio/video call and conferencing server and web client.

The latest source of Spreed WebRTC can be found on GitHub. If you are a user, just wanting a secure and private alternative for online communication make sure to check out the Spreedbox, providing a ready to use hardware with Spreed WebRTC included.

Build prerequisites

Runtime dependencies

Spreed WebRTC compiles directly to native code and has no external runtime dependencies. See here for details.


Build Status

If you got spreed-webrtc from the git repository, you will first need to run the included autogen.sh script to generate the configure script.

Configure does try to find all the tools on your system at the standard locations. If the dependencies are somewhere else, add the corresponding parameters to the ./configure call.

$ ./configure
$ make

Build separately

There are several make targets available. Get Go external dependencies at least once with make get, all the other targets depend on this.

$ make get
$ make assets
$ make binary

Server startup

spreed-webrtc-server [OPTIONS]


-c="./server.conf": Configuration file.
-cpuprofile="": Write cpu profile to file.
-h=false: Show this usage information and exit.
-l="": Log file, defaults to stderr.
-memprofile="": Write memory profile to this file.
-v=false: Display version number and exit.

An example configuration file can be found in server.conf.in.


Connect to the server URL and port with a web browser and the web client will launch.


To build styles and translations, further dependencies are required. The source tree contains already built styles and translations, so these are only required if you want to make changes.

The following Node.js modules are required, these may be installed locally by running npm install from the project root. Consult the package.json file for more details.

Styles can be found in src/styles. Translations are found in src/i18n. Each folder has its own Makefile to build the corresponding files. Check the Makefile.am templates for available make targets.

Javascript console logging is automatically disabled and can be enabled by adding the query parameter debug to your url https://my_url?debug.

Running server for development

Copy the server.conf.in to server.conf.

Build styles, javascript and binary using make. Then run ./spreed-webrtc-server

The server runs on http://localhost:8080/ per default.

HTML changes and Go rebuilds need a server restart. Javascript and CSS reload directly.

Running for production

Spreed WebRTC should be run through a SSL frontend proxy with support for Websockets. Example configuration for Nginx can be found in doc/NGINX.txt.

In addition, for real world use, one also needs a STUN/TURN server configured (with shared secret support).

See https://github.com/coturn/coturn for a free open source TURN server implementation. Make sure to use a recent version (we recommend 3.2). Versions below 2.5 are not supported.

For WebRTC usage, be sure to enable long-term credentials, fingerprinting, and set the realm. See https://github.com/coturn/coturn/wiki/turnserver#webrtc-usage for more information.

Running with Docker

We provide official Docker images at https://hub.docker.com/r/spreed/webrtc/. Of course you can build the Docker image yourself as well. Check the Dockerfiles in this repository for details and instructions.

Use the following command to run a Spreed WebRTC Docker container with the default settings from our official Spreed WebRTC Docker image.

docker run --rm --name my-spreed-webrtc -p 8080:8080 -p 8443:8443 \
    -v `pwd`:/srv/extra -i -t spreed/webrtc

Setup Screensharing


Chrome should work out of the box.


As of Firefox >= 36 you must append the domain being used to the allowed domains to access your screen. You do this by navigating to about:config, search for 'media.getusermedia.screensharing.allowed_domains', and append the domain to the list of strings. You can edit the field simply by double clicking on it. Ensure that you follow the syntax rules of the field. If you are using an ip:port url, simply append ip to the list. Also ensure that you are using https, otherwise permission will be denied to share your screen. You do not need to restart or reload in order for it to take affect.


  1. "Fork" develop branch.
  2. Create a feature branch.
  3. Make changes.
  4. Do your commits (run make fmt and make jshint before commit).
  5. Send "pull request" for develop branch.


Spreed WebRTC uses the AGPL license, see our LICENSE file.