diff --git a/CHANGES.rst b/CHANGES.rst
index e643aa7..b4572cc 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -11,6 +11,34 @@ file by `towncrier `_ when a release is prepa
.. towncrier release notes start
+5.3.0 (2026-09-24)
+==================
+
+New Features
+------------
+
+- ``pydeserver --twin`` serves frames rendered by the `de-twin `_ digital twin instead of the built-in fake data: a simulated microscope, specimen and detector, with a DE-TEM-Channel (``--soap-port``) so stage and optics changes show up in the images. Install it with ``pip install "deapi[twin]"``. (`#59 `_)
+
+
+Bug Fixes
+---------
+
+- Fixed virtual masks and XY scan arrays sometimes arriving incomplete, which hung the connection (seen on macOS): the client now sends every byte of them. (`#60 `_)
+
+
+Documentation
+-------------
+
+- Added an example that moves the stage with ``de_microscope`` and images holes in a grid, run against the digital twin. (`#59 `_)
+
+
+Maintenance
+-----------
+
+- The simulated server closes a connection after an error, so the client gets an error instead of waiting; the test suite only stops deapi's own simulated server on port 13240, never a real DE-Server. (`#60 `_)
+- Releases are prepared by the **Prepare Release** workflow, and the changelog is assembled from towncrier fragments in ``upcoming_changes/``, as in the other Direct Electron Python packages. (`#61 `_)
+
+
5.3.beta6
=========
- Fixed invalid property errors and bugs in set_binning
diff --git a/pyproject.toml b/pyproject.toml
index c85bb64..5a1e3b2 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -26,7 +26,7 @@ dependencies = [
"pywin32; platform_system == 'Windows'",
]
description = "API for DE Server"
-version = "5.3b6"
+version = "5.3.0"
keywords = [
"EELS",
"STEM",
diff --git a/upcoming_changes/59.doc.rst b/upcoming_changes/59.doc.rst
deleted file mode 100644
index 0915ae2..0000000
--- a/upcoming_changes/59.doc.rst
+++ /dev/null
@@ -1 +0,0 @@
-Added an example that moves the stage with ``de_microscope`` and images holes in a grid, run against the digital twin.
diff --git a/upcoming_changes/59.new_feature.rst b/upcoming_changes/59.new_feature.rst
deleted file mode 100644
index 1f0e83e..0000000
--- a/upcoming_changes/59.new_feature.rst
+++ /dev/null
@@ -1 +0,0 @@
-``pydeserver --twin`` serves frames rendered by the `de-twin `_ digital twin instead of the built-in fake data: a simulated microscope, specimen and detector, with a DE-TEM-Channel (``--soap-port``) so stage and optics changes show up in the images. Install it with ``pip install "deapi[twin]"``.
diff --git a/upcoming_changes/60.bugfix.rst b/upcoming_changes/60.bugfix.rst
deleted file mode 100644
index 7f0846b..0000000
--- a/upcoming_changes/60.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-Fixed virtual masks and XY scan arrays sometimes arriving incomplete, which hung the connection (seen on macOS): the client now sends every byte of them.
diff --git a/upcoming_changes/60.maintenance.rst b/upcoming_changes/60.maintenance.rst
deleted file mode 100644
index c7f391a..0000000
--- a/upcoming_changes/60.maintenance.rst
+++ /dev/null
@@ -1 +0,0 @@
-The simulated server closes a connection after an error, so the client gets an error instead of waiting; the test suite only stops deapi's own simulated server on port 13240, never a real DE-Server.
diff --git a/upcoming_changes/61.maintenance.rst b/upcoming_changes/61.maintenance.rst
deleted file mode 100644
index 4cb8da0..0000000
--- a/upcoming_changes/61.maintenance.rst
+++ /dev/null
@@ -1 +0,0 @@
-Releases are prepared by the **Prepare Release** workflow, and the changelog is assembled from towncrier fragments in ``upcoming_changes/``, as in the other Direct Electron Python packages.