diff --git a/CHANGES.md b/CHANGES.md
index 116f48d2e0e286e69ebb336d69746fd982064abe..3ddc96a96a86d5169f2d7fc83fba6ba97f0bde47 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,3 +1,61 @@
+# Synapse 1.122.0rc1 (2025-01-07)
+
+Please note that this version of Synapse drops support for PostgresQL 11 and 12. The minimum version of PostgreSQL supported is now version 13.
+
+### Deprecations and Removals
+
+- Remove support for PostgreSQL 11 and 12. Contributed by @clokep. ([\#18034](https://github.com/element-hq/synapse/issues/18034))
+
+### Features
+
+- Added the `email.tlsname` config option.  This allows specifying the domain name used to validate the SMTP server's TLS certificate separately from the `email.smtp_host` to connect to. ([\#17849](https://github.com/element-hq/synapse/issues/17849))
+- Module developers will have access to the user ID of the requester when adding `check_username_for_spam` callbacks to `spam_checker_module_callbacks`. Contributed by Wilson@Pangea.chat. ([\#17916](https://github.com/element-hq/synapse/issues/17916))
+- Add endpoints to the Admin API to fetch the number of invites the provided user has sent after a given timestamp,
+  fetch the number of rooms the provided user has joined after a given timestamp, and get report IDs of event
+  reports against a provided user (i.e. where the user was the sender of the reported event). ([\#17948](https://github.com/element-hq/synapse/issues/17948))
+- Support stable account suspension from [MSC3823](https://github.com/matrix-org/matrix-spec-proposals/pull/3823). ([\#17964](https://github.com/element-hq/synapse/issues/17964))
+- Add `macaroon_secret_key_path` config option. ([\#17983](https://github.com/element-hq/synapse/issues/17983))
+
+### Bugfixes
+
+- Fix bug when rejecting withdrew invite with a `third_party_rules` module, where the invite would be stuck for the client. ([\#17930](https://github.com/element-hq/synapse/issues/17930))
+- Properly purge state groups tables when purging a room with the Admin API. ([\#18024](https://github.com/element-hq/synapse/issues/18024))
+- Fix a bug preventing the admin redaction endpoint from working on messages from remote users. ([\#18029](https://github.com/element-hq/synapse/issues/18029), [\#18043](https://github.com/element-hq/synapse/issues/18043))
+
+### Improved Documentation
+
+- Update `synapse.app.generic_worker` documentation to only recommend `GET` requests for stream writer routes by default, unless the worker is also configured as a stream writer. Contributed by @evoL. ([\#17954](https://github.com/element-hq/synapse/issues/17954))
+- Add documentation for the previously-undocumented `last_seen_ts` query parameter to the query user Admin API. ([\#17976](https://github.com/element-hq/synapse/issues/17976))
+- Improve documentation for the `TaskScheduler` class. ([\#17992](https://github.com/element-hq/synapse/issues/17992))
+- Fix example in reverse proxy docs to include server port. ([\#17994](https://github.com/element-hq/synapse/issues/17994))
+- Update Alpine Linux Synapse Package Maintainer within the installation instructions. ([\#17846](https://github.com/element-hq/synapse/issues/17846))
+
+### Internal Changes
+
+- Add `RoomID` & `EventID` rust types. ([\#17996](https://github.com/element-hq/synapse/issues/17996))
+- Fix various type errors across the codebase. ([\#17998](https://github.com/element-hq/synapse/issues/17998))
+- Disable DB statement timeout when doing a room purge since it can be quite long. ([\#18017](https://github.com/element-hq/synapse/issues/18017))
+- Remove some remaining uses of `twisted.internet.defer.returnValue`. Contributed by Colin Watson. ([\#18020](https://github.com/element-hq/synapse/issues/18020))
+- Refactor `get_profile` to no longer include fields with a value of `None`. ([\#18063](https://github.com/element-hq/synapse/issues/18063))
+
+### Updates to locked dependencies
+
+* Bump anyhow from 1.0.93 to 1.0.95. ([\#18012](https://github.com/element-hq/synapse/issues/18012), [\#18045](https://github.com/element-hq/synapse/issues/18045))
+* Bump authlib from 1.3.2 to 1.4.0. ([\#18048](https://github.com/element-hq/synapse/issues/18048))
+* Bump dawidd6/action-download-artifact from 6 to 7. ([\#17981](https://github.com/element-hq/synapse/issues/17981))
+* Bump http from 1.1.0 to 1.2.0. ([\#18013](https://github.com/element-hq/synapse/issues/18013))
+- Bump mypy from 1.11.2 to 1.12.1. ([\#17999](https://github.com/element-hq/synapse/issues/17999))
+* Bump mypy-zope from 1.0.8 to 1.0.9. ([\#18047](https://github.com/element-hq/synapse/issues/18047))
+* Bump pillow from 10.4.0 to 11.0.0. ([\#18015](https://github.com/element-hq/synapse/issues/18015))
+* Bump pydantic from 2.9.2 to 2.10.3. ([\#18014](https://github.com/element-hq/synapse/issues/18014))
+* Bump pyicu from 2.13.1 to 2.14. ([\#18060](https://github.com/element-hq/synapse/issues/18060))
+* Bump pyo3 from 0.23.2 to 0.23.3. ([\#18001](https://github.com/element-hq/synapse/issues/18001))
+* Bump python-multipart from 0.0.16 to 0.0.18. ([\#17985](https://github.com/element-hq/synapse/issues/17985))
+* Bump sentry-sdk from 2.17.0 to 2.19.2. ([\#18061](https://github.com/element-hq/synapse/issues/18061))
+* Bump serde from 1.0.215 to 1.0.217. ([\#18031](https://github.com/element-hq/synapse/issues/18031), [\#18059](https://github.com/element-hq/synapse/issues/18059))
+* Bump serde_json from 1.0.133 to 1.0.134. ([\#18044](https://github.com/element-hq/synapse/issues/18044))
+* Bump twine from 5.1.1 to 6.0.1. ([\#18049](https://github.com/element-hq/synapse/issues/18049))
+
 # Synapse 1.121.1 (2024-12-11)
 
 This release contains a fix for our docker build CI. It is functionally identical to 1.121.0, whose changelog is below.
diff --git a/changelog.d/17846.misc b/changelog.d/17846.misc
deleted file mode 100644
index 6d1f930f10e33e7777b7444f0e23e9a56ad5e142..0000000000000000000000000000000000000000
--- a/changelog.d/17846.misc
+++ /dev/null
@@ -1 +0,0 @@
-Update Alpine Linux Synapse Package Maintainer within installation.md.
diff --git a/changelog.d/17849.feature b/changelog.d/17849.feature
deleted file mode 100644
index 4de580f9edb62b6090e4c46266f862653a643df3..0000000000000000000000000000000000000000
--- a/changelog.d/17849.feature
+++ /dev/null
@@ -1 +0,0 @@
-Added the `email.tlsname` config option.  This allows specifying the domain name used to validate the SMTP server's TLS certificate separately from the `email.smtp_host` to connect to.
diff --git a/changelog.d/17916.feature b/changelog.d/17916.feature
deleted file mode 100644
index 118997c5e596443e6dd21d3e4bb3f9802b0fd30f..0000000000000000000000000000000000000000
--- a/changelog.d/17916.feature
+++ /dev/null
@@ -1 +0,0 @@
-Module developers will have access to user id of requester when adding `check_username_for_spam` callbacks to `spam_checker_module_callbacks`. Contributed by Wilson@Pangea.chat.
\ No newline at end of file
diff --git a/changelog.d/17930.bugfix b/changelog.d/17930.bugfix
deleted file mode 100644
index 2e37686857d300d22fd87559c0636fe3356adfd0..0000000000000000000000000000000000000000
--- a/changelog.d/17930.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Fix bug when rejecting withdrew invite with a third_party_rules module, where the invite would be stuck for the client.
diff --git a/changelog.d/17948.feature b/changelog.d/17948.feature
deleted file mode 100644
index d404996cd673ab24dc11bf97b39f33b2814ea85a..0000000000000000000000000000000000000000
--- a/changelog.d/17948.feature
+++ /dev/null
@@ -1,3 +0,0 @@
-Add endpoints to Admin API to fetch the number of invites the provided user has sent after a given timestamp,
-fetch the number of rooms the provided user has joined after a given timestamp, and get report IDs of event
-reports against a provided user (ie where the user was the sender of the reported event).
diff --git a/changelog.d/17954.doc b/changelog.d/17954.doc
deleted file mode 100644
index 8986e41e5864450ce45760fa89eaeabd84b61f42..0000000000000000000000000000000000000000
--- a/changelog.d/17954.doc
+++ /dev/null
@@ -1 +0,0 @@
-Update `synapse.app.generic_worker` documentation to only recommend `GET` requests for stream writer routes by default, unless the worker is also configured as a stream writer. Contributed by @evoL.
diff --git a/changelog.d/17964.feature b/changelog.d/17964.feature
deleted file mode 100644
index e2ae566eb98fd8dfba4b4eb0d9200828de5b2330..0000000000000000000000000000000000000000
--- a/changelog.d/17964.feature
+++ /dev/null
@@ -1 +0,0 @@
-Support stable account suspension from [MSC3823](https://github.com/matrix-org/matrix-spec-proposals/pull/3823).
\ No newline at end of file
diff --git a/changelog.d/17976.doc b/changelog.d/17976.doc
deleted file mode 100644
index c45ead4cf9a847ef9e1ed94826aed5bdb6c12392..0000000000000000000000000000000000000000
--- a/changelog.d/17976.doc
+++ /dev/null
@@ -1 +0,0 @@
-Add previously-undocumented `last_seen_ts` to query user admin API.
\ No newline at end of file
diff --git a/changelog.d/17983.feature b/changelog.d/17983.feature
deleted file mode 100644
index 2c54c80c4079a16ed7fa456e706e8ed8edf2a72d..0000000000000000000000000000000000000000
--- a/changelog.d/17983.feature
+++ /dev/null
@@ -1 +0,0 @@
-Add `macaroon_secret_key_path` config option.
\ No newline at end of file
diff --git a/changelog.d/17992.doc b/changelog.d/17992.doc
deleted file mode 100644
index 74afabe40fa2fbbe9a222f926472bcdd6d16783f..0000000000000000000000000000000000000000
--- a/changelog.d/17992.doc
+++ /dev/null
@@ -1 +0,0 @@
-Improve documentation for the `TaskScheduler` class.
\ No newline at end of file
diff --git a/changelog.d/17994.doc b/changelog.d/17994.doc
deleted file mode 100644
index 54b7cf10008c8f920bf50b93688ea0389dc58ce7..0000000000000000000000000000000000000000
--- a/changelog.d/17994.doc
+++ /dev/null
@@ -1 +0,0 @@
-Fix example in reverse proxy docs to include server port.
diff --git a/changelog.d/17996.misc b/changelog.d/17996.misc
deleted file mode 100644
index 8664ee45aefa93fdf47bb9255d07d5586a0ab635..0000000000000000000000000000000000000000
--- a/changelog.d/17996.misc
+++ /dev/null
@@ -1 +0,0 @@
-Add `RoomID` & `EventID` rust types.
diff --git a/changelog.d/17998.misc b/changelog.d/17998.misc
deleted file mode 100644
index 5ddd54cd08a46a9c23f73688c04f99abbf118fd8..0000000000000000000000000000000000000000
--- a/changelog.d/17998.misc
+++ /dev/null
@@ -1 +0,0 @@
-Fix various type errors across the codebase.
\ No newline at end of file
diff --git a/changelog.d/17999.misc b/changelog.d/17999.misc
deleted file mode 100644
index 9cabc5b15d4d36630a64a320a34820d089c3fc30..0000000000000000000000000000000000000000
--- a/changelog.d/17999.misc
+++ /dev/null
@@ -1 +0,0 @@
-Bump mypy from 1.11.2 to 1.12.1.
\ No newline at end of file
diff --git a/changelog.d/18017.misc b/changelog.d/18017.misc
deleted file mode 100644
index 6b943a5bed213c291105a315f0f46db6f367ca53..0000000000000000000000000000000000000000
--- a/changelog.d/18017.misc
+++ /dev/null
@@ -1 +0,0 @@
-Disable DB statement timeout when doing a purge room since it can be quite long.
diff --git a/changelog.d/18020.misc b/changelog.d/18020.misc
deleted file mode 100644
index 8d2dd883b919d1271fdb8d915a1901bfd42eae78..0000000000000000000000000000000000000000
--- a/changelog.d/18020.misc
+++ /dev/null
@@ -1 +0,0 @@
-Remove some remaining uses of `twisted.internet.defer.returnValue`. Contributed by Colin Watson.
diff --git a/changelog.d/18024.bugfix b/changelog.d/18024.bugfix
deleted file mode 100644
index 956f43f0362f38c2730ec1ac7901b22ecfc1a1fd..0000000000000000000000000000000000000000
--- a/changelog.d/18024.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Properly purge state groups tables when purging a room with the admin API.
diff --git a/changelog.d/18029.bugfix b/changelog.d/18029.bugfix
deleted file mode 100644
index f7036fe9fc033cbde5216fc1d1d3e69aeb098dbb..0000000000000000000000000000000000000000
--- a/changelog.d/18029.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Fix a bug preventing the admin redaction endpoint from working on messages from remote users.
diff --git a/changelog.d/18034.removal b/changelog.d/18034.removal
deleted file mode 100644
index 303b442fd4ac9921b44ceac4b46a063956b3a3cd..0000000000000000000000000000000000000000
--- a/changelog.d/18034.removal
+++ /dev/null
@@ -1 +0,0 @@
-Remove support for PostgreSQL 11 and 12. Contributed by @clokep.
diff --git a/changelog.d/18043.bugfix b/changelog.d/18043.bugfix
deleted file mode 100644
index 05f82a448752ff3ccf2a7dc4c44e763df01b036f..0000000000000000000000000000000000000000
--- a/changelog.d/18043.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Fix a bug preventing the admin redaction endpoint from working on messages from remote users.
\ No newline at end of file
diff --git a/changelog.d/18063.misc b/changelog.d/18063.misc
deleted file mode 100644
index 424bf25408f484599f2076e9cf7a770f039ac2e8..0000000000000000000000000000000000000000
--- a/changelog.d/18063.misc
+++ /dev/null
@@ -1 +0,0 @@
-Refactor `get_profile` to no longer include fields with a value of `None`.
diff --git a/debian/changelog b/debian/changelog
index fc34d8ac3fb315aeb5acfbfdff25458751a5a487..e08a212309ad6ae1838ed770ecbd9d2d1a2a8220 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+matrix-synapse-py3 (1.122.0~rc1) stable; urgency=medium
+
+  * New Synapse release 1.122.0rc1.
+
+ -- Synapse Packaging team <packages@matrix.org>  Tue, 07 Jan 2025 14:06:19 +0000
+
 matrix-synapse-py3 (1.121.1) stable; urgency=medium
 
   * New Synapse release 1.121.1.
diff --git a/pyproject.toml b/pyproject.toml
index 043037158635cb24f293b7a4ba0b88702ce7450d..af6f82bcf939584225fde5598514a18cb39d87f0 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -97,7 +97,7 @@ module-name = "synapse.synapse_rust"
 
 [tool.poetry]
 name = "matrix-synapse"
-version = "1.121.1"
+version = "1.122.0rc1"
 description = "Homeserver for the Matrix decentralised comms protocol"
 authors = ["Matrix.org Team and Contributors <packages@matrix.org>"]
 license = "AGPL-3.0-or-later"