diff --git a/doc/development.rst b/doc/development.rst
index 7f77fae731..52c043a85c 100644
--- a/doc/development.rst
+++ b/doc/development.rst
@@ -4,22 +4,6 @@ AMICI developer’s guide
This document contains information for AMICI developers, not too
relevant to regular users.
-Branches / releases
--------------------
-
-For AMICI, we mostly do `trunk-based development `__.
-All new contributions are merged into ``main`` after passing the test suite
-and code review. Releases are usually created directly from ``main``.
-New releases are created on GitHub and are automatically deployed to
-`Zenodo `__ for
-archiving and to obtain a digital object identifier (DOI) to make them
-citable. Furthermore, our `CI pipeline `__ will
-automatically create and deploy a new release on
-`PyPI `__.
-
-We try to keep a clean git history. Therefore, feature pull requests are
-squash-merged to ``main``.
-
When starting to work on some issue
-----------------------------------
@@ -131,11 +115,60 @@ C++
- For new code, we use `Google's C++ style guide `__ as a reference.
-Matlab
-^^^^^^
+Branches / releases
+-------------------
+
+For AMICI, we mostly do `trunk-based development `__.
+All new contributions are merged into ``main`` after passing the test suite
+and code review. Releases are usually created directly from ``main``.
+New releases are created on GitHub and are automatically deployed to
+`Zenodo `__ for
+archiving and to obtain a digital object identifier (DOI) to make them
+citable. Furthermore, our `CI pipeline `__ will
+automatically create and deploy a new release on
+`PyPI `__.
+
+We try to keep a clean git history. Therefore, feature pull requests are
+squash-merged to ``main``.
+
+Release process
+~~~~~~~~~~~~~~~
+
+Releases are created by the maintainer team.
+
+To create a new release, please follow these steps:
+
+1. Ensure that all changes intended for the new release are merged
+ into ``main``.
+
+2. Update ``CHANGELOG.md`` with a short description of the changes
+ included in the new release. Focus on user-relevant changes.
+
+3. Bump the version number in `version.txt` according to
+ `Semantic Versioning `__.
+
+4. Regenerate the test models by running
+
+ ```shell
+ python -c "from amici.testing.models import import_test_models; import_test_models()"
+ ```
+
+ This ensures that the models can be imported with the new version.
+
+5. Create a new release on GitHub, using the new version number prefixed
+ by "v" (e.g., "v0.12.0"). Copy the relevant parts of
+ ``CHANGELOG.md`` into the release notes.
+
+6. After creating the release, our GitHub Actions pipeline will automatically
+ create and deploy the new release on Zenodo and PyPI.
+ Verify that this was successful.
+
+In rare cases, it might be necessary to create a hotfix release for a
+critical bug in an existing release. In this case, create a new branch
+from the respective tag, apply the fix (usually a backport from ``main``),
+and follow the same steps as above, starting from step 2.
+Merge the updated CHANGELOG and version bump back into ``main`` afterwards.
-No new Matlab code should be added to AMICI
-(see `#2727 `__).
Further topics
--------------