# Appwrite 1.9.10 — Release & Upgrade Intelligence
- **Product:** Appwrite (https://appwrite.io)
- **Version:** 1.9.10
- **Released:** Oct 24, 2026
- **Impact Score:** 5/10
- **Breaking Changes:** Not verified
- **Canonical Analysis:** https://changelogs.us/appwrite/updates/1.9.10/

## Executive Summary (TL;DR)
Appwrite 1.9.10. Source highlight: Appwrite 1.9.10 is a security release for self-hosted deployments on the 1.9 line. It backports the hardening shipped in 2.6.2 across auth, API keys, databases, realtime, GraphQL, storage, VCS, functions, migrations and messaging, and moves the runtime to a patched Brotli. It keeps Console 8.7.37 fo

## New Features
- Not backported, because the feature doesn't exist on 1.9: ID-token email policies (#14633), console realtime tails (#14797), the jobs callback secret (#14116), the onboarding hook (#14807) and multi-provider VCS events (#14800). #14778 was already the behaviour on 1.9.

## Bug Fixes
- **Brotli CVE-2026-111497.** `appwrite/base` 1.4.6 requires `brotli-libs` 1.2.1, which fixes an out-of-bounds write in the Brotli decoder (appwrite/docker-base#128, #14912). libcurl and the Swoole client decode `br` responses from URLs users control, such as avatar and favicon fetches, webhooks and migration sources.
- **Auth and accounts:** authenticate API keys before skipping Origin checks (#14910, backports #14352), allow admin mode only from console origins (#14813), clear email-bound tokens and invites when the email or phone changes (#14347, #14819), revoke prior credentials when OAuth links an unverified account (#14801), rate limit token sign-ins per account (#14880), compare MFA codes in constant time (#14762).
- **Keys and users:** hold keys and JWTs to their original grant (#14888), keep write-only secrets on their endpoint and bind ephemeral keys to their project and purpose (#14795, #14825), keep key and webhook secrets out of the 1.9.4 response format (#14815), hide credentials from impersonators (#14818), require `users.write` to read MFA recovery codes (#14872), bound imported password hash costs (#14825), gate development-only routes on `_APP_ENV=development` (#14824).
- **Databases:** enforce permissions when staging transaction operations, and rate limit guest transaction writes (#14913, backports #14754, #14762), gate increment/decrement and fix upsert permissions (#14755), scope the list cache to collection permissions and gate inline encryption (#14791).
- **Organizations and projects:** accept only keys and console sessions on organization routes (#14779), evaluate project roles against the project in the path (#14787), require owner on both organizations to transfer a project (#14780).
- **Realtime and GraphQL:** require project access for admin mode connections (#14790), apply the HTTP session rules to realtime connections (#14803), send migration events only to project readers (#14805), validate presence messages like the HTTP endpoint (#14829), keep the caller's identity across GraphQL fields (#14820), cost invalid list limits at the complexity cap (#14821).
