🔐 Brotli security fix (CVE-2026-111497): Appsmith v2.6.0 includes the fix for a vulnerability in the Node.js Brotli decoder. Processing maliciously crafted Brotli-compressed data can corrupt memory and potentially cause a service crash, expose process memory, or allow remote code execution. Self-hosted customers should upgrade to v2.6.0 to receive the fix. See the Node.js security advisory for details.
⚠️ Important Upgrade Notes
- Customized
docker.envfiles must contain resolved literal values. Shell expressions stop startup with a redacted diagnostic. Move JVM options fromdocker.envto Docker Compose or Helm environment configuration before upgrading.OTEL_*names, including the documented trace exporter endpoints, are now accepted. Generated defaults and Admin Settings values need no changes. (#42225, #42422) - Redis queries must use a static command name. A binding in the command name returns a query configuration error. Binding values stay inside a single argument. (#42465)
- The DynamoDB plugin now uses AWS SDK for Java 2.55.9. A region must contain only letters, digits, and hyphens, and be at most 63 characters. Responses can include additional keys; existing keys and values stay the same. If the server sets
AWS_ENDPOINT_URL,AWS_ENDPOINT_URL_DYNAMODB,AWS_USE_FIPS_ENDPOINT, orAWS_USE_DUALSTACK_ENDPOINT, the plugin now honors them. (#42346)
🔐 Security
- Updated bundled dependencies to address reported vulnerabilities. (#42444, #42449, #42466, #42475, #42492)
- Editor-mode page and layout reads now require edit permission and return the draft. View mode still requires read permission and returns the published page. (#42425)
- Updating an application or datasource now keeps the workspace it was created in. (#42462)
- Creating a workspace now ignores a client-supplied id, policies, and permission groups. The server generates them. (#42478)
- Redis query bindings stay inside one command argument, so a bound value cannot add extra arguments. (#42465)
🛠️ Reliability
- Public apps again receive the configured Google Maps key, so Map widgets work for anonymous viewers. (#42440)
- Saving datasource credentials now drops that datasource's cached connection on every server pod. (#42430)
- Closing an evicted datasource connection no longer runs on the shared request thread, so one hung database no longer stalls health checks. (#42450)
- Page views are recorded when a page is opened, not when the editor loads layout DSL. (#42429)
- Nested DynamoDB request objects, including transaction items and index settings, are now built the same way every time. (#42346)
✨ New Features & Enhancements
- MCP structured SQL filters can test
isNullandnotNull. (#42491) - MCP structured SQL filters can group conditions with
anyOf, which compiles to OR and is combined with the other filters. (#42495) - MCP structured SQL
likecan match contains, prefix, suffix, or exact text. PostgreSQL queries can useilike. (#42496)
🎨 UI & Widget Improvements
- In App Settings → Navigation, Show logo and Show application title no longer switch themselves while a save is in progress. (#42488)
🔧 Git, Deployment & Configuration
docker.envnow acceptsOTEL_*names, including the documented OpenTelemetry trace exporter endpoints. An externally setOTEL_*value still overrides the file on restart. (#42422)- Browser telemetry is now sent for builders only. Anonymous visitors and end users of published apps are no longer tracked in the browser. (#42353)