# Realtime receives nothing: the server-side checklist

The client setup is usually fine. Work this list on the database side before touching client code.

## Symptom to cause to confirmation to fix

1. Confirm the table is in the publication: `alter publication supabase_realtime add table your_table;`, or check the toggle in the dashboard Publications settings. Tables are not in the publication by default. This is cause number one.
2. Confirm the subscriber's RLS allows it. Realtime authorizes every event against the subscriber's SELECT policies. Subscribe as the user and check: no SELECT policy means no events, silently.
3. Check the filter syntax. `filter: 'room_id=eq.42'` must match the documented `column=operator.value` form exactly. A malformed filter matches nothing and reports no error.
4. For UPDATE and DELETE events, check replica identity. By default only the new record is sent; for the old values set `alter table your_table replica identity full;`. "Events arrive but the payload is empty" is this.
5. Confirm the change actually commits. Events fire on commit, not on statement. An uncommitted transaction or a rolled-back test insert produces nothing, correctly.

## Verification

Insert a row that matches the filter and watch the event arrive with the expected payload. Update it and delete it, confirming old values appear only when replica identity is full. Then test as a user whose policies deny the row and confirm nothing arrives.