Skip to content

Commit 47199d6

Browse files
authored
Merge branch 'main' into doc-nextjs-tutorial-appwrite-sdk-v16-updates
2 parents 22287ab + 8a03628 commit 47199d6

File tree

23 files changed

+496
-54
lines changed

23 files changed

+496
-54
lines changed

.optimize-cache.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,7 @@
180180
"images/blog/announcing-opt-in-relationship-loading/cover.png": "e16cc16ea6d968b29af19bcd6274741141584a7efe5e1bb18be19b77c3a380c8",
181181
"images/blog/announcing-phone-OTP-pricing/cover.png": "598d55359ca4cb2b46846a8fd76b1f051be7c5f3199b50ffa92a28e84e5f3d67",
182182
"images/blog/announcing-realtime-channel-helpers/cover.png": "cbcffde3edfb77908566ff6361cb31bb1175d64bb1958a038720c52748dfa904",
183+
"images/blog/announcing-realtime-queries/cover.png": "2e11ad5d30399bced1817ce0edb6d266cc57a70955d2102af173d26461c9bf57",
183184
"images/blog/announcing-relationship-queries/cover.png": "7e615c0a9dcbb3949d5fb7ed71f36bb44de40ae67c8cd832b96ff5bbd4b0f451",
184185
"images/blog/announcing-screenshots-api/cover.png": "56555006946b9ead5cd4258544b6a9dda44bce6841706749f7539bc31356383e",
185186
"images/blog/announcing-spatial-columns/cover.png": "b3e73629df86190fb06b715f4fe24aad473631538c1b3e78ae45cc8c5e7cd7d0",
@@ -1090,6 +1091,7 @@
10901091
"images/changelog/2025-10-21.png": "57ca859952c572108f945573807c91fea1bee593f73de5acbc4a392075f8762b",
10911092
"images/changelog/2025-10-29.png": "88204210852acd50bc72a9d7de29f088ef81a4c90941378125fa4f662bb61264",
10921093
"images/changelog/2025-11-19.png": "a152a7c9cd960c5123075aac94098070ce5ac98f10ee88d71e461dce136520f7",
1094+
"images/changelog/2026-02-17.png": "70a2c577bd927bd3e9391840d7fd030f195e975dfcecad536f6d713e23b60624",
10931095
"images/changelog/oss-progam.png": "e50d1c497ac1d07494fa1d40b1f219c8f14770f7b72e1258147f527e86f40eed",
10941096
"images/changelog/threads-cover.png": "f5599b528f33797f125da1fecaffc70763118d4d420b04f6d67a70bc651cf40a",
10951097
"images/community/avatars/1.png": "3448e87720fd3f55326ad04f18263f5094b61116c79d7e48e8b692b8012513bc",

RELEASE.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ git add compose env
5454
rm -rf appwrite
5555
cd -
5656

57-
# Bump appwrite repo so latest main commit is used
58-
bun update @appwrite.io/repo
57+
# Bump appwrite/specs repo so latest main commit is used
58+
bun update @appwrite.io/specs
5959
git add bun.lock
6060

6161
git commit -m "Bump Appwrite version to $VERSION"

bun.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
"@appwrite.io/console": "^0.6.4",
3333
"@appwrite.io/pink": "~0.26.0",
3434
"@appwrite.io/pink-icons": "~0.26.0",
35-
"@appwrite.io/repo": "github:appwrite/appwrite#31b5a1cb360b1350dd1b887e01179bce171c34bc",
35+
"@appwrite.io/specs": "github:appwrite/specs#63057a4df2f206c29e98c6de7263264b9d0d6b1c",
3636
"@eslint/compat": "^1.4.1",
3737
"@eslint/js": "^9.39.1",
3838
"@fingerprintjs/fingerprintjs": "^4.6.2",

src/markdoc/layouts/Category.svelte

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -38,19 +38,17 @@
3838
</svelte:head>
3939

