Skip to main content

Installation

Early access

The Branching Plugin is available in early access, with its Helm chart and image. Contact us to get access.

Requirements​

  • OpenEverest with plugin support, installed in everest-system.
  • For PostgreSQL: provider-cloudnative-pg with CloudNativePG 1.30+.
    • Database branches (Clone): PostgreSQL 18+, and a file system with reflinks for instant, space-free branches (XFS, Btrfs, ZFS).
    • Instance branches (Snapshot): PostgreSQL 15+, the CSI snapshot controller and CRDs, a VolumeSnapshotClass with copy-on-write snapshots and clones, and a provider-cloudnative-pg version that can bootstrap an Instance from a volume snapshot (included with early access).
  • For MariaDB: provider-mariadb with volume snapshot bootstrap (the release after v0.2.2, or included with early access), and the same storage as instance branches.
  • For SQL Server: provider-mssql v0.1.17+, which bundles MSSQL Operator v0.1.17, and the same storage as instance branches.

See Storage requirements for what to pick.

Install with Helm​

helm install plugin-branching ./plugin-branching \
--namespace everest-system

The chart installs:

  • the Branch, RestorePoint and Operation CRDs;
  • the plugin's Deployment and Service (API, controller and UI bundle);
  • the RBAC the controller needs;
  • the OpenEverest Plugin resource that registers the Branches tab on the instance page.

Check that it runs:

kubectl -n everest-system rollout status deploy/plugin-branching
kubectl get crd | grep plugin-branching
branches.plugin-branching.plugins.openeverest.io 2026-11-11T10:00:00Z
operations.plugin-branching.plugins.openeverest.io 2026-11-11T10:00:00Z
restorepoints.plugin-branching.plugins.openeverest.io 2026-11-11T10:00:00Z

Open a supported instance in OpenEverest: it has a Branches tab.

Chart values​

ValueDefaultDescription
image.repositoryghcr.io/solanicaio/plugin-branchingThe plugin's image.
image.tagthe chart's appVersionThe image tag.
image.pullPolicyIfNotPresent
imagePullSecrets[]Secrets to pull the image with.
replicaCount1Replicas; the controller is leader-elected.
k8sClustermainOpenEverest's name for the cluster the plugin runs in. The plugin branches only that cluster's instances.
everestAPIURL""The OpenEverest API URL. When empty, the plugin finds the everest Service in its namespace, then falls back to http://everest.everest-system.svc.cluster.local:8080.
plugin.displayNameBranchingThe plugin's name in OpenEverest.
plugin.enabledtrueWhether the plugin's UI is enabled.
plugin.extensionPointsthe Branches tab for provider-cloudnative-pg, mariadb and mssql instancesWhere the UI appears.
resourcesrequests 50m/96Mi, limits 200m/256MiThe Deployment's resources.
nodeSelector, tolerations, affinitynoneWhere the plugin's pod runs.
priorityClassName""The pod's PriorityClass.

The plugin talks to the Kubernetes API at up to 50 requests per second, with bursts of 100. To change that, set the KUBE_API_QPS and KUBE_API_BURST environment variables on the Deployment.

Network access​

The controller connects to PostgreSQL instances from the plugin's namespace, to create and drop databases. If NetworkPolicies restrict access to your instances, allow traffic from everest-system to them.

Prepare a PostgreSQL instance​

For database branches, set file_copy_method: clone in the instance's PostgreSQL parameters, so that standbys clone branches too instead of copying them in full:

apiVersion: core.openeverest.io/v1alpha1
kind: Instance
metadata:
name: orders
namespace: team-a
spec:
components:
engine:
storage:
size: 50Gi
storageClass: block-xfs # a StorageClass formatting volumes as XFS
parameters:
postgresql:
parameters:
file_copy_method: clone

The plugin declares its own database role, oe_branching, on each instance it branches: no superuser or application credentials are needed. See Permissions.

Create your first branch​

cat <<EOF | kubectl apply -f -
apiVersion: plugin-branching.plugins.openeverest.io/v1alpha1
kind: Branch
metadata:
name: feature-x
namespace: team-a
spec:
instanceRef:
name: orders
source:
database: app
database: app_feature_x
EOF

kubectl -n team-a wait branch/feature-x --for=jsonpath='{.status.phase}'=Ready
kubectl -n team-a get branch feature-x

Connect with the instance's connection details from OpenEverest, the same user and password as app, and app_feature_x as the database name. Delete the branch when you're done:

kubectl -n team-a delete branch feature-x

Or use the Branches tab: Create branch, pick the source database, and name the branch.

Upgrade​

Helm installs CRDs but never upgrades them. Apply the chart's CRDs before upgrading the release:

kubectl apply --server-side --force-conflicts -f ./plugin-branching/crds
helm upgrade plugin-branching ./plugin-branching --namespace everest-system

Uninstall​

Delete the branches, restore points and operations you no longer need while the plugin still runs, so it drops their databases, instances and snapshots. Then:

helm uninstall plugin-branching --namespace everest-system

Helm keeps the CRDs. Delete them once no plugin resources are left:

kubectl delete crd branches.plugin-branching.plugins.openeverest.io \
restorepoints.plugin-branching.plugins.openeverest.io \
operations.plugin-branching.plugins.openeverest.io