Appwrite

Databases & DataBSD-3-Clause

An open-source backend platform for web and mobile.

Latest 2.5.0 · by AppwriteWritten in PHPWebsiteappwrite/appwriteRSS

Branches

2
2.5.0
1
1.9.7

Release activity

Release activity — 20 releases across 16 days since Mar 24, 2026. Each cell is one day; darker means more releases that day. Nothing is recorded before Mar 24, 2026. Older weeks are hidden at this screen width.
JulAugSepOct
SundayNo releases on Jun 28, 2026No releases on Jul 5, 2026No releases on Jul 12, 2026No releases on Jul 19, 2026No releases on Jul 26, 2026No releases on Aug 2, 2026No releases on Aug 9, 2026No releases on Aug 16, 2026No releases on Aug 23, 2026No releases on Aug 30, 2026No releases on Sep 6, 2026No releases on Sep 13, 2026No releases on Sep 20, 2026No releases on Sep 27, 2026No releases on Oct 4, 2026No releases on Oct 11, 2026
Monday1 release on Jun 29, 2026No releases on Jul 6, 2026No releases on Jul 13, 2026No releases on Jul 20, 2026No releases on Jul 27, 2026No releases on Aug 3, 2026No releases on Aug 10, 2026No releases on Aug 17, 2026No releases on Aug 24, 2026No releases on Aug 31, 2026No releases on Sep 7, 2026No releases on Sep 14, 2026No releases on Sep 21, 2026No releases on Sep 28, 2026No releases on Oct 5, 2026No releases on Oct 12, 2026
TuesdayNo releases on Jun 30, 2026No releases on Jul 7, 2026No releases on Jul 14, 2026No releases on Jul 21, 2026No releases on Jul 28, 2026No releases on Aug 4, 2026No releases on Aug 11, 2026No releases on Aug 18, 2026No releases on Aug 25, 2026No releases on Sep 1, 2026No releases on Sep 8, 20261 release on Sep 15, 2026No releases on Sep 22, 2026No releases on Sep 29, 2026No releases on Oct 6, 20261 release on Oct 13, 2026
Wednesday1 release on Jul 1, 2026No releases on Jul 8, 2026No releases on Jul 15, 20261 release on Jul 22, 2026No releases on Jul 29, 2026No releases on Aug 5, 2026No releases on Aug 12, 2026No releases on Aug 19, 2026No releases on Aug 26, 2026No releases on Sep 2, 2026No releases on Sep 9, 2026No releases on Sep 16, 20261 release on Sep 23, 2026No releases on Sep 30, 2026No releases on Oct 7, 2026No releases on Oct 14, 2026
ThursdayNo releases on Jul 2, 2026No releases on Jul 9, 2026No releases on Jul 16, 2026No releases on Jul 23, 2026No releases on Jul 30, 2026No releases on Aug 6, 2026No releases on Aug 13, 2026No releases on Aug 20, 20261 release on Aug 27, 2026No releases on Sep 3, 2026No releases on Sep 10, 2026No releases on Sep 17, 2026No releases on Sep 24, 2026No releases on Oct 1, 20262 releases on Oct 8, 2026No releases on Oct 15, 2026
FridayNo releases on Jul 3, 2026No releases on Jul 10, 2026No releases on Jul 17, 2026No releases on Jul 24, 2026No releases on Jul 31, 2026No releases on Aug 7, 2026No releases on Aug 14, 2026No releases on Aug 21, 2026No releases on Aug 28, 20262 releases on Sep 4, 20261 release on Sep 11, 2026No releases on Sep 18, 2026No releases on Sep 25, 2026No releases on Oct 2, 2026No releases on Oct 9, 2026No releases on Oct 16, 2026
SaturdayNo releases on Jul 4, 2026No releases on Jul 11, 2026No releases on Jul 18, 2026No releases on Jul 25, 2026No releases on Aug 1, 2026No releases on Aug 8, 2026No releases on Aug 15, 2026No releases on Aug 22, 20261 release on Aug 29, 2026No releases on Sep 5, 2026No releases on Sep 12, 2026No releases on Sep 19, 2026No releases on Sep 26, 2026No releases on Oct 3, 2026No releases on Oct 10, 2026

