Before upgrading to data plane v2.0, you need to reach Terraform module v4.5.0 (data plane v1.1.32) and enable the efficient WAL format. v1.1.32 is the required foundation for v2.0. It ensures all Brainstore configuration is in place and verified before the upgrade.
This upgrades the data plane from v1.1.25 to v1.1.27. There are no breaking changes.
module "braintrust-data-plane" { source = "github.com/braintrustdata/terraform-aws-braintrust-data-plane?ref=v3.1.3" # ... other configuration}
terraform apply
2
Upgrade to Terraform module v4.0.0
This step upgrades the AWS provider from v5 to v6. The Terraform state file changes made in this step are irreversible. Apply at this version explicitly before proceeding, so that if anything goes wrong, it is clear whether the provider upgrade or the subsequent data plane bump caused it.
module "braintrust-data-plane" { source = "github.com/braintrustdata/terraform-aws-braintrust-data-plane?ref=v4.0.0" # ... other configuration}
terraform apply
The data plane version does not change in this step.
For straightforward deployments, you can upgrade directly from v3.1.3 to v4.5.0, skipping the v4.0.0 stop. The intermediate stop is recommended for complex deployments to isolate the AWS provider migration. If something goes wrong in a single jump, it’s harder to identify the cause.
3
Upgrade to Terraform module v4.5.0
This upgrades the data plane to v1.1.32. v4.5.0 also introduces the skip_pg_for_brainstore_objects variable used in the Topics enablement step.
module "braintrust-data-plane" { source = "github.com/braintrustdata/terraform-aws-braintrust-data-plane?ref=v4.5.0" # ... other configuration}
This must be a separate terraform apply from the v4.5.0 upgrade. If you set brainstore_wal_footer_version in the same apply, Brainstore nodes that are still rolling out won’t be able to read the new WAL format. Wait until all nodes are confirmed running v1.1.32 before applying this step.
Add brainstore_wal_footer_version = "v1" to your module and apply:
After applying, go to Settings > Data plane and check the WAL footer version (BRAINSTORE_WAL_FOOTER_VERSION) row. On v1.1.32, it will show “Unable to verify setting. Please upgrade to configure.” — this is expected. The setting is active; Brainstore v1.1.32 does not report it back to the control plane. It will show correctly after upgrading to v2.0.
This step is strongly recommended but not mechanically enforced. Deployments running mixed WAL formats become increasingly difficult to tune at scale.
On v1.1.32, items like WAL footer version, response cache URI, and code bundle URI are not displayed. They appear only after upgrading to v2.0. The HTTP/2 check may show a warning on v1.1.32. This resolves after upgrading.
If any of the first ten rows are not green, resolve them before proceeding. Contact Braintrust support if you need help.
Update your module to v5.0.0 and bump the WAL footer to v3. You can do both in the same apply. As long as WAL footer is already on v1 from the previous step, all v2.0 nodes will understand the v3 format on startup.
No-PostgreSQL mode removes PostgreSQL from the Brainstore write path, delivering higher ingestion throughput and unlocking Topics. This step is a prerequisite for Topics but does not enable them.
The switch to no-PostgreSQL mode is one-way: Once Brainstore is writing data directly, rolling back requires downtime to drain and re-ingest. Enable it only when you are ready to commit.
Update your module to v5.1.0 and set skip_pg_for_brainstore_objects = "all":
WAL footer version (requires explicit configuration)
No-PostgreSQL mode (opt-in, post-upgrade)
Variable
How to set
Since
SKIP_PG_FOR_BRAINSTORE_OBJECTS
Set skip_pg_for_brainstore_objects in module
v4.5.0
BRAINSTORE_ASYNC_SCORING_OBJECTS
Auto-derived from skip_pg_for_brainstore_objects
v4.5.0
BRAINSTORE_LOG_AUTOMATIONS_OBJECTS
Auto-derived from skip_pg_for_brainstore_objects
v4.5.0
BRAINSTORE_WAL_USE_EFFICIENT_FORMAT
Auto-enabled when either brainstore_wal_footer_version or skip_pg_for_brainstore_objects is set
v4.5.0
Setting skip_pg_for_brainstore_objects = "all" is a prerequisite for enabling Topics. The module automatically fans this value out to BRAINSTORE_ASYNC_SCORING_OBJECTS and BRAINSTORE_LOG_AUTOMATIONS_OBJECTS.
This guide shows the process for upgrading the Braintrust data plane to v2.0 in your GCP account.
Before upgrading to data plane v2.0, you need to reach Helm chart v5.0.1 (data plane v1.1.32) and enable the efficient WAL format. v1.1.32 is the required foundation for v2.0. It ensures all Brainstore configuration is in place and verified before the upgrade.
This step upgrades the data plane to v1.1.32 and introduces bidirectional communication between Brainstore and API pods. Brainstore now needs to reach the API pods. The chart auto-sets BRAINSTORE_AI_PROXY_URL to http://braintrust-api:8000.
If your cluster has network policies or security rules restricting traffic between pods, allow Brainstore pods to reach the API service on port 8000 before upgrading.
This step enables fast readers — isolated Brainstore nodes that handle common UI queries. Fast readers are enabled by default with 2 replicas and use the same node spec as standard readers, increasing your cluster node count by 2. You can upgrade directly to v5.0.1 from any v4.x version.
Before upgrading, account for 2 additional fast reader nodes in your cluster capacity. If you have customized brainstore.reader settings in values.yaml, mirror those customizations to the new brainstore.fastreader block. See Configure Brainstore fast readers for details.
This must be a separate helm upgrade after confirming all pods are running v1.1.32. Setting this during the same upgrade as the version bump risks Brainstore nodes still rolling out being unable to read the new WAL format.
Set brainstoreWalFooterVersion in your helm-values.yaml:
On chart v5.1.0+, pods will automatically restart after applying the upgrade.Once the pods have cycled, go to Settings > Data plane and check the WAL footer version (BRAINSTORE_WAL_FOOTER_VERSION) row. On v1.1.32, it will show “Unable to verify setting. Please upgrade to configure.” — this is expected. The setting is active; Brainstore v1.1.32 does not report it back to the control plane. It will show correctly after upgrading to v2.0.
This step is strongly recommended but not mechanically enforced. Deployments running mixed WAL formats become increasingly difficult to tune at scale.
On v1.1.32, items like WAL footer version, response cache URI, and code bundle URI are not displayed. They appear only after upgrading to v2.0. The HTTP/2 check may show a warning on v1.1.32. This resolves after upgrading.
If any of the first ten rows are not green, resolve them before proceeding. Contact Braintrust support if you need help.
Data plane v2.0 introduces API pod endpoints that access GCS directly. Prior versions only accessed GCS from Brainstore pods. The GCP IAM binding must be updated to grant the braintrust-api Kubernetes service account Workload Identity access before upgrading.
If using the Braintrust GCP Terraform module, update to v1.5.1 and run terraform apply before upgrading Helm to v6.0.0. The updated module includes the binding for both the brainstore and braintrust-api service accounts.
module "braintrust-data-plane" { source = "github.com/braintrustdata/terraform-google-braintrust-data-plane?ref=v1.5.1" # ... other configuration}
No-PostgreSQL mode removes PostgreSQL from the Brainstore write path, delivering higher ingestion throughput and unlocking Topics. This step is a prerequisite for Topics but does not enable them.
The switch to no-PostgreSQL mode is one-way: Once Brainstore is writing data directly, rolling back requires downtime to drain and re-ingest. Enable it only when you are ready to commit.
Set skipPgForBrainstoreObjects in your helm-values.yaml:
WAL footer version (requires explicit configuration)
No-PostgreSQL mode (opt-in, post-upgrade)
Variable
How to set
Since
Pods
SKIP_PG_FOR_BRAINSTORE_OBJECTS
Set skipPgForBrainstoreObjects in helm-values.yaml
v5.1.0
API
BRAINSTORE_ASYNC_SCORING_OBJECTS
Auto-derived from skipPgForBrainstoreObjects
v5.1.0
reader, writer, fastreader
BRAINSTORE_LOG_AUTOMATIONS_OBJECTS
Auto-derived from skipPgForBrainstoreObjects
v5.1.0
reader, writer, fastreader
Setting skipPgForBrainstoreObjects: "all" is a prerequisite for enabling Topics. The chart automatically fans this value out to BRAINSTORE_ASYNC_SCORING_OBJECTS and BRAINSTORE_LOG_AUTOMATIONS_OBJECTS.
This guide shows the process for upgrading the Braintrust data plane to v2.0 in your Azure account.
Before upgrading to data plane v2.0, you need to reach Helm chart v5.0.1 (data plane v1.1.32) and enable the efficient WAL format. v1.1.32 is the required foundation for v2.0. It ensures all Brainstore configuration is in place and verified before the upgrade.
This step upgrades the data plane to v1.1.32 and introduces bidirectional communication between Brainstore and API pods. Brainstore now needs to reach the API pods — the chart auto-sets BRAINSTORE_AI_PROXY_URL to http://braintrust-api:8000.
If your cluster has network policies or security rules restricting traffic between pods, allow Brainstore pods to reach the API service on port 8000 before upgrading.
This step enables fast readers — isolated Brainstore nodes that handle common UI queries. Fast readers are enabled by default with 2 replicas and use the same node spec as standard readers, increasing your cluster node count by 2. You can upgrade directly to v5.0.1 from any v4.x version.
Before upgrading, account for 2 additional fast reader nodes in your cluster capacity. If you have customized brainstore.reader settings in values.yaml, mirror those customizations to the new brainstore.fastreader block. See Configure Brainstore fast readers for details.
This must be a separate helm upgrade after confirming all pods are running v1.1.32. Setting this during the same upgrade as the version bump risks Brainstore nodes still rolling out being unable to read the new WAL format.
Set brainstoreWalFooterVersion in your helm-values.yaml:
On chart v5.1.0+, pods will automatically restart after applying the upgrade.Once the pods have cycled, go to Settings > Data plane and check the WAL footer version (BRAINSTORE_WAL_FOOTER_VERSION) row. On v1.1.32, it will show “Unable to verify setting. Please upgrade to configure.” This is expected. The setting is active; Brainstore v1.1.32 does not report it back to the control plane. It will show correctly after upgrading to v2.0.
This step is strongly recommended but not mechanically enforced. Deployments running mixed WAL formats become increasingly difficult to tune at scale.
On v1.1.32, items like WAL footer version, response cache URI, and code bundle URI are not displayed. They appear only after upgrading to v2.0. The HTTP/2 check may show a warning on v1.1.32. This resolves after upgrading.
If any of the first ten rows are not green, resolve them before proceeding. Contact Braintrust support if you need help.
No-PostgreSQL mode removes PostgreSQL from the Brainstore write path, delivering higher ingestion throughput and unlocking Topics. This step is a prerequisite for Topics but does not enable them.
The switch to no-PostgreSQL mode is one-way: Once Brainstore is writing data directly, rolling back requires downtime to drain and re-ingest. Enable it only when you are ready to commit.
Set skipPgForBrainstoreObjects in your helm-values.yaml:
WAL footer version (requires explicit configuration)
No-PostgreSQL mode (opt-in, post-upgrade)
Variable
How to set
Since
Pods
SKIP_PG_FOR_BRAINSTORE_OBJECTS
Set skipPgForBrainstoreObjects in helm-values.yaml
v5.1.0
API
BRAINSTORE_ASYNC_SCORING_OBJECTS
Auto-derived from skipPgForBrainstoreObjects
v5.1.0
reader, writer, fastreader
BRAINSTORE_LOG_AUTOMATIONS_OBJECTS
Auto-derived from skipPgForBrainstoreObjects
v5.1.0
reader, writer, fastreader
Setting skipPgForBrainstoreObjects: "all" is a prerequisite for enabling Topics. The chart automatically fans this value out to BRAINSTORE_ASYNC_SCORING_OBJECTS and BRAINSTORE_LOG_AUTOMATIONS_OBJECTS.