Main features
- End-to-end encrypted rooms and direct messages by default
- Federation with any Matrix server
- Spaces to group rooms for a team or community
- Threads, reactions, file sharing and search
- Voice and video calls with Element Call
- Cross-signed device verification and key backup
- Web, desktop and Element X mobile apps
- Bridges and bots, including Hookshot for GitHub, GitLab and Jira
What Element does
Element is a chat client for Matrix, an open standard with a public specification for decentralized communication over a federation of servers. Each organization runs, or rents, a Matrix homeserver; users on different homeservers can join the same rooms and message each other, much as email works between domains. Element provides rooms and direct messages, spaces that group rooms for a team or community, threads, file sharing, and voice and video calls through Element Call.
This repository holds Element Web and the Electron-based desktop app. On phones Element recommends its Element X apps. Because Matrix is a standard, Element is only one of many clients, and Element Web can talk to any compliant homeserver.
Security and encryption
Element turns on end-to-end encryption by default. It uses the encryption built into Matrix: Olm, an implementation of the Double Ratchet protocol, for device-to-device sessions, and Megolm for group rooms. Keys are per device, devices are verified with cross-signing, and Element says the protocol has been audited by NCC Group. Unencrypted rooms are still possible, for example for public communities. As with any end-to-end encrypted system, server-side search, content scanning and compliance archiving are harder; Element addresses these in its paid edition with audit bots and content scanning.
Self-hosting Element
Element Web on its own is a set of static files, available as a release tarball, a Debian package or a Docker image, and must be served over HTTPS. To run a complete deployment you also need a homeserver. Element’s ESS Community packages one with Helm charts: Synapse, Matrix Authentication Service for logins, the MatrixRTC backend for Element Call, Element Web, the Element Admin console, the Hookshot integration bot, PostgreSQL and HAProxy. The quick setup uses K3s and needs at least 2 CPU cores and 2 GB of RAM, DNS records for several subdomains, ports 80, 443 and 30001, and TLS certificates. The server name becomes part of every user ID and cannot be changed later without starting over.
Element describes ESS Community as aimed at small to mid-scale, non-commercial use, gives it no vendor support, and its pricing page labels the community Synapse as not meant for production. ESS Pro adds Synapse Pro with auto-scaling and high availability, LDAP and SCIM, auditing and moderation bots, retention policies, S3 media storage and support. These are proprietary.
Hosted version
Element sells ESS Pro for self-hosted, air-gapped and fully managed deployments, priced per seat or per deployment. A hosted copy of Element Web at app.element.io can sign in to any Matrix homeserver.
Limitations
A full Matrix stack is several services on Kubernetes, which is more work than a single-binary chat server. The free server distribution is not positioned for business use, so organizations should budget for ESS Pro or run community-maintained alternatives themselves. End-to-end encryption, while a strength, complicates search and moderation.
Who it suits
Element fits organizations that need encryption by default and want to federate with partners, other agencies or communities on their own servers, and public sector bodies that care about an open standard. Teams that want simple self-hosting may prefer Zulip or Mattermost; for encrypted business messaging from a single vendor, compare Wire.
License details
AGPL-3.0-or-later. Element Web is also available under GPL-3.0-or-later or a paid commercial license. ESS Community is AGPL-3.0-only and aimed at non-commercial use; ESS Pro and Synapse Pro are proprietary.
Technical details
Self-hosting needs
- Matrix homeserver (Synapse)
- PostgreSQL
Built with
- TypeScript
- React
GitHub topics
- hacktoberfest
- matrix
Reviewed by the OpenSourcePicks editors from the project's repository and documentation. Something out of date? Tell us.