Skip to content

Add TTL caching docs + announcement blog + changelog#2878

Open
atharvadeosthale wants to merge 2 commits intomainfrom
ttl-docs
Open

Add TTL caching docs + announcement blog + changelog#2878
atharvadeosthale wants to merge 2 commits intomainfrom
ttl-docs

Conversation

@atharvadeosthale
Copy link
Copy Markdown
Member

No description provided.

@appwrite
Copy link
Copy Markdown

appwrite bot commented Apr 10, 2026

Appwrite Website

Project ID: 69d7efb00023389e8d27

Sites (1)
Site Status Logs Preview QR
 website
69d7f2670014e24571ca
Queued Queued View Logs Preview URL QR Code

Website (appwrite/website)

Project ID: 684969cb000a2f6c0a02

Sites (1)
Site Status Logs Preview QR
 website
68496a17000f03d62013
Queued Queued View Logs Preview URL QR Code


Tip

Preview deployments create instant URLs for every branch and commit

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps bot commented Apr 10, 2026

Greptile Summary

This PR introduces the TTL-based list response caching feature for Appwrite Databases, adding an announcement blog post, a changelog entry, and documentation sections to the rows and pagination pages. The content is accurate and well-structured; remaining findings are minor P2 style items in the blog post.

Confidence Score: 5/5

Safe to merge; all findings are P2 documentation polish items with no correctness or data-integrity risk.

All identified issues are minor P2 style suggestions — a missing Server SDK callout in the blog purge example and the absence of a Beta label in the docs pages. No logic errors, broken links, or data-integrity issues were found.

src/routes/blog/post/announcing-list-cache-ttl/+page.markdoc — purge example and Beta disclaimer.

Important Files Changed

Filename Overview
src/routes/blog/post/announcing-list-cache-ttl/+page.markdoc New announcement blog post for TTL caching; purge example omits the Server SDK requirement and Beta status is not propagated to docs pages.
src/routes/changelog/(entries)/2026-04-13.markdoc Concise changelog entry matching blog and docs content; no issues found.
src/routes/docs/products/databases/rows/+page.markdoc Adds cache list responses section with client SDK examples and a full-server-SDK purge section; client-only caching examples lack server SDK equivalents (already flagged in prior review).
src/routes/docs/products/databases/pagination/+page.markdoc Adds cache list responses section with comprehensive multi-language server and client SDK examples; purge section links back to rows page.
.optimize-cache.json Adds image hash for new blog cover; mechanical change, no issues.
static/images/blog/announcing-list-cache-ttl/cover.png New blog cover image; binary asset, no issues.

Reviews (2): Last reviewed commit: "remove beta" | Re-trigger Greptile

Comment on lines +270 to +368
{% multicode %}
```client-web
import { Client, Query, TablesDB } from "appwrite";

const client = new Client()
.setEndpoint("https://<REGION>.cloud.appwrite.io/v1")
.setProject("<PROJECT_ID>");

const tablesDB = new TablesDB(client);

const rows = await tablesDB.listRows({
databaseId: "<DATABASE_ID>",
tableId: "<TABLE_ID>",
queries: [
Query.equal('title', 'Avatar')
],
ttl: 60 // Cache for 60 seconds
});
```
```client-flutter
import 'package:appwrite/appwrite.dart';

void main() async {
final client = Client()
.setEndpoint("https://<REGION>.cloud.appwrite.io/v1")
.setProject("<PROJECT_ID>");

final tablesDB = TablesDB(client);

final rows = await tablesDB.listRows(
databaseId: '<DATABASE_ID>',
tableId: '<TABLE_ID>',
queries: [
Query.equal('title', 'Avatar')
],
ttl: 60, // Cache for 60 seconds
);
}
```
```client-apple
import Appwrite
import AppwriteModels

func main() async throws {
let client = Client()
.setEndpoint("https://<REGION>.cloud.appwrite.io/v1")
.setProject("<PROJECT_ID>")

let tablesDB = TablesDB(client)

let rows = try await tablesDB.listRows(
databaseId: "<DATABASE_ID>",
tableId: "<TABLE_ID>",
queries: [
Query.equal("title", value: "Avatar")
],
ttl: 60 // Cache for 60 seconds
)
}
```
```client-android-kotlin
import io.appwrite.Client
import io.appwrite.Query
import io.appwrite.services.TablesDB

suspend fun main() {
val client = Client(applicationContext)
.setEndpoint("https://<REGION>.cloud.appwrite.io/v1")
.setProject("<PROJECT_ID>")

val tablesDB = TablesDB(client)

val rows = tablesDB.listRows(
databaseId = "<DATABASE_ID>",
tableId = "<TABLE_ID>",
queries = listOf(
Query.equal("title", "Avatar")
),
ttl = 60 // Cache for 60 seconds
)
}
```
```graphql
query {
tablesListRows(
databaseId: "<DATABASE_ID>",
tableId: "<TABLE_ID>",
queries: ["equal(\"title\", [\"Avatar\"])"],
ttl: 60
) {
total
rows {
_id
data
}
}
}
```
{% /multicode %}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Server SDK examples missing from cache list responses section

The listRows TTL caching section in the rows doc only covers four client SDKs (web, Flutter, Apple, Android Kotlin) and GraphQL. The equivalent section in the pagination doc includes Node.js, Python, Ruby, Deno, PHP, Go, Swift, Kotlin, Rust, Java, Dart, .NET, and an HTTP example. Since TTL caching is useful server-side (e.g., leaderboard APIs, dashboard feeds), server-side developers who find this section will have no example to follow and may miss the feature entirely.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants