diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1a884a538..6c9e1584f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,12 @@
 This changelog only contains breaking and/or significant changes manually introduced to this repository (using Pull Requests).
 All image manifests can be found in [the wiki](https://github.com/jupyter/docker-stacks/wiki).
 
+## UNRELEASED
+
+Affected: all images.
+
+- **Breaking:** `docker-stacks-foundation`: switch to Python 3.13 ([#2163](https://github.com/jupyter/docker-stacks/pull/2163)).
+
 ## 2025-04-13
 
 Affected: `tensorflow-notebook`.
diff --git a/Makefile b/Makefile
index bc1b36297..c02dafe5c 100644
--- a/Makefile
+++ b/Makefile
@@ -38,7 +38,7 @@ help:
 # Note that `ROOT_IMAGE` and `PYTHON_VERSION` arguments are only applicable to the `docker-stacks-foundation` image
 build/%: DOCKER_BUILD_ARGS?=
 build/%: ROOT_IMAGE?=ubuntu:24.04
-build/%: PYTHON_VERSION?=3.12
+build/%: PYTHON_VERSION?=3.13
 build/%: ## build the latest image for a stack using the system's architecture
 	docker build $(DOCKER_BUILD_ARGS) --rm --force-rm \
 	  --tag "$(REGISTRY)/$(OWNER)/$(notdir $@)" \
diff --git a/images/docker-stacks-foundation/Dockerfile b/images/docker-stacks-foundation/Dockerfile
index ca4f8faa2..592a17f77 100644
--- a/images/docker-stacks-foundation/Dockerfile
+++ b/images/docker-stacks-foundation/Dockerfile
@@ -89,7 +89,7 @@ RUN echo "auth requisite pam_deny.so" >> /etc/pam.d/su && \
 USER ${NB_UID}
 
 # Pin the Python version here, or set it to "default"
-ARG PYTHON_VERSION=3.12
+ARG PYTHON_VERSION=3.13
 
 # Setup work directory for backward-compatibility
 RUN mkdir "/home/${NB_USER}/work" && \
diff --git a/tests/by_image/docker-stacks-foundation/test_python_version.py b/tests/by_image/docker-stacks-foundation/test_python_version.py
index 0b27f5cc0..3b8fadb7f 100644
--- a/tests/by_image/docker-stacks-foundation/test_python_version.py
+++ b/tests/by_image/docker-stacks-foundation/test_python_version.py
@@ -5,7 +5,7 @@
 from tests.utils.tracked_container import TrackedContainer
 
 LOGGER = logging.getLogger(__name__)
-EXPECTED_PYTHON_VERSION = "3.12"
+EXPECTED_PYTHON_VERSION = "3.13"
 
 
 def test_python_version(container: TrackedContainer) -> None: