megachangelog
Announcement2.0.0-rc.3

Appwrite 2.0.0-rc.3 Release Candidate

Third release candidate for Appwrite 2.0.0 self-hosted deployment. Includes critical fixes for PostgreSQL durability settings, S3 storage build output handling, Git installation security and isolation, console authentication improvements, and performance optimizations for realtime events and billing accuracy.

Third release candidate for self-hosted 2.0.0. Pre-release — not recommended for production.

Highlights

Changes since 2.0.0-rc.2.

  • PostgreSQL no longer ships with durability turned off. The bundled compose passed fsync=off, synchronous_commit=off and full_page_writes=off, so a crash or power loss could leave the database corrupt. All three are gone.
  • Builds survive non-local storage. With _APP_STORAGE_DEVICE set to any S3-compatible backend, build output went to a local path nothing reads, leaving deployments ready with nothing to run. A failed upload now fails the build.
  • Git installations are isolated per project. Installation repository 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.
  • The Git installation callback no longer dead-ends. GitHub, GitLab, Gitea and Bitbucket all redirect back to the console with an actionable error.
  • Self-hosted GitLab works. _APP_VCS_GITLAB_ENDPOINT for repository integration, _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.
  • Index listing returns the right indexes. Lookups used 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/max are capped to what the column can hold.
  • teams.total matches confirmed memberships. Four paths could drift it, most visibly deleting a membership after a primary-owner transfer.
  • Buckets are no longer left half-created when their files collection fails.
  • Realtime is cheaper per event — one Swoole worker, the document encoded once per event instead of once per subscriber, presence stored as flags.
  • Build billing is accurate — skipped when the build never started, capped at the build timeout, tagged with the resource id.
  • Execution logs 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.
  • The console works over plain HTTP again. crypto.randomUUID is only exposed on secure origins, so on a self-hosted install reached over HTTP at a LAN IP or an internal hostname every project page died with a full-page error. That is a setup the installer explicitly provisions, since it turns HTTPS off for loopback, .local, .internal and bare IPs.
  • New console 1.1.8, Open Runtimes executor 0.29.0, orchestrator 1.9.2, utopia-php/database 7.3.4.

Removed

  • GET /v1/health/executions.

Try it

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-rc.3

Upgrading from 1.9.x uses the same command with --entrypoint="upgrade". Back up your data first.

Most useful things to exercise: functions and sites with _APP_STORAGE_DEVICE pointed at an S3-compatible backend, and connecting one Git installation from more than one project.

release-candidateself-hosteddatabasestoragesecuritygit

Source: original entry ↗