diff --git a/charts/argo-workflows/Chart.yaml b/charts/argo-workflows/Chart.yaml
index c991b85a..dfb1eb20 100644
--- a/charts/argo-workflows/Chart.yaml
+++ b/charts/argo-workflows/Chart.yaml
@@ -3,7 +3,7 @@ appVersion: v3.4.0
 name: argo-workflows
 description: A Helm chart for Argo Workflows
 type: application
-version: 0.18.0
+version: 0.19.0
 icon: https://raw.githubusercontent.com/argoproj/argo-workflows/master/docs/assets/argo.png
 home: https://github.com/argoproj/argo-helm
 sources:
@@ -13,5 +13,4 @@ maintainers:
     url: https://argoproj.github.io/
 annotations:
   artifacthub.io/changes: |
-    - "[Changed]: Upgrade ArgoWorkflows to v3.4.0"
-    - "[Fixed]: Remove unsupported attributes on metricsConfig and telemetryConfig, from workflow-controller-configmap"
+    - "[Fixed]: Move crds folder into templates folder and add conditional flags for install and keep"
diff --git a/charts/argo-workflows/README.md b/charts/argo-workflows/README.md
index 130a035c..a0bec699 100644
--- a/charts/argo-workflows/README.md
+++ b/charts/argo-workflows/README.md
@@ -41,6 +41,9 @@ Fields to note:
 
 | Key | Type | Default | Description |
 |-----|------|---------|-------------|
+| crds.annotations | object | `{}` | Annotations to be added to all CRDs |
+| crds.install | bool | `true` | Install and upgrade CRDs |
+| crds.keep | bool | `true` | Keep CRDs on chart uninstall |
 | createAggregateRoles | bool | `true` | Create clusterroles that extend existing clusterroles to interact with argo-cd crds |
 | fullnameOverride | string | `nil` | String to fully override "argo-workflows.fullname" template |
 | images.pullPolicy | string | `"Always"` | imagePullPolicy to apply to all containers |
diff --git a/charts/argo-workflows/ci/default-values.yaml b/charts/argo-workflows/ci/default-values.yaml
index 507f1e54..ffc41c8a 100644
--- a/charts/argo-workflows/ci/default-values.yaml
+++ b/charts/argo-workflows/ci/default-values.yaml
@@ -1 +1,3 @@
 # Test with default values
+crds:
+  keep: false
diff --git a/charts/argo-workflows/ci/enable-ingress-values.yaml b/charts/argo-workflows/ci/enable-ingress-values.yaml
index d3485603..05dae886 100644
--- a/charts/argo-workflows/ci/enable-ingress-values.yaml
+++ b/charts/argo-workflows/ci/enable-ingress-values.yaml
@@ -1,3 +1,6 @@
+crds:
+  keep: false
+
 server:
   ingress:
     enabled: true
diff --git a/charts/argo-workflows/ci/enable-metrics-values.yaml b/charts/argo-workflows/ci/enable-metrics-values.yaml
index 64c56cc1..32c007be 100644
--- a/charts/argo-workflows/ci/enable-metrics-values.yaml
+++ b/charts/argo-workflows/ci/enable-metrics-values.yaml
@@ -1,3 +1,6 @@
+crds:
+  keep: false
+
 controller:
   serviceMonitor:
     enabled: false
diff --git a/charts/argo-workflows/ci/enable-rbac-values.yaml b/charts/argo-workflows/ci/enable-rbac-values.yaml
index 10f717ac..70924084 100644
--- a/charts/argo-workflows/ci/enable-rbac-values.yaml
+++ b/charts/argo-workflows/ci/enable-rbac-values.yaml
@@ -1,3 +1,6 @@
+crds:
+  keep: false
+
 workflow:
   serviceAccount:
     create: true # Specifies whether a service account should be created
diff --git a/charts/argo-workflows/crds/argoproj.io_clusterworkflowtemplates.yaml b/charts/argo-workflows/templates/crds/argoproj.io_clusterworkflowtemplates.yaml
similarity index 78%
rename from charts/argo-workflows/crds/argoproj.io_clusterworkflowtemplates.yaml
rename to charts/argo-workflows/templates/crds/argoproj.io_clusterworkflowtemplates.yaml
index 889dfe2f..7f767b24 100644
--- a/charts/argo-workflows/crds/argoproj.io_clusterworkflowtemplates.yaml
+++ b/charts/argo-workflows/templates/crds/argoproj.io_clusterworkflowtemplates.yaml
@@ -1,7 +1,15 @@
+{{- if .Values.crds.install }}
 apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   name: clusterworkflowtemplates.argoproj.io
+  annotations:
+    {{- if .Values.crds.keep }}
+    "helm.sh/resource-policy": keep
+    {{- end }}
+    {{- with .Values.crds.annotations }}
+      {{- toYaml . | nindent 4 }}
+    {{- end }}
 spec:
   group: argoproj.io
   names:
@@ -34,3 +42,4 @@ spec:
         type: object
     served: true
     storage: true
+{{- end }}
diff --git a/charts/argo-workflows/crds/argoproj.io_cronworkflows.yaml b/charts/argo-workflows/templates/crds/argoproj.io_cronworkflows.yaml
similarity index 79%
rename from charts/argo-workflows/crds/argoproj.io_cronworkflows.yaml
rename to charts/argo-workflows/templates/crds/argoproj.io_cronworkflows.yaml
index 812cf114..7b932d8f 100644
--- a/charts/argo-workflows/crds/argoproj.io_cronworkflows.yaml
+++ b/charts/argo-workflows/templates/crds/argoproj.io_cronworkflows.yaml
@@ -1,7 +1,15 @@
+{{- if .Values.crds.install }}
 apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   name: cronworkflows.argoproj.io
+  annotations:
+    {{- if .Values.crds.keep }}
+    "helm.sh/resource-policy": keep
+    {{- end }}
+    {{- with .Values.crds.annotations }}
+      {{- toYaml . | nindent 4 }}
+    {{- end }}
 spec:
   group: argoproj.io
   names:
@@ -38,3 +46,4 @@ spec:
         type: object
     served: true
     storage: true
+{{- end }}
diff --git a/charts/argo-workflows/crds/argoproj.io_workflowartifactgctasks.yaml b/charts/argo-workflows/templates/crds/argoproj.io_workflowartifactgctasks.yaml
similarity index 82%
rename from charts/argo-workflows/crds/argoproj.io_workflowartifactgctasks.yaml
rename to charts/argo-workflows/templates/crds/argoproj.io_workflowartifactgctasks.yaml
index dbc98e91..dcebddb2 100644
--- a/charts/argo-workflows/crds/argoproj.io_workflowartifactgctasks.yaml
+++ b/charts/argo-workflows/templates/crds/argoproj.io_workflowartifactgctasks.yaml
@@ -1,7 +1,15 @@
+{{- if .Values.crds.install }}
 apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   name: workflowartifactgctasks.argoproj.io
+  annotations:
+    {{- if .Values.crds.keep }}
+    "helm.sh/resource-policy": keep
+    {{- end }}
+    {{- with .Values.crds.annotations }}
+      {{- toYaml . | nindent 4 }}
+    {{- end }}
 spec:
   group: argoproj.io
   names:
@@ -39,3 +47,4 @@ spec:
       storage: true
       subresources:
         status: {}
+{{- end }}
diff --git a/charts/argo-workflows/crds/argoproj.io_workfloweventbindings.yaml b/charts/argo-workflows/templates/crds/argoproj.io_workfloweventbindings.yaml
similarity index 77%
rename from charts/argo-workflows/crds/argoproj.io_workfloweventbindings.yaml
rename to charts/argo-workflows/templates/crds/argoproj.io_workfloweventbindings.yaml
index 22e2ecf0..097fa5cd 100644
--- a/charts/argo-workflows/crds/argoproj.io_workfloweventbindings.yaml
+++ b/charts/argo-workflows/templates/crds/argoproj.io_workfloweventbindings.yaml
@@ -1,7 +1,15 @@
+{{- if .Values.crds.install }}
 apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   name: workfloweventbindings.argoproj.io
+  annotations:
+    {{- if .Values.crds.keep }}
+    "helm.sh/resource-policy": keep
+    {{- end }}
+    {{- with .Values.crds.annotations }}
+      {{- toYaml . | nindent 4 }}
+    {{- end }}
 spec:
   group: argoproj.io
   names:
@@ -33,3 +41,4 @@ spec:
         type: object
     served: true
     storage: true
+{{- end }}
diff --git a/charts/argo-workflows/crds/argoproj.io_workflows.yaml b/charts/argo-workflows/templates/crds/argoproj.io_workflows.yaml
similarity index 85%
rename from charts/argo-workflows/crds/argoproj.io_workflows.yaml
rename to charts/argo-workflows/templates/crds/argoproj.io_workflows.yaml
index 7a5b598d..85b71f91 100644
--- a/charts/argo-workflows/crds/argoproj.io_workflows.yaml
+++ b/charts/argo-workflows/templates/crds/argoproj.io_workflows.yaml
@@ -1,7 +1,15 @@
+{{- if .Values.crds.install }}
 apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   name: workflows.argoproj.io
+  annotations:
+    {{- if .Values.crds.keep }}
+    "helm.sh/resource-policy": keep
+    {{- end }}
+    {{- with .Values.crds.annotations }}
+      {{- toYaml . | nindent 4 }}
+    {{- end }}
 spec:
   group: argoproj.io
   names:
@@ -53,3 +61,4 @@ spec:
     served: true
     storage: true
     subresources: {}
+{{- end }}
diff --git a/charts/argo-workflows/crds/argoproj.io_workflowtaskresults.yaml b/charts/argo-workflows/templates/crds/argoproj.io_workflowtaskresults.yaml
similarity index 98%
rename from charts/argo-workflows/crds/argoproj.io_workflowtaskresults.yaml
rename to charts/argo-workflows/templates/crds/argoproj.io_workflowtaskresults.yaml
index e76677f7..e9bb93f6 100644
--- a/charts/argo-workflows/crds/argoproj.io_workflowtaskresults.yaml
+++ b/charts/argo-workflows/templates/crds/argoproj.io_workflowtaskresults.yaml
@@ -1,7 +1,15 @@
+{{- if .Values.crds.install }}
 apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   name: workflowtaskresults.argoproj.io
+  annotations:
+    {{- if .Values.crds.keep }}
+    "helm.sh/resource-policy": keep
+    {{- end }}
+    {{- with .Values.crds.annotations }}
+      {{- toYaml . | nindent 4 }}
+    {{- end }}
 spec:
   group: argoproj.io
   names:
@@ -582,3 +590,4 @@ spec:
         type: object
     served: true
     storage: true
+{{- end }}
diff --git a/charts/argo-workflows/crds/argoproj.io_workflowtasksets.yaml b/charts/argo-workflows/templates/crds/argoproj.io_workflowtasksets.yaml
similarity index 80%
rename from charts/argo-workflows/crds/argoproj.io_workflowtasksets.yaml
rename to charts/argo-workflows/templates/crds/argoproj.io_workflowtasksets.yaml
index 22cf52b1..74692941 100644
--- a/charts/argo-workflows/crds/argoproj.io_workflowtasksets.yaml
+++ b/charts/argo-workflows/templates/crds/argoproj.io_workflowtasksets.yaml
@@ -1,7 +1,15 @@
+{{- if .Values.crds.install }}
 apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   name: workflowtasksets.argoproj.io
+  annotations:
+    {{- if .Values.crds.keep }}
+    "helm.sh/resource-policy": keep
+    {{- end }}
+    {{- with .Values.crds.annotations }}
+      {{- toYaml . | nindent 4 }}
+    {{- end }}
 spec:
   group: argoproj.io
   names:
@@ -39,3 +47,4 @@ spec:
     storage: true
     subresources:
       status: {}
+{{- end }}
diff --git a/charts/argo-workflows/crds/argoproj.io_workflowtemplates.yaml b/charts/argo-workflows/templates/crds/argoproj.io_workflowtemplates.yaml
similarity index 77%
rename from charts/argo-workflows/crds/argoproj.io_workflowtemplates.yaml
rename to charts/argo-workflows/templates/crds/argoproj.io_workflowtemplates.yaml
index 8165ec25..810e6f51 100644
--- a/charts/argo-workflows/crds/argoproj.io_workflowtemplates.yaml
+++ b/charts/argo-workflows/templates/crds/argoproj.io_workflowtemplates.yaml
@@ -1,7 +1,15 @@
+{{- if .Values.crds.install }}
 apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   name: workflowtemplates.argoproj.io
+  annotations:
+    {{- if .Values.crds.keep }}
+    "helm.sh/resource-policy": keep
+    {{- end }}
+    {{- with .Values.crds.annotations }}
+      {{- toYaml . | nindent 4 }}
+    {{- end }}
 spec:
   group: argoproj.io
   names:
@@ -33,3 +41,4 @@ spec:
         type: object
     served: true
     storage: true
+{{- end }}
diff --git a/charts/argo-workflows/values.yaml b/charts/argo-workflows/values.yaml
index 578fb1da..0d661b6c 100644
--- a/charts/argo-workflows/values.yaml
+++ b/charts/argo-workflows/values.yaml
@@ -7,6 +7,15 @@ images:
   pullSecrets: []
   # - name: argo-pull-secret
 
+## Custom resource configuration
+crds:
+  # -- Install and upgrade CRDs
+  install: true
+  # -- Keep CRDs on chart uninstall
+  keep: true
+  # -- Annotations to be added to all CRDs
+  annotations: {}
+
 # -- Create clusterroles that extend existing clusterroles to interact with argo-cd crds
 ## Ref: https://kubernetes.io/docs/reference/access-authn-authz/rbac/#aggregated-clusterroles
 createAggregateRoles: true