diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index f2e46a7290..e3e289b962 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -65,6 +65,7 @@ jobs:
kubectl create -f https://github.com/stashed/installer/raw/master/crds/stash-crds.yaml
kubectl create -f https://github.com/kubevault/installer/raw/master/crds/kubevault-crds.yaml
kubectl create -f https://github.com/kubedb/installer/raw/master/crds/kubedb-crds.yaml
+ kubectl create -f https://github.com/kubedb/installer/raw/master/bundle/manifests/installer.kubedb.com_kubedbs.yaml
kubectl create -f https://github.com/kubernetes-csi/external-snapshotter/raw/master/client/config/crd/snapshot.storage.k8s.io_volumesnapshotclasses.yaml
kubectl create -f https://github.com/kubestash/installer/raw/master/crds/kubestash-crds.yaml
# recommendation
@@ -92,6 +93,11 @@ jobs:
kubectl create -f https://raw.githubusercontent.com/virtual-secrets/apimachinery/refs/heads/master/crds/config.virtual-secrets.dev_secretstores.yaml
kubectl create -f https://raw.githubusercontent.com/virtual-secrets/apimachinery/refs/heads/master/crds/virtual-secrets.dev_secretmounts.yaml
kubectl create -f https://raw.githubusercontent.com/virtual-secrets/apimachinery/refs/heads/master/crds/virtual-secrets.dev_secrets.yaml
+ # argocd crds
+ kubectl create -f https://github.com/argoproj/argo-cd/raw/v3.4.3/manifests/crds/application-crd.yaml
+ # fluxcd crds
+ # kubectl create -f https://github.com/fluxcd/helm-controller/raw/v1.3.0/config/crd/bases/helm.toolkit.fluxcd.io_helmreleases.yaml
+ # kubectl create -f https://github.com/fluxcd/source-controller/raw/v1.6.2/config/crd/bases/source.toolkit.fluxcd.io_helmrepositories.yaml
- name: Check codespan schema
run: |
diff --git a/docs/operatormanual/recommendation/configuration.md b/docs/operatormanual/recommendation/configuration.md
index 1824599444..84375e94e8 100644
--- a/docs/operatormanual/recommendation/configuration.md
+++ b/docs/operatormanual/recommendation/configuration.md
@@ -19,7 +19,7 @@ section_menu_id: operatormanual
Before using KubeDB Recommendations, ensure that:
* You have a running Kubernetes cluster with `kubectl` configured (e.g. via [kind](https://kind.sigs.k8s.io/docs/user/quick-start/)).
-* KubeDB is installed following the [setup guide](/docs/setup/install/kubedb.md), with the Supervisor enabled:
+* KubeDB is installed following the [setup guide](/docs/setup/install/kubedb/_index.md), with the Supervisor enabled:
```bash
--set supervisor.enabled=true
diff --git a/docs/setup/README.md b/docs/setup/README.md
index c9babc8d8e..9b44084d6e 100644
--- a/docs/setup/README.md
+++ b/docs/setup/README.md
@@ -18,14 +18,14 @@ aliases:
# Setup
-
-
-## Using Helm 3
-
-KubeDB can be installed via [Helm](https://helm.sh/) using the [chart](https://github.com/kubedb/installer/tree/{{< param "info.installer" >}}/charts/kubedb) from [AppsCode Charts Repository](https://github.com/appscode/charts). To install, follow the steps below:
-
-```bash
-$ helm install kubedb oci://ghcr.io/appscode-charts/kubedb \
- --version {{< param "info.version" >}} \
- --namespace kubedb --create-namespace \
- --set-file global.license=/path/to/the/license.txt \
- --wait --burst-limit=10000 --debug
-```
-
-{{< notice type="warning" message="If you are using **private Docker registries** using *self-signed certificates*, please pass the registry domains to the operator like below:" >}}
-
-```bash
-$ helm install kubedb oci://ghcr.io/appscode-charts/kubedb \
- --version {{< param "info.version" >}} \
- --namespace kubedb --create-namespace \
- --set global.insecureRegistries[0]=hub.example.com \
- --set global.insecureRegistries[1]=hub2.example.com \
- --set-file global.license=/path/to/the/license.txt \
- --wait --burst-limit=10000 --debug
-```
-
-To see the detailed configuration options, visit [here](https://github.com/kubedb/installer/tree/{{< param "info.installer" >}}/charts/kubedb).
-
-
-
-
-## Using YAML
-
-If you prefer to not use Helm, you can generate YAMLs from KubeDB chart and deploy using `kubectl`. Here we are going to show the procedure using Helm 3.
-
-```bash
-$ helm template kubedb oci://ghcr.io/appscode-charts/kubedb \
- --version {{< param "info.version" >}} \
- --namespace kubedb --create-namespace \
- --set-file global.license=/path/to/the/license.txt \
- --set global.skipCleaner=true | kubectl apply -f -
-```
-
-{{< notice type="warning" message="If you are using **private Docker registries** using *self-signed certificates*, please pass the registry domains to the operator like below:" >}}
-
-```bash
-$ helm template kubedb oci://ghcr.io/appscode-charts/kubedb \
- --version {{< param "info.version" >}} \
- --namespace kubedb --create-namespace \
- --set-file global.license=/path/to/the/license.txt \
- --set global.insecureRegistries[0]=hub.example.com \
- --set global.insecureRegistries[1]=hub2.example.com \
- --set global.skipCleaner=true | kubectl apply -f -
-```
-
-To see the detailed configuration options, visit [here](https://github.com/kubedb/installer/tree/{{< param "info.installer" >}}/charts/kubedb).
-
-
-
-
-## Verify installation
-
-To check if KubeDB operator pods have started, run the following command:
-
-```bash
-$ watch kubectl get pods --all-namespaces -l "app.kubernetes.io/instance=kubedb"
-
-NAME READY STATUS RESTARTS AGE
-kubedb-kubedb-autoscaler-b5dd47dc5-bxnrq 1/1 Running 0 48s
-kubedb-kubedb-ops-manager-6f766b86c6-h9m66 1/1 Running 0 48s
-kubedb-kubedb-provisioner-6fd44d5784-d8v9c 1/1 Running 0 48s
-kubedb-kubedb-webhook-server-6cf469bdf4-72wvz 1/1 Running 0 48s
-```
-
-Once the operator pod is running, you can cancel the above command by typing `Ctrl+C`.
-
-Now, to confirm CRD groups have been registered by the operator, run the following command:
-
-```bash
-$ kubectl get crd -l app.kubernetes.io/name=kubedb
-```
-
-Now, you are ready to [create your first database](/docs/guides/README.md) using KubeDB.
-
-## Purchase KubeDB License
-
-If you are interested in purchasing KubeDB license, please contact us via sales@appscode.com for further discussion. You can also set up a meeting via our [calendly link](https://calendly.com/appscode/30min).
-
-If you are willing to purchase KubeDB but need more time to test in your dev cluster, feel free to contact sales@appscode.com. We will be happy to extend your trial period.
diff --git a/docs/setup/install/kubedb/_index.md b/docs/setup/install/kubedb/_index.md
new file mode 100644
index 0000000000..8b2e841b26
--- /dev/null
+++ b/docs/setup/install/kubedb/_index.md
@@ -0,0 +1,39 @@
+---
+title: Install KubeDB
+description: Installation guide for KubeDB
+menu:
+ docs_{{ .version }}:
+ identifier: install-kubedb-enterprise
+ name: KubeDB
+ parent: installation-guide
+ weight: 20
+product_name: kubedb
+menu_name: docs_{{ .version }}
+section_menu_id: setup
+---
+
+# Install KubeDB
+
+## Get a Free License
+
+Download a FREE license from [AppsCode License Server](https://appscode.com/issue-license?p=kubedb).
+
+> KubeDB licensing process has been designed to work with CI/CD workflow. You can automatically obtain a license from your CI/CD pipeline by following the guide from [here](https://github.com/appscode/offline-license-server#offline-license-server).
+
+## Choose an Installation Method
+
+KubeDB can be installed in several ways. Pick the one that fits your workflow:
+
+- [Helm 3](/docs/setup/install/kubedb/helm.md) — recommended for most users.
+- [YAML](/docs/setup/install/kubedb/yaml.md) — render manifests and apply with `kubectl`.
+- [ArgoCD](/docs/setup/install/kubedb/argocd.md) — GitOps via ArgoCD `Application` resources.
+- [FluxCD](/docs/setup/install/kubedb/fluxcd.md) — GitOps via the Flux Helm Controller.
+- [OpenShift](/docs/setup/install/kubedb/openshift.md) — standard chart, Red Hat certified chart, or OperatorHub.
+
+After installing, see [Common Configuration](/docs/setup/install/kubedb/configuration.md) to enable database engines and verify the installation.
+
+## Purchase KubeDB License
+
+If you are interested in purchasing KubeDB license, please contact us via sales@appscode.com for further discussion. You can also set up a meeting via our [calendly link](https://calendly.com/appscode/30min).
+
+If you are willing to purchase KubeDB but need more time to test in your dev cluster, feel free to contact sales@appscode.com. We will be happy to extend your trial period.
diff --git a/docs/setup/install/kubedb/argocd.md b/docs/setup/install/kubedb/argocd.md
new file mode 100644
index 0000000000..03cb9bcd27
--- /dev/null
+++ b/docs/setup/install/kubedb/argocd.md
@@ -0,0 +1,250 @@
+---
+title: Install KubeDB using ArgoCD
+description: Install KubeDB using ArgoCD
+menu:
+ docs_{{ .version }}:
+ identifier: install-kubedb-argocd
+ name: ArgoCD
+ parent: install-kubedb-enterprise
+ weight: 30
+product_name: kubedb
+menu_name: docs_{{ .version }}
+section_menu_id: setup
+---
+
+# Using ArgoCD
+
+KubeDB can be deployed via [ArgoCD](https://argo-cd.readthedocs.io/) using the [Helm chart support](https://argo-cd.readthedocs.io/en/stable/user-guide/helm/) for `Application` resources. Deploy the following `Application` manifests in order to your ArgoCD cluster.
+
+Ready-to-use `Application` manifests for KubeDB and the rest of the AppsCode stack (e.g. `kubestash`, `kubevault`, `stash`, `panopticon`, `monitoring-operator`) are maintained in the [appscode/gitops](https://github.com/appscode/gitops/tree/2025-06/argocd/helm) repository. Install `ace-user-roles` and `license-proxyserver` first, then pick whichever component manifests you need from there.
+
+## 1. Install `ace-user-roles`
+
+The `ace-user-roles` chart provisions the cluster roles required by KubeDB and related operators. Create the following ArgoCD `Application`:
+
+```yaml
+apiVersion: argoproj.io/v1alpha1
+kind: Application
+metadata:
+ name: ace-user-roles
+ namespace: argocd
+spec:
+ destination:
+ namespace: kubeops
+ server: https://kubernetes.default.svc
+ project: default
+ source:
+ chart: ace-user-roles
+ helm:
+ values: |
+ enableClusterRoles:
+ ace: false
+ appcatalog: true
+ catalog: false
+ cert-manager: false
+ kubedb: true
+ kubedb-ui: false
+ kubestash: true # enable if used
+ kubevault: true # enable if used
+ license-proxyserver: true
+ metrics: true
+ prometheus: false
+ secrets-store: false
+ stash: true # enable if used
+ virtual-secrets: false
+ annotations:
+ "helm.sh/hook": null
+ "helm.sh/hook-delete-policy": null
+ repoURL: ghcr.io/appscode-charts
+ targetRevision: v2026.2.16
+ syncPolicy:
+ automated: {}
+ syncOptions:
+ - CreateNamespace=true
+```
+
+## 2. Install `license-proxyserver`
+
+The `license-proxyserver` chart distributes license tokens to KubeDB and other AppsCode operators inside the cluster. Before applying the manifest below, generate an online license-proxyserver token by following the [License Proxyserver guide](https://kubedb.com/docs/platform/v2026.5.22/guides/license-management/license-proxyserver/) and replace the placeholder `token` value with it.
+
+```yaml
+apiVersion: argoproj.io/v1alpha1
+kind: Application
+metadata:
+ name: license-proxyserver
+ namespace: argocd
+spec:
+ project: default
+ source:
+ chart: license-proxyserver
+ repoURL: ghcr.io/appscode-charts
+ targetRevision: v2026.2.16
+ helm:
+ values: |
+ platform:
+ baseURL: https://appscode.com
+ token: '****************************************'
+ destination:
+ server: "https://kubernetes.default.svc"
+ namespace: kubeops
+ syncPolicy:
+ automated: {}
+ syncOptions:
+ - CreateNamespace=true
+
+ ignoreDifferences:
+ - jsonPointers:
+ - /data
+ kind: Secret
+ name: license-proxyserver-apiserver-cert
+ namespace: kubeops
+ - group: apiregistration.k8s.io
+ kind: APIService
+ name: v1alpha1.proxyserver.licenses.appscode.com
+ jsonPointers:
+ - /spec/caBundle
+```
+
+## 3. Install KubeDB
+
+Finally, deploy the KubeDB operators themselves. The `ace-user-roles` sub-chart is disabled here because it was already installed in the first step.
+
+```yaml
+apiVersion: argoproj.io/v1alpha1
+kind: Application
+metadata:
+ name: kubedb
+ namespace: argocd
+spec:
+ project: default
+ source:
+ chart: kubedb
+ repoURL: ghcr.io/appscode-charts
+ targetRevision: {{< param "info.version" >}}
+ helm:
+ values: |
+ ace-user-roles:
+ enabled: false
+ destination:
+ server: "https://kubernetes.default.svc"
+ namespace: kubedb
+ syncPolicy:
+ automated: {}
+ syncOptions:
+ - CreateNamespace=true
+
+ ignoreDifferences:
+ - jsonPointers:
+ - /data
+ kind: Secret
+ name: kubedb-kubedb-webhook-server-cert
+ namespace: kubedb
+ - jsonPointers:
+ - /data
+ kind: Secret
+ name: kubedb-petset-cert
+ namespace: kubedb
+ - jsonPointers:
+ - /data
+ kind: Secret
+ name: kubedb-sidekick-cert
+ namespace: kubedb
+
+ - group: admissionregistration.k8s.io
+ kind: MutatingWebhookConfiguration
+ name: mutators.petset.appscode.com
+ jqPathExpressions:
+ - .webhooks[].clientConfig.caBundle
+ - group: admissionregistration.k8s.io
+ kind: MutatingWebhookConfiguration
+ name: mutators.kubedb.com
+ jqPathExpressions:
+ - .webhooks[].clientConfig.caBundle
+ - group: admissionregistration.k8s.io
+ kind: MutatingWebhookConfiguration
+ name: mutators.autoscaling.kubedb.com
+ jqPathExpressions:
+ - .webhooks[].clientConfig.caBundle
+ - group: admissionregistration.k8s.io
+ kind: MutatingWebhookConfiguration
+ name: mutators.elasticsearch.kubedb.com
+ jqPathExpressions:
+ - .webhooks[].clientConfig.caBundle
+ - group: admissionregistration.k8s.io
+ kind: MutatingWebhookConfiguration
+ name: mutators.schema.kubedb.com
+ jqPathExpressions:
+ - .webhooks[].clientConfig.caBundle
+
+ - group: admissionregistration.k8s.io
+ kind: ValidatingWebhookConfiguration
+ name: validators.autoscaling.kubedb.com
+ jqPathExpressions:
+ - .webhooks[].clientConfig.caBundle
+ - group: admissionregistration.k8s.io
+ kind: ValidatingWebhookConfiguration
+ name: validators.elasticsearch.kubedb.com
+ jqPathExpressions:
+ - .webhooks[].clientConfig.caBundle
+ - group: admissionregistration.k8s.io
+ kind: ValidatingWebhookConfiguration
+ name: validators.kubedb.com
+ jqPathExpressions:
+ - .webhooks[].clientConfig.caBundle
+ - group: admissionregistration.k8s.io
+ kind: ValidatingWebhookConfiguration
+ name: validators.ops.kubedb.com
+ jqPathExpressions:
+ - .webhooks[].clientConfig.caBundle
+ - group: admissionregistration.k8s.io
+ kind: ValidatingWebhookConfiguration
+ name: validators.petset.appscode.com
+ jqPathExpressions:
+ - .webhooks[].clientConfig.caBundle
+ - group: admissionregistration.k8s.io
+ kind: ValidatingWebhookConfiguration
+ name: validators.schema.kubedb.com
+ jqPathExpressions:
+ - .webhooks[].clientConfig.caBundle
+
+ - group: apps
+ kind: StatefulSet
+ name: kubedb-kubedb-autoscaler
+ namespace: kubedb
+ jsonPointers:
+ - /spec/template/metadata/annotations/reload
+ - group: apps
+ kind: StatefulSet
+ name: kubedb-kubedb-ops-manager
+ namespace: kubedb
+ jsonPointers:
+ - /spec/template/metadata/annotations/reload
+ - group: apps
+ kind: StatefulSet
+ name: kubedb-kubedb-provisioner
+ namespace: kubedb
+ jsonPointers:
+ - /spec/template/metadata/annotations/reload
+ - group: apps
+ kind: Deployment
+ name: kubedb-kubedb-webhook-server
+ namespace: kubedb
+ jsonPointers:
+ - /spec/template/metadata/annotations/reload
+ - group: apps
+ kind: Deployment
+ name: kubedb-petset
+ namespace: kubedb
+ jsonPointers:
+ - /spec/template/metadata/annotations/reload
+ - group: apps
+ kind: Deployment
+ name: kubedb-sidekick
+ namespace: kubedb
+ jsonPointers:
+ - /spec/template/metadata/annotations/reload
+```
+
+To see the detailed configuration options for each chart, visit the [AppsCode Charts repository](https://github.com/appscode/charts).
+
+Next: [enable database engines and verify the installation](/docs/setup/install/kubedb/configuration.md).
diff --git a/docs/setup/install/kubedb/configuration.md b/docs/setup/install/kubedb/configuration.md
new file mode 100644
index 0000000000..959d21a8af
--- /dev/null
+++ b/docs/setup/install/kubedb/configuration.md
@@ -0,0 +1,105 @@
+---
+title: KubeDB Common Configuration
+description: Enable database engines and verify the KubeDB installation
+menu:
+ docs_{{ .version }}:
+ identifier: install-kubedb-config
+ name: Common Configuration
+ parent: install-kubedb-enterprise
+ weight: 60
+product_name: kubedb
+menu_name: docs_{{ .version }}
+section_menu_id: setup
+---
+
+# Common Configuration
+
+The steps below apply regardless of which [installation method](/docs/setup/install/kubedb/_index.md) you used.
+
+## Enable Database Engines
+
+KubeDB ships support for many database engines, gated behind individual feature flags so the operator only installs the components you actually need. Toggle an engine on by setting its `global.featureGates.