summary refs log tree commit diff
path: root/docs/development/experimental_features.md
diff options
context:
space:
mode:
authorAzrenbeth <7782548+Azrenbeth@users.noreply.github.com>2021-09-28 16:15:58 +0100
committerAzrenbeth <7782548+Azrenbeth@users.noreply.github.com>2021-09-28 16:15:58 +0100
commitdb6cc8f35b739b4db84a58f5226f79e6fad61978 (patch)
treed76d4fa3f80eda9d28b999fab5e1cfc349da09c7 /docs/development/experimental_features.md
parentTidy up documentation a bit (diff)
parentDrop backwards-compatibility support for "outlier" (#10903) (diff)
downloadsynapse-db6cc8f35b739b4db84a58f5226f79e6fad61978.tar.xz
Merge remote-tracking branch 'origin/develop' into azren/compressor_integration
Diffstat (limited to 'docs/development/experimental_features.md')
-rw-r--r--docs/development/experimental_features.md37
1 files changed, 37 insertions, 0 deletions
diff --git a/docs/development/experimental_features.md b/docs/development/experimental_features.md
new file mode 100644

index 0000000000..d6b11496cc --- /dev/null +++ b/docs/development/experimental_features.md
@@ -0,0 +1,37 @@ +# Implementing experimental features in Synapse + +It can be desirable to implement "experimental" features which are disabled by +default and must be explicitly enabled via the Synapse configuration. This is +applicable for features which: + +* Are unstable in the Matrix spec (e.g. those defined by an MSC that has not yet been merged). +* Developers are not confident in their use by general Synapse administrators/users + (e.g. a feature is incomplete, buggy, performs poorly, or needs further testing). + +Note that this only really applies to features which are expected to be desirable +to a broad audience. The [module infrastructure](../modules/index.md) should +instead be investigated for non-standard features. + +Guarding experimental features behind configuration flags should help with some +of the following scenarios: + +* Ensure that clients do not assume that unstable features exist (failing + gracefully if they do not). +* Unstable features do not become de-facto standards and can be removed + aggressively (since only those who have opted-in will be affected). +* Ease finding the implementation of unstable features in Synapse (for future + removal or stabilization). +* Ease testing a feature (or removal of feature) due to enabling/disabling without + code changes. It also becomes possible to ask for wider testing, if desired. + +Experimental configuration flags should be disabled by default (requiring Synapse +administrators to explicitly opt-in), although there are situations where it makes +sense (from a product point-of-view) to enable features by default. This is +expected and not an issue. + +It is not a requirement for experimental features to be behind a configuration flag, +but one should be used if unsure. + +New experimental configuration flags should be added under the `experimental` +configuration key (see the `synapse.config.experimental` file) and either explain +(briefly) what is being enabled, or include the MSC number.