diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index 8bc23195..99fb08a7 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -4,7 +4,7 @@ Changelog
All notable changes to this project will be documented in this file.
This project adheres to `Semantic Versioning `__.
-`Unreleased `__
+`Unreleased `__
-----------------------------------------------------------------------
Changed
@@ -16,6 +16,33 @@ Fixed
Added
~~~~~
+`v2.9.0 `__
+-----------------------------------------------------------------------
+
+Changed
+~~~~~~~
+
+- Drop support for Python 3.7 (EOL) by @hugovk in `#910 `__
+- Allow JWT issuer claim validation to accept a list of strings too by @mattpollak in `#913 `__
+
+Fixed
+~~~~~
+
+- Fix unnecessary string concatenation by @sirosen in `#904 `__
+- Fix docs for ``jwt.decode_complete`` to include ``strict_aud`` option by @woodruffw in `#923 `__
+- Fix docs step by @jpadilla in `#950 `__
+- Fix: Remove an unused variable from example code block by @kenkoooo in `#958 `
+
+Added
+~~~~~
+
+- Add support for Python 3.12 by @hugovk in `#910 `__
+- Improve performance of ``is_ssh_key`` + add unit test by @bdraco in `#940 `__
+- Allow ``jwt.decode()`` to accept a PyJWK object by @luhn in `#886 `__
+- Make ``algorithm_name`` attribute available on PyJWK by @luhn in `#886 `__
+- Raise ``InvalidKeyError`` on invalid PEM keys to be compatible with cryptography 42.x.x by @CollinEMac in `#952 `__
+- Raise an exception when required cryptography dependency is missing by @tobloef in ``__
+
`v2.8.0 `__
-----------------------------------------------------------------------