diff --git a/CHANGES.txt b/CHANGES.txt
index 539dee5e3..2b435800d 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -2,7 +2,7 @@
lxml changelog
==============
-Under development
+5.1.0 (2024-01-05)
==================
Features added
diff --git a/doc/main.txt b/doc/main.txt
index 3d102417e..fb9c7ced1 100644
--- a/doc/main.txt
+++ b/doc/main.txt
@@ -160,8 +160,8 @@ Index `_ (PyPI). It has the source
that compiles on various platforms. The source distribution is signed
with `this key `_.
-The latest version is `lxml 5.0.1`_, released 2024-01-05
-(`changes for 5.0.1`_). `Older versions <#old-versions>`_
+The latest version is `lxml 5.1.0`_, released 2024-01-05
+(`changes for 5.1.0`_). `Older versions <#old-versions>`_
are listed below.
Please take a look at the
@@ -258,7 +258,9 @@ See the websites of lxml
..
and the `latest in-development version `_.
-.. _`PDF documentation`: lxmldoc-5.0.1.pdf
+.. _`PDF documentation`: lxmldoc-5.1.0.pdf
+
+* `lxml 5.1.0`_, released 2024-01-05 (`changes for 5.1.0`_)
* `lxml 5.0.1`_, released 2024-01-05 (`changes for 5.0.1`_)
@@ -276,6 +278,7 @@ See the websites of lxml
* `older releases `_
+.. _`lxml 5.1.0`: /files/lxml-5.1.0.tgz
.. _`lxml 5.0.1`: /files/lxml-5.0.1.tgz
.. _`lxml 5.0.0`: /files/lxml-5.0.0.zip
.. _`lxml 4.9.4`: /files/lxml-4.9.4.tgz
@@ -284,6 +287,7 @@ See the websites of lxml
.. _`lxml 4.9.1`: /files/lxml-4.9.1.tgz
.. _`lxml 4.9.0`: /files/lxml-4.9.0.tgz
+.. _`changes for 5.1.0`: /changes-5.1.0.html
.. _`changes for 5.0.1`: /changes-5.0.1.html
.. _`changes for 5.0.0`: /changes-5.0.0.html
.. _`changes for 4.9.4`: /changes-4.9.4.html
diff --git a/src/lxml/__init__.py b/src/lxml/__init__.py
index 88b995471..2209f6ac6 100644
--- a/src/lxml/__init__.py
+++ b/src/lxml/__init__.py
@@ -1,6 +1,6 @@
# this is a package
-__version__ = "5.1.0a0"
+__version__ = "5.1.0"
def get_include():