diff --git a/build/common.targets b/build/common.targets
index d526a2bb7..f26149984 100644
--- a/build/common.targets
+++ b/build/common.targets
@@ -1,7 +1,7 @@
 <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <PropertyGroup>
     <!--set general build properties -->
-    <Version>3.12.0</Version>
+    <Version>3.12.1</Version>
     <Product>SMAPI</Product>
     <LangVersion>latest</LangVersion>
     <AssemblySearchPaths>$(AssemblySearchPaths);{GAC}</AssemblySearchPaths>
diff --git a/docs/release-notes.md b/docs/release-notes.md
index 22eecc3ac..16744b24f 100644
--- a/docs/release-notes.md
+++ b/docs/release-notes.md
@@ -1,10 +1,12 @@
 ← [README](README.md)
 
 # Release notes
-## Upcoming release
+## 3.12.1
+Released 03 August 2021 for Stardew Valley 1.5.4 or later.
+
 * For players:
-  * The software conflict message added in SMAPI 3.11.0 now appears as a warning to simplify troubleshooting.
-  * Fixed error loading older Harmony mods for some players who launch the unofficial 64-bit Stardew Valley through Steam.
+  * The software conflict message is now shown as a warning to simplify troubleshooting.
+  * Fixed error loading older Harmony mods for some Windows players using unofficial 64-bit Stardew Valley.
   * Updated compatibility list.
 
 * For mod authors:
diff --git a/src/SMAPI.Mods.ConsoleCommands/manifest.json b/src/SMAPI.Mods.ConsoleCommands/manifest.json
index 09684f325..7023180b9 100644
--- a/src/SMAPI.Mods.ConsoleCommands/manifest.json
+++ b/src/SMAPI.Mods.ConsoleCommands/manifest.json
@@ -1,9 +1,9 @@
 {
     "Name": "Console Commands",
     "Author": "SMAPI",
-    "Version": "3.12.0",
+    "Version": "3.12.1",
     "Description": "Adds SMAPI console commands that let you manipulate the game.",
     "UniqueID": "SMAPI.ConsoleCommands",
     "EntryDll": "ConsoleCommands.dll",
-    "MinimumApiVersion": "3.12.0"
+    "MinimumApiVersion": "3.12.1"
 }
diff --git a/src/SMAPI.Mods.ErrorHandler/manifest.json b/src/SMAPI.Mods.ErrorHandler/manifest.json
index c83ca3d08..8aa2a6a44 100644
--- a/src/SMAPI.Mods.ErrorHandler/manifest.json
+++ b/src/SMAPI.Mods.ErrorHandler/manifest.json
@@ -1,9 +1,9 @@
 {
     "Name": "Error Handler",
     "Author": "SMAPI",
-    "Version": "3.12.0",
+    "Version": "3.12.1",
     "Description": "Handles some common vanilla errors to log more useful info or avoid breaking the game.",
     "UniqueID": "SMAPI.ErrorHandler",
     "EntryDll": "ErrorHandler.dll",
-    "MinimumApiVersion": "3.12.0"
+    "MinimumApiVersion": "3.12.1"
 }
diff --git a/src/SMAPI.Mods.SaveBackup/manifest.json b/src/SMAPI.Mods.SaveBackup/manifest.json
index 42f1af594..dbd65cbec 100644
--- a/src/SMAPI.Mods.SaveBackup/manifest.json
+++ b/src/SMAPI.Mods.SaveBackup/manifest.json
@@ -1,9 +1,9 @@
 {
     "Name": "Save Backup",
     "Author": "SMAPI",
-    "Version": "3.12.0",
+    "Version": "3.12.1",
     "Description": "Automatically backs up all your saves once per day into its folder.",
     "UniqueID": "SMAPI.SaveBackup",
     "EntryDll": "SaveBackup.dll",
-    "MinimumApiVersion": "3.12.0"
+    "MinimumApiVersion": "3.12.1"
 }
diff --git a/src/SMAPI/Constants.cs b/src/SMAPI/Constants.cs
index bfaee70e3..058009707 100644
--- a/src/SMAPI/Constants.cs
+++ b/src/SMAPI/Constants.cs
@@ -60,7 +60,7 @@ internal static class EarlyConstants
         internal static int? LogScreenId { get; set; }
 
         /// <summary>SMAPI's current raw semantic version.</summary>
-        internal static string RawApiVersion = "3.12.0";
+        internal static string RawApiVersion = "3.12.1";
     }
 
     /// <summary>Contains SMAPI's constants and assumptions.</summary>