Wire is a distributed system assembled with a combination of custom build components and third-party components and services. At its core, Wire delivers to the users a communication experience from one user’s device (a client) to another user’s device.
The supported platforms are:
Android and iOS smartphones and tablets
Windows, Linux and macOS computers with a platform-specific native application, based on Electron
Windows, Linux and macOS from a browser without any additional plugin installation: Firefox, Chrome or Edge
The relay of messages, images, files and video across devices is possible thanks to the Wire backend, which has knowledge of user accounts and conversations, but has no access to the content of the communication, as it is end-to-end encrypted from device to device.
Wire’s backend reaches to a number of third-party services that provide content for users to send, such as YouTube and Google Maps. With the backend acting as a proxy, the user’s device does not need to communicate with those services directly, allowing the user to hide certain information from third parties (such as IP address or registered cookies).
Wire’s backend also makes use of native push services, provided by Apple and Google, to send native pushes to smartphones and tablets when the app is not running. However, when the app is running on a device, pushes are sent to the device through a direct connection (websocket) with the Wire backend, without the use of any third party.
Finally, users’ devices send anonymized usage statistics to a third-party analytics provider. The user has the option to disable this feature for additional privacy; however, the statistics provide valuable insights for Wire on usage patterns that should be optimized and issues that should be addressed.
The source code for clients and server is hosted on GitHub at wireapp. The code necessary to run the server and the clients, and the unit tests of each component, is fully open source; however some accessory services (such as billing and GDPR-compliance) and the building and end-to-end testing infrastructure are not open sourced.
The backend is mostly developed in Haskell code with a microservices architecture. A high-level overview of the backend services is presented here. The backend source code and documentation is hosted at wire-server.
Third-party integrations (services and bots) are developed with JVM technologies, namely Java and Kotlin.
iOS client source code: wire-ios
Android client source code: wire-android
Web application source code: wire-webapp
Desktop application source code: wire-desktop, which is an Electron wrapper running the web application.
Each platform-specific client is further divided in multiple components. The components are listed in each individual platform repository.
Of all components, two notable ones are:
The audio-video signalling and codecs library, wire-audio-video-signaling. There are two versions of this library: one open source and one closed source. The capabilities of the two versions are similar and they are API-compatible; however the closed source version has proprietary optimizations to codecs and signalling. The library is used natively on iOS and Android; on the web platform (and desktop wrapper), the browser's WebRTC implementation is used. See here for more details on calling.