• Stars
    star
    943
  • Rank 48,473 (Top 1.0 %)
  • Language
    TypeScript
  • License
    Apache License 2.0
  • Created almost 5 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A glossy Matrix collaboration client for desktop.

Build Static Analysis Weblate Quality Gate Status Vulnerabilities Bugs

Element Desktop

Element Desktop is a Matrix client for desktop platforms with Element Web at its core.

First Steps

Before you do anything else, fetch the dependencies:

yarn install

Fetching Element

Since this package is just the Electron wrapper for Element Web, it doesn't contain any of the Element Web code, so the first step is to get a working copy of Element Web. There are a few ways of doing this:

# Fetch the prebuilt release Element package from the element-web GitHub releases page. The version
# fetched will be the same as the local element-desktop package.
# We're explicitly asking for no config, so the packaged Element will have no config.json.
yarn run fetch --noverify --cfgdir ""

...or if you'd like to use GPG to verify the downloaded package:

# Fetch the Element public key from the element.io web server over a secure connection and import
# it into your local GPG keychain (you'll need GPG installed). You only need to to do this
# once.
yarn run fetch --importkey
# Fetch the package and verify the signature
yarn run fetch --cfgdir ""

...or either of the above, but fetching a specific version of Element:

# Fetch the prebuilt release Element package from the element-web GitHub releases page. The version
# fetched will be the same as the local element-desktop package.
yarn run fetch --noverify --cfgdir "" v1.5.6

If you only want to run the app locally and don't need to build packages, you can provide the webapp directory directly:

# Assuming you've checked out and built a copy of element-web in ../element-web
ln -s ../element-web/webapp ./

[TODO: add support for fetching develop builds, arbitrary URLs and arbitrary paths]

Building

Native Build

TODO: List native pre-requisites

Optionally, build the native modules, which include support for searching in encrypted rooms and secure storage. Skipping this step is fine, you just won't have those features.

Then, run

yarn run build

This will do a couple of things:

  • Run the setversion script to set the local package version to match whatever version of Element you installed above.
  • Run electron-builder to build a package. The package built will match the operating system you're running the build process on.

Docker

Alternatively, you can also build using docker, which will always produce the linux package:

# Run this once to make the docker image
yarn run docker:setup

yarn run docker:install
# if you want to build the native modules (this will take a while)
yarn run docker:build:native
yarn run docker:build

After running, the packages should be in dist/.

Starting

If you'd just like to run the electron app locally for development:

# Install electron - we don't normally need electron itself as it's provided
# by electron-builder when building packages
yarn add electron
yarn start

Config

If you'd like the packaged Element to have a configuration file, you can create a config directory and place config.json in there, then specify this directory with the --cfgdir option to yarn run fetch, eg:

mkdir myconfig
cp /path/to/my/config.json myconfig/
yarn run fetch --cfgdir myconfig

The config dir for the official Element app is in element.io. If you use this, your app will auto-update itself using builds from element.io.

Profiles

To run multiple instances of the desktop app for different accounts, you can launch the executable with the --profile argument followed by a unique identifier, e.g element-desktop --profile Work for it to run a separate profile and not interfere with the default one.

Alternatively, a custom location for the profile data can be specified using the --profile-dir flag followed by the desired path.

User-specified config.json

  • %APPDATA%\$NAME\config.json on Windows
  • $XDG_CONFIG_HOME/$NAME/config.json or ~/.config/$NAME/config.json on Linux
  • ~/Library/Application Support/$NAME/config.json on macOS

In the paths above, $NAME is typically Element, unless you use --profile $PROFILE in which case it becomes Element-$PROFILE, or it is using one of the above created by a pre-1.7 install, in which case it will be Riot or Riot-$PROFILE.

Translations

To add a new translation, head to the translating doc.

For a developer guide, see the translating dev doc.

translationsstatus

Report bugs & give feedback

If you run into any bugs or have feedback you'd like to share, please let us know on GitHub.

To help avoid duplicate issues, please view existing issues first (and add a +1) or create a new issue if you can't find it. Please note that this issue tracker is associated with the element-web repo, but is also applied to the code in this repo as well.

More Repositories

1

element-web

A glossy Matrix collaboration client for the web.
TypeScript
10,230
star
2

element-android

A glossy Matrix collaboration client for Android.
Kotlin
3,054
star
3

element-ios

A glossy Matrix collaboration client for iOS
Swift
1,675
star
4

riot-android

A glossy Matrix collaboration client for Android
Java
1,416
star
5

synapse

