You can find the published source code at github.com/wireapp/wire.
For licensing information, see the attached LICENSE file and the list of third-party licenses at wire.com/legal/licenses/.
No license is granted to the Wire trademark and its associated logos, all of which will continue to be owned exclusively by Wire Swiss GmbH. Any use of the Wire trademark and/or its associated logos is expressly prohibited without the express prior written consent of Wire Swiss GmbH.
This repository contains the source code for the Wire server. It contains all libraries and services necessary to run Wire.
For documentation on how to self host your own Wire-Server see this section. Federation is on our long term roadmap.
See more in "Open sourcing Wire server code".
This repository contains the following source code:
libs: Shared libraries
It also contains
The following diagram gives a high-level outline of the (deployment) architecture of the components that make up a Wire Server as well as the main internal and external dependencies between components.
Communication between internal components is currently not guarded by dedicated authentication or encryption and is assumed to be confined to a private network.
There are two options:
This requires a range of dependencies that depend on your platform/OS, such as:
See docs/developer/dependencies.md for details.
Once all dependencies are set up, the following should succeed:
# build all haskell services make # build one haskell service, e.g. brig: cd services/brig && make
The default make target (
fast) compiles unoptimized (faster compilation time, slower binaries), which should be fine for development purposes. Use
make install to get optimized binaries.
For building nginz, see services/nginz/README.md
If you don't wish to build all docker images from scratch (e.g. the
alpine-builder takes a very long time), ready-built images can be downloaded from here.
# optionally: # make docker-builder # if you don't run this, it pulls the alpine-builder image from quay.io make docker-deps docker-intermediate docker-services # subsequent times, after changing code, if you wish to re-create docker images, it's sufficient to make docker-intermediate docker-services
will, eventually, have built a range of docker images. Make sure to give Docker enough RAM; if you see
make: *** [builder] Error 137, it might be a sign that the build ran out of memory. You can also mix and match – e.g. pull the
alpine-builder image and build the rest locally.
Dockerfiles, as well as build/alpine/README.md for details.
Integration tests require all of the haskell services (brig, galley, cannon, gundeck, proxy, cargohold, spar) to be correctly configured and running, before being able to execute e.g. the
brig-integration binary. The test for brig also starts nginz, so make sure it has been built before.
These services require most of the deployment dependencies as seen in the architecture diagram to also be available:
Setting up these real, but in-memory internal and "fake" external dependencies is done easiest using
docker-compose. Run the following in a separate terminal (it will block that terminal, C-c to shut all these docker images down again):
Then, to run all integration tests:
make on the top-level directory (to produce all the service's binaries) followed by e.g
cd services/brig && make integration to run one service's integration tests only.
You can use
$WIRE_STACK_OPTIONS to pass arguments to stack through the
Makefiles. This is useful to e.g. pass arguments to a unit test suite or temporarily disable
-Werror without the risk of accidentally committing anything, like this:
WIRE_STACK_OPTIONS='--ghc-options=-Wwarn --test-arguments="--quickcheck-tests=19919 --quickcheck-replay=651712"' make -C services/gundeck
Integration tests are run via
/services/integration.sh, which does not know about stack or
$WIRE_STACK_OPTIONS. Here you can use
cd services/spar WIRE_INTEGRATION_TEST_OPTIONS="--match='POST /identity-providers'" make i
Alternatively, you can use tasty's support for passing arguments vie shell variables directly. Or, in the case of spar, the hspec equivalent, which is less helpful at times.
You have two options: