Appwrite has a role called Any, and it means anyone
Collection permissions decide who reads your data. One of the roles is the whole internet.
What it is
Your Appwrite project id ships in your browser bundle, by design. It is not a secret and cannot be hidden.
Access is decided by permissions on each collection, and optionally on each document. The available roles include Any — which is every visitor, signed in or not.
How to fix it
In the console, open each collection → Settings → Permissions. Remove Read for the Any role anywhere the data is not genuinely public.
For per-user data, enable Document Security on the collection and set permissions per document when you create it, so each user can read only their own.
How to confirm the fix
From a signed-out browser console, call listDocuments with your public project id against the collection. A closed collection returns a 401. Rows coming back means Any still has read.
The mistake people make
Granting collection-level Read to Users and thinking that is enough. It means every signed-in person can read every row — including other customers. Per-user data needs document-level permissions, not just an authenticated role.
Not sure whether this applies to you?
Give us the address and we will tell you. No code, no access, no install — and every finding we have is shown in full, including on the free trial.
Check a site