diff --git a/Makefile b/Makefile
index 9460d6da4..0a947ac74 100644
--- a/Makefile
+++ b/Makefile
@@ -8,7 +8,7 @@ OS = $(shell go env GOOS)
 ARCH = $(shell go env GOARCH)
 
 # Current Operator version
-export OPERATOR_VERSION ?= 3.0.1-dev
+export OPERATOR_VERSION ?= 3.0.1
 IMAGE_VERSION ?= $(OPERATOR_VERSION)
 BUNDLE_VERSION ?= $(IMAGE_VERSION)
 DEFAULT_NAMESPACE ?= quay.io/cryostat
@@ -62,7 +62,7 @@ export APP_NAME ?= Cryostat
 # Images used by the operator
 CORE_NAMESPACE ?= $(DEFAULT_NAMESPACE)
 CORE_NAME ?= cryostat
-CORE_VERSION ?= 3.0.1-snapshot
+CORE_VERSION ?= 3.0.1
 export CORE_IMG ?= $(CORE_NAMESPACE)/$(CORE_NAME):$(CORE_VERSION)
 OAUTH2_PROXY_NAMESPACE ?= quay.io/oauth2-proxy
 OAUTH2_PROXY_NAME ?= oauth2-proxy
@@ -71,27 +71,27 @@ export OAUTH2_PROXY_IMG ?= $(OAUTH2_PROXY_NAMESPACE)/$(OAUTH2_PROXY_NAME):$(OAUT
 OPENSHIFT_OAUTH_PROXY_NAMESPACE ?= quay.io/cryostat
 OPENSHIFT_OAUTH_PROXY_NAME ?= openshift-oauth-proxy
 # there is no 'latest' tag for this container
-OPENSHIFT_OAUTH_PROXY_VERSION ?= cryostat-v3.0
+OPENSHIFT_OAUTH_PROXY_VERSION ?= 3.0.1
 export OPENSHIFT_OAUTH_PROXY_IMG ?= $(OPENSHIFT_OAUTH_PROXY_NAMESPACE)/$(OPENSHIFT_OAUTH_PROXY_NAME):$(OPENSHIFT_OAUTH_PROXY_VERSION)
 DATASOURCE_NAMESPACE ?= $(DEFAULT_NAMESPACE)
 DATASOURCE_NAME ?= jfr-datasource
-DATASOURCE_VERSION ?= 3.0.1-snapshot
+DATASOURCE_VERSION ?= 3.0.1
 export DATASOURCE_IMG ?= $(DATASOURCE_NAMESPACE)/$(DATASOURCE_NAME):$(DATASOURCE_VERSION)
 GRAFANA_NAMESPACE ?= $(DEFAULT_NAMESPACE)
 GRAFANA_NAME ?= cryostat-grafana-dashboard
-GRAFANA_VERSION ?= 3.0-dev
+GRAFANA_VERSION ?= 3.0.1
 export GRAFANA_IMG ?= $(GRAFANA_NAMESPACE)/$(GRAFANA_NAME):$(GRAFANA_VERSION)
 REPORTS_NAMESPACE ?= $(DEFAULT_NAMESPACE)
 REPORTS_NAME ?= cryostat-reports
-REPORTS_VERSION ?= 3.0.1-snapshot
+REPORTS_VERSION ?= 3.0.1
 export REPORTS_IMG ?= $(REPORTS_NAMESPACE)/$(REPORTS_NAME):$(REPORTS_VERSION)
 DATABASE_NAMESPACE ?= $(DEFAULT_NAMESPACE)
 DATABASE_NAME ?= cryostat-db
-DATABASE_VERSION ?= cryostat-v3.0
+DATABASE_VERSION ?= 3.0.1
 export DATABASE_IMG ?= $(DATABASE_NAMESPACE)/$(DATABASE_NAME):$(DATABASE_VERSION)
 STORAGE_NAMESPACE ?= $(DEFAULT_NAMESPACE)
 STORAGE_NAME ?= cryostat-storage
-STORAGE_VERSION ?= cryostat-v3.0
+STORAGE_VERSION ?= 3.0.1
 export STORAGE_IMG ?= $(STORAGE_NAMESPACE)/$(STORAGE_NAME):$(STORAGE_VERSION)
 
 CERT_MANAGER_VERSION ?= 1.11.5
diff --git a/bundle.Dockerfile b/bundle.Dockerfile
index 8f2467e7d..d7e618e5d 100644
--- a/bundle.Dockerfile
+++ b/bundle.Dockerfile
@@ -5,7 +5,8 @@ LABEL operators.operatorframework.io.bundle.mediatype.v1=registry+v1
 LABEL operators.operatorframework.io.bundle.manifests.v1=manifests/
 LABEL operators.operatorframework.io.bundle.metadata.v1=metadata/
 LABEL operators.operatorframework.io.bundle.package.v1=cryostat-operator
-LABEL operators.operatorframework.io.bundle.channels.v1=alpha
+LABEL operators.operatorframework.io.bundle.channels.v1=stable
+LABEL operators.operatorframework.io.bundle.channel.default.v1=stable
 LABEL operators.operatorframework.io.metrics.builder=operator-sdk-v1.31.0
 LABEL operators.operatorframework.io.metrics.mediatype.v1=metrics+v1
 LABEL operators.operatorframework.io.metrics.project_layout=go.kubebuilder.io/v3
diff --git a/bundle/manifests/cryostat-operator.clusterserviceversion.yaml b/bundle/manifests/cryostat-operator.clusterserviceversion.yaml
index 6044f9c0d..a2e4b0d72 100644
--- a/bundle/manifests/cryostat-operator.clusterserviceversion.yaml
+++ b/bundle/manifests/cryostat-operator.clusterserviceversion.yaml
@@ -29,8 +29,8 @@ metadata:
       ]
     capabilities: Seamless Upgrades
     categories: Monitoring, Developer Tools
