Jami relies on various components which interact together.
They are divided into three main layers:
1. Daemon is the core of
Jami. It does not interact with users but it is involved in every
2. LibRingClient (or LRC) is written in
QtCore and facilitates clients' portability between operating systems.
It does not interact with the Android client.
3. The Client layer formalizes the
use-case on GNU/Linux (Gnome), Windows, Mac OS X and Android.
To fully build Jami, you must build each of these components in order,
unless you choose to build Jami easily and quickly.
How to Build Jami Easily and Quickly
We use a GIT repository to manage sources. On shell based platform you
can fetch your private copy using following command:
git clone https://review.jami.net/ring-project
Jami installer uses python3. If it's not installed, please install
cd ring-project/./make-ring.py --init
Build and install all the dependencies: Your distro package manager
will be used.
Build and install locally
Run LibRing (daemon) and client that were installed locally
You can then stop the processes with CTRL-C. You can also run them in
the background with the --background argument and then use the
--stop command to stop them. Use Stdout and stderr to go to
daemon.log and client-gnome.log.
Install globally for all users instead
Uninstall the global install
On Mac OS X
You need to setup Homebrew since there is no built-in package manager on OSX.
Build and install all the dependencies
Build and install locally
Output: You can find the .app file in the
RING=$PWD/ring-daemoncd$RING/contribmkdir buildcd build../bootstrapmake# That's all !# Optionally, you may also type :make list# or# make .packge?# to force using downloaded packages, not system locally installed.make .gnutls .upnp ...
Note: if compiling libav in contrib (you can see the list of
dependencies which will be compiled by running 'make list' in
$RING/contrib/build) on Linux, you will likely first need to install
libx11-dev libxext-dev libxfixes-dev due to the '--enable-x11grab'
cd$RING# Now generate autotools configuration files./autogen.sh# Create Makefiles and config.h files for your build target./configure --prefix=/usr --disable-shared# Buildmake# Installsudo make install
For the moment only 64-bit MSVC build can be compiled.
cd ..\..\lrcset QtDir=C:\\Qt\\5.9.4make-lrc.bat gen x64make-lrc.bat build x64
Native compiling on Windows
MSVC: Microsoft Visual C++ 2017
cd ..\client-windowsfetch-deps.bat /cbuild-client.bat deps x64build-client.bat build x64
If you get .dll errors during compilation, run in admin PowerShell:
cd ring-project\client-windows && .\copy-runtime-files.ps1
Set as Release on VS and Run Local Debugger
You are good to go !
On Mac OS X
Build Tools: Use your favorite package manager to install the
necessary tools (HomeBrew or MacPorts) automake, libtool, gettext,
libtoolize, yasm, autoconf, pkg-config. If you don't use a package
cd extras/tools./bootstrapmakeexport PATH=$PATH:$RING/extras/tools/build/bin
Compile LibRing's dependencies
cd contribmkdir buildcd build../bootstrapmake -j3
Build LibRing: If you want to link against libringclient and native
client, easiest way is to add --prefix to configure and then run make
cd ../.././autogen.sh./configure --without-dbus--prefix=<prefix_path>make install
If you do not want to install LibRing, you will have to use
-DRING_BUILD_DIR=<path_to_ring>/src as a cmake argument for
Common Issues: "Autopoint not found" When using Homebrew, autopoint
is not found even when gettext is installed, because symlinks are not
created. To fixt it, run:
brew link--force gettext
Contributing to LibRing Source Code
First read our LibRing Coding Rules page before sending us any patches.
Gerrit is used as code review / integration tool. Register your ID (you
need a Google/GitHUB OAuth2 account) on our public web gerrit service
LIBRING_INSTALL_PREFIX makes reference to the build directory of
LibRing, so it is either ring-daemon/build/_win32/, or the directory
specified via --prefix argument defined during LibRing compilation.
If LibRing and LibRingClient are already installed on the system (eg:
/usr/) in the gnome-ring project root dir:
mkdir buildcd buildcmake .. -DCMAKE_INSTALL_PREFIX=/usrmakesudo make install
Building without installing LibRing and LibRingClient
This allows you to build every component separately and to run them from
their location without having to install them. To do this, you must
first build LibRing and then tell LibRingClient where it is located.
Then, you build the LibRingClient and tell client-gnome where
LibRingClient it is located. Finally, you build client-gnome.
Build the daemon as explained above.
Configure the build of LibRingClient by specifying the location of
the (non-installed) daemon with e.g.:
cd build && cmake .. -DRING_BUILD_DIR=$HOME/ring-project/daemon/src -DCMAKE_BUILD_TYPE=Debug
Build LibRingClient by running "make".
Configure the build of client-gnome by specifying the location of
LibRingClient using the specific variable designed for it:
cd build && cmake .. -DLibRingClient_PROJECT_DIR=$HOME/ring-project/lrc -DCMAKE_BUILD_TYPE=Debug
Build client-gnome by running "make".
To run an install-less Jami, you must manually start the daemon and then
the client, e.g.:
The app built using
'make' contains only links to required libraries. To fully build and
package as a standalone Bundle, see the Packaging section.
For now, the build type of the client is "Debug" by default. However it
is useful to also have the debug symbols of LibRingClient. To do this,
specify -DCMAKE_BUILD_TYPE=Debug when compiling LibRingClient in the
To make a standalone Bundle we use a cmake module:
All dependencies are copied inside the Bundle and links are fixed.
We can then generate a "DragNDrop" dmg file with
cmake ../ -DCMAKE_INSTALL_PREFIX=<libringclient_install_path>make install-jcpack -G DragNDrop Ring