Synapse: Matrix homeserver written in Python/Twisted.
Python
1,049
star
6

element-x-android

Android Matrix messenger application using the Matrix Rust Sdk and Jetpack Compose
Kotlin
920
star
7

hydrogen-web

Lightweight matrix client with legacy and mobile browser support
TypeScript
586
star
8

element-call

Group calls powered by Matrix
TypeScript
402
star
9

element-x-ios

Next generation Matrix client for iOS built with SwiftUI on top of matrix-rust-sdk.
Swift
230
star
10

chatterbox

Chatterbox lets you securely embed Hydrogen on any website!
TypeScript
170
star
11

roadmap

Element public roadmap
78
star
12

element-meta

Shared/meta documentation and project artefacts for Element clients
45
star
13

matrix-authentication-service

Rust
28
star
14

riot-meta

A place to experiment with tracking features at a higher level than Riot web/iOS/Android.
25
star
15

swift-ogg

A Swift library for converting to and from opus/ogg format
Swift
21
star
16

ess-starter-edition-core

Jinja
17
star
17

logos

Logo artwork for Riot, Vector, Matrix etc
Shell
16
star
18

compound-web

Web implementation of the Compound design system
TypeScript
16
star
19

vector.im

static parts of vector.im site
HTML
14
star
20

jitsi-helm

Helm chart for HA Jitsi-meet
Lua
14
star
21

compound-design-tokens

Compound design tokens
JavaScript
13
star
22

riot-automated-tests

Java
12
star
23

policies

Policy documents for services run by New Vector
Python
12
star
24

element-builder

A minimalist auto-builder for Element and Element Desktop
TypeScript
12
star
25

feature-dashboard

A task summary, plan, and burndown chart for building software together
JavaScript
12
star
26

files-sdk-demo

Demo web client for using matrix-files-sdk
Svelte
11
star
27

compound

Element's design system
MDX
8
star
28

matrix-content-scanner-python

A web service for scanning media hosted by a Matrix media repository
Python
8
star
29

synapse-room-access-rules

Custom room access rules for Tchap
Python
6
star
30

nix-flakes

Development environments for various repos, powered by Nix Flakes.
Nix
6
star
31

element-integration-manager

Element Integration Manager related issues
6
star
32

compound-ios

SwiftUI implementation of the Compound design system
Swift
6
star
33

libopusencoder-android

Android wrapper for libopusenc, used to create Ogg files in with Opus frames.
C
6
star
34

ems-docs

Element and EMS documentation provided by the EMS team
Handlebars
6
star
35

stats

Python
5
star
36

jitsi_libre_maven

Maven repository for the LIBRE version of Jitsi
5
star
37

tailscale-k8s

Shell
5
star
38

oidc-playground

OpenID Connect project playground environment
5
star
39

element-web-ilag-module

Proof of concept for https://github.com/matrix-org/matrix-react-sdk-module-api
TypeScript
5
star
40

element.io

Public issue tracker for the element.io site
4
star
41

packages.element.io

Configuration files for packages.riot.im
CSS
4
star
42

element-feature-nag-bot

A Matrix bot that complains when riot-web features take too long
TypeScript
4
star
43

retro-nag-bot

A Matrix bot that complains when people don't finish their retro actions
TypeScript
4
star
44

user-stories

A place to write user stories for planned cross-platform enhancements.
4
star
45

kiwitcms-upload-action

Github Action to automate upload from junit output file to Kiwi TCMS
3
star
46

tchap-red-list

Python
3
star
47

ec-cli-rust

A small CLI tool that helps to emulate Element Call
Rust
3
star
48

element-design-tokens

Style dictionary containing design tokens for Element across all platforms.
JavaScript
3
star
49

compound-android

Kotlin
3
star
50

sfu-load-tester-go

A quick tool to create fake Element Call participants
Go
2
star
51

emsdocs-images

Hosting for images currently on ems-docs
CSS
2
star
52

design

2
star
53

helm-charts

Smarty
2
star
54

proj-mana-test

A test repo for playing with project management tools
2
star
55

lk-jwt-service

Minimal service to provide LiveKit JWTs using Matrix OpenID Connect
Go
2
star
56

tchap-displayname-from-email

A Synapse module used by Tchap to derive a display name from a new user's email address.
Python
2
star
57

riot-web-workflow-automation

A github thing that automates stuff on the workflow board, until Github supports the features
1
star
58

trafficlight-adapter-element-call

TypeScript
1
star
59

compound-ios-snapshots

The snapshots used for testing compound-ios.
1
star