What appwrite/appwrite shipped
Written by FoxPlug from the repository's own releases; not affiliated with Appwrite. Paste your own repository in the box below and FoxPlug writes the same weekly update for your product. This page is an automatic summary of the releases, pull requests and commits in github.com/appwrite/appwrite; Appwrite did not write it and does not use or endorse FoxPlug. Every line links to the change it describes.
Get a weekly update like this for your product, free
Week of November 2, 2026
What shipped
- Encrypted buckets now encrypt every file of any size before it reaches the storage device, using AES-256-GCM in 64 KiB segments that are each authenticated. Pull request #15397
- Added account switching so one browser can hold several sessions at once and switch which account is active, keeping each account's own sessions separate. Pull request #15345
- Announced Appwrite Push, the MQTT push provider, with an announcement, changelog entry and docs. Pull request #14588
- Added Catchall to the Sites template gallery, a shared test inbox built on Function email triggers. Pull request #15383
- The response cache can now be stored in any storage device, configured through a storage cache connection and a cache percentage. Pull request #15354
- Firewall rule forms in the console can set schedules that limit a rule to certain days and an optional time window on a chosen timezone. Pull request #15307
- Device responses now hide provider access and refresh tokens that were previously returned for every session on the device, including other accounts'. Pull request #15398
- Requests for robots.txt and humans.txt on an API custom domain now return 404 instead of an empty 500. Pull request #15362
- Pro projects that used more than their included database reads no longer show the full-screen plan limit curtain while their API keeps working. Pull request #15361
- Devices no longer list sessions that were signed out elsewhere, which previously left accounts in the switcher and caused a 500 when switching. Pull request #15389
Why it matters
This week brings account switching to clients, so one browser can hold several accounts and switch between them, and it changes storage encryption so every upload chunk is encrypted before it is stored, regardless of file size. A new push provider, Appwrite Push, is announced with setup docs, and the Sites template gallery gains the Catchall template. Several fixes target the console and router, including hidden provider tokens in device responses, handling of robots and humans on API domains, and paid projects no longer being locked over included usage.
Changelog entry
- Encrypted buckets now encrypt every upload chunk before it is stored, in AES-256-GCM segments. Pull request #15397
- Added account switching so a browser can hold several sessions and switch the active account. Pull request #15345
- Announced Appwrite Push, the MQTT push provider, with docs and Apple one-click APNs setup. Pull request #14588
- Added the Catchall site template to the Sites template gallery. Pull request #15383
- Response cache can now be stored in any storage device. Pull request #15354
- Console firewall rules can now set day and time-window schedules. Pull request #15307
- Device responses no longer include provider access and refresh tokens. Pull request #15398
- Devices stop listing sessions that were signed out elsewhere. Pull request #15389
- Robots.txt and humans.txt on API domains now return 404 instead of an empty 500. Pull request #15362
- Paid projects over included usage no longer show the plan limit curtain. Pull request #15361
- Function and site responses with a content-length are now sent buffered instead of chunked. Pull request #15356
- Catchall template screenshots are now bundled so the gallery card shows an image. Pull request #15386
Account switching arrives: one browser can now hold several signed-in accounts and switch between them. Push is announced with a new MQTT provider and docs. Encrypted buckets now encrypt every file of any size before it is stored. Catchall joins the Sites template gallery.
This week: account switching lets one browser hold several signed-in accounts and switch the active one, keeping each account's own sessions separate. Appwrite Push, the MQTT push provider, is announced with setup docs. Encrypted buckets now encrypt every file of any size before it reaches the storage device, in authenticated segments. Catchall, a shared test inbox built on Function email triggers, joins the Sites template gallery. Fixes cover hidden provider tokens in device responses, robots and humans returning 404 on API domains, and paid projects no longer locked over included usage.
Week of October 26, 2026
What shipped
- Added usage monitors and alerts: monitors watch project usage, open alerts by email and in the console, and every alert is also a project event for webhooks, functions and realtime. Pull request #15079
- The console can start a project without an account through POST /v1/zero, build it for an hour, then claim it. Pull request #14567
- Made TOTP codes single-use, so a code already accepted for one challenge cannot complete MFA on another session during the same 30s step. Pull request #15154
- The last-owner rule now applies to every caller, closing the gap where an API key could demote or delete the only owner of a team. Pull request #15153
- Capped migration authority to the creating key's scopes instead of running destination writes with a key holding every project scope. Pull request #15145
- MFA now stays in force when an unverified email or phone is claimed, instead of being turned off along with the account's authenticators. Pull request #15144
- Site deployment screenshots are now readable by the team a project moves to, fixing 404s on screenshot previews after a team change. Pull request #15157
- Saved Indian cards without a mandate get a Set up auto-pay action, so automatic charges stop needing an OTP each time. Pull request #15049
- The console now offers the Start plan in 15 more countries, each with its own launch banner for 14 days. Pull request #15142
- The Activity page default window now stays inside plan retention so it no longer lands on the API limit. Pull request #15164
Why it matters
This week tightened a set of security and correctness gaps: TOTP codes are now single-use, the last-owner rule holds for every caller, migration writes are limited to the creating key's scopes, MFA survives claiming an unverified address, and execution header values reject control characters. It also added usage monitors and alerts, anonymous project start with later claim, auto-pay setup for saved Indian cards, and the Start plan in 15 more countries. Fixes to screenshot access after team moves, cache eviction safety and worker startup cost round out changes people using the project will notice.
Changelog entry
- Added usage monitors and alerts, delivered by email, in the console, and as project events for webhooks, functions and realtime. Pull request #15079
- The console can create a project without an account and claim it later. Pull request #14567
- TOTP codes are now single-use per 30s step. Pull request #15154
- The last-owner rule now applies to every caller, including API keys. Pull request #15153
- Migrations now run destination writes with the creating key's scopes only. Pull request #15145
- MFA stays on when an unverified email or phone is claimed. Pull request #15144
- Execution header values now reject control characters. Pull request #15143
- Site deployment screenshots are now readable by the team a project moves to. Pull request #15157
- Added a Set up auto-pay action for saved Indian cards without a mandate. Pull request #15049
- The Activity page default window now stays inside plan retention. Pull request #15164
- The Start plan is now offered in 15 more countries. Pull request #15142
- Fixed the Pageviews chart on mobile properties to read from the metrics series. Pull request #15050
This week: usage monitors and alerts, single-use TOTP codes, the last-owner rule enforced for every caller, migration writes capped to the creating key's scopes, MFA kept on when an unverified address is claimed, and the Start plan in 15 more countries.
This week brought usage monitors and alerts to projects: monitors watch usage, open alerts by email and in the console, and every alert is also a project event for webhooks, functions and realtime. Security fixes landed too: TOTP codes are single-use, the last-owner rule applies to every caller including API keys, migration writes are capped to the creating key's scopes, and claiming an unverified email or phone no longer turns MFA off. Screenshots after a project team change now load for the new team. Saved Indian cards without a mandate get a Set up auto-pay action, and the Start plan is offered in 15 more countries.
Week of October 19, 2026
What shipped
- Appwrite 2.6.2 shipped as a security release for self-hosted 2.6 deployments, carrying hardening across auth, API keys, databases, realtime, GraphQL, storage, VCS, functions, sites, migrations and messaging, plus a patched Brotli runtime. Release
- Appwrite 1.9.10 shipped as a security release for self-hosted 1.9 deployments, backporting the 2.6.2 hardening across the same services and moving the runtime to a patched Brotli. Release
- A changelog entry documents the Brotli decoder vulnerability CVE-2026-111497, noting Cloud is already patched and self-hosted installs should upgrade to 2.6.2 or 1.9.10. Pull request #14921
- The HTTP adapter now neutralizes client-controlled Swoole upload
tmp_namevalues, closing an arbitrary file read and an arbitrary file deletion against Swoole-based consumers. Pull request #14897 - Phone tokens and invite verification are now tied to the address they were sent to, so proof of control stops working after an account moves to a different phone number or email address. Pull request #14819
- User import now bounds hash costs, password updates handle the empty update case, and ephemeral API keys must declare a purpose. Pull request #14825
- Keys and JWTs are held to their original grant: they cannot hand out scopes they do not hold, set a later expiry than their own, or let a JWT create keys or the next JWT. Pull request #14888
- Migration and certificate check connections are now confined to public addresses, closing two endpoints that could reach internal targets. Pull request #14794
- Function and webhook subscriptions to row and document upsert events now validate actions against their own pattern level instead of returning 400
general_argument_invalid. Pull request #14742 - Deleting a deployment mid-build now clears its build output, so no orphaned artifact is left in storage without a row owning it. Pull request #14927
Why it matters
This week is dominated by two security releases, 2.6.2 and 1.9.10, which backport a broad batch of fixes across auth, keys, databases, storage, functions and messaging for self-hosted installs. Users on those lines should upgrade to get the hardening and the patched Brotli runtime, and Cloud is already patched. A handful of smaller fixes also landed for deployment deletes, event validation and upload path handling.
Changelog entry
- 2.6.2 security release for self-hosted 2.6 deployments, with hardening across auth, keys, databases, realtime, GraphQL, storage, VCS, functions, sites, migrations and messaging. Release
- 1.9.10 security release for self-hosted 1.9 deployments, backporting the 2.6.2 hardening. Release
- Changelog entry for the Brotli decoder vulnerability CVE-2026-111497; Cloud is patched, self-hosted upgrades to 2.6.2 or 1.9.10. Pull request #14921
- 1.9.x moves to appwrite/base 1.4.6, requiring brotli-libs 1.2.1 to fix the Brotli decoder out-of-bounds write. Pull request #14912
- Swoole adapter neutralizes client-controlled upload
tmp_namevalues, closing arbitrary file read and deletion. Pull request #14897 - Phone tokens and invite verification are tied to the address they reached. Pull request #14819
- Imported hash costs are bounded, empty password updates are fixed, and ephemeral keys require a purpose. Pull request #14825
- Keys and JWTs are held to their original grant. Pull request #14888
- Migration and certificate check connections are confined to public addresses. Pull request #14794
- Row and document upsert events now validate against their own level for function and webhook subscriptions. Pull request #14742
- Deleting a deployment mid-build now clears its build output. Pull request #14927
- Console shows the domain limit error when adding a domain on a plan already at its limit. Pull request #14920
Appwrite 2.6.2 and 1.9.10 are out: security releases for self-hosted installs on the 2.6 and 1.9 lines. Hardening across auth, keys, databases, realtime, storage, functions, sites and messaging, plus a patched Brotli runtime. Upgrading is recommended.
Appwrite 2.6.2 and 1.9.10 are published as security releases for self-hosted deployments on the 2.6 and 1.9 lines. 2.6.2 brings the hardening merged since 2.6.1 across auth, API keys, databases, realtime, GraphQL, storage, VCS, functions, sites, migrations and messaging, and moves the runtime to a patched Brotli. 1.9.10 backports the same work to the 1.9 line. Appwrite Cloud is already patched, and self-hosted installs on either line should upgrade. Alongside the releases, this week fixed orphaned build output when deleting a deployment mid-build and made row and document upsert events valid for function and webhook subscriptions.
Week of October 12, 2026
What shipped
- Audit event finds now sort by a total order, so cursor paging no longer skips or repeats rows. Pull request #14635
- Password policies accept custom deny lists for dictionary and personal data rules, so apps can block their own terms. Pull request #14499
- The Account module gains listMemberships, letting client apps list a user's team memberships without admin scopes. Pull request #14495
- Key secrets are hidden from callers without the keys write scope. Pull request #14600
- Key secrets are blanked unless the request was authorized with the keys write scope, whatever the caller type. Pull request #14603
- Deleting a project now removes its storage objects on S3 instead of leaving them behind. Pull request #14626
- The usage database adapter setup adds missing attributes and indexes to an existing collection. Pull request #14636
- A join without an alias is read under its collection name instead of throwing an error. Pull request #14594
- The Go SDK is marked stable and the Rust SDK version is listed. Pull request #14616
- The console project environments switcher is wired to the environments API, replacing a hardcoded list. Pull request #14541
Why it matters
This week fixed several correctness problems: audit paging, key secret exposure, project deletion leaving S3 storage behind, and join aliases. It also added custom password deny lists and a client endpoint for listing memberships. People running apps on the project get more predictable paging, tighter key handling and fewer manual workarounds.
Changelog entry
- Audit event finds sort by a total order, fixing skipped and repeated rows in cursor paging. Pull request #14635
- Password dictionary and personal data policies accept custom deny lists. Pull request #14499
- New account.listMemberships endpoint for client SDKs. Pull request #14495
- Key secrets are hidden from callers without keys write scope. Pull request #14600
- Key secrets are gated on the caller's effective scopes. Pull request #14603
- Deleting a project now deletes its storage objects on S3. Pull request #14626
- Storage addresses the bucket correctly on path-style S3 endpoints. Pull request #14628
- Usage adapter setup adds missing attributes and indexes. Pull request #14636
- Joins without an alias are read under their collection name. Pull request #14594
- Increment and decrement errors name the bound reached. Pull request #14593
- Increment and bulk write errors name the record, field and ID. Pull request #14582
- Go SDK marked stable and Rust SDK version listed. Pull request #14616
This week: audit event paging now sorts by a total order, key secrets are hidden without the keys write scope, deleting a project cleans up its S3 storage, and password policies accept custom deny lists. Client apps can list memberships, and joins without an alias read under thei
This week's changes: audit event finds now use a total order so cursor paging no longer skips or repeats rows; key secrets are hidden from callers without the keys write scope; deleting a project removes its S3 storage objects. Password policies support custom deny lists, the Account module adds listMemberships for client apps, joins without an alias read under their collection, and the usage adapter setup adds missing attributes and indexes. The Go SDK is now marked stable.
Week of October 5, 2026
What shipped
- Security patch release closes two migration paths that could read unreachable data, expires JWTs with their session, and hardens the builds worker. Release
- Functions can now be scheduled on an interval of every N minutes instead of only cron expressions. Pull request #14231
- Function scheduling in the console is configurable with None, Interval presets, and Cron modes. Pull request #14319
- Console sign-in with a passkey is available. Pull request #14260
- Enabling passkeys now asks for the domain and suggests one from the project's web platforms. Release
- Passkeys can be turned on through a domain picker rather than a disabled toggle. Pull request #14313
- Queue publishing retries through a NATS server restart instead of dropping the publish. Pull request #14312
- Usage stats writes to ClickHouse are batched across queue messages. Pull request #14291
- CI runs only the e2e lanes a change can affect. Pull request #14301
- The storage preview limit is checked against the original file size for encrypted files. Pull request #14284
Why it matters
This week brings a security patch that closes two migration paths and tightens JWT and builds handling, plus interval schedules for functions so runs no longer need a cron expression. Console passkey sign-in and a domain picker make enabling passkeys a single decision. Queue publishing now survives a NATS restart, and CI spends less time on unrelated e2e lanes.
Changelog entry
- Appwrite 1.9.7 security patch: closes two migration paths, expires JWTs with their session, hardens the builds worker. Release
- Interval schedules for functions: run every N minutes. Pull request #14231
- Interval made optional on the Function and Schedule response models. Pull request #14311
- Function updates that omit interval no longer clear an interval set elsewhere. Pull request #14307
- Console function intervals with None, Interval presets and Cron modes. Pull request #14319
- Console passkey sign-in. Pull request #14260
- Passkeys enabled through a domain picker instead of a disabled toggle. Pull request #14313
- Passkey origins taken from web platforms. Pull request #14310
- Queue publishing retries through a NATS server restart. Pull request #14312
- Queue work handed back without starting no longer spends a delivery attempt. Pull request #14253
- Usage stats writes batched across queue messages. Pull request #14291
- Storage preview limit checked against the original file size. Pull request #14284
Appwrite 1.9.7 is out as a security patch: two migration paths closed, JWTs expire with their session, builds worker hardened. Also this week: interval schedules for functions, passkey sign-in in the console, and queue publishing that survives a NATS restart.
This week shipped Appwrite 1.9.7, a security patch for the 1.9 line. It closes two migration paths that could read data a user should not reach, expires JWTs together with their session, and hardens the builds worker. Upgrading from 1.9.6 needs no migration. Functions can now run on an interval of every N minutes instead of only a cron expression, and the console lets you configure None, Interval and Cron modes. Passkey sign-in is available in the console, and enabling passkeys asks for the domain, suggested from the project's web platforms. Queue publishing keeps retrying through a NATS server restart rather than dropping the publish, usage stats writes are batched, and CI now runs only the e2e lanes a change can affect.
Week of September 28, 2026
What shipped
- SSRF protection now built into the HTTP client to block requests to restricted destinations when Appwrite fetches URLs from OAuth2 providers, webhooks, avatars, and other user-specified sources. Pull request #13998
- Orchestration library absorbed into the monorepo at packages/orchestration as part of the ongoing monorepo consolidation. Pull request #14054
- Queue Redis connections can now be built from a DSN string instead of requiring manual credential extraction. Pull request #14053
- MQTT broker now reports telemetry including active connections, connection results, message rates, and per-project usage via OpenTelemetry. Pull request #14043
- 24 list endpoints now support the total parameter for consistency, allowing clients to skip the count query when total=false. Pull request #13991
- ClickHouse system log tables are now capped to prevent unbounded growth on long-running instances. Pull request #14021
- Impersonated realtime connections now stay synchronized with impersonator session changes. Pull request #14024
- Email-password session creation accepts an optional duration parameter to override the project maximum session length. Pull request #14004
- DELETE /v1/avatars/photo now stores the built-in placeholder as the user's photo instead of clearing it. Pull request #14065
- GitHub OAuth sign-in no longer returns 500 when GitHub's user payload is missing. Pull request #14093
Why it matters
This week addresses security gaps across OAuth, realtime, storage, and messaging while improving infrastructure observability and API consistency. Several fixes close authorization flaws in multiuser scenarios, and the monorepo consolidation continues to simplify the codebase.
Changelog entry
- Security: SSRF protection integrated into HTTP client for OAuth2, webhooks, avatars, and other URL fetches Pull request #13998
- Security: Multiple high/medium fixes including default signing keys, installer auth, session invalidation, and recovery token reuse Pull request #14048
- Security: One-shot runtime marking for site screenshot captures in edge worker migrations Pull request #14050
- Observability: MQTT broker telemetry with connection metrics and per-project usage tracking Pull request #14043
- Infrastructure: ClickHouse system log tables now capped with retention TTL to prevent unbounded growth Pull request #14021
- Realtime: Impersonated connections now track impersonator session lifecycle changes Pull request #14024
- API: Email-password sessions accept optional duration parameter to override project maximum Pull request #14004
- Queue: Redis connections now built from DSN strings instead of manual credential extraction Pull request #14053
- API: 24 list endpoints now support total parameter for skipping count queries Pull request #13991
- Infrastructure: Orchestration library absorbed into monorepo packages Pull request #14054
- Avatars: DELETE /v1/avatars/photo now stores placeholder instead of clearing the photo Pull request #14065
- OAuth: GitHub sign-in no longer fails with 500 when user payload is missing Pull request #14093
This week: SSRF protection hardened, realtime impersonation fixed, ClickHouse logs capped, MQTT telemetry added, and 24 list endpoints gain total parameter for consistency.
Appwrite shipped significant security hardening this week: SSRF protection now built into the HTTP client to restrict OAuth, webhook, and avatar URL fetches; authorization flaws in storage resume, messaging subscribers, and MFA during impersonation closed; and realtime connections now properly track impersonator state changes. Infrastructure improvements include ClickHouse log table capping for long-running instances, MQTT broker telemetry via OpenTelemetry, and 24 list endpoints gaining the total parameter for API consistency.
Week of September 21, 2026
What shipped
- Console moved into packages/console so Appwrite loads it directly instead of as an external dependency. Pull request #13925
- Storage moved into packages/storage to be loaded directly by Appwrite. Pull request #13926
- CDN moved into packages/cdn to be loaded directly by Appwrite. Pull request #13923
- Servers moved into packages/servers to be loaded directly by Appwrite. Pull request #13921
- OpenAPI specs now include standard request examples that SDK generators can consume. Pull request #13918
- Appwrite push provider can deliver per-user notifications without requiring a device push target. Pull request #13876
- OAuth2 provider settings now support a prompt parameter for providers that document it. Pull request #13905
- Range request handling now accepts single-byte ranges and past-EOF range bounds per RFC 9110. Pull request #13824
- VCS installation response now includes the organization URL for self-hosted GitLab and Gitea. Pull request #13875
- Self-hosted installer usage reports now post to cloud's installations endpoint instead of a separate growth server. Pull request #13917
Why it matters
This week continues the monorepo consolidation effort, absorbing multiple Utopia PHP packages directly into Appwrite so they load locally rather than as external dependencies. Alongside the infrastructure work, several user-facing features shipped: improved push notifications, better OAuth2 configuration, RFC-compliant range requests, and enhanced VCS integration for self-hosted instances.
Changelog entry
- Console package absorbed into packages/console Pull request #13925
- Storage package absorbed into packages/storage Pull request #13926
- CDN package absorbed into packages/cdn Pull request #13923
- Servers package absorbed into packages/servers Pull request #13921
- Self-hosted installer now reports usage to cloud's installations endpoint Pull request #13917
- Replaced utopia-php/fetch with packages/client at all call sites Pull request #13893
- Added standard OpenAPI request examples for SDK generators Pull request #13918
- Packages/client now caps redirect hops and resends in-memory bodies on 307/308 Pull request #13910
- Added prompt setting to OAuth2 provider configuration Pull request #13905
- Appwrite push provider can deliver per-user notifications without device targets Pull request #13876
- Fixed storage range requests to accept single-byte and past-EOF ranges per RFC 9110 Pull request #13824
- VCS installation response now includes organization URL Pull request #13875
This week we absorbed console, storage, CDN, and servers into packages, improved OAuth2 settings with prompt parameter support, enabled per-user push notifications without device targets, and fixed RFC 9110 range request handling.
This week brought significant progress on Appwrite's monorepo consolidation, absorbing console, storage, CDN, and servers packages directly into the codebase. We also shipped feature improvements: OAuth2 providers now support prompt parameters, push notifications work per-user without device targets, range requests comply with RFC 9110, and self-hosted VCS installations expose organization URLs. The infrastructure work reduces external dependencies while the feature work enhances developer experience across messaging and VCS integrations.
Week of September 14, 2026
What shipped
- Appwrite now includes a native MQTT 5.0 push broker as a self-hosted alternative to FCM, allowing devices to connect, authenticate with JWT or session, and receive push messages. Pull request #13372
- Email verification and password recovery now support OTP-based flows with four new Account API endpoints, removing the need for web redirects or deep linking in mobile apps. Pull request #13677
- A password-pwned project policy was added to check passwords against the Have I Been Pwned breach database and reject breached passwords with HTTP 400. Pull request #13702
- Redis cache payloads are now stored using the igbinary codec instead of JSON for improved performance. Pull request #13732
- Execution duration now consistently reports wall clock time across all trigger paths, including cold start. Pull request #13754
- Jaspr SSR framework support was added, reusing the flutter-3.44 runtime image. Pull request #13710
- The Bus library was moved to packages/bus as the second step of absorbing Utopia libraries into the monorepo. Pull request #13700
- ID token sessions now only offer Apple and Google as valid OAuth providers instead of all 52 providers. Pull request #13759
- Deployments are now published as ready only after they are executable, preventing clients from fetching empty deploymentIds. Pull request #13741
- SMTP connections are now pooled and reused across concurrent mail sends instead of creating new connections per send. Pull request #13722
Why it matters
This week brings significant additions to authentication and push infrastructure with OTP email verification, native MQTT push support, and password security checks. Performance improvements across caching and SMTP, plus continued monorepo consolidation of Utopia libraries, strengthen the platform's core capabilities.
Changelog entry
- Appwrite Native MQTT Push Broker: Self-hosted MQTT 5.0 push broker with device authentication via JWT or session Pull request #13372
- OTP Support: Email verification and password recovery now support OTP-based flows with four new Account API endpoints Pull request #13677
- Password Pwned Policy: New password-pwned project policy checks against Have I Been Pwned breach database Pull request #13702
- Cache Codec: Redis cache payloads now stored with igbinary codec for improved performance Pull request #13732
- Execution Duration: Wall clock time now reported consistently across all execution trigger paths Pull request #13754
- Jaspr Framework: Added SSR adapter support reusing flutter-3.44 runtime Pull request #13710
- ID Token Sessions: Restricted to Apple and Google OAuth providers only Pull request #13759
- Deployment Ready State: Deployments published as ready only after becoming executable Pull request #13741
- SMTP Pooling: Concurrent mail sends now share pooled SMTP connections Pull request #13722
- Monorepo: Bus library absorbed into packages/bus with full dependency management Pull request #13700
New in Appwrite: OTP-based email verification and password recovery for mobile apps, native MQTT push broker alternative to FCM, password-pwned detection, Redis igbinary caching, and pooled SMTP connections.
This week's Appwrite updates focus on authentication improvements and performance: OTP support for email verification and password recovery eliminates web redirects for mobile; a native MQTT 5.0 push broker offers self-hosted FCM alternative; password-pwned checking blocks breached passwords; Redis caching switches to igbinary codec; SMTP connections are pooled for efficiency; and the monorepo consolidation continues absorbing Utopia libraries.