> ## Documentation Index
> Fetch the complete documentation index at: https://braintrust.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Self-hosting releases

> Release notes and infrastructure requirements for self-hosted Braintrust deployments

This page lists releases for [self-hosted Braintrust](/admin/self-hosting) deployments. When [upgrading the data plane](/admin/self-hosting/upgrade/routine), check the entry for your target version to find the minimum Terraform or Helm version required.

The latest data plane version is **v2.5.0**. The latest recommended infrastructure versions for each cloud are:

|           | Terraform module                                                                                       | Helm chart                                                         |
| --------- | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------ |
| **AWS**   | [v5.8.1](https://github.com/braintrustdata/terraform-aws-braintrust-data-plane/releases/tag/v5.8.1)    | —                                                                  |
| **GCP**   | [v1.5.5](https://github.com/braintrustdata/terraform-google-braintrust-data-plane/releases/tag/v1.5.5) | [6.7.1](https://github.com/braintrustdata/helm/releases/tag/6.7.1) |
| **Azure** | [v1.1.0](https://github.com/braintrustdata/terraform-azure-braintrust-data-plane/releases/tag/v1.1.0)  | [6.7.1](https://github.com/braintrustdata/helm/releases/tag/6.7.1) |

<Note>
  If you use [BYOC](/admin/deployment/byoc), Braintrust manages data plane upgrades for you, so you don't need to act on these releases.
</Note>

<Update label="June 2026">
  ### Data plane v2.5.0

  **Requires:** [Terraform v5.8.0+](https://github.com/braintrustdata/terraform-aws-braintrust-data-plane/releases/tag/v5.8.0) (AWS), [Helm chart 6.7.0+](https://github.com/braintrustdata/helm/releases/tag/6.7.0) (GCP/Azure)

  v2.5.0 is the latest recommended data plane version. It bundles updated Braintrust Services and Brainstore images. Highlights:

  * [Online scoring](/evaluate/score-online) reliability improvements, including batch-level retries on transient HTTP failures, gentler automation retry backoff, and handling for malformed or empty scoring batches.
  * [SQL `UNPIVOT`](/reference/sql#unpivot) now works within subqueries, supporting analytics queries that denormalize array or object fields before aggregation.
  * Brainstore reliability and performance improvements, including connection pool improvements and a fix for `GROUP BY` queries over Parquet data.
  * AWS ECS autoscaling now scales on event loop utilization instead of connection count.

  ### Data plane v2.4.0

  **Requires:** [Terraform v5.7.0+](https://github.com/braintrustdata/terraform-aws-braintrust-data-plane/releases/tag/v5.7.0) (AWS), [Helm chart 6.5.0+](https://github.com/braintrustdata/helm/releases/tag/6.5.0) (GCP/Azure)

  v2.4.0 bundles the latest Braintrust Services and Brainstore images. Highlights:

  * [Custom columns](/observe/view-logs#create-custom-columns) now accept full SQL expressions.
  * [Online scoring](/evaluate/score-online) reliability improvements, including partial-failure handling and retries for failed scoring functions.
  * Outbound requests and OTLP telemetry exporters now honor standard `HTTP_PROXY`, `HTTPS_PROXY`, and `NO_PROXY` settings.
  * Brainstore reliability and performance improvements.

  ### Data plane v2.3.0

  **Requires:** [Terraform v5.6.0+](https://github.com/braintrustdata/terraform-aws-braintrust-data-plane/releases/tag/v5.6.0) (AWS), [Helm chart 6.4.0+](https://github.com/braintrustdata/helm/releases/tag/6.4.0) (GCP/Azure)

  v2.3.0 is the latest recommended data plane version. Highlights:

  * [Rewind online scoring automations](/evaluate/score-online#rewind-an-automation): re-process traces from a chosen timestamp after updating a scorer or correcting scoring results. Trace-scoped automations only.
  * [`{{thread_with_system}}`](/evaluate/llm-as-a-judge#score-traces) reserved variable for trace-level scorers and prompts, rendering the full conversation including system messages.
  * Gateway improvements, including provider failover through the `x-bt-accepted-providers` header and forwarding of Anthropic `/v1/models` requests.
  * Brainstore reliability improvements, including a fix for an mmap cache race that could overwrite cached chunks mid-read.

  ### Data plane v2.2.1

  **Requires:** [Terraform v5.5.0+](https://github.com/braintrustdata/terraform-aws-braintrust-data-plane/releases/tag/v5.5.0) (AWS), [Helm chart 6.3.0+](https://github.com/braintrustdata/helm/releases/tag/6.3.0) (GCP/Azure)

  v2.2.1 is the first self-hosted release of the v2.2.x line. It includes the full v2.2.0 feature set. Highlights:

  * [Shingled search optimization](/admin/projects#speed-up-log-filtering): Brainstore indexes multi-word shingles in bloom filters so phrase and multi-word `search()` queries eliminate more log segments before scanning.
  * SQL [`IF` and `COUNT_IF`](/reference/sql#conditional-expressions) conditional expressions, the [`SETTINGS`](/reference/sql#settings) clause for per-query options, and `date_trunc` interval multiples.
  * [Bedrock OpenAI format](/integrations/ai-providers/bedrock#connect-bedrock-to-braintrust) routing through the gateway, and automatic extraction of inline base64 payloads in Bedrock Converse content blocks into [attachments](/instrument/attachments) at ingest.
  * [Topics for sessions and multi-turn conversations](/observe/topics/manage#group-traces-into-conversations), and [pause and resume](/observe/topics/manage#pause-resume-automation) for the Topics automation.
  * [Dataset filters for experiments](/evaluate/run-evaluations#create-from-scratch): a filtered dataset view carries over when you create an experiment.
  * [Secret previews and rotation tracking](/admin/organizations#set-environment-variables) on the `/v1/env_var` and `/v1/ai_secret` APIs.
  * Explicit [Monitor](/observe/dashboards) chart time bucketing (Auto, week, day, or hour), backed by data-plane `date_trunc` intervals.
  * Opt-in [git diff logging](/admin/organizations#set-git-metadata-logging): the server strips the `git_diff` field from logged repo info unless your organization enables it.
  * Webhook alert URL validation, including `http`/`https` enforcement and SSRF protection that blocks delivery to private or reserved network addresses. See [Webhook payloads](/admin/automations/alerts#webhook-payloads).
  * Server-side query retention enforcement.
  * Brainstore performance improvements, including batched columnar regex queries and ephemeral WAL prewarmer optimizations.

  ### Data plane v2.2.0

  *Not released standalone for self-hosting. Both the AWS Terraform module and the Helm chart went from v2.1.1 directly to v2.2.1, so the v2.2.0 feature set reaches self-hosted deployments through v2.2.1 (above).*

  ### Terraform AWS module releases

  * **[v5.8.1](https://github.com/braintrustdata/terraform-aws-braintrust-data-plane/releases/tag/v5.8.1)** — *No data plane version change.* Adds `allowed_org_ids` to restrict the deployment to a specific set of Braintrust organization IDs, and URL-security controls (`unsafe_url_request_mode`, `url_security_dns_servers`, `url_security_allow_cidrs`) to configure how the API validates and handles outbound requests to user-supplied URLs. Also adds the `/automation/cron/{id}/reschedule` route to the API Gateway allowlist, enabling the cron automation reschedule endpoint for self-hosted deployments. See [Configure organization authorization](/admin/self-hosting/advanced#configure-organization-authorization) and [Configure URL security](/admin/self-hosting/advanced#configure-url-security).
  * **[v5.8.0](https://github.com/braintrustdata/terraform-aws-braintrust-data-plane/releases/tag/v5.8.0)** — *Ships data plane v2.5.0 image tags.* Updates the Braintrust Services and API ECS images to v2.5.0, and grants the API handler role permission to publish custom CloudWatch metrics to the `Braintrust/Api` namespace. No action required.
  * **[v5.7.0](https://github.com/braintrustdata/terraform-aws-braintrust-data-plane/releases/tag/v5.7.0)** — *Ships data plane v2.4.0 image tags.* Updates the Braintrust Services and API ECS images to v2.4.0. For managed BYOC deployments, also adds an `ExternalId` to the management-role trust policy. Self-hosted operators require no action for this change.
  * **[v5.6.0](https://github.com/braintrustdata/terraform-aws-braintrust-data-plane/releases/tag/v5.6.0)** — *Ships data plane v2.3.0 image tags.* Updates the Braintrust Services and API ECS images to v2.3.0. Raises the `hashicorp/http` provider floor to `~> 3.3`. If your `.terraform.lock.hcl` pins an older 3.x version, run `terraform init -upgrade` before applying. Adds retry and timeout handling (5 attempts, 10s per request) to the Lambda version metadata lookup during `terraform plan` and `terraform apply`, improving resilience to transient network errors.
  * **[v5.5.0](https://github.com/braintrustdata/terraform-aws-braintrust-data-plane/releases/tag/v5.5.0)** — *No data plane version change.* The default Redis instance type changes from `cache.t4g.medium` to `cache.r7g.large`, and Brainstore fast readers are now enabled by default (`brainstore_fast_reader_instance_count = 2`). If you don't pin `redis_instance_type`, upgrading replaces the ElastiCache cluster, and deployments without an explicit fast-reader count provision two additional EC2 nodes. Set `brainstore_fast_reader_instance_count = 0` to opt out (recommended for sandbox or non-production deployments). Also adds per-bucket S3 CORS variables (`s3_code_bundle_additional_allowed_origins`, `s3_lambda_responses_additional_allowed_origins`).
  * **[v5.3.0](https://github.com/braintrustdata/terraform-aws-braintrust-data-plane/releases/tag/v5.3.0)** — *No data plane version change.* Adds `sa-east-1` (São Paulo) to the supported regions. Adds optional [S3 attribute-based access control](/admin/self-hosting/advanced#enable-s3-attribute-based-access-control) (`enable_s3_bucket_abac`) and a configurable [CloudFront origin read timeout](/admin/self-hosting/advanced#configure-cloudfront-origin-timeout) (`cloudfront_origin_read_timeout`, default 60s, max 180s) for long-running function invocations. Tightens the AWS provider constraint to `>= 6.23.0, < 7.0.0`.

  ### Terraform GCP module releases

  * **[v1.5.5](https://github.com/braintrustdata/terraform-google-braintrust-data-plane/releases/tag/v1.5.5)** — *No data plane version change.* The managed BYOC bootstrap (`setup.sh`) now initializes the Cloud Storage service agent before creating service accounts, fixing intermittent first-run failures when provisioning CMEK-backed GCS buckets in new GCP projects. No action required for self-hosted operators.
  * **[v1.5.4](https://github.com/braintrustdata/terraform-google-braintrust-data-plane/releases/tag/v1.5.4)** — *No data plane version change.* Adds pre-built connection URL outputs (`pg_url`, `redis_url`) and app-root contract outputs (`project_id`, `region`, `deployment_name`, `labels`, `namespace`, `gke_cluster_name`, `gke_cluster_endpoint`, `gke_cluster_master_version`). The `postgres_password` and `redis_auth_string` outputs are now marked sensitive, so they are redacted in plan and apply output. Use `terraform output -json` to retrieve them. Cloud SQL and Memorystore Redis now explicitly wait for Private Service Access peering, fixing a race condition that could cause intermittent first-deploy failures.
  * **[v1.5.3](https://github.com/braintrustdata/terraform-google-braintrust-data-plane/releases/tag/v1.5.3)** — *No data plane version change.* Adds optional networking variables for the GCP module. Use `private_service_access_prefix_length` and `private_service_access_address` to control the Cloud SQL and Memorystore peering range, and `gke_pods_ipv4_cidr_block`, `gke_pods_secondary_range_name`, `gke_services_ipv4_cidr_block`, and `gke_services_secondary_range_name` to control GKE Pod and Service IP ranges. All preserve existing defaults. Set these before your first deployment, since changing them later can require rebuilding dependent resources. See [Private Service Access range](/admin/self-hosting/deploy#private-service-access-range) and [GKE Pod and Service IP ranges](/admin/self-hosting/deploy#gke-pod-and-service-ip-ranges).

  ### Helm chart releases

  * **[6.7.1](https://github.com/braintrustdata/helm/releases/tag/6.7.1)** — *GCP/Azure only. No data plane version change.* Exposes backend URL security and org authorization settings as dedicated Helm values. [Configure URL security](/admin/self-hosting/advanced#configure-url-security) covers `api.unsafeUrlRequestMode`, `api.urlSecurityDnsServers`, and `api.urlSecurityAllowCidrs`, which control how outbound requests to user-supplied URLs are validated (applies to both the API and AI Gateway). [Configure organization authorization](/admin/self-hosting/advanced#configure-organization-authorization) covers `global.primaryOrgName` and `global.allowedOrgIds`. Deployments with `global.orgName` set to `""` or `"*"` must set `global.primaryOrgName` before upgrading.
  * **[6.7.0](https://github.com/braintrustdata/helm/releases/tag/6.7.0)** — *GCP/Azure only. Ships data plane v2.5.0 image tags.* Updates the `standalone-api` and `brainstore` images to `v2.5.0`.
  * **[6.6.0](https://github.com/braintrustdata/helm/releases/tag/6.6.0)** — *GCP/Azure only. No data plane version change.* The `standalone-api` and `brainstore` images are unchanged from 6.5.0 (`v2.4.0`).
  * **[6.5.0](https://github.com/braintrustdata/helm/releases/tag/6.5.0)** — *GCP/Azure only. Ships data plane v2.4.0 image tags.* Updates the `standalone-api` and `brainstore` images to `v2.4.0`.
  * **[6.4.0](https://github.com/braintrustdata/helm/releases/tag/6.4.0)** — *GCP/Azure only. Ships data plane v2.3.0 image tags.* Updates the `standalone-api` and `brainstore` images to `v2.3.0`.
  * **[6.3.0](https://github.com/braintrustdata/helm/releases/tag/6.3.0)** — *GCP/Azure only. No data plane version change.* Updates the `standalone-api` and `brainstore` images to `v2.2.1`.
</Update>

<Update label="May 2026">
  ### Data plane v2.1.1

  **Requires:** [Terraform v5.2.1+](https://github.com/braintrustdata/terraform-aws-braintrust-data-plane/releases/tag/v5.2.1) (AWS), [Helm chart 6.2.1+](https://github.com/braintrustdata/helm/releases/tag/6.2.1) (GCP/Azure)

  v2.1.1 is the recommended patch target for self-hosted data plane v2.x upgrades. It includes the v2.1.0 feature set and the latest service fixes for the v2.1.x line.

  ### Data plane v2.1.0

  **Requires:** [Terraform v5.2.0+](https://github.com/braintrustdata/terraform-aws-braintrust-data-plane/releases/tag/v5.2.0) (AWS), [Helm chart 6.2.0+](https://github.com/braintrustdata/helm/releases/tag/6.2.0) (GCP/Azure)

  v2.1.0 focuses on Brainstore query performance, export workflows, and API runtime improvements, including:

  * [Cloud storage export](/changelog#cloud-storage-export) support for start-from and rewind controls, Hive-partitioned file layouts, and Google Cloud Storage export
  * [Log indexing and full-text search](/changelog#log-indexing-and-full-text-search), including bloom filter acceleration for custom fields and subfield indexes
  * SQL and BTQL improvements, including `SAMPLE`, subqueries, `(NOT) IN`, null-safe equality, and estimated cost breakdown support
  * Brainstore query planner and execution improvements, including more columnstore usage, faster span-shape queries, better segment elimination, and reduced unnecessary stats fetching
  * Brainstore processing improvements for compaction, WAL retention, topic map execution, export file sizing, and query cancellation
  * API runtime improvements, including Node.js 24 images, DNS caching, and additional performance optimizations

  ### Terraform AWS module releases

  * **[v5.2.1](https://github.com/braintrustdata/terraform-aws-braintrust-data-plane/releases/tag/v5.2.1)** — *Ships data plane v2.1.1 image tags.* Required for the [data plane v2.1.1 upgrade](/admin/self-hosting/upgrade/v2).
    * When `brainstore_enable_export = true`, the module now sets `BRAINSTORE_EXPORT_MIGRATION_ENABLED` on the Automation Cron Lambda in addition to the API Handler Lambda. No configuration changes are required.
  * **[v5.2.0](https://github.com/braintrustdata/terraform-aws-braintrust-data-plane/releases/tag/v5.2.0)** — *Ships data plane v2.1.0 image tags.* Required for the [data plane v2.1.0 upgrade](/admin/self-hosting/upgrade/v2).
    * Added `brainstore_enable_export` variable (default: `false`). Set to `true` to enable Brainstore-backed [cloud storage export](/admin/automations/export-to-cloud-storage), required for v2.1.0 export features (rewind, start-from date). Sets `BRAINSTORE_EXPORT_MIGRATION_ENABLED` on the API Handler Lambda and `BRAINSTORE_EXPORT_SEGMENT_AUTOMATION_CURSORS_ENABLED` on Brainstore EC2 nodes.

  ### Helm chart releases

  * **[v6.2.2](https://github.com/braintrustdata/helm/releases/tag/6.2.2)** — *GCP/Azure only. No data plane version change.* Adds [pod security contexts and storage limits](/admin/self-hosting/advanced#pod-security-contexts-and-storage-limits) for GKE Autopilot and other hardened clusters: pod- and container-level security contexts for the API and all Brainstore roles, explicit `ephemeralStorage` requests and limits, `emptyDir` size limits, and writable `/tmp` volumes for read-only root filesystems.
  * **[v6.2.1](https://github.com/braintrustdata/helm/releases/tag/6.2.1)** — *GCP/Azure only. Ships data plane v2.1.1 image tags.* Required for the [data plane v2.1.1 upgrade](/admin/self-hosting/upgrade/v2).
    * **Breaking change:** `api.allowCodeFunctionExecution` now defaults to `false`. On single-org deployments, set `api.allowCodeFunctionExecution: true` if your deployment relies on code-backed scorers, tools, or functions.

  <Warning>
    If your deployment uses `ORG_NAME=*` or hosts multiple Braintrust organizations, [contact Braintrust](mailto:support@braintrust.dev) before enabling code function execution.
  </Warning>

  * **[v6.2.0](https://github.com/braintrustdata/helm/releases/tag/6.2.0)** — *GCP/Azure only. Ships data plane v2.1.0 image tags.* Required for the [data plane v2.1.0 upgrade](/admin/self-hosting/upgrade/v2).
</Update>

<Update label="April 2026">
  ### Data plane v2.0.0

  **Requires:** [Terraform v5.0.0+](https://github.com/braintrustdata/terraform-aws-braintrust-data-plane/releases/tag/v5.0.0) (AWS), [Helm chart 6.0.0+](https://github.com/braintrustdata/helm/releases/tag/6.0.0) (GCP/Azure)

  v2.0.0 includes many new features, including:

  * [Sandboxes for agent evals](/changelog#sandboxes-for-agent-evals)
  * [Evaluation parameters](/changelog#evaluation-parameters)
  * [Trace-level scorers](/changelog#trace-level-scorers)
  * [Trace-level filters in charts](/changelog#trace-level-filters-in-charts)
  * [`estimated_cost()` SQL function](changelog#estimated_cost-sql-function)
  * [Image rendering security controls](/changelog#image-rendering-security-controls)
  * [Single span filters with aggregations](/changelog#single-span-filters-with-aggregations)
  * [LIMIT with aggregations](/changelog#limit-with-aggregations)
  * Configurable [GCS retry behavior](/admin/self-hosting/deploy#tune-gcs-retry-behavior-optional) for self-hosted GCP deployments using native GCS authentication

  See [Upgrade to data plane v2.x](/admin/self-hosting/upgrade/v2) for the full upgrade guide.

  ### Terraform AWS module releases

  * **[v5.1.0](https://github.com/braintrustdata/terraform-aws-braintrust-data-plane/releases/tag/v5.1.0)** — *No data plane version change.* Required for the [no-PostgreSQL mode step](/admin/self-hosting/upgrade/v2#enable-no-postgresql-mode-aws) of the v2.0 upgrade.
    * `skip_pg_for_brainstore_objects` now defaults to `"all"`. Existing deployments upgrading from any v4.x or v5.0.0 module version will have no-PostgreSQL mode activated automatically unless this variable is explicitly overridden. This change is one-way. Rolling back requires downtime. Pin `skip_pg_for_brainstore_objects = ""` before applying if you are not ready to enable this.
    * Production example cleaned up: explicit `skip_pg_for_brainstore_objects = ""` block removed, reflecting the new default.
  * **[v5.0.0](https://github.com/braintrustdata/terraform-aws-braintrust-data-plane/releases/tag/v5.0.0)** — *Ships data plane v2.0.0 image tags.* Required for the [data plane v2.0 upgrade](/admin/self-hosting/upgrade/v2).
    * `brainstore_wal_footer_version` now defaults to `"v3"`. Existing deployments upgrading from v4.x must ensure all Brainstore nodes are running data plane v2.0 before applying, or must explicitly set `brainstore_wal_footer_version = ""` to preserve prior behavior. Applying WAL v3 while any node is still on a v1.x image causes read failures.
    * Sandbox example updated: `skip_pg_for_brainstore_objects` defaults to `"all"` in the sandbox config; explicit `brainstore_wal_footer_version` pin removed.
  * **[v4.5.0](https://github.com/braintrustdata/terraform-aws-braintrust-data-plane/releases/tag/v4.5.0)** — *No data plane version change.*
    * Added `skip_pg_for_brainstore_objects` variable to enable no-PostgreSQL mode. Setting any non-empty value automatically fans out to `BRAINSTORE_ASYNC_SCORING_OBJECTS` and `BRAINSTORE_LOG_AUTOMATIONS_OBJECTS` on Brainstore EC2 nodes. Required before enabling Topics.
    * `BRAINSTORE_WAL_USE_EFFICIENT_FORMAT` is now automatically enabled when either `brainstore_wal_footer_version` or `skip_pg_for_brainstore_objects` is set.
    * When `kms_key_arn` is configured, all managed S3 buckets now enforce `blocked_encryption_types = ["NONE"]`, preventing unencrypted uploads. This appears as a policy addition in `terraform plan` when upgrading.
    * Added `x-bt-use-gateway` to the AI Proxy Lambda function URL CORS allowed headers, enabling browser clients to send this header without a preflight rejection.
    * Added API Gateway routes for Topics API, storage-settings endpoints (`/brainstore/storage-settings/object/{object_id}`, `.../backfill`, `.../status`), and additional automation endpoints (`/brainstore/automation/get-object-cursors`, `.../execute`, `.../upsert-object-cursor`). Self-hosted deployments must upgrade to v4.5.0 to use these features — routes absent from the API Gateway spec return 403, which browsers report as a CORS error.

  ### Terraform GCP module releases

  * **[v1.5.2](https://github.com/braintrustdata/terraform-google-braintrust-data-plane/releases/tag/v1.5.2)** — *No data plane version change.*
    * Added `custom_labels` variable (`map(string)`, default `{}`) to apply user-defined GCP labels to all supported resources (Cloud SQL, Memorystore Redis, Cloud Storage buckets, GKE cluster, KMS key). Labels are merged with the built-in `braintrustdeploymentname` label. Keys must start with a lowercase letter and contain only lowercase letters, numbers, underscores, or dashes (max 63 characters). Values follow the same character rules but do not require a leading letter and may be empty (max 63 characters). Maximum 63 custom labels. See [Tag resources with custom labels](/admin/self-hosting/deploy#tag-resources-with-custom-labels-gcp) for usage.
    * Clarified `brainstore_impersonation_targets` variable description: the variable is only needed when IAM access to the Brainstore service account is not managed outside Terraform, and the Terraform executor requires `roles/iam.serviceAccountAdmin` or `roles/resourcemanager.projectIamAdmin` on each target service account.
  * **[v1.5.1](https://github.com/braintrustdata/terraform-google-braintrust-data-plane/releases/tag/v1.5.1)** — *No data plane version change.*
    * The API GCS bucket now includes a 1-day object lifecycle rule on the `brainstore-cache/` prefix. Brainstore writes ephemeral cache data here during query execution; objects are automatically deleted after 1 day. No action is required on upgrade.
    * Storage paths in the API bucket are `code-bundle/` and `brainstore-cache/`. The previously documented `response/` path has been replaced by `brainstore-cache/`.
  * **[v1.5.0](https://github.com/braintrustdata/terraform-google-braintrust-data-plane/releases/tag/v1.5.0)** — *No data plane version change. Required before upgrading to data plane v2.0.*
    * The Workload Identity binding now covers both the `brainstore` and `braintrust-api` Kubernetes service accounts, enabling API pods to access GCS directly. Required for data plane v2.0. Note: `google_service_account_iam_binding` is authoritative — any IAM members added manually outside Terraform for `roles/iam.workloadIdentityUser` on this service account will be removed on the next `terraform apply`.
    * SQL users now set `deletion_policy = "ABANDON"` when `postgres_deletion_protection = false`, preventing Terraform errors on destroy in environments where Cloud SQL user deletion is not supported.
  * **[v1.4.0](https://github.com/braintrustdata/terraform-google-braintrust-data-plane/releases/tag/v1.4.0)** — *No data plane version change.*
    * Added `brainstore_impersonation_targets` variable to grant the Brainstore Kubernetes service account the ability to impersonate one or more Google Cloud service accounts (same or cross-project). Useful for Brainstore deployments that need to access GCS buckets or other GCP resources restricted to a specific service account identity. See [Service account impersonation](/admin/self-hosting/deploy#service-account-impersonation) for configuration details.

  ### Terraform Azure module releases

  * **[v1.1.0](https://github.com/braintrustdata/terraform-azure-braintrust-data-plane/releases/tag/v1.1.0)** — *No data plane version change. Required before upgrading to data plane v2.0.*
    * Added `existing_resource_group_name` variable to deploy into a pre-existing Azure Resource Group rather than having the module create one. **Includes a state migration (`moved.tf`) for users upgrading from v1.0.0** — the resource group Terraform address changed from `azurerm_resource_group.main` to `azurerm_resource_group.main[0]`. Confirm your plan shows the resource as moved, not destroyed.
    * Added `custom_tags` variable to apply user-defined tags to all provisioned resources. All resources also receive an automatic `BraintrustDeploymentName` tag.
    * Added `aks_brainstore_pool_min_count` and `aks_services_pool_min_count` variables (default: 2) to configure AKS autoscaler minimum node counts. Previously hardcoded to 2.
    * Added `helm_object_storage_values` output that returns all Azure object storage configuration values in the shape expected by the Braintrust Helm chart.

  ### Helm chart releases

  * **[v6.1.0](https://github.com/braintrustdata/helm/releases/tag/6.1.0)** — *GCP/Azure only. No data plane version change.* Required for the [no-PostgreSQL mode step](/admin/self-hosting/upgrade/v2) of the v2.0 upgrade.
    * `skipPgForBrainstoreObjects` now defaults to `"all"`. Existing deployments upgrading from chart 6.0.0 without an explicit override will have no-PostgreSQL mode activated automatically. This change is one-way. Rolling back requires downtime. Set `skipPgForBrainstoreObjects: ""` in `helm-values.yaml` before upgrading if you are not ready to enable this.
    * `brainstoreWalFooterVersion` now defaults to `"v3"`. Deployments still running Data Plane 1.x images must pin this to `"v1"` or `""` before upgrading.
  * **[v6.0.0](https://github.com/braintrustdata/helm/releases/tag/6.0.0)** — *GCP/Azure only. Ships data plane v2.0.0 image tags.* Required for the [data plane v2.0 upgrade](/admin/self-hosting/upgrade/v2).
  * **[v5.1.0](https://github.com/braintrustdata/helm/releases/tag/5.1.0)** — *GCP/Azure only. No data plane version change.*
    * Added `brainstoreWalFooterVersion` chart value to configure the Brainstore WAL footer format. Defaults to `""` (unset). Set to `"v1"` as part of the [v2.0 upgrade sequence](/admin/self-hosting/upgrade/v2#enable-efficient-wal-format-gcp). Do not set to `"v3"` until after successfully deploying data plane v2.0.
    * Added `skipPgForBrainstoreObjects` chart value to enable no-PostgreSQL mode. Setting any non-empty value automatically fans out to `BRAINSTORE_ASYNC_SCORING_OBJECTS` and `BRAINSTORE_LOG_AUTOMATIONS_OBJECTS` on reader, writer, and fastreader pods. Required before enabling Topics.
    * `BRAINSTORE_WAL_USE_EFFICIENT_FORMAT` is now automatically enabled on the API pod when either `brainstoreWalFooterVersion` or `skipPgForBrainstoreObjects` is set.
    * `BRAINSTORE_RESPONSE_CACHE_URI` and `BRAINSTORE_CODE_BUNDLE_URI` are now auto-derived from the `objectStorage` configuration in `values.yaml`. No explicit configuration required. If you previously set these via `extraEnvVars`, remove those overrides to avoid conflicts.
    * ConfigMap checksum annotations added to all deployments (API, reader, writer, fastreader). Pods now automatically restart when their ConfigMap changes, so configuration-only Helm upgrades no longer require a manual `kubectl rollout restart`.
</Update>

<Update label="March 2026">
  ### Terraform AWS module releases

  * **[v4.4.0](https://github.com/braintrustdata/terraform-aws-braintrust-data-plane/releases/tag/v4.4.0)** — *No data plane version change.*
    * Added `brainstore_wal_footer_version` variable to control the Brainstore WAL footer format. Defaults to `""` (unset). Set to `"v1"` as part of the [v2.0 upgrade sequence](/admin/self-hosting/upgrade/v2#enable-efficient-wal-format-aws). Do not set to `"v3"` until after successfully deploying data plane v2.0.
    * Added `api_handler_memory_limit` and `ai_proxy_memory_limit` variables to configure Lambda memory allocation for the API Handler and AI Proxy. Both default to 10240 MB (no change from previous behavior).
    * Brainstore now validates instance type local NVMe storage at `terraform plan` time. Instance types without local storage produce a descriptive plan-time error. Compatible families: `c8gd`, `c5d`, `m5d`, `i3`, `i4i`.
    * Added `POST /v1/{object_type}/{id}/restore` and `POST /v1/{object_type}/{id}/restore/preview` API Gateway routes. Self-hosted deployments must upgrade to v4.4.0 to use object restore features.
    * Added sandbox deployment example ([`examples/braintrust-data-plane-sandbox`](https://github.com/braintrustdata/terraform-aws-braintrust-data-plane/tree/main/examples/braintrust-data-plane-sandbox)) for low-cost infrastructure testing with easy teardown.
  * **[v4.3.0](https://github.com/braintrustdata/terraform-aws-braintrust-data-plane/releases/tag/v4.3.0)** — *No data plane version change.*
    * Lambda environment variables for `automation_cron` and `billing_cron` are now encrypted at rest using the deployment KMS key. Applied automatically on `terraform apply`; no configuration changes required.
    * The managed VPC's public subnet no longer auto-assigns public IPv4 addresses on instance launch (`map_public_ip_on_launch = false`). Workloads that previously relied on auto-assigned public IPs in this subnet should migrate to Elastic IPs.
  * **[v4.2.0](https://github.com/braintrustdata/terraform-aws-braintrust-data-plane/releases/tag/v4.2.0)** — *No data plane version change.*
    * All three S3 buckets (Brainstore, code-bundle, Lambda responses) now enforce HTTPS-only access via `DenyInsecureTransport` bucket policies. When upgrading from v4.1.0, these appear as new `aws_s3_bucket_policy` additions in `terraform plan` — non-destructive.
    * Removed unnecessary `0.0.0.0/0` egress rules from RDS and ElastiCache security groups. When upgrading from v4.1.0, these appear as deletions in `terraform plan` — expected and safe.
    * Added `database_authorized_security_groups` and `redis_authorized_security_groups` variables for supplying pre-existing security group IDs for RDS and ElastiCache (advanced use cases).
    * Fixed EKS IRSA trust policy for `api_handler_role` and `brainstore_role`: the `:sub` condition now uses `StringLike` to support wildcard namespace matching. Resolves IRSA authentication failures when `eks_namespace` is unset.

  ### Terraform GCP module releases

  * **[v1.3.0](https://github.com/braintrustdata/terraform-google-braintrust-data-plane/releases/tag/v1.3.0)** — *No data plane version change.*
    * The Braintrust API service account is now granted `roles/iam.serviceAccountTokenCreator` on itself, enabling it to generate short-lived tokens and signed GCS URLs without exporting static credentials.
    * The Brainstore service account is now granted `roles/storage.objectAdmin` and `roles/storage.legacyBucketReader` on the API GCS bucket (in addition to its existing access to the Brainstore bucket). This is required for Brainstore to access shared objects in the API bucket.

  ### Terraform Azure module releases

  * **[v1.0.0](https://github.com/braintrustdata/terraform-azure-braintrust-data-plane/releases/tag/1.0.0)** — *No data plane version change.*

    This is the first production-ready release of the Azure Terraform module, introducing Front Door ingress and a restructured AKS node pool configuration. See the [Azure deployment guide](/admin/self-hosting/deploy#azure) for setup instructions.

      <Warning>
        This release contains breaking changes for users upgrading from v0.9.0:

        * **Node pool variables renamed**: `aks_user_pool_vm_size` and `aks_user_pool_max_count` have been removed. Replace them with `aks_brainstore_pool_vm_size` + `aks_brainstore_pool_max_count` (for Brainstore nodes) and `aks_services_pool_vm_size` + `aks_services_pool_max_count` (for application nodes). The node pools will be destroyed and recreated during the upgrade — plan for workload migration.
        * **azurerm provider upgrade required**: The module now requires azurerm \~> 4.0 and Terraform >= 1.10.0. Run `terraform init -upgrade` before applying.
        * **`brainstore_license_key` is now required**: The module will fail at plan time if this variable is not supplied.
      </Warning>

    * Added Azure Front Door Premium ingress via Private Link Service. Deployment follows a staged workflow: deploy base infrastructure and Helm chart first, then enable Front Door. The private link service requires manual approval in the Azure Portal.
    * AKS node pools are now split into a dedicated `brainstore` pool (requires a local-SSD VM SKU, e.g. `Standard_D32ds_v6`) and a `services` pool (general-purpose, no local SSD required). The Azure Container Storage extension (`acstor`) is automatically installed to configure RAID0 on the Brainstore pool.
    * Added a dedicated Braintrust workload identity with scoped Key Vault and Storage RBAC permissions. The `workload_identity_client_id` output is required for Helm chart configuration.

  ### Helm chart releases

  * **[v5.0.1](https://github.com/braintrustdata/helm/releases/tag/5.0.1)** — *GCP/Azure only. No data plane version change.*
    * Brainstore `resources` blocks for reader, writer, and fastreader now accept any valid Kubernetes resource spec. Limits can be omitted entirely or set to `{}` to remove resource constraints. See [Brainstore resource configuration](/admin/self-hosting/advanced#brainstore-resource-configuration) for details.
    * Fixed AWS SDK compatibility with Google Cloud Storage when using S3-compatible mode (`enableGcsAuth: false`). The chart now automatically sets `AWS_REQUEST_CHECKSUM_CALCULATION` and `AWS_RESPONSE_CHECKSUM_VALIDATION` to `WHEN_REQUIRED`. No configuration changes required.
  * **[v5.0.0](https://github.com/braintrustdata/helm/releases/tag/5.0.0)** — *GCP/Azure only. No data plane version change.*
    * Fast readers are now enabled by default. Fast readers are isolated Brainstore nodes that handle common queries powering the Braintrust UI, keeping it responsive while resource-intensive ad-hoc queries are routed to standard reader nodes. See [Brainstore fast reader configuration](/admin/self-hosting/advanced#configure-brainstore-fast-readers) for details and [hardware requirements](/admin/self-hosting/index#hardware-requirements) for sizing guidance.
    * If you have customized `brainstore.reader` settings in `values.yaml`, mirror those customizations to the new `brainstore.fastreader` block before upgrading.
    * Readiness probe defaults for the API and Brainstore have been updated to use the same path (`/`) and port as liveness probes, with extended `initialDelaySeconds` (API: 30s, Brainstore: 60s) and `periodSeconds` (10s).

        <Warning>
          If you have custom `brainstore.readinessProbe` overrides pointing to `/status`, remove them before upgrading. The `/status` readiness endpoint has a bug where it never recovers after a failure, which can permanently mark Brainstore nodes as not ready. The new default probe path (`/`) does not have this issue.
        </Warning>
  * **[v4.1.0](https://github.com/braintrustdata/helm/releases/tag/4.1.0)** — *GCP/Azure only. No data plane version change.*
    * Added support for [custom sidecars](/admin/self-hosting/advanced) on Braintrust pods.
</Update>

<Update label="February 2026">
  ### Data plane v1.1.32

  <Warning>
    Upgrading to this data plane version breaks tracing for GCP self-hosted deployments that use S3 compatibility mode for object storage. To resolve this, see [GCP checksum mismatch errors after upgrading to v1.1.32](/kb/gcp-checksum-mismatch-after-data-plane-upgrade).
  </Warning>

  **Requires:** [Terraform v4.1.0+](https://github.com/braintrustdata/terraform-aws-braintrust-data-plane/releases/tag/v4.1.0) (AWS), [Helm chart v4.0.0+](https://github.com/braintrustdata/helm/releases/tag/4.0.0) (GCP/Azure)

  * Improved ephemeral WAL memory management
  * Added support for large payloads at ingest time
  * Added support for routing BTQL queries to a separate fast reader pool for improved query performance
  * SQL improvements: added `HAVING` clause support, ordered phrase queries; fixed `json_extract` argument validation and ternary operator handling for nulls
  * Added support for pydantic-style JSON schema values in tools
  * MCP server now exposes SQL query tool instead of BTQL, and adds SDK installation resource
</Update>

<Update label="January 2026">
  ### Data plane v1.1.31

  **Requires:** [Terraform v4.0.5+](https://github.com/braintrustdata/terraform-aws-braintrust-data-plane/releases/tag/v4.0.5) (AWS), [Helm 3.1.1+](https://github.com/braintrustdata/helm/releases/tag/3.1.1) (GCP/Azure)

  * Improve performance of S3 export (this is an ongoing effort, and we are continuing to make improvements)
  * Added native GCS authentication for object storage
  * SQL improvements: added PIVOT/UNPIVOT syntax, `array` identifier, string similarity functions in group by, negative array indexing; fixed MATCH syntax, `.user` identifier parsing, and positional aggregates for sort
  * Improved async batch invoke performance with configurable batch sizes
  * Improved proxy error responses with proper status codes
  * Fixed attachment parsing for root-level attachments

  ### Helm v3.1.0

  *No data plane version change. GCP/Azure only.*

  * Added support for GCP Workload Identity on the API service, enabling native GCS authentication without HMAC keys. See [GCS authentication options](/admin/self-hosting/deploy#gcs-authentication-options).

  ### Data plane v1.1.30

  **Requires:** [Helm 3.0.6+](https://github.com/braintrustdata/helm/releases/tag/3.0.6) (GCP/Azure). Not available on AWS (AWS Terraform skipped from v1.1.29 to v1.1.31).

  * Added support for parsing prompts using Nunjucks/Jinja syntax in the playground
  * Added `date_trunc` and `json_extract` functions to BTQL and SQL
  * Added support for alerting on prompt environment updates
  * Added support for File type in newer Vercel AI SDK versions
  * Improved tags functionality
  * Improved async scoring performance with batched payload requests
  * Improved WAL compression and ephemeral data handling
  * Fixed MCP OAuth flow when initial auth server discovery returns 401
  * Fixed implicit aliasing support in BTQL queries
  * Auto-correct double quotes to string literals in BTQL parser
  * Automatically convert Google inline base64 attachments to Braintrust attachments
</Update>

<Update label="December 2025">
  ### Data plane v1.1.29

  **Requires:** [Terraform v4.0.3+](https://github.com/braintrustdata/terraform-aws-braintrust-data-plane/releases/tag/v4.0.3) (AWS) · [Helm 3.0.5+](https://github.com/braintrustdata/helm/releases/tag/3.0.5) (GCP/Azure)

  * Added local shared read cache for Brainstore writers
  * Added support for SQL as a frontend to BTQL
  * Added braintrust.origin attribute support for OTEL logs
  * Added capability to run API, realtime, and brainstore containers as a non-root user "braintrust"
  * Fixed Azure Blob metadata key formatting (hyphen → underscore)

  ### Data plane v1.1.28

  <Warning>
    No longer supported. [Upgrade to the latest version](/admin/self-hosting#upgrades).
  </Warning>

  * Fixed enforcement of `BRAINSTORE_QUERY_TIMEOUT_SECONDS` parameter.
  * Added support for enforcing access to only certain data plane URL patterns.
  * Added custom annotation view support.
  * Enable adding MCP servers to prompts. After authenticating with OAuth, these can be used in the UI in Prompt Chat, Playgrounds, and Experiments.
</Update>

<Update label="November 2025">
  ### Helm v3.0.0 (breaking change for Azure)

  *No data plane version change. GCP/Azure only.*

  **Breaking change for Azure users**: The structure of the `brainstore` section in `values.yaml` has changed. See [UPGRADE.md](https://github.com/braintrustdata/helm/blob/main/braintrust/UPGRADE.md) for migration details before upgrading.

  * Added Azure Container Storage driver support and updated Azure-specific configuration.

  ### Data plane v1.1.27

  <Warning>
    No longer supported. [Upgrade to the latest version](/admin/self-hosting#upgrades).
  </Warning>

  * Added ability to share log and experiment traces publicly
  * A built-in rate limit for API queries. You can enable this by setting
    `RATELIMIT_BTQL_DEFAULT`, which controls how many BTQL queries are allowed per
    object per minute, per object.
  * Better query cancellation for long-running aggregation queries.
  * Add `comments`, `audit_data`, and `_async_scoring_state` to the BTQL schema.
    You can now query for these fields alongside existing ones.
</Update>

<Update label="October 2025">
  ### Data plane v1.1.26

  <Warning>
    No longer supported. [Upgrade to the latest version](/admin/self-hosting#upgrades).
  </Warning>

  * Faster performance for indexing (compaction and merging)
  * Improved I/O utilization for queries that read a long time horizon
  * Fix a longstanding deadlock bug that can occur with high query volume
  * Many small improvements to query performance

  ### Data plane v1.1.25

  <Warning>
    No longer supported. [Upgrade to the latest version](/admin/self-hosting#upgrades).
  </Warning>

  * Faster real-time queries (no "excluded docs" in most cases)
  * Fix thinking for Mistral models
  * Significantly faster indexing for large payloads
  * Fix a bug with floating point division in queries
  * Fix MCP OAuth flow for self-hosted deployments
  * More iterations in hosted tools (100)
  * Improve performance for high selectivity filter queries
  * Fix gemini tool calls that included `$defs` and `$refs` in the schema
  * Fix bug in `/feedback` endpoint when updating non-root spans
</Update>

<Update label="August 2025">
  ### Data plane v1.1.22

  <Warning>
    No longer supported. [Upgrade to the latest version](/admin/self-hosting#upgrades).
  </Warning>

  * Added ability to create and edit custom charts in the monitor dashboard
  * Added support for more Grok models and improved model refresh handling in `/invoke` endpoint
  * Added support for `IN` clause in BTQL queries
  * Improved processing of pydantic-ai OpenTelemetry spans with tool names in span names and proper input/output field mapping
  * Added OpenAI Agents logs formatter for better span rendering in the UI
  * Added retention support for Postgres WAL and object WAL (write-ahead logs)
  * Add S3 lifecycle policies to reclaim additional space from bucket
  * Added authentication support for remote evaluation endpoints
  * Improved ability to fetch all datasets efficiently
  * New `MAX_LIMIT_FOR_QUERIES` parameter to set the maximum allowable limit for BTQL queries. Larger result sets can still be queried through pagination

  ### Data plane v1.1.21

  <Warning>
    No longer supported. [Upgrade to the latest version](/admin/self-hosting#upgrades).
  </Warning>

  * Process pydantic-ai OTel spans
  * AI proxy now supports temperature > 1 for models which allow it
  * Preview of data retention on logs, datasets, and experiments

  ### Data plane v1.1.20

  <Warning>
    No longer supported. [Upgrade to the latest version](/admin/self-hosting#upgrades).
  </Warning>

  * Brainstore vacuum is enabled by default. This will reclaim space from object storage. As a bonus, vacuum also cleans up more data (segment-level write-ahead logs)
  * AI proxy now dynamically fetches updates to the model registry
  * Performance improvements to summary, `IS NOT NULL`, and `!= NULL` queries
  * Handle cancelled BTQL queries earlier and optimize schema inference queries
  * Added a REST API for managing service tokens. See [docs](/api-reference)
  * Support custom columns on the experiments page
  * Aggregate custom metrics and include more built-in agent metrics in experiments and logs
  * Preview of data retention on logs. You can define a per-project policy on logs which will be deleted on a schedule and no longer available in the UI and API

  ### Data plane v1.1.19

  <Warning>
    No longer supported. [Upgrade to the latest version](/admin/self-hosting#upgrades).
  </Warning>

  * Add support for GPT-5 models
  * OTel tracing support for Google Agent Development Kit
  * OTel support for deleting fields
  * Fix binder error handling for malformed BTQL queries
  * Enable environment tags on prompt versions

  ### Data plane v1.1.18

  <Warning>
    No longer supported. [Upgrade to the latest version](/admin/self-hosting#upgrades).
  </Warning>

  This is our largest data plane release in a while, and it includes several significant performance improvements, bug fixes, and new features:

  * Improve performance for non-selective searches. Eg make `foo != 'bar'` faster
  * Improve performance for score filters. Eg make `scores.correctness = 0` faster
  * Improve group by performance. This should make the monitor page and project summary page significantly faster
  * Add syntax for explicit casting. You can now use explicit casting functions to cast data to any datatype. e.g. `to_number(input.foo)`, `to_datetime(input.foo)`, etc
  * Fix ILIKE queries on nested json: ILIKE queries previously returned incorrect results on nested json objects. ILIKE now works as expected for all json objects
  * Improve backfill performance. New objects should get picked up faster
  * Improve compaction latency. Indexing should kick in much faster, and in particular, this means data gets indexed a lot faster
  * Improved support for OTel mappings, including the new [GenAI Agent](https://opentelemetry.io/docs/specs/semconv/gen-ai/gen-ai-agent-spans/) conventions and [strands framework](https://aws.amazon.com/blogs/opensource/introducing-strands-agents-an-open-source-ai-agents-sdk/)
  * Add Gemini 2.5 Flash-Lite GA, GPT-OSS models on several providers, and Claude Opus 4.1

  ### Data plane v1.1.15

  <Warning>
    No longer supported. [Upgrade to the latest version](/admin/self-hosting#upgrades).
  </Warning>

  * Add ability to run scorers as tasks in the playground
  * You can now use object storage, instead of Redis, as a locks manager
  * Support async python in inline code functions
  * Don't re-trigger online scoring on existing traces if only metadata fields like `tags` change

  ### Data plane v1.1.14

  <Warning>
    No longer supported. [Upgrade to the latest version](/admin/self-hosting#upgrades).
  </Warning>

  * Switch the default query shape from `traces` to `spans` in the API. This means that btql queries will now return 1 row per span, rather than per trace. This change also applies to the REST API
  * Service tokens with scoped, user-independent credentials for system integrations
  * Fix a bug where very large experiments (run through the API) would drop spans if they could not flush data fast enough
  * Support built-in OTel metrics (contact your account team for more details)
  * New parallel backfiller improves performance of loading data into Brainstore across many projects

  ### Data plane v1.1.13

  <Warning>
    No longer supported. [Upgrade to the latest version](/admin/self-hosting#upgrades).
  </Warning>

  * Fix support for `COALESCE` with variadic arguments
  * Add option to select logs for online scoring with a BTQL filter
  * Add ability to test online scoring configuration on existing logs
  * Mmap based indexing optimization enabled by default for Brainstore
</Update>

<Update label="June 2025">
  ### Data plane v1.1.11

  <Warning>
    No longer supported. [Upgrade to the latest version](/admin/self-hosting#upgrades).
  </Warning>

  * Add support for LLaMa 4 Scout for Cerebras
  * Turn on index validation (which enables self-healing failed compactions) in the Cloudformation by default

  ### Data plane v1.1.7

  <Warning>
    No longer supported. [Upgrade to the latest version](/admin/self-hosting#upgrades).
  </Warning>

  * Improve performance of error count queries in Brainstore
  * Automatically heal segments that fail to compact
  * Add support for new models including o3 pro
  * Improve error messages for LLM-originated errors in the proxy

  ### Data plane v1.1.6

  <Warning>
    No longer supported. [Upgrade to the latest version](/admin/self-hosting#upgrades).
  </Warning>

  * Patch a bug in 1.1.5 related to the `realtime_state` field in the API response

  ### Data plane v1.1.5

  <Warning>
    No longer supported. [Upgrade to the latest version](/admin/self-hosting#upgrades).
  </Warning>

  * Default query timeout in Brainstore is now 32 seconds
  * Auto-recompact segments which have been rendered unusable due to an S3-related issue
  * Gemini 2.5 models

  ### Data plane v1.1.4

  <Warning>
    No longer supported. [Upgrade to the latest version](/admin/self-hosting#upgrades).
  </Warning>

  * Optimize "Activity" (audit log) queries, which reduces the query workload on Postgres for large traces (even if you are using Brainstore)
  * Automatically convert base64 payloads to attachments in the data plane
  * Improve AI proxy errors for status codes 401->409
  * Increase real-time query memory limit to 10GB in Brainstore
</Update>

<Update label="April 2025">
  ### Data plane v0.0.65

  <Warning>
    No longer supported. [Upgrade to the latest version](/admin/self-hosting#upgrades).
  </Warning>

  * Improve error messages when trying to insert invalid unicode
  * Backend support for appending messages

  ### SDK version 0.0.197

  * Fix a bug in `init_function` in the Python SDK which prevented the `input` argument from being passed to the function correctly when it was used as a scorer
  * Support setting `description` and `summarizeScores`/`summarize_scores` in `Eval(...)`
</Update>

<Update label="March 2025">
  * Many improvements to the playground experience:
    * Fixed many crashes and infinite loading spinner states
    * Improved performance across large datasets
    * Better support for running single rows for the first time
    * Fixed re-ordering prompts
    * Fixed adding and removing dataset rows
    * You can now re-run specific prompts for individual cells and columns
  * You can now do "does not contain" filters for tags in experiments and datasets
  * When you `invoke()` a function, inline base64 payloads will be automatically logged as attachments
  * Add a strict mode to evals and functions which allows you to fail test cases when a variable is not present in a prompt
  * Add Fireworks' DeepSeek V3 03-24 and DeepSeek R1 (Basic), along with Qwen QwQ 32B in Fireworks and Together.ai, to the playground and AI proxy
  * Fix bug that prevented Databricks custom provider form from being submitted without toggling authentication types
  * Unify Vertex AI, Azure, and Databricks custom provider authentication inputs
  * Add Llama 4 Maverick and Llama 4 Scout models to Together.ai, Fireworks, and Groq providers in the playground and AI proxy
  * Add Mistral Saba and Qwen QwQ 32B models to the Groq provider in the playground and AI proxy
  * Add Gemini 2.5 Pro Experimental and Gemini 2.0 Flash Thinking Mode models to the Vertex provider in the playground and AI proxy
  * Add OpenAI's [o1-pro](https://platform.openai.com/docs/models/o1-pro) model to the playground and AI proxy
  * Support OpenAI Responses API in the AI proxy
  * Add support for the Gemini 2.5 Pro Experimental model in the playground and AI proxy
  * Option to disable the experiment comparison auto-select behavior
  * Add support for Databricks custom provider as a default cloud provider in the playground and AI proxy
  * Allow supplying a base API URL for Mistral custom providers in the playground and AI proxy
  * Support pushed code bundles larger than 50MB
  * The OTEL endpoint now understands structured output calls from the Vercel AI SDK
  * Added support for `concat`, `lower`, and `upper` string functions in BTQL
  * Correctly propagate Bedrock streaming errors through the AI proxy and playground
  * Online scoring supports sampling rates with decimal precision
  * Added support for OpenAI GPT-4o Search Preview and GPT-4o mini Search Preview in the playground and AI proxy
  * Add support for making Anthropic and Google-format requests to corresponding models in the AI proxy
  * Fix bug in model provider key modal that prevents submitting a Vertex provider with an empty base URL
  * Add column menu in grid layout with sort and visibility options
  * Enable logging the `origin` field through the REST API
  * Add support for "image" pdfs in the AI proxy
  * Fix issue in which code function executions could hang indefinitely
  * Add support for custom base URLs for Vertex AI providers
  * Add dataset column to experiments table
  * Add python3.13 support to user-defined functions
  * Fix bug that prevented calling Python functions from the new unified playground

  ### Data plane v0.0.64

  <Warning>
    No longer supported. [Upgrade to the latest version](/admin/self-hosting#upgrades).
  </Warning>

  * Brainstore is now set as the default storage option
  * Improved backfilling performance and overall database load
  * Enabled relaxed search mode for ClickHouse to improve query flexibility
  * Added strict mode option to prompts that fails when required template arguments are missing
  * Enhanced error reporting for missing functions and eval failures
  * Fixed streaming errors that previously resulted in missing cells instead of visible error states
  * Abort evaluations on server when stopped from playground
  * Added support for external bucket attachments
  * Improved handling of large base64 images by converting them to attachments
  * Fixed proper handling of UTF-8 characters in attachment filenames
  * Added the ability to set telemetry URL through admin settings
</Update>

<Update label="February 2025">
  ### Data plane v0.0.63

  <Warning>
    No longer supported. [Upgrade to the latest version](/admin/self-hosting#upgrades).
  </Warning>

  * Support for Claude 3.7 Sonnet, Gemini 2.0 Flash-Lite, and several other models in the proxy
  * Stability and performance improvements for ETL processes
  * A new `/status` endpoint to check the health of Braintrust services
</Update>

<Update label="December 2024">
  ### Data plane v0.0.61

  <Warning>
    No longer supported. [Upgrade to the latest version](/admin/self-hosting#upgrades).
  </Warning>

  * Upgraded to Node.js 22 in Docker containers

  ### Data plane v0.0.60

  <Warning>
    No longer supported. [Upgrade to the latest version](/admin/self-hosting#upgrades).
  </Warning>

  * Make PG\_URL configuration more uniform between nodeJS and python clients
</Update>

<Update label="November 2024">
  ### Data plane v0.0.59

  <Warning>
    No longer supported. [Upgrade to the latest version](/admin/self-hosting#upgrades).
  </Warning>

  * Fix permissions bug with updating org-scoped env vars
  * Support uploading [file attachments](/instrument/attachments)
  * You can now export [OpenTelemetry (OTel)](https://opentelemetry.io/docs/specs/otel/) traces to Braintrust
</Update>

<Update label="September 2024">
  ### Data plane v0.0.56

  <Warning>
    No longer supported. [Upgrade to the latest version](/admin/self-hosting#upgrades).
  </Warning>

  * Hosted tools are now available in the API
  * Environment variables are now supported in the API
  * Automatically backfill `function_data` for prompts created via the API

  ### Data plane v0.0.54

  <Warning>
    No longer supported. [Upgrade to the latest version](/admin/self-hosting#upgrades).
  </Warning>

  * Support for bundled eval uploads
  * The `PATCH` endpoint for prompts now supports updating the `slug` field
  * Don't fail insertion requests if realtime broadcast fails
  * Performance optimizations to filters on `scores`, `metrics`, and `created` fields
  * Performance optimizations to filter subfields of `metadata` and `span_attributes`
</Update>

<Update label="August 2024">
  ### Data plane v0.0.53

  <Warning>
    No longer supported. [Upgrade to the latest version](/admin/self-hosting#upgrades).
  </Warning>

  * The API now supports running custom LLM and code (TypeScript and Python) functions

  ### Data plane v0.0.51

  <Warning>
    No longer supported. [Upgrade to the latest version](/admin/self-hosting#upgrades).
  </Warning>

  * The proxy is now a first-class citizen in the API service, which simplifies deployment
  * The proxy is now accessible at `https://api.braintrust.dev/v1/proxy`
  * If you are self-hosting, the proxy is now bundled into the API service
</Update>
