Appwrite 2.0.0stable Released Sep 04, 2026
Impact Score: 5/10

Appwrite 2.0.0 โ€” Release Notes & Engineering Impact

Source available โ€” automated, not human-reviewed

Component: appwrite ยท Channel: stable. Automated analysis, not a compatibility certification. How this works.

Analysis updated: 2026-11-01.

Compatibility not verified โ€” check source notes
๐Ÿ“„ .MD
โšก Executive Summary (TL;DR)

Appwrite 2.0.0. Source highlight: Appwrite 2.0 is the second major generation of the platform. It replaces the engine underneath, rebuilds the Console on top, and expands what a project can hold: relational, schemaless and vector data, on PostgreSQL, MariaDB or MongoDB, with the same permissions, queries and realtime you already use

Who Does This Impact? (Role-Based Analysis)

๐Ÿ’ป Software Engineers & Devs

Check the source notes against the package and APIs you use before upgrading.

๐Ÿ“Š Product & Engineering Leads

Use the documented changes to assess relevance to your product; release frequency alone is not a quality measure.

โš™๏ธ DevOps & Security

Verify the target version, runtime requirements and rollback procedure in the official documentation.

โœจ New Features & Capabilities (1)

  • **Embeddings API** turns text into vectors without a separate embedding service in your stack. The embedding container is resource heavy and off by default; add `embedding` to `COMPOSE_PROFILES` and set `_APP_EMBEDDING=enabled` to run it.

๐Ÿ”ง Bug Fixes & Patches (6)

  • **VectorsDB handles embeddings.** A collection is created with a fixed dimension, every document stores a vector of that length plus optional metadata, and an HNSW index keeps similarity search fast as the collection grows. Choose cosine, dot product or Euclidean distance.
  • Index listing looked up by collection id instead of sequence, so collections sharing an id across databases could see each other's indexes.
  • Transactions reject array queries up front instead of throwing on commit.
  • Integer attribute `min` and `max` are capped to what the column can hold.
  • `teams.total` matches confirmed memberships across all four paths that could drift it.
  • Buckets are no longer left half-created when their files collection fails.