-    containerImage: quay.io/cryostat/cryostat-operator:3.0.1-dev
-    createdAt: "2024-09-11T18:19:07Z"
+    containerImage: quay.io/cryostat/cryostat-operator:3.0.1
+    createdAt: "2024-09-20T18:43:56Z"
     description: JVM monitoring and profiling tool
     operatorframework.io/initialization-resource: |-
       {
@@ -54,7 +54,7 @@ metadata:
     operatorframework.io/arch.amd64: supported
     operatorframework.io/arch.arm64: supported
     operatorframework.io/os.linux: supported
-  name: cryostat-operator.v3.0.1-dev
+  name: cryostat-operator.v3.0.1
   namespace: placeholder
 spec:
   apiservicedefinitions: {}
@@ -997,19 +997,19 @@ spec:
                       - name: RELATED_IMAGE_OAUTH2_PROXY
                         value: quay.io/oauth2-proxy/oauth2-proxy:latest
                       - name: RELATED_IMAGE_OPENSHIFT_OAUTH_PROXY
-                        value: quay.io/cryostat/openshift-oauth-proxy:cryostat-v3.0
+                        value: quay.io/cryostat/openshift-oauth-proxy:3.0.1
                       - name: RELATED_IMAGE_CORE
-                        value: quay.io/cryostat/cryostat:3.0.1-snapshot
+                        value: quay.io/cryostat/cryostat:3.0.1
                       - name: RELATED_IMAGE_DATASOURCE
-                        value: quay.io/cryostat/jfr-datasource:3.0.1-snapshot
+                        value: quay.io/cryostat/jfr-datasource:3.0.1
                       - name: RELATED_IMAGE_GRAFANA
-                        value: quay.io/cryostat/cryostat-grafana-dashboard:3.0-dev
+                        value: quay.io/cryostat/cryostat-grafana-dashboard:3.0.1
                       - name: RELATED_IMAGE_REPORTS
-                        value: quay.io/cryostat/cryostat-reports:3.0.1-snapshot
+                        value: quay.io/cryostat/cryostat-reports:3.0.1
                       - name: RELATED_IMAGE_STORAGE
-                        value: quay.io/cryostat/cryostat-storage:cryostat-v3.0
+                        value: quay.io/cryostat/cryostat-storage:3.0.1
                       - name: RELATED_IMAGE_DATABASE
-                        value: quay.io/cryostat/cryostat-db:cryostat-v3.0
+                        value: quay.io/cryostat/cryostat-db:3.0.1
                       - name: WATCH_NAMESPACE
                         valueFrom:
                           fieldRef:
@@ -1018,8 +1018,8 @@ spec:
                         valueFrom:
                           fieldRef:
                             fieldPath: metadata.namespace
-                    image: quay.io/cryostat/cryostat-operator:3.0.1-dev
-                    imagePullPolicy: Always
+                    image: quay.io/cryostat/cryostat-operator:3.0.1
+                    imagePullPolicy: IfNotPresent
                     livenessProbe:
                       httpGet:
                         path: /healthz
@@ -1165,21 +1165,21 @@ spec:
   relatedImages:
     - image: quay.io/oauth2-proxy/oauth2-proxy:latest
       name: oauth2-proxy
-    - image: quay.io/cryostat/openshift-oauth-proxy:cryostat-v3.0
+    - image: quay.io/cryostat/openshift-oauth-proxy:3.0.1
       name: openshift-oauth-proxy
-    - image: quay.io/cryostat/cryostat:3.0.1-snapshot
+    - image: quay.io/cryostat/cryostat:3.0.1
       name: core
-    - image: quay.io/cryostat/jfr-datasource:3.0.1-snapshot
+    - image: quay.io/cryostat/jfr-datasource:3.0.1
       name: datasource
-    - image: quay.io/cryostat/cryostat-grafana-dashboard:3.0-dev
+    - image: quay.io/cryostat/cryostat-grafana-dashboard:3.0.1
       name: grafana
-    - image: quay.io/cryostat/cryostat-reports:3.0.1-snapshot
+    - image: quay.io/cryostat/cryostat-reports:3.0.1
       name: reports
-    - image: quay.io/cryostat/cryostat-storage:cryostat-v3.0
+    - image: quay.io/cryostat/cryostat-storage:3.0.1
       name: storage
-    - image: quay.io/cryostat/cryostat-db:cryostat-v3.0
+    - image: quay.io/cryostat/cryostat-db:3.0.1
       name: database
-  version: 3.0.1-dev
+  version: 3.0.1
   webhookdefinitions:
     - admissionReviewVersions:
         - v1
diff --git a/bundle/metadata/annotations.yaml b/bundle/metadata/annotations.yaml
index fc9f8edfc..9dbb38274 100644
--- a/bundle/metadata/annotations.yaml
+++ b/bundle/metadata/annotations.yaml
@@ -4,7 +4,8 @@ annotations:
   operators.operatorframework.io.bundle.manifests.v1: manifests/
   operators.operatorframework.io.bundle.metadata.v1: metadata/
   operators.operatorframework.io.bundle.package.v1: cryostat-operator
-  operators.operatorframework.io.bundle.channels.v1: alpha
+  operators.operatorframework.io.bundle.channels.v1: stable
+  operators.operatorframework.io.bundle.channel.default.v1: stable
   operators.operatorframework.io.metrics.builder: operator-sdk-v1.31.0
   operators.operatorframework.io.metrics.mediatype.v1: metrics+v1
   operators.operatorframework.io.metrics.project_layout: go.kubebuilder.io/v3
diff --git a/config/default/image_pull_patch.yaml b/config/default/image_pull_patch.yaml
index 9ecd573a0..5313aea0c 100644
--- a/config/default/image_pull_patch.yaml
+++ b/config/default/image_pull_patch.yaml
@@ -8,4 +8,4 @@ spec:
     spec:
       containers:
       - name: manager
-        imagePullPolicy: "Always"
+        imagePullPolicy: "IfNotPresent"
diff --git a/config/default/image_tag_patch.yaml b/config/default/image_tag_patch.yaml
index 5eced73c6..ccf3f2d63 100644
--- a/config/default/image_tag_patch.yaml
+++ b/config/default/image_tag_patch.yaml
@@ -12,16 +12,16 @@ spec:
         - name: RELATED_IMAGE_OAUTH2_PROXY
           value: "quay.io/oauth2-proxy/oauth2-proxy:latest"
         - name: RELATED_IMAGE_OPENSHIFT_OAUTH_PROXY
-          value: "quay.io/cryostat/openshift-oauth-proxy:cryostat-v3.0"
+          value: "quay.io/cryostat/openshift-oauth-proxy:3.0.1"
         - name: RELATED_IMAGE_CORE
-          value: "quay.io/cryostat/cryostat:3.0.1-snapshot"
+          value: "quay.io/cryostat/cryostat:3.0.1"
         - name: RELATED_IMAGE_DATASOURCE
-          value: "quay.io/cryostat/jfr-datasource:3.0.1-snapshot"
+          value: "quay.io/cryostat/jfr-datasource:3.0.1"
         - name: RELATED_IMAGE_GRAFANA
-          value: "quay.io/cryostat/cryostat-grafana-dashboard:3.0-dev"
+          value: "quay.io/cryostat/cryostat-grafana-dashboard:3.0.1"
         - name: RELATED_IMAGE_REPORTS
-          value: "quay.io/cryostat/cryostat-reports:3.0.1-snapshot"
+          value: "quay.io/cryostat/cryostat-reports:3.0.1"
         - name: RELATED_IMAGE_STORAGE
-          value: "quay.io/cryostat/cryostat-storage:cryostat-v3.0"
+          value: "quay.io/cryostat/cryostat-storage:3.0.1"
         - name: RELATED_IMAGE_DATABASE
-          value: "quay.io/cryostat/cryostat-db:cryostat-v3.0"
+          value: "quay.io/cryostat/cryostat-db:3.0.1"
diff --git a/config/manager/kustomization.yaml b/config/manager/kustomization.yaml
index 4f1412ff0..a23171842 100644
--- a/config/manager/kustomization.yaml
+++ b/config/manager/kustomization.yaml
@@ -22,4 +22,4 @@ kind: Kustomization
 images:
 - name: controller
   newName: quay.io/cryostat/cryostat-operator
-  newTag: 3.0.1-dev
+  newTag: 3.0.1
diff --git a/config/manifests/bases/cryostat-operator.clusterserviceversion.yaml b/config/manifests/bases/cryostat-operator.clusterserviceversion.yaml
index 7b2104f0f..2812dabcc 100644
--- a/config/manifests/bases/cryostat-operator.clusterserviceversion.yaml
+++ b/config/manifests/bases/cryostat-operator.clusterserviceversion.yaml
@@ -4,7 +4,7 @@ metadata:
   annotations:
     capabilities: Seamless Upgrades
     categories: Monitoring, Developer Tools
-    containerImage: quay.io/cryostat/cryostat-operator:3.0.1-dev
+    containerImage: quay.io/cryostat/cryostat-operator:3.0.1
     description: JVM monitoring and profiling tool
     operatorframework.io/initialization-resource: |-
       {
diff --git a/internal/controllers/const_generated.go b/internal/controllers/const_generated.go
index e87072672..7c85d6a1d 100644
--- a/internal/controllers/const_generated.go
+++ b/internal/controllers/const_generated.go
@@ -5,28 +5,28 @@ package controllers
 const AppName = "Cryostat"
 
 // Version of the Cryostat Operator
-const OperatorVersion = "3.0.1-dev"
+const OperatorVersion = "3.0.1"
 
 // Default image tag for the OAuth2 Proxy
 const DefaultOAuth2ProxyImageTag = "quay.io/oauth2-proxy/oauth2-proxy:latest"
 
 // Default image tag for the OpenShift OAuth Proxy
-const DefaultOpenShiftOAuthProxyImageTag = "quay.io/cryostat/openshift-oauth-proxy:cryostat-v3.0"
+const DefaultOpenShiftOAuthProxyImageTag = "quay.io/cryostat/openshift-oauth-proxy:3.0.1"
 
 // Default image tag for the core application image
-const DefaultCoreImageTag = "quay.io/cryostat/cryostat:3.0.1-snapshot"
+const DefaultCoreImageTag = "quay.io/cryostat/cryostat:3.0.1"
 
 // Default image tag for the JFR datasource image
-const DefaultDatasourceImageTag = "quay.io/cryostat/jfr-datasource:3.0.1-snapshot"
+const DefaultDatasourceImageTag = "quay.io/cryostat/jfr-datasource:3.0.1"
 
 // Default image tag for the Grafana dashboard image
-const DefaultGrafanaImageTag = "quay.io/cryostat/cryostat-grafana-dashboard:3.0-dev"
+const DefaultGrafanaImageTag = "quay.io/cryostat/cryostat-grafana-dashboard:3.0.1"
 
 // Default image tag for the Grafana dashboard image
-const DefaultReportsImageTag = "quay.io/cryostat/cryostat-reports:3.0.1-snapshot"
+const DefaultReportsImageTag = "quay.io/cryostat/cryostat-reports:3.0.1"
 
 // Default image tag for the Storage image
-const DefaultStorageImageTag = "quay.io/cryostat/cryostat-storage:cryostat-v3.0"
+const DefaultStorageImageTag = "quay.io/cryostat/cryostat-storage:3.0.1"
 
 // Default image tag for the Database image
-const DefaultDatabaseImageTag = "quay.io/cryostat/cryostat-db:cryostat-v3.0"
+const DefaultDatabaseImageTag = "quay.io/cryostat/cryostat-db:3.0.1"