The web version of Jami.
The repo is structured as 4 subprojects:
client
: the web front-end made with Reactserver
: the back-end server made with Express.js, which starts a daemon instancecommon
: the common code used by both client
and server
daemon
: a submodule containing the Jami daemonLinux
Build from source with the following instructions: https://swig.org/svn.html
Note: you will need have Bison installed. On Ubuntu, this can be installed using
sudo apt install bison
.
git clone https://github.com/swig/swig.git cd swig ./autogen.sh ./configure make sudo make install
Install the required dependencies: https://docs.jami.net/build/dependencies.html
Note: for Ubuntu, the minimally needed dependencies are:
sudo apt install git build-essential cmake automake autoconf autopoint libtool pkg-config libdbus-1-dev libva-dev libvdpau-dev libasound2-dev libpulse-dev libudev-dev libexpat1-dev ssnasm yasm yasm nasm
Compile the dependencies:
cd daemon/contrib mkdir native cd native ../bootstrap make -j$(nproc)
Install node-gyp
to build the daemon with Node.js bindings:
npm install -g node-gyp
Compile the daemon with Node.js bindings:
cd ../.. ./autogen.sh ./configure --with-nodejs make -j$(nproc)
Create a symlink to jamid.node
in server
:
cd ../server ln -s ../daemon/bin/nodejs/build/Release/jamid.node jamid.node cd ..
npm install
This will install the relevant dependencies for all subprojects and configure Git hooks.
Start both the client and server:
LD_LIBRARY_PATH="${PWD}/daemon/src/.libs" npm start
You can also start the client and server individually:
npm start --workspace client LD_LIBRARY_PATH="${PWD}/daemon/src/.libs" npm start --workspace server
Open http://localhost:3000 in your browser to view the app.
npm run build
LD_LIBRARY_PATH="${PWD}/daemon/src/.libs" npm run start:prod
npm run lint
Lint and fix files:
npm run lint:fix
npm run format
npm run clean
You may instead wish to use a Docker container for development.
This allows you to avoid having to install all the dependencies needed to build the daemon on your computer. The container is meant for development: it uses bind mounts to mount the source code from your computer into the container, so that the container rebuilds the project whenever changes are made locally.
Build the Docker image for the daemon:
docker-compose build jami-daemon
Build the Docker image for Jami web:
docker-compose build
Run the Docker container:
docker-compose up
Build the Docker image for the daemon:
cd daemon docker build --build-arg config_args="--with-nodejs" -t jami-daemon . cd ..
Build the Docker image for Jami web:
docker build --target development --t jami-web .
Run the Docker container:
docker run -it \ -p 3000:3000 \ -p 5000:5000 \ --volume ${PWD}/client/src:/web-client/client/src \ --volume ${PWD}/server/src:/web-client/server/src \ --volume ${PWD}/client/.env.development:/web-client/client/.env.development \ --volume ${PWD}/server/.env:/web-client/server/.env \ jami-web