๐Ÿ“„ View Raw Release Notes (Original Developer Log)
![Announcing Appwrite 2.0](https://github.com/appwrite/appwrite/releases/download/2.0.0/cover.png) Appwrite 2.0 is the second major generation of the platform. It replaces the engine underneath, rebuilds the Console on top, and expands what a project can hold: relational, schemaless and vector data, on PostgreSQL, MariaDB or MongoDB, with the same permissions, queries and realtime you already use. Read the full story in the [announcement post](https://appwrite.io/blog/post/announcing-appwrite-2). Existing projects keep working. Upgrading from 1.9.x is a single command and a migration, and your data stays on the database engine it is on today. ## Highlights - **Console IV.** The next-generation Appwrite Console, rebuilt from the ground up with a new navigation model, redesigned resource views, notifications and a realtime event tail. Two developer tools now count as part of the default workflow: **Appwrite Terminal** runs the Appwrite CLI inside the Console with your session and project already configured, and **Appwrite Explorer** loads your project's OpenAPI specification, builds requests with guided forms and sends live calls from the browser. - **PostgreSQL is the default database.** New installs provision PostgreSQL out of the box, with durability left on. MariaDB and MongoDB remain fully supported for new and existing installs. - **VectorsDB handles embeddings.** A collection is created with a fixed dimension, every document stores a vector of that length plus optional metadata, and an HNSW index keeps similarity search fast as the collection grows. Choose cosine, dot product or Euclidean distance. - **DocumentsDB handles schemaless documents.** A collection holds JSON, two documents in the same collection can have different fields, and adding a field is a write rather than a migration. Document-level permissions, queries, ordering and pagination work through the same SDK patterns. VectorsDB and DocumentsDB need PostgreSQL and MongoDB engines a stock install does not deploy, so they ship off; enable `_APP_VECTORSDB` or `_APP_DOCUMENTSDB` once the engine is provisioned. - **Embeddings API** turns text into vectors without a separate embedding service in your stack. The embedding container is resource heavy and off by default; add `embedding` to `COMPOSE_PROFILES` and set `_APP_EMBEDDING=enabled` to run it. - **Usage service** for self-hosted instances, with resource-scoped metrics for every product. - **Gitea and Origin VCS providers**, alongside GitHub, GitLab and Bitbucket. Self-hosted GitLab works through `_APP_VCS_GITLAB_ENDPOINT` and `_APP_CONSOLE_GITLAB_ENDPOINT`. - **Git installations are isolated per project.** Installation endpoints are scoped to the owning project and the GitHub App installation state is signed, so a callback cannot be replayed onto someone else's project. Failed callbacks redirect back to the console with an actionable error instead of dead-ending. - **Sites build on the orchestrator backend**, with framework detection from config files. - **Builds survive non-local storage.** With `_APP_STORAGE_DEVICE` set to an S3-compatible backend, build output is uploaded there and a failed upload fails the build. - **Google sign-in to the console**, via `_APP_CONSOLE_GOOGLE_APP_ID` and `_APP_CONSOLE_GOOGLE_SECRET`. Cloudflare Dashboard and Resend join the OAuth2 provider list. - **Custom MFA challenge factor**, plus gravatar and OAuth2 avatar support. - **Geo service** and a new health check endpoint. - **Realtime is cheaper per event.** One Swoole worker, the document encoded once per event instead of once per subscriber, presence stored as flags. - **Execution logs can dual-write to ClickHouse.** Off by default, reads stay on the project database and mirror failures are never fatal. `_APP_EXECUTIONS_DUAL_WRITE`, `_APP_CONNECTIONS_DB_EXECUTIONS`, `_APP_POOL_SIZE_EXECUTIONS`. - **`_APP_OPTIONS_ABUSE_INCREASED_LIMIT_PROJECTS`** raises rate limits for named projects. ## Installer and upgrade - **Build artifacts survive the upgrade from 1.9.x.** The builds volume rename no longer leaves existing function and site deployments behind. - **Infrastructure migrations are versioned**, so volume and file changes run per release during an upgrade. - **The installer applies the worker topology you pick**, and separate topology starts the usage and resource stats workers. - **HTTPS follows the hostname.** Off for loopback, `.local`, `.internal` and bare IPs, on for a real domain. The console works over plain HTTP on those hosts. - **The account step is optional and takes a name.** ## Fixes - Index listing looked up by collection id instead of sequence, so collections sharing an id across databases could see each other's indexes. - Transactions reject array queries up front instead of throwing on commit. - Integer attribute `min` and `max` are capped to what the column can hold. - `teams.total` matches confirmed memberships across all four paths that could drift it. - Buckets are no longer left half-created when their files collection fails. - Build billing is skipped when the build never started, capped at the build timeout, and tagged with the resource id. - Proxy rule domains are stored lowercase, so lookups match however a domain was entered. - SVG files are served as attachments from the file view endpoint. ## Removed - `GET /v1/health/executions`. ## Install ```bash docker run -it --rm \ --volume /var/run/docker.sock:/var/run/docker.sock \ --volume "$(pwd)"/appwrite:/usr/src/code/appwrite:rw \ --entrypoint="install" \ appwrite/appwrite:2.0.0 ``` ## Upgrade Upgrading from 1.9.x uses the same command with `--entrypoint="upgrade"`, then run the migration: ```bash cd appwrite docker compose exec appwrite migrate ``` **Back up your data first.** MariaDB and MongoDB installs stay on their current database; PostgreSQL is the default for new installs only. ## Contributors Thank you to everyone who contributed to 2.0.0 across the release candidates: @abnegate @ArnabChatterjee20k @arpit10128 @atharvadeosthale @bhardwajparth51 @Chehak7 @ChiragAgg5k @cipheraxat @deepshekhardas @eldadfux @fogelito @harsh-sikarwar @HarshMN2345 @ibaraki-douji @imtia33 @jaysomani @levivannoort @lohanidamodar @loks0n @Meldiron @premtsd-code @RushikeshGandhmal @Splinteer @TorstenDittmann