4040
<Main>
41-
<div class="pt-10">
42-
<div class="web-big-padding-section-level-2">
41+
<div class="pt-6">
42+
<div class="web-big-padding-section-level-2 web-category-page">
4343
<div class="container">
44-
<a class="web-link web-u-color-text-secondary items-baseline" href="/blog">
45-
<span class="web-icon-chevron-left" aria-hidden="true"></span>
46-
<span>Back to blog</span>
47-
</a>
48-
<div class="web-category-header mt-6">
49-
<div class="flex flex-col justify-between gap-6 md:flex-row md:items-center">
50-
<h1 class="text-display font-aeonik-pro text-primary">
44+
<div class="web-category-header">
45+
<div class="web-category-header-content">
46+
<h1
47+
class="web-category-header-title text-display font-aeonik-pro text-primary"
48+
>
5149
{name}
5250
</h1>
53-
<p class="text-secondary text-description">
51+
<p class="web-category-header-description text-secondary text-description">
5452
{description}
5553
</p>
5654
</div>
@@ -77,13 +75,13 @@
7775
{/each}
7876
</ul>
7977
</div>
80-
<div class="relative overflow-hidden pt-[7.5rem]">
81-
<div class="container">
82-
<FooterNav />
83-
<MainFooter />
84-
</div>
78+
</div>
79+
<div class="relative mt-0 overflow-hidden">
80+
<div class="container">
81+
<FooterNav />
82+
<MainFooter />
8583
</div>
8684
</div>
8785
</div>
88-
</div></Main
89-
>
86+
</div>
87+
</Main>
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
---
2+
layout: post
3+
title: "Introducing Realtime queries: Server-side event filtering for subscriptions"
4+
description: Pass SDK queries when subscribing to realtime channels to automatically filter events server-side, so your callbacks only receive the updates you care about.
5+
date: 2026-02-16
6+
cover: /images/blog/announcing-realtime-queries/cover.png
7+
timeToRead: 4
8+
author: jake-barnby
9+
category: announcement
10+
featured: false
11+
---
12+
13+
If you've built realtime features with Appwrite, you've likely written filtering logic inside your subscription callbacks: checking payload fields, comparing values, and discarding events you don't need. While this works, it adds boilerplate to your client code and means you're still receiving and processing every event on the channel, even the ones you'll throw away.
14+
15+
To make realtime subscriptions more precise, Appwrite now supports **Realtime queries**: pass SDK queries when subscribing to automatically filter events server-side.
16+
17+
# Filter at the source, not in your callback
18+
19+
Realtime queries let you pass SDK queries as a parameter when subscribing to a channel. Events are filtered on the server based on your queries, so your callback only fires when the payload matches your conditions.
20+
21+
This means less client-side filtering logic, fewer unnecessary callback invocations, and a cleaner subscription model overall.
22+
23+
# How it works
24+
25+
Realtime queries use the same `Query` helpers you already use with Appwrite's database and other services. Pass an array of queries when subscribing, and only events matching those conditions will trigger your callback.
26+
27+
```javascript
28+
import { Client, Realtime, Channel, Query } from "appwrite";
29+
30+
const client = new Client()
31+
.setEndpoint('https://<REGION>.cloud.appwrite.io/v1')
32+
.setProject('<PROJECT_ID>');
33+
34+
const realtime = new Realtime(client);
35+
36+
// Subscribe to all updates on the channel
37+
const allVotes = await realtime.subscribe(
38+
Channel.tablesdb('<DATABASE_ID>').table('<TABLE_ID>').row(),
39+
response => {
40+
console.log(response.payload);
41+
}
42+
);
43+
44+
// Subscribe only to updates where person equals 'person1'
45+
const person1Votes = await realtime.subscribe(
46+
Channel.tablesdb('<DATABASE_ID>').table('<TABLE_ID>').row(),
47+
response => {
48+
console.log(response.payload);
49+
},
50+
[Query.equal('person', ['person1'])]
51+
);
52+
53+
// Subscribe only to updates where person is not 'person1'
54+
const otherVotes = await realtime.subscribe(
55+
Channel.tablesdb('<DATABASE_ID>').table('<TABLE_ID>').row(),
56+
response => {
57+
console.log(response.payload);
58+
},
59+
[Query.notEqual('person', 'person1')]
60+
);
61+
```
62+
63+
Without queries, the first subscription receives every event on the channel. With queries, the second and third subscriptions only receive events where the payload matches the specified conditions. No manual filtering required.
64+
65+
# Supported queries
66+
67+
Realtime queries support a subset of the full SDK query methods, focused on value comparison and logical composition:
68+
69+
- **Comparison**: `Query.equal()`, `Query.notEqual()`, `Query.greaterThan()`, `Query.greaterThanEqual()`, `Query.lessThan()`, `Query.lessThanEqual()`
70+
- **Null checks**: `Query.isNull()`, `Query.isNotNull()`
71+
- **Logical**: `Query.and()`, `Query.or()`
72+
73+
These cover the most common filtering patterns for realtime events. You can combine multiple queries to build precise conditions for your subscriptions.
74+
75+
# Key benefits
76+
77+
- **Server-side filtering**: Events are filtered before reaching your client, reducing unnecessary processing
78+
- **Consistent API**: Uses the same `Query` helpers from Appwrite's database APIs
79+
- **Cleaner code**: Eliminate manual filtering logic inside subscription callbacks
80+
- **Available across all platforms**: Supported in Web, Flutter, Apple, and Android client SDKs
81+
82+
# More resources
83+
84+
- [Read the Realtime queries documentation](/docs/apis/realtime#queries)
85+
- [Learn about Realtime channel helpers](/docs/apis/realtime#channel-helpers)
86+
- [View all available Realtime events](/docs/advanced/platform/events)
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
---
2+
layout: changelog
3+
title: "Relationship queries and up to 18x faster relationship performance"
4+
date: 2026-02-06
5+
cover: /images/blog/announcing-relationship-queries/cover.png
6+
---
7+
8+
Appwrite Databases now supports filter queries directly on relationship columns using dot notation. Query across related data with operators like `equal`, `notEqual`, `greaterThan`, `lessThan`, `between`, and more, without needing to fetch and filter application-side.
9+
10+
Additionally, all relationship operations are now 12-18x faster across the board, with no configuration changes needed.
11+
12+
Now live on Appwrite Cloud.
13+
14+
{% arrow_link href="/blog/post/announcing-relationship-queries" %}
15+
Read the announcement to learn more
16+
{% /arrow_link %}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
---
2+
layout: changelog
3+
title: "Generate a type-safe SDK from your schema with the Appwrite CLI"
4+
date: 2026-02-09
5+
cover: /images/blog/appwrite-generate/cover.png
6+
---
7+
8+
The Appwrite CLI now includes a `generate` command that creates a type-safe, project-aware SDK directly from your database schema. The generated SDK includes typed helpers with autocomplete for querying and mutating rows, eliminating boilerplate and turning schema-related runtime bugs into type errors.
9+
10+
Run `appwrite generate` in your project directory to get started.
11+
12+
Now live on Appwrite Cloud.
13+
14+
{% arrow_link href="/blog/post/appwrite-generate" %}
15+
Read the announcement to learn more
16+
{% /arrow_link %}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
---
2+
layout: changelog
3+
title: "New string column types for Appwrite Databases"
4+
date: 2026-02-12
5+
cover: /images/blog/new-string-types/cover.png
6+
---
7+
8+
Appwrite Databases now supports four explicit string column types - `varchar`, `text`, `mediumtext`, and `longtext` - giving you transparent control over storage behavior and indexing.
9+
10+
Each type has defined limits and indexing strategies suited to different use cases, from short identifiers to large content. The legacy `string` type remains supported for backward compatibility.
11+
12+
Now live on Appwrite Cloud.
13+
14+
{% arrow_link href="/blog/post/new-string-types" %}
15+
Read the announcement to learn more
16+
{% /arrow_link %}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
---
2+
layout: changelog
3+
title: "Realtime Channel helpers: Type-safe subscriptions made simple"
4+
date: 2026-02-13
5+
cover: /images/blog/announcing-realtime-channel-helpers/cover.png
6+
---
7+
8+
Appwrite Realtime now includes Channel helpers, a fluent, type-safe API for building channel subscriptions. Instead of manually writing channel strings, you use the `Channel` class with IDE autocomplete and compile-time validation.
9+
10+
Channel helpers support all available channels, event type filtering with `.create()`, `.update()`, and `.delete()`, and flexible wildcards by omitting IDs. Existing string-based subscriptions continue to work.
11+
12+
Available across all Appwrite client SDKs: Web, Flutter, Apple, and Android.
13+
14+
Now live on Appwrite Cloud.
15+
16+
{% arrow_link href="/blog/post/announcing-realtime-channel-helpers" %}
17+
Read the announcement to learn more
18+
{% /arrow_link %}

0 commit comments

Comments
 (0)