2016-10-20 15:54:30 +00:00
Riot
====
2015-06-09 16:40:42 +00:00
2020-02-14 18:04:54 +00:00
Riot (formerly known as Vector) is a Matrix web client built using the [Matrix
React SDK](https://github.com/matrix-org/matrix-react-sdk).
2015-06-24 15:33:53 +00:00
2020-02-14 18:04:54 +00:00
Supported Environments
======================
Riot has several tiers of support for different environments:
* Supported
* Definition: Issues **actively triaged** , regressions **block** the release
* Last 2 major versions of Chrome, Firefox, and Safari
* Latest release of official Riot Desktop app on macOS, Windows, and Linux versions that are actively supported by the OS vendor and receive security updates
* Experimental
* Definition: Issues **accepted** , regressions **do not block** the release
* Riot as an installed PWA via current stable version of Chrome, Firefox, and Safari
* Mobile web for current stable version of Chrome, Firefox, and Safari on Android, iOS, and iPadOS
* Not supported
* Definition: Issues only affecting unsupported environments are **closed**
* Everything else
For accessing Riot on an Android or iOS device, we currently recommend the
native apps [riot-android ](https://github.com/vector-im/riot-android )
and [riot-ios ](https://github.com/vector-im/riot-ios ).
2019-03-14 18:59:57 +00:00
2016-06-14 14:12:35 +00:00
Getting Started
2015-07-22 05:45:01 +00:00
===============
2016-07-11 17:25:58 +00:00
2019-02-10 08:53:38 +00:00
The easiest way to test Riot is to just use the hosted copy at https://riot.im/app.
The `develop` branch is continuously deployed by Jenkins at https://riot.im/develop
for those who like living dangerously.
2016-07-28 14:05:03 +00:00
2016-10-20 15:54:30 +00:00
To host your own copy of Riot, the quickest bet is to use a pre-built
released version of Riot:
2016-06-14 14:12:35 +00:00
2016-12-29 01:57:31 +00:00
1. Download the latest version from https://github.com/vector-im/riot-web/releases
2016-06-14 14:12:35 +00:00
1. Untar the tarball on your web server
2019-02-10 08:53:38 +00:00
1. Move (or symlink) the `riot-x.x.x` directory to an appropriate name
2019-02-15 12:43:47 +00:00
1. Configure the correct caching headers in your webserver (see below)
2016-06-14 14:12:35 +00:00
1. If desired, copy `config.sample.json` to `config.json` and edit it
2019-06-27 18:04:06 +00:00
as desired. See the [configuration docs ](docs/config.md ) for details.
2016-10-20 15:54:30 +00:00
1. Enter the URL into your browser and log into Riot!
2016-06-14 14:12:35 +00:00
2019-04-16 11:53:59 +00:00
Releases are signed using gpg and the OpenPGP standard, and can be checked against the public key located
2019-04-16 19:03:53 +00:00
at https://packages.riot.im/riot-release-key.asc.
2016-10-25 10:20:23 +00:00
2018-02-15 01:17:37 +00:00
Note that for the security of your chats will need to serve Riot
2018-03-21 15:18:08 +00:00
over HTTPS. Major browsers also do not allow you to use VoIP/video
2018-02-15 01:17:37 +00:00
chats over HTTP, as WebRTC is only usable over HTTPS.
2019-09-01 11:41:21 +00:00
There are some exceptions like when using localhost, which is
2019-08-27 20:28:15 +00:00
considered a [secure context ](https://developer.mozilla.org/docs/Web/Security/Secure_Contexts )
and thus allowed.
2018-12-19 20:50:16 +00:00
2019-04-25 12:22:32 +00:00
To install Riot as a desktop application, see [Running as a desktop
app](#running-as-a-desktop-app) below.
2016-12-24 05:32:16 +00:00
2016-08-26 23:13:20 +00:00
Important Security Note
=======================
2016-10-20 15:54:30 +00:00
We do not recommend running Riot from the same domain name as your Matrix
homeserver. The reason is the risk of XSS (cross-site-scripting)
vulnerabilities that could occur if someone caused Riot to load and render
malicious user generated content from a Matrix API which then had trusted
access to Riot (or other apps) due to sharing the same domain.
2016-08-26 23:13:20 +00:00
2016-10-20 15:54:30 +00:00
We have put some coarse mitigations into place to try to protect against this
situation, but it's still not good practice to do it in the first place. See
2016-12-29 01:57:31 +00:00
https://github.com/vector-im/riot-web/issues/1977 for more details.
2016-08-26 23:13:20 +00:00
2016-06-14 14:12:35 +00:00
Building From Source
====================
2019-03-12 11:06:57 +00:00
Riot is a modular webapp built with modern ES6 and uses a Node.js build system.
2019-03-13 10:53:21 +00:00
Ensure you have the latest LTS version of Node.js installed.
2015-06-24 16:58:13 +00:00
2019-03-12 11:06:57 +00:00
Using `yarn` instead of `npm` is recommended. Please see the Yarn [install
guide](https://yarnpkg.com/docs/install/) if you do not have it already.
2015-06-24 16:58:13 +00:00
2019-03-12 11:06:57 +00:00
1. Install or update `node.js` so that your `node` is at least v10.x.
1. Install `yarn` if not present already.
2017-05-30 14:11:17 +00:00
1. Clone the repo: `git clone https://github.com/vector-im/riot-web.git` .
1. Switch to the riot-web directory: `cd riot-web` .
2019-03-12 11:06:57 +00:00
1. Install the prerequisites: `yarn install` .
2019-10-29 10:37:36 +00:00
* If you're using the `develop` branch, then it is recommended to set up a
proper development environment (see [Setting up a dev
environment](#setting-up-a-dev-environment) below). Alternatively, you
can use https://riot.im/develop - the continuous integration release of
the develop branch.
2016-10-20 15:54:30 +00:00
1. Configure the app by copying `config.sample.json` to `config.json` and
2019-06-27 18:04:06 +00:00
modifying it. See the [configuration docs ](docs/config.md ) for details.
2019-03-12 11:06:57 +00:00
1. `yarn dist` to build a tarball to deploy. Untaring this file will give
2016-06-14 14:12:35 +00:00
a version-specific directory containing all the files that need to go on your
web server.
2015-06-24 16:58:13 +00:00
2019-03-12 11:06:57 +00:00
Note that `yarn dist` is not supported on Windows, so Windows users can run `yarn build` ,
2019-02-10 08:53:38 +00:00
which will build all the necessary files into the `webapp` directory. The version of Riot
will not appear in Settings without using the dist script. You can then mount the
`webapp` directory on your webserver to actually serve up the app, which is entirely static content.
2015-10-01 15:02:44 +00:00
2016-07-28 14:05:03 +00:00
Running as a Desktop app
========================
2019-05-24 10:27:48 +00:00
Riot can also be run as a desktop app, wrapped in Electron. You can download a
2019-04-25 12:22:32 +00:00
pre-built version from https://riot.im/download/desktop/ or, if you prefer,
build it yourself.
2016-07-28 14:05:03 +00:00
2019-04-25 12:22:32 +00:00
To build it yourself, follow the instructions below.
2017-01-26 09:47:01 +00:00
2017-02-20 10:32:14 +00:00
1. Follow the instructions in 'Building From Source' above, but run
2019-03-12 11:06:57 +00:00
`yarn build` instead of `yarn dist` (since we don't need the tarball).
2019-05-24 10:27:48 +00:00
2. Install Electron and run it:
2017-01-26 09:47:01 +00:00
2019-02-10 08:53:38 +00:00
```bash
2019-03-12 11:06:57 +00:00
yarn electron
2017-01-26 09:47:01 +00:00
```
2016-07-28 14:05:03 +00:00
2019-05-24 10:27:48 +00:00
To build packages, use `electron-builder` . This is configured to output:
2019-02-10 08:53:38 +00:00
* `dmg` + `zip` for macOS
* `exe` + `nupkg` for Windows
* `deb` for Linux
2016-12-09 18:29:06 +00:00
But this can be customised by editing the `build` section of package.json
as per https://github.com/electron-userland/electron-builder/wiki/Options
See https://github.com/electron-userland/electron-builder/wiki/Multi-Platform-Build
for dependencies required for building packages for various platforms.
2016-07-28 14:05:03 +00:00
2016-12-09 18:29:06 +00:00
The only platform that can build packages for all three platforms is macOS:
2019-02-10 08:53:38 +00:00
```bash
2016-12-09 18:29:06 +00:00
brew install mono
2019-03-12 11:06:57 +00:00
yarn install
yarn build:electron
2016-12-09 18:29:06 +00:00
```
2019-05-24 10:27:48 +00:00
For other packages, use `electron-builder` manually. For example, to build a
package for 64 bit Linux:
2017-01-26 09:47:01 +00:00
1. Follow the instructions in 'Building From Source' above
2. `node_modules/.bin/build -l --x64`
2016-07-28 14:05:03 +00:00
2019-05-24 10:27:48 +00:00
All Electron packages go into `electron_app/dist/`
2016-07-28 14:05:03 +00:00
2019-05-24 10:27:48 +00:00
Many thanks to @aviraldg for the initial work on the Electron integration.
2016-12-09 19:05:25 +00:00
Other options for running as a desktop app:
* @asdf:matrix .org points out that you can use nativefier and it just works(tm)
2016-12-17 19:17:58 +00:00
2019-02-10 08:53:38 +00:00
```bash
2019-03-12 11:06:57 +00:00
yarn global add nativefier
2016-12-17 19:17:58 +00:00
nativefier https://riot.im/app/
```
2016-12-09 19:05:25 +00:00
2019-06-27 18:04:06 +00:00
The [configuration docs ](docs/config.md#desktop-app-configuration ) show how to
override the desktop app's default settings if desired.
2019-03-01 08:01:26 +00:00
2019-04-10 21:47:12 +00:00
Running from Docker
===================
2019-10-10 14:54:52 +00:00
The Docker image can be used to serve riot-web as a web server. The easiest way to use
2019-04-10 21:47:12 +00:00
it is to use the prebuilt image:
```bash
docker run -p 80:80 vectorim/riot-web
2019-10-10 14:54:52 +00:00
```
2019-04-10 21:47:12 +00:00
2019-10-10 14:54:52 +00:00
To supply your own custom `config.json` , map a volume to `/app/config.json` . For example,
2019-04-10 21:47:12 +00:00
if your custom config was located at `/etc/riot-web/config.json` then your Docker command
would be:
```bash
docker run -p 80:80 -v /etc/riot-web/config.json:/app/config.json vectorim/riot-web
```
To build the image yourself:
```bash
git clone https://github.com/vector-im/riot-web.git riot-web
cd riot-web
git checkout master
docker build -t vectorim/riot-web .
```
If you're building a custom branch, or want to use the develop branch, check out the appropriate
riot-web branch and then run:
```bash
docker build -t vectorim/riot-web:develop \
2019-04-10 21:51:06 +00:00
--build-arg USE_CUSTOM_SDKS=true \
2019-04-10 21:47:12 +00:00
--build-arg REACT_SDK_REPO="https://github.com/matrix-org/matrix-react-sdk.git" \
--build-arg REACT_SDK_BRANCH="develop" \
--build-arg JS_SDK_REPO="https://github.com/matrix-org/matrix-js-sdk.git" \
--build-arg JS_SDK_BRANCH="develop" \
.
```
2019-06-28 12:50:50 +00:00
config.json
===========
Riot supports a variety of settings to configure default servers, behaviour, themes, etc.
See the [configuration docs ](docs/config.md ) for more details.
2019-03-22 14:49:44 +00:00
Labs Features
=============
Some features of Riot may be enabled by flags in the `Labs` section of the settings.
Some of these features are described in [labs.md ](https://github.com/vector-im/riot-web/blob/develop/docs/labs.md ).
2019-11-25 04:54:01 +00:00
Caching requirements
====================
Riot requires the following URLs not to be cached, when/if you are serving Riot from your own webserver:
```
/config.*.json
/i18n
/home
/sites
/index.html
```
2015-07-22 05:45:01 +00:00
Development
===========
2015-10-25 11:56:29 +00:00
2019-02-10 08:53:38 +00:00
Before attempting to develop on Riot you **must** read the [developer guide
for `matrix-react-sdk` ](https://github.com/matrix-org/matrix-react-sdk), which
2016-10-20 15:54:30 +00:00
also defines the design, architecture and style for Riot too.
2016-07-11 17:25:58 +00:00
2019-02-10 08:53:38 +00:00
You should also familiarise yourself with the ["Here be Dragons" guide
](https://docs.google.com/document/d/12jYzvkidrp1h7liEuLIe6BMdU0NUjndUYI971O06ooM)
to the tame & not-so-tame dragons (gotchas) which exist in the codebase.
2018-10-11 09:29:28 +00:00
2016-10-20 15:54:30 +00:00
The idea of Riot is to be a relatively lightweight "skin" of customisations on
2016-07-11 17:25:58 +00:00
top of the underlying `matrix-react-sdk` . `matrix-react-sdk` provides both the
higher and lower level React components useful for building Matrix communication
apps using React.
2019-03-12 11:06:57 +00:00
After creating a new component you must run `yarn reskindex` to regenerate
2018-09-17 23:46:13 +00:00
the `component-index.js` for the app (used in future for skinning).
2016-07-11 17:25:58 +00:00
2016-10-20 15:54:30 +00:00
Please note that Riot is intended to run correctly without access to the public
2016-07-15 14:57:59 +00:00
internet. So please don't depend on resources (JS libs, CSS, images, fonts)
hosted by external CDNs or servers but instead please package all dependencies
2016-10-20 15:54:30 +00:00
into Riot itself.
2016-07-11 17:25:58 +00:00
Setting up a dev environment
============================
2016-10-20 15:54:30 +00:00
Much of the functionality in Riot is actually in the `matrix-react-sdk` and
2016-06-14 14:12:35 +00:00
`matrix-js-sdk` modules. It is possible to set these up in a way that makes it
easy to track the `develop` branches in git and to make local changes without
having to manually rebuild each time.
2016-02-23 20:55:37 +00:00
First clone and build `matrix-js-sdk` :
2019-02-10 08:53:38 +00:00
``` bash
git clone https://github.com/matrix-org/matrix-js-sdk.git
pushd matrix-js-sdk
git checkout develop
2019-03-12 11:06:57 +00:00
yarn link
yarn install
2019-02-10 08:53:38 +00:00
popd
```
2016-02-23 20:55:37 +00:00
Then similarly with `matrix-react-sdk` :
2019-02-10 08:53:38 +00:00
```bash
git clone https://github.com/matrix-org/matrix-react-sdk.git
pushd matrix-react-sdk
git checkout develop
2019-03-12 11:06:57 +00:00
yarn link
yarn link matrix-js-sdk
yarn install
2019-02-10 08:53:38 +00:00
popd
```
2016-02-23 20:55:37 +00:00
2016-10-20 15:54:30 +00:00
Finally, build and start Riot itself:
2016-02-23 20:55:37 +00:00
2019-02-10 08:53:38 +00:00
```bash
git clone https://github.com/vector-im/riot-web.git
cd riot-web
git checkout develop
2019-03-12 11:06:57 +00:00
yarn link matrix-js-sdk
yarn link matrix-react-sdk
yarn install
yarn start
2019-02-10 08:53:38 +00:00
```
Wait a few seconds for the initial build to finish; you should see something like:
```
Hash: b0af76309dd56d7275c8
Version: webpack 1.12.14
Time: 14533ms
Asset Size Chunks Chunk Names
bundle.js 4.2 MB 0 [emitted] main
bundle.css 91.5 kB 0 [emitted] main
bundle.js.map 5.29 MB 0 [emitted] main
bundle.css.map 116 kB 0 [emitted] main
+ 1013 hidden modules
```
2016-02-24 11:36:57 +00:00
Remember, the command will not terminate since it runs the web server
2016-06-14 14:12:35 +00:00
and rebuilds source files when they change. This development server also
disables caching, so do NOT use it in production.
2019-02-10 08:53:38 +00:00
2019-10-06 11:04:20 +00:00
Configure the app by copying `config.sample.json` to `config.json` and
modifying it. See the [configuration docs ](docs/config.md ) for details.
2019-02-10 08:53:38 +00:00
Open http://127.0.0.1:8080/ in your browser to see your newly built Riot.
___
2016-02-23 20:55:37 +00:00
2018-09-17 23:46:13 +00:00
When you make changes to `matrix-react-sdk` or `matrix-js-sdk` they should be
automatically picked up by webpack and built.
2015-10-25 11:56:29 +00:00
2016-10-20 15:54:30 +00:00
If you add or remove any components from the Riot skin, you will need to rebuild
2019-03-12 11:06:57 +00:00
the skin's index by running, `yarn reskindex` .
2015-07-07 16:46:06 +00:00
2016-08-12 08:59:56 +00:00
If any of these steps error with, `file table overflow` , you are probably on a mac
which has a very low limit on max open files. Run `ulimit -Sn 1024` and try again.
2016-10-20 15:54:30 +00:00
You'll need to do this in each new terminal you open before building Riot.
2016-08-12 08:59:56 +00:00
2017-07-05 10:45:23 +00:00
Running the tests
-----------------
2017-05-23 13:12:53 +00:00
2017-07-05 10:45:23 +00:00
There are a number of application-level tests in the `tests` directory; these
are designed to run in a browser instance under the control of
[karma ](https://karma-runner.github.io ). To run them:
* Make sure you have Chrome installed (a recent version, like 59)
* Make sure you have `matrix-js-sdk` and `matrix-react-sdk` installed and
built, as above
2019-03-12 11:06:57 +00:00
* `yarn test`
2017-07-05 10:45:23 +00:00
The above will run the tests under Chrome in a `headless` mode.
2017-05-24 13:23:34 +00:00
2017-07-05 10:45:23 +00:00
You can also tell karma to run the tests in a loop (every time the source
2019-03-12 11:06:57 +00:00
changes), in an instance of Chrome on your desktop, with `yarn
2017-07-05 10:45:23 +00:00
test-multi`. This also gives you the option of running the tests in 'debug'
mode, which is useful for stepping through the tests in the developer tools.
2017-05-24 13:23:34 +00:00
2019-10-10 14:54:52 +00:00
### End-to-End tests
2019-10-21 12:13:57 +00:00
See [matrix-react-sdk ](https://github.com/matrix-org/matrix-react-sdk/#end-to-end-tests ) how to run the end-to-end tests.
2019-10-10 14:54:52 +00:00
2017-07-05 10:45:23 +00:00
Translations
============
2017-05-23 13:12:53 +00:00
2017-07-05 10:45:23 +00:00
To add a new translation, head to the [translating doc ](docs/translating.md ).
2017-05-23 13:12:53 +00:00
2017-07-05 10:45:23 +00:00
For a developer guide, see the [translating dev doc ](docs/translating-dev.md ).
[<img src="https://translate.riot.im/widgets/riot-web/-/multi-auto.svg" alt="translationsstatus" width="340"> ](https://translate.riot.im/engage/riot-web/?utm_source=widget )
2017-05-23 13:12:53 +00:00
2016-07-11 17:25:58 +00:00
Triaging issues
===============
2018-01-19 16:52:24 +00:00
Issues will be triaged by the core team using the below set of tags.
2016-07-11 17:25:58 +00:00
2018-01-19 16:52:24 +00:00
Tags are meant to be used in combination - e.g.:
* P1 critical bug == really urgent stuff that should be next in the bugfixing todo list
* "release blocker" == stuff which is blocking us from cutting the next release.
* P1 feature type:voip == what VoIP features should we be working on next?
2017-03-09 12:00:54 +00:00
2018-01-19 16:52:24 +00:00
priority: **compulsory**
* P1: top priority - i.e. pool of stuff which we should be working on next
2017-03-09 12:00:54 +00:00
* P2: still need to fix, but lower than P1
* P3: non-urgent
2018-01-19 16:52:24 +00:00
* P4: interesting idea - bluesky some day
2017-03-09 12:00:54 +00:00
* P5: recorded for posterity/to avoid duplicates. No intention to resolves right now.
2016-07-11 17:25:58 +00:00
2018-01-19 16:52:24 +00:00
bug or feature: **compulsory**
2016-07-11 17:25:58 +00:00
2017-03-09 12:00:54 +00:00
* bug
* feature
2018-01-19 16:52:24 +00:00
bug severity: **compulsory, if bug**
2017-05-23 13:12:53 +00:00
2017-03-09 12:00:54 +00:00
* critical - whole app doesn't work
* major - entire feature doesn't work
* minor - partially broken feature (but still usable)
2018-01-19 16:52:24 +00:00
* cosmetic - feature works functionally but UI/UX is broken
types
* type:* - refers to a particular part of the app; used to filter bugs
on a given topic - e.g. VOIP, signup, timeline, etc.
2016-07-11 17:25:58 +00:00
2018-01-19 16:52:24 +00:00
additional categories (self-explanatory):
2016-07-11 17:25:58 +00:00
2017-03-09 12:00:54 +00:00
* release blocker
* ui/ux (think of this as cosmetic)
* network (specific to network conditions)
2018-01-19 16:52:24 +00:00
* platform specific
* accessibility
* maintenance
* performance
* i18n
* blocked - whether this issue currently can't be progressed due to outside factors
community engagement
* easy
* hacktoberfest
* bounty? - proposal to be included in a bounty programme
* bounty - included in Status Open Bounty