diff --git a/CHANGES.md b/CHANGES.md
index 9b9a6263bd803fdf59f3f1d3e8ddd77decb82892..395deb40ee5a8daaba545d268f68eaec93de170b 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,3 +1,67 @@
+Synapse 1.31.0rc1 (2021-03-30)
+==============================
+
+Features
+--------
+
+- Add support to OpenID Connect login for requiring attributes on the `userinfo` response. Contributed by Hubbe King. ([\#9609](https://github.com/matrix-org/synapse/issues/9609))
+- Add initial experimental support for a "space summary" API. ([\#9643](https://github.com/matrix-org/synapse/issues/9643), [\#9652](https://github.com/matrix-org/synapse/issues/9652), [\#9653](https://github.com/matrix-org/synapse/issues/9653))
+- Add support for the busy presence state as described in [MSC3026](https://github.com/matrix-org/matrix-doc/pull/3026). ([\#9644](https://github.com/matrix-org/synapse/issues/9644))
+- Add support for credentials for proxy authentication in the `HTTPS_PROXY` environment variable. ([\#9657](https://github.com/matrix-org/synapse/issues/9657))
+
+
+Bugfixes
+--------
+
+- Fix a longstanding bug that could cause issues when editing a reply to a message. ([\#9585](https://github.com/matrix-org/synapse/issues/9585))
+- Fix the `/capabilities` endpoint to return `m.change_password` as disabled if the local password database is not used for authentication. Contributed by @dklimpel. ([\#9588](https://github.com/matrix-org/synapse/issues/9588))
+- Checks if passwords are allowed before setting it for the user. ([\#9636](https://github.com/matrix-org/synapse/issues/9636))
+- Fix a bug where federation sending can stall due to `concurrent access` database exceptions when it falls behind. ([\#9639](https://github.com/matrix-org/synapse/issues/9639))
+- Fix a bug introduced in Synapse 1.30.1 which meant the suggested `pip` incantation to install an updated `cryptography` was incorrect. ([\#9699](https://github.com/matrix-org/synapse/issues/9699))
+
+
+Updates to the Docker image
+---------------------------
+
+- Speed up Docker builds and make it nicer to test against Complement while developing (install all dependencies before copying the project). ([\#9610](https://github.com/matrix-org/synapse/issues/9610))
+- Include [opencontainers labels](https://github.com/opencontainers/image-spec/blob/master/annotations.md#pre-defined-annotation-keys) in the Docker image. ([\#9612](https://github.com/matrix-org/synapse/issues/9612))
+
+
+Improved Documentation
+----------------------
+
+- Clarify that `register_new_matrix_user` is present also when installed via non-pip package. ([\#9074](https://github.com/matrix-org/synapse/issues/9074))
+- Update source install documentation to mention platform prerequisites before the source install steps. ([\#9667](https://github.com/matrix-org/synapse/issues/9667))
+- Improve worker documentation for fallback/web auth endpoints. ([\#9679](https://github.com/matrix-org/synapse/issues/9679))
+- Update the sample configuration for OIDC authentication. ([\#9695](https://github.com/matrix-org/synapse/issues/9695))
+
+
+Internal Changes
+----------------
+
+- Preparatory steps for removing redundant `outlier` data from `event_json.internal_metadata` column. ([\#9411](https://github.com/matrix-org/synapse/issues/9411))
+- Add type hints to the caching module. ([\#9442](https://github.com/matrix-org/synapse/issues/9442))
+- Introduce flake8-bugbear to the test suite and fix some of its lint violations. ([\#9499](https://github.com/matrix-org/synapse/issues/9499), [\#9659](https://github.com/matrix-org/synapse/issues/9659))
+- Add additional type hints to the Homeserver object. ([\#9631](https://github.com/matrix-org/synapse/issues/9631), [\#9638](https://github.com/matrix-org/synapse/issues/9638), [\#9675](https://github.com/matrix-org/synapse/issues/9675), [\#9681](https://github.com/matrix-org/synapse/issues/9681))
+- Only save remote cross-signing and device keys if they're different from the current ones. ([\#9634](https://github.com/matrix-org/synapse/issues/9634))
+- Rename storage function to fix spelling and not conflict with another functions name. ([\#9637](https://github.com/matrix-org/synapse/issues/9637))
+- Improve performance of federation catch up by sending events the latest events in the room to the remote, rather than just the last event sent by the local server. ([\#9640](https://github.com/matrix-org/synapse/issues/9640), [\#9664](https://github.com/matrix-org/synapse/issues/9664))
+- In the `federation_client` commandline client, stop automatically adding the URL prefix, so that servlets on other prefixes can be tested. ([\#9645](https://github.com/matrix-org/synapse/issues/9645))
+- In the `federation_client` commandline client, handle inline `signing_key`s in `homeserver.yaml`. ([\#9647](https://github.com/matrix-org/synapse/issues/9647))
+- Fixed some antipattern issues to improve code quality. ([\#9649](https://github.com/matrix-org/synapse/issues/9649))
+- Add a storage method for pulling all current user presence state from the database. ([\#9650](https://github.com/matrix-org/synapse/issues/9650))
+- Import `HomeServer` from the proper module. ([\#9665](https://github.com/matrix-org/synapse/issues/9665))
+- Increase default join ratelimiting burst rate. ([\#9674](https://github.com/matrix-org/synapse/issues/9674))
+- Add type hints to third party event rules and visibility modules. ([\#9676](https://github.com/matrix-org/synapse/issues/9676))
+- Bump mypy-zope to 0.2.13 to fix "Cannot determine consistent method resolution order (MRO)" errors when running mypy a second time. ([\#9678](https://github.com/matrix-org/synapse/issues/9678))
+- Use interpreter from `$PATH` via `/usr/bin/env` instead of absolute paths in various scripts. ([\#9689](https://github.com/matrix-org/synapse/issues/9689))
+- Make it possible to use `dmypy`. ([\#9692](https://github.com/matrix-org/synapse/issues/9692))
+- Suppress "CryptographyDeprecationWarning: int_from_bytes is deprecated". ([\#9698](https://github.com/matrix-org/synapse/issues/9698))
+- Use `dmypy run` in lint script for improved performance in type-checking while developing. ([\#9701](https://github.com/matrix-org/synapse/issues/9701))
+- Fix undetected mypy error when using Python 3.6. ([\#9703](https://github.com/matrix-org/synapse/issues/9703))
+- Fix type-checking CI on develop. ([\#9709](https://github.com/matrix-org/synapse/issues/9709))
+
+
 Synapse 1.30.1 (2021-03-26)
 ===========================
 
diff --git a/changelog.d/9074.doc b/changelog.d/9074.doc
deleted file mode 100644
index 57f7c97a6e61e2ee956d91ec6f589ee347402cac..0000000000000000000000000000000000000000
--- a/changelog.d/9074.doc
+++ /dev/null
@@ -1 +0,0 @@
-Clarify that register_new_matrix_user is present also when installed via non-pip package.
diff --git a/changelog.d/9411.misc b/changelog.d/9411.misc
deleted file mode 100644
index c3e6cfa5f118dbea81d39a6fdbb4fadbdfe8d243..0000000000000000000000000000000000000000
--- a/changelog.d/9411.misc
+++ /dev/null
@@ -1 +0,0 @@
-Preparatory steps for removing redundant `outlier` data from `event_json.internal_metadata` column.
diff --git a/changelog.d/9442.misc b/changelog.d/9442.misc
deleted file mode 100644
index e7f0b6262332bd192c1487e94dacd28c291435a2..0000000000000000000000000000000000000000
--- a/changelog.d/9442.misc
+++ /dev/null
@@ -1 +0,0 @@
-Add type hints to the caching module.
diff --git a/changelog.d/9499.misc b/changelog.d/9499.misc
deleted file mode 100644
index 428a466facfb5eb839477292febfb72f591abdf4..0000000000000000000000000000000000000000
--- a/changelog.d/9499.misc
+++ /dev/null
@@ -1 +0,0 @@
-Introduce flake8-bugbear to the test suite and fix some of its lint violations.
diff --git a/changelog.d/9585.bugfix b/changelog.d/9585.bugfix
deleted file mode 100644
index de472ddfd1ef8cbf695fe31757811fe6ae0c59a3..0000000000000000000000000000000000000000
--- a/changelog.d/9585.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Fix a longstanding bug that could cause issues when editing a reply to a message.
\ No newline at end of file
diff --git a/changelog.d/9588.bugfix b/changelog.d/9588.bugfix
deleted file mode 100644
index b8d61405659a702e7c6b9288c734a822596d9ebb..0000000000000000000000000000000000000000
--- a/changelog.d/9588.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Fix the `/capabilities` endpoint to return `m.change_password` as disabled if the local password database is not used for authentication. Contributed by @dklimpel.
diff --git a/changelog.d/9609.feature b/changelog.d/9609.feature
deleted file mode 100644
index f3b6342069f6a24534f12c0a992c41bd8f7999d5..0000000000000000000000000000000000000000
--- a/changelog.d/9609.feature
+++ /dev/null
@@ -1 +0,0 @@
-Logins using OpenID Connect can require attributes on the `userinfo` response in order to login. Contributed by Hubbe King.
diff --git a/changelog.d/9610.docker b/changelog.d/9610.docker
deleted file mode 100644
index 056252a66963329edc76a5d4d5c7841bcfeeae9d..0000000000000000000000000000000000000000
--- a/changelog.d/9610.docker
+++ /dev/null
@@ -1 +0,0 @@
-Speed up Docker builds and make it nicer to test against Complement while developing (install all dependencies before copying the project).
diff --git a/changelog.d/9612.docker b/changelog.d/9612.docker
deleted file mode 100644
index d95c503c8b1a85e7ca3248a360cb3ef2b7af0724..0000000000000000000000000000000000000000
--- a/changelog.d/9612.docker
+++ /dev/null
@@ -1 +0,0 @@
-Include [opencontainers labels](https://github.com/opencontainers/image-spec/blob/master/annotations.md#pre-defined-annotation-keys) in the Docker image.
diff --git a/changelog.d/9631.misc b/changelog.d/9631.misc
deleted file mode 100644
index 35338cd3326354df574d3a4900f6074b34ceb90f..0000000000000000000000000000000000000000
--- a/changelog.d/9631.misc
+++ /dev/null
@@ -1 +0,0 @@
-Add additional type hints to the Homeserver object.
diff --git a/changelog.d/9634.misc b/changelog.d/9634.misc
deleted file mode 100644
index 59ac42cb832aacdf883a41458520952cae87795b..0000000000000000000000000000000000000000
--- a/changelog.d/9634.misc
+++ /dev/null
@@ -1 +0,0 @@
-Only save remote cross-signing and device keys if they're different from the current ones.
diff --git a/changelog.d/9636.bugfix b/changelog.d/9636.bugfix
deleted file mode 100644
index fa772ed6fc8ec0ead38f80ac642f6652d4e52519..0000000000000000000000000000000000000000
--- a/changelog.d/9636.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Checks if passwords are allowed before setting it for the user.
\ No newline at end of file
diff --git a/changelog.d/9637.misc b/changelog.d/9637.misc
deleted file mode 100644
index 90a27d9f8fcd55daec37a75266f18b3f5ddb0eff..0000000000000000000000000000000000000000
--- a/changelog.d/9637.misc
+++ /dev/null
@@ -1 +0,0 @@
-Rename storage function to fix spelling and not conflict with another functions name.
diff --git a/changelog.d/9638.misc b/changelog.d/9638.misc
deleted file mode 100644
index 35338cd3326354df574d3a4900f6074b34ceb90f..0000000000000000000000000000000000000000
--- a/changelog.d/9638.misc
+++ /dev/null
@@ -1 +0,0 @@
-Add additional type hints to the Homeserver object.
diff --git a/changelog.d/9639.bugfix b/changelog.d/9639.bugfix
deleted file mode 100644
index 51b37467075a6b21427ea286b341755f09ef08aa..0000000000000000000000000000000000000000
--- a/changelog.d/9639.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Fix bug where federation sending can stall due to `concurrent access` database exceptions when it falls behind.
diff --git a/changelog.d/9640.misc b/changelog.d/9640.misc
deleted file mode 100644
index 3d410ed4cdfec833d16fdce42b72a69f95249251..0000000000000000000000000000000000000000
--- a/changelog.d/9640.misc
+++ /dev/null
@@ -1 +0,0 @@
-Improve performance of federation catch up by sending events the latest events in the room to the remote, rather than just the last event sent by the local server.
diff --git a/changelog.d/9643.feature b/changelog.d/9643.feature
deleted file mode 100644
index 2f7ccedcfbb891bc88dac2879b62e6d33bf20662..0000000000000000000000000000000000000000
--- a/changelog.d/9643.feature
+++ /dev/null
@@ -1 +0,0 @@
-Add initial experimental support for a "space summary" API.
diff --git a/changelog.d/9644.feature b/changelog.d/9644.feature
deleted file mode 100644
index 556bcf0f9f40d8f204f4fec17567ed0a83a58eb2..0000000000000000000000000000000000000000
--- a/changelog.d/9644.feature
+++ /dev/null
@@ -1 +0,0 @@
-Implement the busy presence state as described in [MSC3026](https://github.com/matrix-org/matrix-doc/pull/3026).
diff --git a/changelog.d/9645.misc b/changelog.d/9645.misc
deleted file mode 100644
index 9a7ce364c16ae43e29443b942bf6986abb6df059..0000000000000000000000000000000000000000
--- a/changelog.d/9645.misc
+++ /dev/null
@@ -1 +0,0 @@
-In the `federation_client` commandline client, stop automatically adding the URL prefix, so that servlets on other prefixes can be tested.
diff --git a/changelog.d/9647.misc b/changelog.d/9647.misc
deleted file mode 100644
index 303a8c6606df9b071960853ce0757c9a6e6aa5bf..0000000000000000000000000000000000000000
--- a/changelog.d/9647.misc
+++ /dev/null
@@ -1 +0,0 @@
-In the `federation_client` commandline client, handle inline `signing_key`s in `homeserver.yaml`.
diff --git a/changelog.d/9649.misc b/changelog.d/9649.misc
deleted file mode 100644
index 58c5fd0537fcfc116ca3c6871dc2c9c0ca4bd15c..0000000000000000000000000000000000000000
--- a/changelog.d/9649.misc
+++ /dev/null
@@ -1 +0,0 @@
-Fixed some antipattern issues to improve code quality.
diff --git a/changelog.d/9650.misc b/changelog.d/9650.misc
deleted file mode 100644
index d830ead70ecc4b9a18928bf4184d7994c0aa68bc..0000000000000000000000000000000000000000
--- a/changelog.d/9650.misc
+++ /dev/null
@@ -1 +0,0 @@
-Add a storage method for pulling all current user presence state from the database.
\ No newline at end of file
diff --git a/changelog.d/9652.feature b/changelog.d/9652.feature
deleted file mode 100644
index 2f7ccedcfbb891bc88dac2879b62e6d33bf20662..0000000000000000000000000000000000000000
--- a/changelog.d/9652.feature
+++ /dev/null
@@ -1 +0,0 @@
-Add initial experimental support for a "space summary" API.
diff --git a/changelog.d/9653.feature b/changelog.d/9653.feature
deleted file mode 100644
index 2f7ccedcfbb891bc88dac2879b62e6d33bf20662..0000000000000000000000000000000000000000
--- a/changelog.d/9653.feature
+++ /dev/null
@@ -1 +0,0 @@
-Add initial experimental support for a "space summary" API.
diff --git a/changelog.d/9657.feature b/changelog.d/9657.feature
deleted file mode 100644
index c56a615a8b194a5dcab6ad884113fc7ec579f0df..0000000000000000000000000000000000000000
--- a/changelog.d/9657.feature
+++ /dev/null
@@ -1 +0,0 @@
-Add support for credentials for proxy authentication in the `HTTPS_PROXY` environment variable.
diff --git a/changelog.d/9659.misc b/changelog.d/9659.misc
deleted file mode 100644
index 428a466facfb5eb839477292febfb72f591abdf4..0000000000000000000000000000000000000000
--- a/changelog.d/9659.misc
+++ /dev/null
@@ -1 +0,0 @@
-Introduce flake8-bugbear to the test suite and fix some of its lint violations.
diff --git a/changelog.d/9664.misc b/changelog.d/9664.misc
deleted file mode 100644
index 3d410ed4cdfec833d16fdce42b72a69f95249251..0000000000000000000000000000000000000000
--- a/changelog.d/9664.misc
+++ /dev/null
@@ -1 +0,0 @@
-Improve performance of federation catch up by sending events the latest events in the room to the remote, rather than just the last event sent by the local server.
diff --git a/changelog.d/9665.misc b/changelog.d/9665.misc
deleted file mode 100644
index b8bf76c63928231c9fc0dd4989ee4b459e2a1a61..0000000000000000000000000000000000000000
--- a/changelog.d/9665.misc
+++ /dev/null
@@ -1 +0,0 @@
-Import `HomeServer` from the proper module.
diff --git a/changelog.d/9667.doc b/changelog.d/9667.doc
deleted file mode 100644
index dec4816b4ff07a5ba05dd02b0913a55727712299..0000000000000000000000000000000000000000
--- a/changelog.d/9667.doc
+++ /dev/null
@@ -1 +0,0 @@
-Update source install documentation to mention platform prerequisites before the source install steps.
\ No newline at end of file
diff --git a/changelog.d/9674.misc b/changelog.d/9674.misc
deleted file mode 100644
index c82fde61b217cbde237fbb3e0783f04eafb6e2ae..0000000000000000000000000000000000000000
--- a/changelog.d/9674.misc
+++ /dev/null
@@ -1 +0,0 @@
-Increase default join ratelimiting burst rate.
diff --git a/changelog.d/9675.misc b/changelog.d/9675.misc
deleted file mode 100644
index 35338cd3326354df574d3a4900f6074b34ceb90f..0000000000000000000000000000000000000000
--- a/changelog.d/9675.misc
+++ /dev/null
@@ -1 +0,0 @@
-Add additional type hints to the Homeserver object.
diff --git a/changelog.d/9676.misc b/changelog.d/9676.misc
deleted file mode 100644
index 829e38b93835378568110c4f933fde9677e9045e..0000000000000000000000000000000000000000
--- a/changelog.d/9676.misc
+++ /dev/null
@@ -1 +0,0 @@
-Add type hints to third party event rules and visibility modules.
diff --git a/changelog.d/9678.misc b/changelog.d/9678.misc
deleted file mode 100644
index 77a2b2d439ecea3670ce551d4dfb1e1187b12c77..0000000000000000000000000000000000000000
--- a/changelog.d/9678.misc
+++ /dev/null
@@ -1 +0,0 @@
-Bump mypy-zope to 0.2.13 to fix "Cannot determine consistent method resolution order (MRO)" errors when running mypy a second time.
diff --git a/changelog.d/9679.doc b/changelog.d/9679.doc
deleted file mode 100644
index 34f87490d6efd62c064f1e722c08c5d358f8c169..0000000000000000000000000000000000000000
--- a/changelog.d/9679.doc
+++ /dev/null
@@ -1 +0,0 @@
-Improve worker documentation for fallback/web auth endpoints.
diff --git a/changelog.d/9681.misc b/changelog.d/9681.misc
deleted file mode 100644
index 35338cd3326354df574d3a4900f6074b34ceb90f..0000000000000000000000000000000000000000
--- a/changelog.d/9681.misc
+++ /dev/null
@@ -1 +0,0 @@
-Add additional type hints to the Homeserver object.
diff --git a/changelog.d/9689.misc b/changelog.d/9689.misc
deleted file mode 100644
index a08d3482ad6ec068b01b1ee80679c21df77087cf..0000000000000000000000000000000000000000
--- a/changelog.d/9689.misc
+++ /dev/null
@@ -1 +0,0 @@
-Use interpreter from `$PATH` via `/usr/bin/env` instead of absolute paths in various scripts.
diff --git a/changelog.d/9692.misc b/changelog.d/9692.misc
deleted file mode 100644
index d02002586e229ec97963e877ef43f87afb01425e..0000000000000000000000000000000000000000
--- a/changelog.d/9692.misc
+++ /dev/null
@@ -1 +0,0 @@
-Make it possible to use `dmypy`.
diff --git a/changelog.d/9695.doc b/changelog.d/9695.doc
deleted file mode 100644
index cf82e68a85156036d17da2de1e7e313c366c2488..0000000000000000000000000000000000000000
--- a/changelog.d/9695.doc
+++ /dev/null
@@ -1 +0,0 @@
-Update the sample configuration for OIDC authentication.
diff --git a/changelog.d/9698.misc b/changelog.d/9698.misc
deleted file mode 100644
index d199e846c59bfbb8c9fb3deb4b57e4f43802d1a4..0000000000000000000000000000000000000000
--- a/changelog.d/9698.misc
+++ /dev/null
@@ -1 +0,0 @@
-Suppress "CryptographyDeprecationWarning: int_from_bytes is deprecated".
diff --git a/changelog.d/9699.bugfix b/changelog.d/9699.bugfix
deleted file mode 100644
index e871825b334e18180fea9174ac6c75c21ffe8969..0000000000000000000000000000000000000000
--- a/changelog.d/9699.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Fix a bug introduced in Synapse 1.30.1 which meant the suggested `pip` incantation to install an updated `cryptography` was incorrect.
diff --git a/changelog.d/9701.misc b/changelog.d/9701.misc
deleted file mode 100644
index 49fa7b3593997463379a017f807366b68266e9f8..0000000000000000000000000000000000000000
--- a/changelog.d/9701.misc
+++ /dev/null
@@ -1 +0,0 @@
-Use `dmypy run` in lint script for improved performance in type-checking while developing.
\ No newline at end of file
diff --git a/changelog.d/9703.misc b/changelog.d/9703.misc
deleted file mode 100644
index 8dda739228bd820b2b66230e62b77ab952535567..0000000000000000000000000000000000000000
--- a/changelog.d/9703.misc
+++ /dev/null
@@ -1 +0,0 @@
-Fix undetected mypy error when using Python 3.6.
\ No newline at end of file
diff --git a/changelog.d/9709.misc b/changelog.d/9709.misc
deleted file mode 100644
index 10542fdf38c1533d46e3f8ccdb645b1d3da22ba8..0000000000000000000000000000000000000000
--- a/changelog.d/9709.misc
+++ /dev/null
@@ -1 +0,0 @@
-Fix type-checking CI on develop.
\ No newline at end of file
diff --git a/synapse/__init__.py b/synapse/__init__.py
index c9bc8fb9e9ace72d1424aa8eeea78faa479b4f3f..419299bf01bcff18eff8cb2d639f69eadd8fe2b5 100644
--- a/synapse/__init__.py
+++ b/synapse/__init__.py
@@ -48,7 +48,7 @@ try:
 except ImportError:
     pass
 
-__version__ = "1.30.1"
+__version__ = "1.31.0rc1"
 
 if bool(os.environ.get("SYNAPSE_TEST_PATCH_LOG_CONTEXTS", False)):
     # We import here so that we don't have to install a bunch of deps when