Skip to main content
Data plane v2.0 provides many new features, including trace-level scorers, topics for automated log insights, and sandboxes for agent evals.
This guide shows the process for upgrading the Braintrust data plane to v2.0 in your AWS account.

1. Prepare for v2.0

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.

Upgrade Terraform module

The goal of this step is to reach v4.5.0. Check your current module version in main.tf:
module "braintrust-data-plane" {
  source = "github.com/braintrustdata/terraform-aws-braintrust-data-plane?ref=v..." # your current version
}
Then follow the path for your starting point:
Starting versionSub-steps to follow
TF module < v3.0.01 → 2 → 3
TF module v3.x2 → 3
TF module v4.x (not v4.5.0)3 only
TF module v4.5.0Skip to Enable efficient WAL format
1

Upgrade to Terraform module v3.1.3

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
}
terraform apply

Enable efficient WAL format

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:
module "braintrust-data-plane" {
  source = "github.com/braintrustdata/terraform-aws-braintrust-data-plane?ref=v4.5.0"

  brainstore_wal_footer_version = "v1"

  # ... other configuration
}
terraform 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.

Run the preflight check

Go to Settings > Data plane. Verify the following expected statuses before proceeding:
SettingExpected status
LicenseConfigured
TelemetryConfigured
Data plane service tokenConfigured
Brainstore default mode (BRAINSTORE_DEFAULT)Configured
Insert logs (INSERT_LOGS2)Configured
Insert row references (BRAINSTORE_INSERT_ROW_REFS)Configured
Realtime WAL (BRAINSTORE_REALTIME_WAL_BUCKET)Configured
Ephemeral WAL (BRAINSTORE_XACT_MANAGER_URI)Configured
Proxy URL (BRAINSTORE_AI_PROXY_URL)Configured
Redis (BRAINSTORE_REDIS_URI)Configured
Brainstore direct writes”Upgrade to configure Brainstore direct writes”
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.

2. Upgrade to v2.0

With preflight complete, upgrade to Terraform module v5.0.0, which ships data plane v2.0 images. The WAL footer also bumps to v3 in the same apply.

Apply the upgrade

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.
module "braintrust-data-plane" {
  source = "github.com/braintrustdata/terraform-aws-braintrust-data-plane?ref=v5.0.0"

  brainstore_wal_footer_version = "v3"

  # ... other configuration
}
terraform apply

Verify settings

Go to Settings > Data plane and verify the following are all green:
SettingExpected status
LicenseConfigured
TelemetryConfigured
Data plane service tokenConfigured
Brainstore default mode (BRAINSTORE_DEFAULT)Configured
Insert logs (INSERT_LOGS2)Configured
Insert row references (BRAINSTORE_INSERT_ROW_REFS)Configured
Realtime WAL (BRAINSTORE_REALTIME_WAL_BUCKET)Configured
Ephemeral WAL (BRAINSTORE_XACT_MANAGER_URI)Configured
Proxy URL (BRAINSTORE_AI_PROXY_URL)Configured
Redis (BRAINSTORE_REDIS_URI)Configured
WAL footer version (BRAINSTORE_WAL_FOOTER_VERSION)v3
Response cache URI (BRAINSTORE_RESPONSE_CACHE_URI)Configured
Code bundle URI (BRAINSTORE_CODE_BUNDLE_URI)Configured
HTTP/2Data plane is using HTTP/2 or higher
Brainstore direct writes will show “Upgrade to configure Brainstore direct writes.” This is enabled in the next step.

Enable no-PostgreSQL mode

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":
module "braintrust-data-plane" {
  source = "github.com/braintrustdata/terraform-aws-braintrust-data-plane?ref=v5.1.0"

  brainstore_wal_footer_version  = "v3"
  skip_pg_for_brainstore_objects = "all"

  # ... other configuration
}
terraform apply
Validate that reads, writes, scoring, and automations all function normally.

Enable Topics

Go to the Braintrust UI to enable Topics per-project.

Configuration reference

VariableSourceSince
SERVICE_TOKEN_SECRET_KEYAuto-generated 32-character key in Secrets Managerv3.0.0
BRAINSTORE_REDIS_URIElastiCache endpoint and portv3.1.0
BRAINSTORE_DEFAULTHardcoded "force"v3.0.0
INSERT_LOGS2Hardcoded "true"v3.0.0
BRAINSTORE_INSERT_ROW_REFSHardcoded "true"v3.0.0
BRAINSTORE_REALTIME_WAL_BUCKETAuto-created S3 bucketv3.0.0
BRAINSTORE_AI_PROXY_URLFetched from SSM at bootv4.0.3
BRAINSTORE_XACT_MANAGER_URISame ElastiCache endpoint as Redisv4.4.0
BRAINSTORE_RESPONSE_CACHE_URIModule-created S3 bucket (at /brainstore-cache prefix)v4.4.0
BRAINSTORE_CODE_BUNDLE_URIModule-created S3 bucketv4.4.0
VariableHow to setSince
SKIP_PG_FOR_BRAINSTORE_OBJECTSSet skip_pg_for_brainstore_objects in modulev4.5.0
BRAINSTORE_ASYNC_SCORING_OBJECTSAuto-derived from skip_pg_for_brainstore_objectsv4.5.0
BRAINSTORE_LOG_AUTOMATIONS_OBJECTSAuto-derived from skip_pg_for_brainstore_objectsv4.5.0
BRAINSTORE_WAL_USE_EFFICIENT_FORMATAuto-enabled when either brainstore_wal_footer_version or skip_pg_for_brainstore_objects is setv4.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.

Next steps