diff --git a/CHANGES b/CHANGES
index aebb3853093..5a7b8c65ca4 100644
--- a/CHANGES
+++ b/CHANGES
@@ -3,6 +3,20 @@ repositories (changes that are automatically handled by the format upgrade tools
 are not marked). Those prefixed with "(+)" are new command/option (since
 2.1.0~alpha2).
 
+2.2.0:
+* Bump `opam-root-version` to 2.2 [#5980 @kit-ty-kate]
+* Cygwin initialisation enhancement
+  * Always pass `--no-version-check` and `--no-write-registry` to Cygwin setup
+    [#6046 @dra27]
+  * Use `--quiet-mode noinput` for the internal Cygwin installation (which is
+    definitely a fully-specified command line) and `--quiet-mode` unattended
+    for external Cygwin installations (in case the user does need to select
+    something, e.g. a mirror) [#6046 @dra27]
+* API changes
+  * `OpamStateConfig.opamroot_with_provenance`: restore previous behaviour to
+    `OpamStateConfig.opamroot` for compatibility with third party code
+    [#6047 @dra27]
+
 2.2.0~rc1:
 * Fix `opam upgrade` wanting to recompile opam files containing the
   `x-env-path-rewrite` field [#6029 @kit-ty-kate - fix #6028]
diff --git a/configure b/configure
index a919906a3c1..5ead825ca9c 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.71 for opam 2.2.0~rc2~dev.
+# Generated by GNU Autoconf 2.71 for opam 2.2.0.
 #
 #
 # Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation,
@@ -609,8 +609,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='opam'
 PACKAGE_TARNAME='opam'
-PACKAGE_VERSION='2.2.0~rc2~dev'
-PACKAGE_STRING='opam 2.2.0~rc2~dev'
+PACKAGE_VERSION='2.2.0'
+PACKAGE_STRING='opam 2.2.0'
 PACKAGE_BUGREPORT=''
 PACKAGE_URL=''
 
@@ -1334,7 +1334,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures opam 2.2.0~rc2~dev to adapt to many kinds of systems.
+\`configure' configures opam 2.2.0 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1396,7 +1396,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of opam 2.2.0~rc2~dev:";;
+     short | recursive ) echo "Configuration of opam 2.2.0:";;
    esac
   cat <<\_ACEOF
 
@@ -1513,7 +1513,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-opam configure 2.2.0~rc2~dev
+opam configure 2.2.0
 generated by GNU Autoconf 2.71
 
 Copyright (C) 2021 Free Software Foundation, Inc.
@@ -1710,7 +1710,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by opam $as_me 2.2.0~rc2~dev, which was
+It was created by opam $as_me 2.2.0, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   $ $0$ac_configure_args_raw
@@ -7844,7 +7844,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by opam $as_me 2.2.0~rc2~dev, which was
+This file was extended by opam $as_me 2.2.0, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -7899,7 +7899,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config='$ac_cs_config_escaped'
 ac_cs_version="\\
-opam config.status 2.2.0~rc2~dev
+opam config.status 2.2.0
 configured by $0, generated by GNU Autoconf 2.71,
   with options \\"\$ac_cs_config\\"
 
diff --git a/configure.ac b/configure.ac
index 769964b12e0..5e5708f6d20 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,5 +1,5 @@
 dnl The line below must be formatted AC_INIT([opam],[VERSION]) with no extra spaces
-AC_INIT([opam],[2.2.0~rc2~dev])
+AC_INIT([opam],[2.2.0])
 AC_COPYRIGHT(Copyright 2012-2019 OcamlPro SAS)
 
 AC_CONFIG_MACRO_DIR([m4])
diff --git a/master_changes.md b/master_changes.md
index ccab4ae2155..1ab70ae3e4a 100644
--- a/master_changes.md
+++ b/master_changes.md
@@ -11,8 +11,6 @@ moved, etc.), please update the _API updates_ part (it helps opam library
 users)
 
 ## Version
-  * Bump version to 2.20~rc2~dev [#6048 @rjbou]
-  * Bump opam-root-version to 2.2 [#5980 @kit-ty-kate]
 
 ## Global CLI
 
@@ -61,8 +59,6 @@ users)
 ## Opamfile
 
 ## External dependencies
- * Always pass --no-version-check and --no-write-registry to Cygwin setup [#6046 @dra27]
- * Use --quiet-mode noinput for the internal Cygwin installation (which is definitely a fully-specified command line) and --quiet-mode unattended for external Cygwin installations (in case the user does need to select something, e.g. a mirror) [#6046 @dra27]
 
 ## Format upgrade
 
@@ -117,7 +113,6 @@ users)
 ## opam-repository
 
 ## opam-state
- * `OpamStateConfig.opamroot_with_provenance`: restore previous behaviour to `OpamStateConfig.opamroot` for compatibility with third party code [#6047 @dra27]
 
 ## opam-solver
 
diff --git a/opam-client.opam b/opam-client.opam
index ecebf68b93a..a684cfeefd1 100644
--- a/opam-client.opam
+++ b/opam-client.opam
@@ -1,5 +1,5 @@
 opam-version: "2.0"
-version: "2.2.0~rc2~dev"
+version: "2.2.0"
 synopsis: "Client library for opam 2.2"
 description: """
 Actions on the opam root, switches, installations, and front-end.
diff --git a/opam-core.opam b/opam-core.opam
index 43a39c7f5d9..494f3f392aa 100644
--- a/opam-core.opam
+++ b/opam-core.opam
@@ -1,5 +1,5 @@
 opam-version: "2.0"
-version: "2.2.0~rc2~dev"
+version: "2.2.0"
 synopsis: "Core library for opam 2.2"
 description: """
 Small standard library extensions, and generic system interaction modules used by opam.
diff --git a/opam-devel.opam b/opam-devel.opam
index fe7203eb032..38b48cf27c9 100644
--- a/opam-devel.opam
+++ b/opam-devel.opam
@@ -1,5 +1,5 @@
 opam-version: "2.0"
-version: "2.2.0~rc2~dev"
+version: "2.2.0"
 synopsis: "Bootstrapped development binary for opam 2.2"
 description: """
 This package compiles (bootstraps) opam. For consistency and safety of the installation, the binaries are not installed into the PATH, but into lib/opam-devel, from where the user can manually install them system-wide.
diff --git a/opam-format.opam b/opam-format.opam
index 54121761045..c38afffaa80 100644
--- a/opam-format.opam
+++ b/opam-format.opam
@@ -1,5 +1,5 @@
 opam-version: "2.0"
-version: "2.2.0~rc2~dev"
+version: "2.2.0"
 synopsis: "Format library for opam 2.2"
 description: """
 Definition of opam datastructures and its file interface.
diff --git a/opam-installer.opam b/opam-installer.opam
index 8732299868d..694be5db7e6 100644
--- a/opam-installer.opam
+++ b/opam-installer.opam
@@ -1,5 +1,5 @@
 opam-version: "2.0"
-version: "2.2.0~rc2~dev"
+version: "2.2.0"
 synopsis: "Installation of files to a prefix, following opam conventions"
 description: """
 opam-installer is a small tool that can read *.install files, as defined by opam [1], and execute them to install or remove package files without going through opam.
diff --git a/opam-repository.opam b/opam-repository.opam
index eff6df65456..2b01f94f25e 100644
--- a/opam-repository.opam
+++ b/opam-repository.opam
@@ -1,5 +1,5 @@
 opam-version: "2.0"
-version: "2.2.0~rc2~dev"
+version: "2.2.0"
 synopsis: "Repository library for opam 2.2"
 description: """
 This library includes repository and remote sources handling, including curl/wget, rsync, git, mercurial, darcs backends.
diff --git a/opam-solver.opam b/opam-solver.opam
index 9a18c337feb..67d3c9f0c74 100644
--- a/opam-solver.opam
+++ b/opam-solver.opam
@@ -1,5 +1,5 @@
 opam-version: "2.0"
-version: "2.2.0~rc2~dev"
+version: "2.2.0"
 synopsis: "Solver library for opam 2.2"
 description: """
 Solver and Cudf interaction. This library is based on the Cudf and Dose libraries, and handles calls to the external solver from opam.
diff --git a/opam-state.opam b/opam-state.opam
index c7ff4b5a975..0d8042ed904 100644
--- a/opam-state.opam
+++ b/opam-state.opam
@@ -1,5 +1,5 @@
 opam-version: "2.0"
-version: "2.2.0~rc2~dev"
+version: "2.2.0"
 synopsis: "State library for opam 2.2"
 description: """
 Handling of the ~/.opam hierarchy, repository and switch states.
diff --git a/opam.opam b/opam.opam
index 25d183a945d..ee10e388e50 100644
--- a/opam.opam
+++ b/opam.opam
@@ -1,5 +1,5 @@
 opam-version: "2.0"
-version: "2.2.0~rc2~dev"
+version: "2.2.0"
 synopsis: "Meta-package for Dune"
 maintainer: "opam-devel@lists.ocaml.org"
 authors: [