diff --git a/MANUAL.txt b/MANUAL.txt
--- a/MANUAL.txt
+++ b/MANUAL.txt
@@ -1,7 +1,7 @@
 ---
 title: Pandoc User's Guide
 author: John MacFarlane
-date: 2026-03-17
+date: 2026-03-19
 ---
 
 # Synopsis
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,5 +1,9 @@
 # Revision history for pandoc
 
+## pandoc 3.9.0.2 (2026-03-19)
+
+  * Typst template: fix regression introduced in 3.9.0.1 (#11538).
+
 ## pandoc 3.9.0.1 (2026-03-17)
 
   * WASM GUI:
diff --git a/data/templates/template.typst b/data/templates/template.typst
--- a/data/templates/template.typst
+++ b/data/templates/template.typst
@@ -73,50 +73,48 @@
     }
   }
 
-#let has-title-block = title != none or (authors != none and authors != ()) or
-                       date != none or abstract != none
-#if has-title-block {
-  place(top, float: true, scope: "parent", clearance: 4mm, block(below: 1em, width: 100%)[
-    #if title != none {
-      align(center, block[
-          #text(weight: "bold", size: 1.5em, hyphenate: false)[#title #if thanks != none {
-              footnote(thanks, numbering: "*")
-              counter(footnote).update(n => n - 1)
-            }]
-          #(
-            if subtitle != none {
-              parbreak()
-              text(weight: "bold", size: 1.25em, hyphenate: false)[#subtitle]
-            }
-           )])
-    }
+  if title != none {
+    place(top, float: true, scope: "parent", clearance: 4mm, block(below: 1em, width: 100%)[
+      #if title != none {
+        align(center, block[
+            #text(weight: "bold", size: 1.5em, hyphenate: false)[#title #if thanks != none {
+                footnote(thanks, numbering: "*")
+                counter(footnote).update(n => n - 1)
+              }]
+            #(
+              if subtitle != none {
+                parbreak()
+                text(weight: "bold", size: 1.25em, hyphenate: false)[#subtitle]
+              }
+             )])
+      }
 
-    #if authors != none and authors != [] {
-      let count = authors.len()
-      let ncols = calc.min(count, 3)
-      grid(
-        columns: (1fr,) * ncols,
-        row-gutter: 1.5em,
-        ..authors.map(author => align(center)[
-          #author.name \
-          #author.affiliation \
-          #author.email
-        ])
-      )
-    }
+      #if authors != none and authors != [] {
+        let count = authors.len()
+        let ncols = calc.min(count, 3)
+        grid(
+          columns: (1fr,) * ncols,
+          row-gutter: 1.5em,
+          ..authors.map(author => align(center)[
+            #author.name \
+            #author.affiliation \
+            #author.email
+          ])
+        )
+      }
 
-    #if date != none {
-      align(center)[#block(inset: 1em)[
-          #date
-        ]]
-    }
+      #if date != none {
+        align(center)[#block(inset: 1em)[
+            #date
+          ]]
+      }
 
-    #if abstract != none {
-      block(inset: 2em)[
-        #text(weight: "semibold")[#abstract-title] #h(1em) #abstract
-      ]
-    }
-  ])
-}
+      #if abstract != none {
+        block(inset: 2em)[
+          #text(weight: "semibold")[#abstract-title] #h(1em) #abstract
+        ]
+      }
+    ])
+  }
   doc
 }
diff --git a/pandoc.cabal b/pandoc.cabal
--- a/pandoc.cabal
+++ b/pandoc.cabal
@@ -1,6 +1,6 @@
 cabal-version:   2.4
 name:            pandoc
-version:         3.9.0.1
+version:         3.9.0.2
 build-type:      Simple
 license:         GPL-2.0-or-later
 license-file:    COPYING.md
diff --git a/test/writer.typst b/test/writer.typst
--- a/test/writer.typst
+++ b/test/writer.typst
@@ -93,51 +93,49 @@
     }
   }
 
-#let has-title-block = title != none or (authors != none and authors != ()) or
-                       date != none or abstract != none
-#if has-title-block {
-  place(top, float: true, scope: "parent", clearance: 4mm, block(below: 1em, width: 100%)[
-    #if title != none {
-      align(center, block[
-          #text(weight: "bold", size: 1.5em, hyphenate: false)[#title #if thanks != none {
-              footnote(thanks, numbering: "*")
-              counter(footnote).update(n => n - 1)
-            }]
-          #(
-            if subtitle != none {
-              parbreak()
-              text(weight: "bold", size: 1.25em, hyphenate: false)[#subtitle]
-            }
-           )])
-    }
+  if title != none {
+    place(top, float: true, scope: "parent", clearance: 4mm, block(below: 1em, width: 100%)[
+      #if title != none {
+        align(center, block[
+            #text(weight: "bold", size: 1.5em, hyphenate: false)[#title #if thanks != none {
+                footnote(thanks, numbering: "*")
+                counter(footnote).update(n => n - 1)
+              }]
+            #(
+              if subtitle != none {
+                parbreak()
+                text(weight: "bold", size: 1.25em, hyphenate: false)[#subtitle]
+              }
+             )])
+      }
 
-    #if authors != none and authors != [] {
-      let count = authors.len()
-      let ncols = calc.min(count, 3)
-      grid(
-        columns: (1fr,) * ncols,
-        row-gutter: 1.5em,
-        ..authors.map(author => align(center)[
-          #author.name \
-          #author.affiliation \
-          #author.email
-        ])
-      )
-    }
+      #if authors != none and authors != [] {
+        let count = authors.len()
+        let ncols = calc.min(count, 3)
+        grid(
+          columns: (1fr,) * ncols,
+          row-gutter: 1.5em,
+          ..authors.map(author => align(center)[
+            #author.name \
+            #author.affiliation \
+            #author.email
+          ])
+        )
+      }
 
-    #if date != none {
-      align(center)[#block(inset: 1em)[
-          #date
-        ]]
-    }
+      #if date != none {
+        align(center)[#block(inset: 1em)[
+            #date
+          ]]
+      }
 
-    #if abstract != none {
-      block(inset: 2em)[
-        #text(weight: "semibold")[#abstract-title] #h(1em) #abstract
-      ]
-    }
-  ])
-}
+      #if abstract != none {
+        block(inset: 2em)[
+          #text(weight: "semibold")[#abstract-title] #h(1em) #abstract
+        ]
+      }
+    ])
+  }
   doc
 }
 #show: doc => conf(
