Realtime for files() works almost well, but for tablesDB it does not
- 0
- 2
- Web
- Databases
- Storage
- Realtime
- Self Hosted
I have been trying to make use of realtime, today (14.03.26) I have pulled all the latest versions of docker images, and sdk available.
Whats working:
- Connection via websockets
- Ping-pong in appwrite console
- Ping-pong between my localhost app and the console
- Channels.files() subscription receives wss updates
What's not working:
- tablesdb subscription does not work at all
- (response) => {} is not being called anyway
My setup:
- selfhosted appwrite on backend.mydomain.com
- tanstack-start client
const client = new Client();
client
.setEndpoint(ENDPOINT)
.setProject(PROJECT_ID);
export const account = new Account(client);
export const tablesDb = new TablesDB(client);
export const storage = new Storage(client);
export const realtime = new Realtime(client);
and for testing realtime I have a window when I can CRUD db entries, and also upload files. This is how i set up realtime for listening to tablesDb:
async function realtimeFn() {
const subscription = await realtime.subscribe(Channel.tablesdb(DATABASE).table('genres').row(), response => {
console.log(response.timestamp);
});
setActiveSub(subscription);
}
<button onClick={realtimeFn}>Subscribe</button>
<button onClick={() => activeSub?.close()}>Unsubscribe</button>
now when i hit subscribe, I can see the following messagess in devtools (see attachment):
- type: connected with data being channels, and user: null
- type: authentication, with data: <session token>
- type: response to authentication: success - true
- keepalive (ping-pong) ongoing
When I change name (for example the 'Blues2' folder to 'Blues') nothing is happening. No wss message received, nor the response callback is triggered.
It works quite different when working with files. I can change my function to listen to Channels.files():
async function realtimeFn() {
const subscription = await realtime.subscribe(Channel.files(), response => {
console.log(response.timestamp);
});
setActiveSub(subscription);
}
and as before i get connection, auth, and auth response, and ping-pong keepalive ongoing. But now when I for example upload or delete a file, I get the websocket message.
But either way, the response => {console.log(response.timestamp)} is never triggered.
Here is the screenshot for Channels.files() subscription
and for Channels.tablesdb..... nothing happends other than just keepalive
I have the row security turned on, and create set to any role. When creating files in db I pass required permissions
const result = await database.create(data, {
permissions(permission, role) {
return [
permission.write(role.user(userId)),
permission.read(role.user(userId)),
permission.update(role.user(userId)),
permission.delete(role.user(userId)),
]
},
})
So based on my experience, there has been a slightly improvement to the realtime recently, but not everything works quite well, at least on self hosted instances.
Realtime for files() works almost well, but for tablesDB it does not
Some specific version, or anything prior to the current version?
Maybe 22.0.0
Recommended threads
- Appwrite-injected variables are not avai...
I am using rust-1.83 as a runtime and try to access APPWRITE_FUNCTION_API_ENDPOINT or APPWRITE_FUNCTION_API_KEY during runtime. Both are not set during my execu...
- OAuth Missing redirect URL
Hello all, on a Flutter mobile app with latest Appwrite dependency (25.4.0) I always got "Missing redirect URL" - "Your OAuth login flow is missing a proper red...
- Can you suppress row $meta data?
When using listRows with a 'select' query to limit the response [for performance], I'm still getting extra columns (eg. `$id`, `$sequence`, `$createdAt`, `$upda...