20 releases since Mar 24, 2026, busiest day 3

Changelog

What changed from 1 to 2
Filter releases by branch
20 of 20 releases

2.5.0

Latest
Added 3
  • Passkeys can be enabled for projects from the Console, using a domain from the project's web platforms or an Android app's signing certificate.
  • Functions can run on an interval of N minutes instead of a cron expression, configured under Settings › Executions.
  • On Postgres, a trigram index type is available that serves startsWith, contains and endsWith queries; other databases reject it.
Changed 7
  • Each function gets a fixed slot within its interval derived from its ID so many hourly functions spread across the hour instead of all firing at the same minute.
  • The Console 1.2.74 self-hosted sign-in is now email and password only, without the OAuth and passkey buttons.
  • The executor was upgraded from 0.29.0 to 1.1.2.
  • The usage worker batches ClickHouse writes across messages instead of one INSERT per request or execution, reducing ClickHouse CPU load under busy installs.
  • PATCH /v1/teams/:teamId/memberships/:membershipId/status is rate limited to 10 requests per IP and membership.
  • listColumns and listAttributes report encrypt for every string type so the Console masks encrypted varchar and text values.
  • Adding operations to a transaction has the same rate limit as creating a document.
Fixed 18
  • Runtimes no longer crash-loop with 'Code path /tmp/code.tar.gz not found' after the executor restarts; untracked runtimes are removed on startup.
  • Row text fields in TablesDB, DocumentsDB and VectorsDB can be resized in the Console.
  • Signing in with an OAuth2 provider or ID token matching an existing unverified email account marks that account as verified.
  • Inviting the dotted or aliased form of a canonical email invites the existing account instead of failing with 409 or 400, and Yahoo hyphens are preserved.
  • A removed team member's client now receives the membership delete realtime event.
  • getRow returns the committed row immediately after a transaction commit instead of a stale copy or a 404.

From Appwrite

Appwrite 2.5

Appwrite 2.5 lets you turn on passkeys for your projects from the Console, including in native Android apps. Functions can now run on an interval instead of a cron expression. Function runtimes no longer crash-loop after the executor restarts, the bundled ClickHouse does far less work under load, and the installer keeps your docker-compose.override.yml and custom ports. It ships with the 1.2.74 self-hosted Console (was 1.2.55).

Upgrading from 2.4.0 is one command plus migrate. Nothing needs to be changed by hand.

