diff --git a/.coin-or/projDesc.xml b/.coin-or/projDesc.xml
index b5da0efb6fa..818e3ab69c8 100644
--- a/.coin-or/projDesc.xml
+++ b/.coin-or/projDesc.xml
@@ -227,8 +227,8 @@ Carl D. Laird, Chair, Pyomo Management Committee, claird at andrew dot cmu dot e
Use explicit overrides to disable use of automated
version reporting.
-->
- 6.8.2
- 6.8.2
+ 6.9.0
+ 6.9.0
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5f68e827a92..b362f93880a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,44 @@
Pyomo CHANGELOG
===============
+-------------------------------------------------------------------------------
+Pyomo 6.9.0 (21 Feb 2025)
+-------------------------------------------------------------------------------
+
+- General
+ - Big Wheel of Misfortune - A Practice in Reviewing Old Issues (#3460, #3473)
+ - Resolve buffering issues in `TeeStream` and `capture_output` (#3449)
+ - Update GHA badges on README.md (#3457)
+ - Fix incompatibility with `imp` and `DeferredImportCallbackFinder` (#3444)
+ - Remove Python 3.8 Support (#3438)
+- Core
+ - Resolve error parenthesizing pow mantissa (#3472)
+ - Resolve OSX error accessing closed filehandle (#3467)
+ - Allow construction of CUID from another CUID (#3464)
+ - Clean up `identify_variables` / `identify_mutable_parameters`;
+ deprecate `SimpleExpressionVisitor` (#3436)
+- Solver Interfaces
+ - Solver refactor: BUGFIX, f-string in contrib/solver (#3481)
+ - Update Gurobi NL interface for Gurobi 12.x (#3470)
+ - Defer starting the SAS session until needed (#3448)
+ - Solver refactor: Validator for `tee` in `contrib.solver.config` (#3482)
+- Testing
+ - Pin Sphinx to not 8.2.0 (#3479)
+ - Typos corrections (#3437, #3474)
+ - Address intermittent TeeStream test failure (#3465)
+ - 2025 Testing update: Black 25.1.0, testing Qt without X11 (#3463)
+ - Testing: exclude Xpress 9.5.1 on Windows/GHA/Python3.{0,1} (#3455)
+ - CY25 CI Infrastructure and typo fixes (#3453)
+ - Verify we are testing all NEOS solvers (#3433)
+- Contributed Packages
+ - GDPOpt: Add Logic-Based Discrete-Steepest Descent Algorithm (#3331)
+ - PyROS: Fix/Tweak Documentation and Solver Output Logging (#3475)
+ - PyROS: Fix Treatment of Fixed Model Variables and Initialization of
+ Auxiliary Uncertain Parameters (#3461)
+ - PyROS: Improve handling of separation problem sub-solver errors (#3441)
+ - PyROS: Extend valid types for solver argument `uncertain_params` (#3439)
+ - PyROS: Add Gaussian confidence level attribute to `EllipsoidalSet` (#3434)
+
-------------------------------------------------------------------------------
Pyomo 6.8.2 (18 Nov 2024)
-------------------------------------------------------------------------------
diff --git a/RELEASE.md b/RELEASE.md
index 34301a529f0..cc9c01c234f 100644
--- a/RELEASE.md
+++ b/RELEASE.md
@@ -1,20 +1,14 @@
-We are pleased to announce the release of Pyomo 6.8.2.
+We are pleased to announce the release of Pyomo 6.9.0.
Pyomo is a collection of Python software packages that supports a
diverse set of optimization capabilities for formulating and analyzing
optimization models.
-The following are highlights of the 6.8 release series:
+The following are highlights of the 6.9 release series:
-- Complete Documentation Reorganization
-- Added support for Python 3.13
-- Refactor default Gurobi interface to support version 12
-- Support for NumPy2
-- Refactor of Design of Experiments (`contrib.doe`)
-- New packages:
- - alternative_solutions: alternative (near) optimal solutions
+- Removed support for Python 3.8
+- New Logic-Based Discrete-Steepest Descent Algorithm in GDPOpt
- New solver interfaces:
- - SAS: Statistical Analysis System
- v2: Ongoing solver interface refactor
- ...and of course numerous minor bug fixes and performance enhancements
diff --git a/pyomo/core/expr/visitor.py b/pyomo/core/expr/visitor.py
index 98da9fb963e..f7478104be9 100644
--- a/pyomo/core/expr/visitor.py
+++ b/pyomo/core/expr/visitor.py
@@ -682,7 +682,7 @@ def _nonrecursive_walker_loop(self, ptr):
@deprecated(
"The SimpleExpressionVisitor is deprecated. "
"Please use the StreamBasedExpressionVisitor instead.",
- version='6.9.0.dev0',
+ version='6.9.0',
)
class SimpleExpressionVisitor(object):
"""
diff --git a/pyomo/version/info.py b/pyomo/version/info.py
index ee37183cd4a..007fc390fbf 100644
--- a/pyomo/version/info.py
+++ b/pyomo/version/info.py
@@ -27,8 +27,8 @@
major = 6
minor = 9
micro = 0
-releaselevel = 'invalid'
-# releaselevel = 'final'
+# releaselevel = 'invalid'
+releaselevel = 'final'
serial = 0
if releaselevel == 'final':