Skip to content
Back

Realtime not working for some tables

  • 0
  • Self Hosted
  • Web
  • Realtime
Patrick
10 Jan, 2026, 18:19

Hi, I've got an issue where I can setup a realtime connection to listen to some tables, but some not all.

I have two tables history and users. Both can be queried by .listRows() and return results.

However when I listen to the databases.695d8f210018cf35bba0.tables.history.rows.* there are no events being sent to the client. databases.695d8f210018cf35bba0.tables.users.rows.* actually receives events.

My first thought was a permission issue, however both permissions are exactly the same (see screenshots).

The Appwrite instance is self-hosted and the domain is behind Cloudflare

TypeScript

// tables.history.rows.* doesn't work. tables.users.rows.* does work
this.appwriteRealtime?.subscribe(
  "databases.695d8f210018cf35bba0.tables.history.rows.*",
  (data) => {
    console.log(data);
  }
);
TypeScript
// how the history entries are created
this.appwriteTables?.createRow<History>({
  databaseId: this.DATABASE_ID,
  tableId: "history",
  data,
  rowId: ID.unique(),
});
TL;DR
Realtime connection not working for one table (`history`) but works for another (`users`). Permissions are the same. Domain is behind Cloudflare. Possible solution: try adding permissions directly when creating history entries.
Patrick
10 Jan, 2026, 18:20

Returned by the realtime connection:

TypeScript
{
    "type": "connected",
    "data": {
        "channels": [
            "databases.695d8f210018cf35bba0.tables.history.rows.*"
        ],
        "user": {
            "$id": "69627fa28bf6f1e551ce",
            "$createdAt": "2026-01-10T16:34:42.574+00:00",
            "$updatedAt": "2026-01-10T16:34:42.574+00:00",
            "name": "",
            "registration": "2026-01-10T16:34:42.573+00:00",
            "status": true,
            "labels": [],
            "passwordUpdate": "",
            "email": "",
            "phone": "",
            "emailVerification": false,
            "phoneVerification": false,
            "mfa": false,
            "prefs": {},
            "targets": [],
            "accessedAt": "2026-01-10T16:34:42.573+00:00"
        }
    }
}
Devika
10 Jan, 2026, 18:57

Can you try adding the permissions in this part:

TypeScript
// how the history entries are created
this.appwriteTables?.createRow<History>({
  databaseId: this.DATABASE_ID,
  tableId: "history",
  data,
  rowId: ID.unique(),
});
Devika
10 Jan, 2026, 18:58

I mean, something like this:

TypeScript
this.appwriteTables.createRow<History>({
  databaseId: this.DATABASE_ID,
  tableId: "history",
  rowId: ID.unique(),
  data,
  permissions: [
    Permission.read(Role.user(userId)),
    Permission.update(Role.user(userId)),
    Permission.delete(Role.user(userId)),
  ],
});
Reply

Reply to this thread by joining our Discord

Reply on Discord

Need support?

Join our Discord

Get community support by joining our Discord server.

Join Discord

Get premium support

Join Appwrite Pro and get email support from our team.

Learn more