Highlights
  • Passkeys for your projects, enabled with a domain picked from your web platforms, and in Android apps by their signing certificate. (#14310, #14313, #14353, #14362, #14394, #14395, #14400)
  • Interval schedules for functions. A function can run every N minutes instead of on a cron expression. Each function gets a fixed slot inside its interval derived from its ID, so many hourly functions spread across the hour instead of all firing at :00. Set it under Settings › Executions. (#14231, #14307, #14311, #14319)
  • Console 1.2.74. Adds project passkeys, function intervals, Android signing certificates and resizable row fields. Signing in to a self-hosted Console is now email and password only, without the OAuth and passkey buttons. (#14434)
  • Runtimes survive executor restarts. The executor moves from 0.29.0 to 1.1.2. A restarted executor used to lose track of running runtimes and delete their code, so the next time one exited it restarted forever with Code path /tmp/code.tar.gz not found. Untracked runtimes are now removed on startup. (#14361)
  • Less ClickHouse load. The usage worker batches writes across messages instead of one INSERT per request or execution, which kept the bundled ClickHouse at up to two cores on busy installs. (#14291)
Fixes

Console

  • Row text fields in TablesDB, DocumentsDB and VectorsDB can be resized. (#14345)

Auth and teams

  • Signing in with an OAuth2 provider or ID token that matches an existing unverified account by email marks it verified. (#14283)
  • Inviting the dotted or aliased form of a canonical email invites the existing account instead of failing with 409 or 400. Yahoo hyphens stay part of the address. (#14172, fixes #14230)
  • A removed team member's client now receives the membership delete realtime event. (#13780, #14210, fixes #13768)
  • PATCH /v1/teams/:teamId/memberships/:membershipId/status is rate limited to 10 requests per IP and membership. (#14405)

Databases and TablesDB

  • getRow returns the committed row right after a transaction commit instead of a stale copy or a 404. (#14201, fixes #14173)
  • On Postgres, trigram is a new index type that serves startsWith, contains and endsWith. Other databases reject it. (#14108, fixes #14088)
  • A row too large for one of its indexes returns 400 column_limit_exceeded (attribute_limit_exceeded for collections) instead of a 500. (#14374, fixes #14335)
  • Operators on encrypted columns return 400 instead of corrupting the stored value. (#14250, #14375, fixes #14218)
  • listColumns and listAttributes report encrypt for every string type, so the Console masks encrypted varchar and text values. (#14413)
  • Bulk, upsert and transaction commit events no longer carry the internal $collection and $tenant fields. (#14216)
  • Adding operations to a transaction has the same rate limit as creating a document. (#14405)

Functions

  • Synchronous and queued executions, and execution events from the worker, return $createdAt and $updatedAt in ISO 8601 like every other route. (#14295, #14316, fixes #14296, #14317)

Storage

  • Image previews in encrypted buckets check _APP_STORAGE_PREVIEW_LIMIT against the uploaded size, so images between 15 MB and 20 MB preview again. (#14284)
  • PUT /v1/storage/buckets/:bucketId/files/:fileId has its rate limit back. (#14405)

Webhooks

  • authPassword accepts up to 2048 characters, and oversized usernames or URLs return 400 instead of 500. (#14356)

Avatars

  • Favicons resolve against the page a redirect lands on. (#14211, fixes #13985)

Migrations

  • Migrations carry function intervals, deployment retention, secret variables, site scopes and start commands, file folders, and more project policies. Function variables are no longer mixed up with a site's. (#14382)
  • A migration whose source or destination stops answering fails instead of staying in processing. (#14330, fixes #14331)

Installer and workers

  • install and upgrade keep docker-compose.override.yml. (#14262)
  • upgrade keeps custom HTTP/HTTPS ports and the HTTPS setting, and ports can be bound to one interface such as 127.0.0.1:80. (#14345, fixes #14346)
Under the hood
  • utopia-php/database 7.4.2, migration 2.1.0, svg-sanitize 1.0 and sdk-for-php 30.2.2. (#14375, #14382, #14285)
  • API specs emit response model defaults and typed array items, so SDK models fill fields that older servers don't send. (#14265, #14266, #14267, #14357, #14368, #14370)
  • Console and the base Validator moved into Utopia\Console and Utopia\Validator. (#14261, #14263)
  • CI runs only the e2e lanes a change can affect, behind required gate jobs and a merge queue. (#14298, #14301, #14391)
Removed

Nothing.

Install
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.5.0
Upgrade

Run the same command with --entrypoint="upgrade", then migrate:

cd appwrite
docker compose exec appwrite migrate

The migration stays on V25. It adds the function interval and Android platform fingerprints columns and widens the webhook httpPass column, and it takes longer the more projects you have. The new compose file moves openruntimes/executor to 1.1.2; existing runtime containers are removed when it starts and cold-start on their next execution. Migrating a project to another install or to Cloud doesn't carry the passkey policy, the password rotation policy or Android signing certificate fingerprints yet, so set them again on the destination. Migrated team memberships get new IDs, so custom membership IDs aren't kept.

If you upgrade with --use-existing-config, change the executor image to openruntimes/executor:1.1.2 yourself. Back up your data first.

Contributors

Thank you to everyone who contributed to 2.5.0:

@ChiragAgg5k @HarshMN2345 @loks0n @levivannoort @eldadfux @ItsRoy69 @imtia33 @Indra55 @okxint @adityaoberai @abnegate @atharvadeosthale @aishwaripahwa12

View originalPermalink
How 2.5.0 went

1.9.7

Added 1
  • New _APP_MIGRATIONS_ALLOWED_HOSTS environment variable lists private hostnames, IPs or CIDR ranges allowed as migration sources, empty by default
Changed 2
  • The release workflow no longer moves the latest image tag, so publishing a 1.9.x patch leaves latest on 2.x
  • The mongodb/mongodb dependency is replaced by utopia-php/mongo 1.5.4, with utopia-php/migration updated to 1.14.2 and the browser service to 0.3.4
Fixed 2
  • The row editor no longer renders every array column as a string input in the Console, now shipped as 8.7.37
  • The build directory passed to tar is quoted so root directories with spaces or quotes build correctly in Functions and Sites
Removed 1
  • The unused and undocumented /v1/cards/cloud* Avatars endpoints have been removed
Security 3
  • Appwrite to Appwrite migrations now reject source endpoints that are not public http(s) addresses and pin source requests to the validated addresses, preventing migrations from targeting internal services
  • A migration whose endpoint is the local instance now authenticates the submitted API key against the source project before reading its database, preventing a project admin from copying another project's databases on the same instance
  • JWTs are rejected once the session they were created from has expired, rather than remaining valid for their own duration
View originalRead the notes
How 1.9.7 went

2.4.0

Added 8
  • Users can upload a custom profile photo with PUT /v1/avatars/photo and remove it with DELETE /v1/avatars/photo
  • GET /v1/avatars/photo serves the custom profile photo ahead of the OAuth2, Gravatar and initials fallbacks
  • A new avatars.write scope covers writes to the custom profile photo
  • Webflow is available as a new OAuth2 sign-in provider
  • With the Appwrite push provider, messages sent to users reach the user on a reserved users/<userId> topic without registering a push target, and the payload includes messageId
  • Webhook requests carry a stable X-Appwrite-Webhook-Delivery-Id header
  • The breached password policy can be set under Auth in the Console, and each user's result is shown in the Console
  • OAuth2 callbacks are checked against a per-flow cookie, and createOAuth2Token and createOAuth2Session accept an optional state parameter that is returned on success and failure URLs
Changed 16
  • Webhook retries are sent only to the endpoints that failed, and a function that already ran is not run again by a retry
  • OAuth2 and OIDC providers, webhooks, messaging webhooks, migration sources, avatar images and identity photos refuse private and reserved addresses, checked on the address each connection and redirect reaches
  • Private hosts can be allowed explicitly via _APP_ALLOWED_INTERNAL_ADDRESSES, and _APP_DNS_EXTERNAL sets the DNS servers used to check migration and avatar hosts (defaults to _APP_DNS)
  • Avatar image, favicon and screenshot URLs with a non-public host now return 400
  • The appwrite-browser container moves to its own network and only reaches public hosts and appwrite
  • A user JWT only works in the project that issued it, over HTTP, Realtime and MQTT
Fixed 8
  • Databases with more than 100 tables open the correct table, and pickers, Export / Import and the schema view list every table
  • Self-hosted GitLab and Gitea owners link to the user's own instance instead of gitlab.com
  • The create bucket dialog, email template preview, project settings and Init page work again
  • Role changes apply without a page reload
  • Impersonation no longer lets DELETE /v1/account delete the target user; MFA checks use the impersonator's own factors
  • JWT requests resolve their session, so MFA checks, the current keyword and session invalidation work with JWTs
  • Exchanging the same token secret twice concurrently creates one session
  • Bad Google and GitHub responses redirect to the failure URL instead of returning a 500
Security 3
  • Updated to the TanStack Start release that fixes CVE-2026-102989
  • Outbound requests from OAuth2, webhooks, messaging, migrations and avatar fetching are blocked from reaching private and reserved addresses
  • OAuth2 callbacks fail with user_oauth2_state_invalid when the per-flow cookie does not match
View originalRead the notes
How 2.4.0 went

2.3.0

Added 3
  • Store verified ID token on identity as providerIdToken when using native ID token sign-in
  • Add Jaspr as an available SSR framework on Sites with Flutter 3.44 runtime
  • Add nightly channel for install and upgrade via --channel nightly flag or _APP_VERSION=X.Y-nightly
Changed 2
  • Build every console link from _APP_CONSOLE_URL setting; remove _APP_CONSOLE_URL_SCHEME and legacy /console/ link shapes
  • Report execution duration as the time the caller waited, including cold start time
Fixed 13
  • Site preview domains redirect to console /auth/preview page instead of 404
  • Member invitations and edits on self-hosted offer and properly save organization-wide Owner and Developer roles
  • File previews, downloads, avatars and deployment downloads load correctly when impersonating a user
  • Datetime picker accepts hours of 10 or more and shows and switches time zone
  • Enum values containing commas are preserved and creating a row with custom ID succeeds
  • Users list pages past 5,000 users and deleted users and teams show proper not-found page
Removed 1
  • Remove dev keys, including the dev key endpoints, X-Appwrite-Dev-Key header, devKey query parameter, devKeys.read/devKeys.write scopes, and devKeys collection
View originalRead the notes
How 2.3.0 went

2.2.0

Added 6
  • Email policies endpoints PATCH /v1/project/policies/deny-disposable-email, deny-free-email, deny-aliased-email and deny-corporate-email now ship in the self-hosted API
  • Email policies entries in GET /v1/project/policies now available on self-hosted
  • Orchestrator reports the cause of a failed build such as unrecognized archive, download returned 404, or out of memory in the build logs
  • POST /v1/messaging/providers/twilio accepts alphanumeric sender IDs such as Appwrite in the from parameter
  • Console includes /.well-known/change-password endpoint for password manager deep-linking to the password screen
  • Console Resend quick setup added for SMTP provider configuration
Changed 7
  • Function and site executions are written to and read from ClickHouse only
  • Execution timestamps are ISO-8601 format again
  • Build durations are recorded as measured rather than capped at the timeout
  • _APP_SMS_FROM no longer mistakes a sender starting with MG for a Messaging Service SID
  • Console Activity and realtime pages are now usable on mobile
  • Manual deployment file picker on macOS accepts .tar.gz archives
  • Console impersonation shows names for recent users and remembers new picks
Fixed 7
  • OAuth2 and VCS redirect routes return JSON errors to SDK requests instead of the HTML error page
  • Rate-limiter Redis socket no longer crashes HTTP worker under concurrent requests by leasing connections from a pool
  • SMS team invitations keep & separators in the redirect URL so apps can read userId and secret
  • Initials avatars for handle-style names such as @ItzNotABug render instead of a blank square
  • Shrinking an encrypted string attribute below 150 characters on update is now rejected
  • Clearing an optional attribute's default with default: null clears it in the stored schema so new documents receive null
  • Loading relationships no longer exceeds the configured query-value limit
Removed 1
  • _APP_EXECUTIONS_DUAL_WRITE flag is removed as executions are ClickHouse only
View originalRead the notes
How 2.2.0 went

2.1.0

Added 7
  • S3-compatible storage endpoint at /v1/s3 authenticated with AWS Signature V4 headers or presigned URLs
  • Automatic crop gravity for image previews with gravity=auto parameter to detect and cache focal points
  • TikTok and Kakao OAuth2 providers
  • Resend OAuth2 scope option for developers
  • Capacitor apps can register capacitor:// as an allowed origin
  • Console 1.1.78 self-hosted build without cloud CDN origin
  • Dart 3.13 and Flutter 3.47 runtimes
Changed 4
  • OpenAPI document is now canonical across all SDK platforms with standard alternatives replacing Appwrite-specific extensions
  • Messaging moved to module structure with no route changes
  • OAuth2 token flow keeps the current session instead of replacing it
  • Console usage breakdowns resolve names for every resource instead of showing truncated IDs
Fixed 9
  • Password recovery endpoint no longer reveals whether an email exists
  • Listing a user's MFA factors reports the recovery code factor
  • Invalid scrypt-modified options return a 400 instead of a server error
  • Personal-data password validator no longer mutates its own state between checks
  • Optional membership fields accept null
  • Unsupported team searches return a query error instead of failing silently
View originalRead the notes
How 2.1.0 went

2.0.0

Added 15
  • Console IV with new navigation model, redesigned resource views, notifications and realtime event tail
  • Appwrite Terminal runs the Appwrite CLI inside the Console with session and project already configured
  • Appwrite Explorer loads project's OpenAPI specification, builds requests with guided forms and sends live calls from the browser
  • VectorsDB handles embeddings with fixed dimension collections, vector storage, optional metadata and HNSW index supporting cosine, dot product or Euclidean distance
  • DocumentsDB handles schemaless JSON documents with different fields per document and field additions as writes rather than migrations
  • Embeddings API turns text into vectors without a separate embedding service
Changed 4
  • PostgreSQL is the default database for new installs with durability left on
  • Git installations are isolated per project with installation endpoints scoped to owning project and signed GitHub App installation state
  • Sites build on the orchestrator backend with framework detection from config files
  • Realtime is cheaper per event with one Swoole worker, document encoded once per event instead of once per subscriber, and presence stored as flags
Fixed 8
  • Index listing looked up by collection id instead of sequence, preventing collections sharing an id across databases from seeing 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 1
  • GET /v1/health/executions endpoint
View originalRead the notes
How 2.0.0 went

2.0.0-rc.3

Pre-release
Added 3
  • Self-hosted GitLab support via _APP_VCS_GITLAB_ENDPOINT for repository integration and _APP_CONSOLE_GITLAB_ENDPOINT for console sign-in
  • Google sign-in to the console via _APP_CONSOLE_GOOGLE_APP_ID and _APP_CONSOLE_GOOGLE_SECRET
  • Execution logs dual-write to ClickHouse via _APP_EXECUTIONS_DUAL_WRITE, _APP_CONNECTIONS_DB_EXECUTIONS, and _APP_POOL_SIZE_EXECUTIONS
Changed 2
  • Realtime is cheaper per event with one Swoole worker, document encoded once per event instead of once per subscriber, and presence stored as flags
  • Console updated to 1.1.8, Open Runtimes executor to 0.29.0, orchestrator to 1.9.2, and utopia-php/database to 7.3.4
Fixed 11
  • PostgreSQL no longer ships with durability turned off by removing fsync=off, synchronous_commit=off, and full_page_writes=off from the bundled compose
  • Build output with _APP_STORAGE_DEVICE set to S3-compatible backend now fails the build on failed upload instead of leaving deployments with nothing to run
  • Git installations are now isolated per project with installation repository endpoints scoped to the owning project
  • Git installation callback now redirects back to the console with an actionable error instead of dead-ending
  • Index listing now returns the right indexes instead of using collection id instead of sequence
  • Transactions now reject array queries up front instead of throwing on commit
Removed 1
  • GET /v1/health/executions endpoint
View originalRead the notes
How 2.0.0-rc.3 went

2.0.0-rc.2

Pre-release
Added 3
  • Infrastructure migrations are versioned so volume and file changes run per release during an upgrade
  • Cloudflare Dashboard and Resend OAuth2 providers are now available
  • The _APP_OPTIONS_ABUSE_INCREASED_LIMIT_PROJECTS environment variable raises rate limits for named projects
Changed 5
  • DocumentsDB and VectorsDB routes return general_service_disabled until enabled and the engine is provisioned, as they require MongoDB and PostgreSQL which are not deployed by default
  • HTTPS is disabled for loopback, .local, .internal and bare IPs in the installer, and enabled for real domains
  • The account step is now optional and accepts a name
  • SVG files are served as attachments from the file view endpoint
  • Open Runtimes orchestrator updated to 1.8.3 with CDN, migration, span and websocket updates
Fixed 4
  • Build artifacts now survive the upgrade from 1.9.x instead of being left behind by the 2.0 builds volume rename
  • The installer now applies the selected worker topology instead of installing a combined stack when Separate was chosen
  • Separate topology now starts the usage and resource stats workers
  • Proxy rule domains are stored lowercase so lookups match regardless of how a domain was entered
View originalRead the notes
How 2.0.0-rc.2 went

2.0.0-rc.1

Pre-release
Added 12
  • Completely rebuilt console with new navigation model, redesigned resource views, and built-in terminal
  • PostgreSQL support as the default database
  • Embeddings API for generating text embeddings
  • Usage service for self-hosted instances with resource-scoped metrics
  • Console notifications
  • Gitea and Origin VCS providers
View originalRead the notes
How 2.0.0-rc.1 went

1.9.6

Changed 3
  • Update the self-hosted Console image to 8.7.30 for recent self-hosted VCS, error rendering, build specification, and security fixes
  • Update Open Runtimes Executor to 0.25.4 for recent build and S3 custom endpoint fixes
  • Update the Browser service to 0.3.3 so screenshot headers work with custom internal Appwrite origins
Fixed 7
  • Automatically repair missing providerBranches and providerPaths attributes on Functions and Sites when upgrading from 1.9.5
  • Make migration attribute batches idempotent when some attributes already exist
  • Replace the side-effecting Appwrite container healthcheck with the public version endpoint
  • Respect _APP_SITES_RUNTIMES when listing frameworks and creating or updating Sites
  • Wait for a writable MongoDB replica-set primary before marking the service healthy
  • Correct database and queue connectivity reporting in the doctor task
  • Allow additional time for the self-hosted installer to pull images and start Compose services
View originalRead the notes
How 1.9.6 went

1.9.5

Added 19
  • Added public endpoints for project variables, keys, policies, SMTP, auth methods, mock phones, services, protocols, platforms, OAuth2 providers, and organization projects
  • Added public proxy management endpoints
  • Added JSON import/export references for DocumentsDB and VectorsDB and larger database ID support
  • Added BigInt attributes and columns for Databases and TablesDB
  • Added backup, API key, project variable, webhook, policies, SMTP, custom domains, email templates, and OAuth provider migrations
  • Added migration API support and source host validation
Changed 1
  • Improved MFA authenticator ordering and coverage
View originalRead the notes
How 1.9.5 went

1.9.5-rc.2

Pre-release
Added 1
  • Expose NFT config
Changed 2
  • Complete V24 schema migrations
  • Generate installer compose from base compose
Fixed 1
  • Fix Composer source fallback in CI builds
Removed 1
  • Remove sunset SDK entries
View originalRead the notes
How 1.9.5-rc.2 went

1.9.5-rc.1

Pre-release
Added 8
  • Add support for blocking disposable email addresses
  • Add public platform API
  • Add public keys API
  • Add X OAuth 2.0 provider
  • Add cache purge parameter and improved ttl semantics to databases
  • Distinguish user types in audit logs
  • Extract session alert email into Mails listener
  • Add tracing spans for storage file preview timing and cache state
Changed 2
  • Change Usage class from final to non-final
  • Migrate from static Http::setResource() to DI Container
Fixed 10
  • Update Yahoo OAuth scopes from deprecated scopes
  • Add CORS headers to error responses
  • Persist session before purging user cache in email/password login
  • Ensure realtime event payload is populated for atomic operations
  • Use cURL cookie engine for RFC 6265 compliant cookie handling in e2e client
  • Add backwards-compat origin validation for deprecated platform types
View originalRead the notes
How 1.9.5-rc.1 went

1.9.0

Added 21
  • MongoDB support
  • New varchar, text, mediumtext, and longtext attribute types for string data
  • Integer attributes support int64 format for large numbers
  • Expose column bytes used and bytes free per collection/table
  • Document list queries can be cached with configurable TTL
  • Webhooks API for creating, listing, and managing webhook configurations
View originalRead the notes
How 1.9.0 went

1.9.0-rc.6

Pre-release
Fixed 1
  • Clear stale install data before starting new installation
View originalRead the notes
How 1.9.0-rc.6 went

1.9.0-rc.5

Pre-release
Fixed 1
  • Guard against missing Host header in dispatch
View originalRead the notes
How 1.9.0-rc.5 went

1.9.0-rc.4

Pre-release
Added 1
  • Add Rust SDK support
Changed 2
  • Improve SDK PR summary with platform grouping and clipboard copy
  • Use injected user document for privilege checks
Fixed 6
  • Revert bulk upsertDocuments auth
  • Fix missing deployment on new branch without PR
  • Fix issues in generated specs
  • Merge duplicate SDK responses in VCS repository list and detections
  • Remove INDEX_SPATIAL from DocumentsDB index creation
  • Fix installer
View originalRead the notes
How 1.9.0-rc.4 went
View all

Discussion

If you publish Appwrite, you can claim this product by proving you administer its repository.