docs: add databases content#3018
Conversation
Add the docs, blog post, and changelog entry for the dedicated databases launch. Covers managed PostgreSQL, MySQL, MariaDB, and MongoDB engines on Appwrite Cloud, with high availability, point-in-time recovery, branching, extensions, a connection pooler, and a managed SQL API. * 11 docs pages under products/databases/dedicated (overview, specifications, connect, high-availability, backups, branches, extensions, pooler, sql-api, network, monitoring) wired into the databases sidebar. * Cross-link callout from the main databases overview to the new section. * Hide the "new TablesDB API" banner on the dedicated routes since it's scoped to the document store. * Announcement blog post with 8 FAQs. * Changelog entry for 2026-05-21. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Appwrite WebsiteProject ID: Website (appwrite/website)Project ID: Tip Sites auto-generate unique domains with the pattern https://randomstring.appwrite.network |
There was a problem hiding this comment.
Pull request overview
Launches the customer-facing documentation and announcement content for Appwrite Cloud Dedicated databases (managed PostgreSQL/MySQL/MariaDB/MongoDB), and wires the new docs section into the existing Databases documentation navigation.
Changes:
- Adds a new Dedicated databases docs section (overview + 10 feature pages) under
docs/products/databases/dedicated/. - Updates Databases docs landing + sidebar layout to surface Dedicated databases and hide the TablesDB “New API” banner on dedicated routes.
- Adds an announcement blog post and a changelog entry linking to the blog + docs.
Reviewed changes
Copilot reviewed 15 out of 15 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| src/routes/docs/products/databases/dedicated/+page.markdoc | Adds Dedicated databases overview (engines, regions, feature cards, limits, billing). |
| src/routes/docs/products/databases/dedicated/specifications/+page.markdoc | Adds specs/pricing, free tier caps, overage/add-ons, resize behavior guidance. |
| src/routes/docs/products/databases/dedicated/connect/+page.markdoc | Documents credential retrieval, connecting via CLIs/drivers, password rotation, extra users. |
| src/routes/docs/products/databases/dedicated/high-availability/+page.markdoc | Documents HA modes, enabling HA, auto/manual failover behavior, limits. |
| src/routes/docs/products/databases/dedicated/backups/+page.markdoc | Documents backups, retention, PITR, restore/verify flows, encryption/storage targets. |
| src/routes/docs/products/databases/dedicated/branches/+page.markdoc | Documents branching from snapshots + CI preview workflow example. |
| src/routes/docs/products/databases/dedicated/extensions/+page.markdoc | Documents PostgreSQL extension management endpoints and limits. |
| src/routes/docs/products/databases/dedicated/pooler/+page.markdoc | Documents per-DB pooler config, modes, read/write splitting, sizing guidance. |
| src/routes/docs/products/databases/dedicated/sql-api/+page.markdoc | Documents SQL API enablement/config, execution, bindings, errors, audit behavior. |
| src/routes/docs/products/databases/dedicated/network/+page.markdoc | Documents hostname/TLS/IP allowlist/connection limits + security guidance. |
| src/routes/docs/products/databases/dedicated/monitoring/+page.markdoc | Documents metrics/usage/slow queries/explain/insights/audit/events endpoints. |
| src/routes/docs/products/databases/+page.markdoc | Adds callout linking users to Dedicated databases from the document-store landing page. |
| src/routes/docs/products/databases/+layout.svelte | Adds Dedicated databases section to the docs sidebar + hides TablesDB subtitle/banner on dedicated routes. |
| src/routes/blog/post/announcing-dedicated-databases/+page.markdoc | Adds announcement post (with FAQs) for Dedicated databases launch. |
| src/routes/changelog/(entries)/2026-05-21.markdoc | Adds changelog entry linking to announcement + docs. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Greptile SummaryThis PR adds 11 new dedicated databases documentation pages, an announcement blog post, a changelog entry, sidebar navigation, and registers the
Confidence Score: 4/5Mostly safe to merge; the SQL API binding-syntax section documents $1/$2 as universal but MySQL/MariaDB require ? — users copying examples for those engines will get immediate parse errors. The SQL API page teaches $1/$2 positional binding syntax without any engine-specific caveat, while the named-binding section in the same page explicitly notes "depending on engine convention" for : vs @ style. If Appwrite passes SQL through as-is, MySQL and MariaDB users who follow the positional examples will get a SQL parse error on every call. All other content is documentation-only. src/routes/docs/products/databases/dedicated/sql-api/+page.markdoc — positional binding syntax needs clarification or engine-specific examples. src/routes/docs/products/databases/dedicated/monitoring/+page.markdoc — DATABASE_INTERNAL_ID placeholder is still unexplained. Important Files Changed
Reviews (19): Last reviewed commit: "docs(databases): address review feedback..." | Re-trigger Greptile |
…onnect page `nodejs` is not a registered highlight.js language alias — only `server-nodejs` (which maps to `js`) works. The SSR pass blew up with "Unknown language: nodejs" on every request, so the page 500'd and the sidebar link looked like it did nothing. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Switch '125m CPU' / '125 mCPU' / '125m – 16000m' to '0.125 vCPU' / '0.125 – 16 vCPU'. mCPU is a Kubernetes/internal unit; users think in fractional vCPUs. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
50% per replica is not sustainable at the higher specifications — at $860/mo the underlying infrastructure cost per replica is close to the full spec price. Raising to 75% matches the cross-region replica rate and preserves margin on Business+ tiers. Applied to cloud config and tests in a separate change. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
All replica-style add-ons (HA replicas, cross-region replicas, and the cross-region standby) now bill at 75% of the underlying specification. The standby is just a cross-region replica configured for automatic failover, so they price identically. Removes the separate "Cross-region standby" row from the add-on table and adds a one-liner explaining that the standby is a special-case cross-region replica. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The endpoint mutates an existing resource (the primary user's password), which is what PATCH is for. POST was the wrong verb. Updated the docs example to use PATCH. The same change ships in cloud (endpoint, e2e tests, internal docs). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Replace the bare CURL examples in the Connect page with multicode blocks covering all server SDKs (Node.js, Deno, PHP, Python, Ruby, .NET, Dart, Kotlin, Swift, Go, Rust) plus CURL as the last entry, matching the pattern used elsewhere in the docs and blog posts. SDK calls go through the Compute service since the endpoint lives at /v1/compute/... Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…lover steps - Replace every em-dash with a comma in the new docs and blog post (12 files). - 'Appwrite's internal regional network' becomes 'the Appwrite network'. - Reduce the automatic-failover numbered list to a two-sentence summary. The engine-specific promote commands and per-step accounting belonged in the internal docs, not the user-facing page. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Convert every API curl example in the dedicated databases docs to a
{% multicode %} block. Server SDKs (Node.js, Deno, PHP, Python, Ruby,
.NET, Dart, Kotlin, Swift, Go, Rust) come first, with curl as the last
tab. ~32 endpoints converted across high-availability, backups,
branches, extensions, pooler, sql-api, network, and monitoring pages.
Mark cross-region failover and cross-region replicas as 'coming soon'
in the HA and specifications pages. Replace 'quiesce' on the branches
page with 'pause writes', since the term reads as jargon to anyone who
isn't a DB engineer.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The branches page had two adjacent identical {% multicode %} blocks
calling listDatabaseBranches. Drop the one in the 'Create a branch'
section in favour of a sentence that links to the canonical 'List
branches' section below.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Registers the Compute service in the API reference sidebar, landing grid, and service description, and bumps @appwrite.io/specs to a console spec carrying the current compute database API (PATCH credential rotation, database specifications, and backup policy endpoints). Per-endpoint rendering of the console-only spec is left as follow-up for the UI work. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Updates connect and network pages to the connection-string parameters the credentials endpoint actually returns (ssl=true for MySQL/MariaDB, sslmode=require for PostgreSQL), notes MySQL 8.x caching_sha2_password requires TLS, flags that MongoDB is not yet TLS-terminated at the proxy, and documents the longer provisioning window. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The dedicated database endpoints live on the appwrite.center domain, not appwrite.network. Update the region table, connection strings, CLI and driver examples, branch/pooler hostnames, and the launch blog post. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The TLS parameter table listed MongoDB as ssl=true, contradicting the sentence directly below it (and the connect page) which state MongoDB is not yet TLS-terminated at the proxy and returns ssl=false. Align the table row with the documented behaviour. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
MongoDB connections are now TLS-terminated at the edge proxy like the other engines, so present all four engines as encrypted. Set the TLS parameter to tls=true in the network table, connection-string prose, and the mongosh example, and drop the "not yet TLS-terminated" caveat. This also brings the docs in line with the launch blog, which already lists tls=true for MongoDB. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…ndpoint The credentials endpoint emits the MongoDB connection string with `ssl=` (MongoDB's ssl/tls aliases) and a `serverSelectionTryOnce=false` flag: mongodb://…?authSource=admin&ssl=true&directConnection=true&retryWrites=true&serverSelectionTryOnce=false Align the docs to the exact string the API returns: use `ssl=true` instead of the `tls=true` alias and add the missing serverSelectionTryOnce flag, in the network TLS table, the connect prose, and the mongosh example. Source of truth: cloud Connections.php getCredentials(). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Branches are now externally connectable. Rewrite the branches page to the implemented contract: branch hostname db-<projectId>-<databaseId>-<branchId> .<region>.appwrite.center (dash-free 8-hex branchId), branches reuse the parent's credentials (snapshot copy), and list-branches returns per-branch connection details (host, port, database, username, password, ssl, engine, connectionString). Fix create params to branchId + ttl only (drop the non-existent cpu/memory/name), note fixed lightweight branch resources, and correct the async create + list flow. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- CPU range upper bound is 8 vCPU (largest spec s-8vcpu-64gb), not 16. - Reconcile the shared idle timeout: 15 minutes is the default within the configurable 5–60 minute range; note this on the overview and spec pages. - Scope the SQL API to the SQL engines (PostgreSQL/MySQL/MariaDB); MongoDB uses MQL, not SQL, so the SQL API doesn't apply to it. - Clarify result_too_large is a soft-truncation (200 + truncated:true), not an outright rejection. - Document how to enable storage autoscaling (storageAutoscaling field + threshold). - Changelog: a dedicated database runs in its project's region rather than implying a per-database region selector, matching the product docs. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
| Bindings are always sent through a separate field, Appwrite never interpolates them into the SQL string. Two styles are accepted: | ||
|
|
||
| **Positional**, list of values, referenced as `$1`, `$2`, … in the SQL. | ||
|
|
||
| ```json | ||
| { | ||
| "sql": "SELECT * FROM events WHERE user_id = $1 AND created_at > $2", | ||
| "bindings": ["usr_abc", "2026-05-01"] | ||
| } | ||
| ``` | ||
|
|
There was a problem hiding this comment.
Positional binding notation is PostgreSQL-specific, will fail on MySQL/MariaDB
The page documents $1/$2 as the universal positional binding syntax for all three supported SQL engines, but MySQL and MariaDB use ? for positional parameters — $1 is a PostgreSQL extension and will be rejected as a syntax error by those engines. The named-binding section already acknowledges engine differences (:name vs @name), suggesting the API passes SQL through as-is rather than normalizing it.
A MySQL or MariaDB developer who copies the SELECT id, email FROM users WHERE created_at > $1 example verbatim will receive a SQL parse error on every call. The section needs either a note that Appwrite normalizes $1 to ? internally for MySQL/MariaDB, or engine-specific examples matching each engine's native placeholder convention.


Summary
Content for databases
products/databases/dedicated/: overview, specifications, connect, high-availability, backups, branches, extensions, pooler, sql-api, network, monitoring.