Skip to content
Browse files

Stop installing Matrix Console by default

This is based on the work done by @krombel in #2601.
  • Loading branch information...
richvdh committed Dec 11, 2018
1 parent a2ed0f2 commit df96177ca7f6f646baf96e779e0bf0ef38cc5168
Showing with 44 additions and 58 deletions.
  1. +1 −8 README.rst
  2. +4 −0 UPGRADE.rst
  3. +1 −0 changelog.d/4290.feature
  4. +11 −32 synapse/app/
  5. +27 −15 synapse/config/
  6. +0 −3 synapse/
@@ -289,10 +289,6 @@ go back in your web client and proceed further.
If all goes well you should at least be able to log in, create a room, and
start sending messages.

(The homeserver runs a web client by default at https://localhost:8448/, though
as of the time of writing it is somewhat outdated and not really recommended -

.. _`client-user-reg`:

Registering a new user from a client
@@ -372,10 +368,7 @@ ArchLinux

The quickest way to get up and running with ArchLinux is probably with the community package, which should pull in most of
the necessary dependencies. If the default web client is to be served (enabled by default in
the generated config), will also need to
be installed.
the necessary dependencies.

pip may be outdated (6.0.7-1 and needs to be upgraded to 6.0.8-1 )::

@@ -115,6 +115,10 @@ Upgrading to v0.34.0
case a hypothetical future identity server was put there. If you don't
remove it, users may be unable to deactivate their accounts.

3. This release no longer installs the (unmaintained) Matrix Console web client
as part of the default installation. It is possible to re-enable it by
installing it separately and setting the ``web_client_location`` config
option, but please consider switching to another client.

Upgrading to v0.33.7
@@ -0,0 +1 @@
Remove Matrix console from the default distribution
@@ -54,7 +54,7 @@
from synapse.metrics.background_process_metrics import run_as_background_process
from synapse.metrics.resource import METRICS_PREFIX, MetricsResource
from synapse.module_api import ModuleApi
from synapse.python_dependencies import CONDITIONAL_REQUIREMENTS, check_requirements
from synapse.python_dependencies import check_requirements
from synapse.replication.http import REPLICATION_PREFIX, ReplicationRestResource
from synapse.replication.tcp.resource import ReplicationStreamProtocolFactory
from import ClientRestResource
@@ -79,36 +79,6 @@ def gz_wrap(r):
return EncodingResourceWrapper(r, [GzipEncoderFactory()])

def build_resource_for_web_client(hs):
webclient_path = hs.get_config().web_client_location
if not webclient_path:
import syweb
except ImportError:
"Could not find a webclient.\n\n"
"Please either install the matrix-angular-sdk or configure\n"
"the location of the source to serve via the configuration\n"
"option `web_client_location`\n\n"
"To install the `matrix-angular-sdk` via pip, run:\n\n"
" pip install '%(dep)s'\n"
"You can also disable hosting of the webclient via the\n"
"configuration option `web_client`\n"
% {"dep": CONDITIONAL_REQUIREMENTS["web_client"].keys()[0]}
syweb_path = os.path.dirname(syweb.__file__)
webclient_path = os.path.join(syweb_path, "webclient")
# GZip is disabled here due to
# (It can stay enabled for the API resources: they call
# write() with the whole body and then finish() straight
# after and so do not trigger the bug.
# GzipFile was removed in commit 184ba09
# return GzipFile(webclient_path) # TODO configurable?
return File(webclient_path) # TODO configurable?

class SynapseHomeServer(HomeServer):

@@ -237,7 +207,16 @@ def _configure_named_resource(self, name, compress=False):
resources[SERVER_KEY_V2_PREFIX] = KeyApiV2Resource(self)

if name == "webclient":
resources[WEB_CLIENT_PREFIX] = build_resource_for_web_client(self)
webclient_path = self.get_config().web_client_location

if webclient_path is None:
"Not enabling webclient resource, as web_client_location is unset."
# GZip is disabled here due to
resources[WEB_CLIENT_PREFIX] = File(webclient_path)

if name == "metrics" and self.get_config().enable_metrics:
resources[METRICS_PREFIX] = MetricsResource(RegistryProxy)
@@ -34,7 +34,6 @@ def read_config(self, config):
raise ConfigError(str(e))

self.pid_file = self.abspath(config.get("pid_file"))
self.web_client = config["web_client"]
self.web_client_location = config.get("web_client_location", None)
self.soft_file_limit = config["soft_file_limit"]
self.daemonize = config.get("daemonize")
@@ -128,6 +127,9 @@ def read_config(self, config):
elif not bind_addresses:

if not self.web_client_location:

self.gc_thresholds = read_gc_thresholds(config.get("gc_thresholds", None))

bind_port = config.get("bind_port")
@@ -136,16 +138,14 @@ def read_config(self, config):
bind_host = config.get("bind_host", "")
gzip_responses = config.get("gzip_responses", True)

names = ["client", "webclient"] if self.web_client else ["client"]

"port": bind_port,
"bind_addresses": [bind_host],
"tls": True,
"type": "http",
"resources": [
"names": names,
"names": ["client"],
"compress": gzip_responses,
@@ -164,7 +164,7 @@ def read_config(self, config):
"type": "http",
"resources": [
"names": names,
"names": ["client"],
"compress": gzip_responses,
@@ -247,13 +247,9 @@ def default_config(self, server_name, **kwargs):
# cpu_affinity: 0xFFFFFFFF
# Whether to serve a web client from the HTTP/HTTPS root resource.
web_client: True
# The root directory to server for the above web client.
# If left undefined, synapse will serve the matrix-angular-sdk web client.
# Make sure matrix-angular-sdk is installed with pip if web_client is True
# and web_client_location is undefined
# The path to the web client which will be served at /_matrix/client/
# if 'webclient' is configured under the 'listeners' configuration.
# web_client_location: "/path/to/web/root"
# The public-facing base URL for the client API (not including _matrix/...)
@@ -320,8 +316,8 @@ def default_config(self, server_name, **kwargs):
# List of resources to host on this listener.
- client # The client-server APIs, both v1 and v2
- webclient # The bundled webclient.
- client # The client-server APIs, both v1 and v2
# - webclient # A web client. Requires web_client_location to be set.
# Should synapse compress HTTP responses to clients that support it?
# This should be disabled if running synapse behind a load balancer
@@ -348,7 +344,7 @@ def default_config(self, server_name, **kwargs):
x_forwarded: false
- names: [client, webclient]
- names: [client]
compress: true
- names: [federation]
compress: false
@@ -452,3 +448,19 @@ def read_gc_thresholds(thresholds):
raise ConfigError(
"Value of `gc_threshold` must be a list of three integers if set"

Synapse no longer includes a web client. To enable a web client, configure
web_client_location. To remove this warning, remove 'webclient' from the 'listeners'

def _warn_if_webclient_configured(listeners):
for listener in listeners:
for res in listener.get("resources", []):
for name in res.get("names", []):
if name == 'webclient':
@@ -69,9 +69,6 @@

"web_client": {
"matrix_angular_sdk>=0.6.8": ["syweb>=0.6.8"],
"email.enable_notifs": {
"Jinja2>=2.8": ["Jinja2>=2.8"],
"bleach>=1.4.2": ["bleach>=1.4.2"],

0 comments on commit df96177

Please sign in to comment.
You can’t perform that action at this time.