This documentation site is for the versions of Synapse maintained by the Matrix.org Foundation (github.com/matrix-org/synapse), available under the Apache 2.0 licence.
The Synapse codebase uses a number of code formatting tools in order to
quickly and automatically check for formatting (and sometimes logical)
errors in code.
See the contributing guide for instructions
on how to install the above tools and run the linters.
It's worth noting that modern IDEs and text editors can run these tools
automatically on save. It may be worth looking into whether this
functionality is supported in your editor for a more convenient
development workflow. It is not, however, recommended to run mypy
on save as it takes a while and can be very resource intensive.
When adding a configuration option to the code, if several settings are grouped into a single dict, ensure that your code
correctly handles the top-level option being set to None (as it will be if no sub-options are enabled).
The configuration manual acts as a
reference to Synapse's configuration options for server administrators.
Remember that many readers will be unfamiliar with YAML and server
administration in general, so it is important that when you add
a configuration option the documentation be as easy to understand as possible, which
includes following a consistent format.
Some guidelines follow:
Each option should be listed in the config manual with the following format:
The name of the option, prefixed by ###.
A comment which describes the default behaviour (i.e. what
happens if the setting is omitted), as well as what the effect
will be if the setting is changed.
An example setting, using backticks to define the code block
For boolean (on/off) options, convention is that this example
should be the opposite to the default. For other options, the example should give
some non-default value which is likely to be useful to the reader.
There should be a horizontal rule between each option, which can be achieved by adding --- before and
after the option.
true and false are spelt thus (as opposed to True, etc.)
Use the module sub-option to add a module under modules to extend functionality.
The module setting then has a sub-option, config, which can be used to define some configuration
for the module.
Note that the sample configuration is generated from the synapse code
and is maintained by a script, scripts-dev/generate_sample_config.sh.
Making sure that the output from this script matches the desired format
is left as an exercise for the reader!