diff --git a/generate-stackbrew-library.sh b/generate-stackbrew-library.sh
index 5f1025dda5d076ab370b6e4a090f540a65a56b6b..8776c6868c15c36f87ad0ab92d92bab06d126902 100755
--- a/generate-stackbrew-library.sh
+++ b/generate-stackbrew-library.sh
@@ -4,7 +4,7 @@ set -eu
 declare -A aliases
 aliases=(
 	[mainline]='1 1.27 latest'
-	[stable]='1.26'
+	[stable]='1.28'
 )
 
 self="$(basename "$BASH_SOURCE")"
diff --git a/sync-awsecr.sh b/sync-awsecr.sh
index 547c83ffdb04784196e76d959a8b71a40d995b2c..af1ed2bc8434c5d99a73e5a44ca2f0f05d65b212 100755
--- a/sync-awsecr.sh
+++ b/sync-awsecr.sh
@@ -7,7 +7,7 @@ registry="public.ecr.aws/z9d2n7e1"
 declare -A aliases
 aliases=(
 	[mainline]='1 1.27 latest'
-	[stable]='1.26'
+	[stable]='1.28'
 )
 
 architectures=( amd64 arm64v8 )
diff --git a/update.sh b/update.sh
index 7df556d6a6e6a00749643ee3408adf1abf08dcdb..dfe7935a21c62e85ecd887ae66941966df34c809 100755
--- a/update.sh
+++ b/update.sh
@@ -13,13 +13,13 @@ declare branches=(
 # Remember to update pkgosschecksum when changing this.
 declare -A nginx=(
     [mainline]='1.27.5'
-    [stable]='1.26.3'
+    [stable]='1.28.0'
 )
 
 # Current njs versions
 declare -A njs=(
     [mainline]='0.8.10'
-    [stable]='0.8.9'
+    [stable]='0.8.10'
 )
 
 # Current njs patchlevel version
@@ -32,7 +32,7 @@ declare -A njspkg=(
 # Current otel versions
 declare -A otel=(
     [mainline]='0.1.2'
-    [stable]='0.1.1'
+    [stable]='0.1.2'
 )
 
 # Current nginx package patchlevel version
@@ -46,7 +46,7 @@ declare -A pkg=(
 # Remember to update pkgosschecksum when changing this
 declare -A dynpkg=(
     [mainline]=1
-    [stable]=2
+    [stable]=1
 )
 
 declare -A debian=(
@@ -73,7 +73,7 @@ declare -A rev=(
 # Used in builds for architectures not packaged by nginx.org
 declare -A pkgosschecksum=(
     [mainline]='c773d98b567bd585c17f55702bf3e4c7d82b676bfbde395270e90a704dca3c758dfe0380b3f01770542b4fd9bed1f1149af4ce28bfc54a27a96df6b700ac1745'
-    [stable]='3a4e869eded0c71e92f522e94edffea7fbfb5e78886ea7e484342fa2e028c62099a67d08860c249bf93776da97b924225e0d849dbb4697b298afe5421d7d6fea'
+    [stable]='517bc18954ccf4efddd51986584ca1f37966833ad342a297e1fe58fd0faf14c5a4dabcb23519dca433878a2927a95d6bea05a6749ee2fa67a33bf24cdc41b1e4'
 )
 
 get_packages() {