Presence helps you know who is online right now. It shows live user activity simply and clearly.
Presence for online status in Supabase
channel.on('presence_sync', () => { const state = channel.presenceState() // state shows who is online })
Use channel.presenceState() to get the list of online users on a channel.
The presence_sync event updates the current online users list.
const channel = supabase.channel('room:123') channel.on('presence_sync', () => { console.log(channel.presenceState()) })
channel.track({ user_id: 'user1', status: 'online' })channel.untrack()
This example connects to a Supabase realtime channel called 'room:lobby'. It tracks a user with ID 'user123' as online. It logs the list of online users whenever it updates. After 5 seconds, it removes the user from the online list and logs the updated state.
import { createClient } from '@supabase/supabase-js' const supabaseUrl = 'https://xyzcompany.supabase.co' const supabaseKey = 'public-anonymous-key' const supabase = createClient(supabaseUrl, supabaseKey) async function trackUserPresence() { const channel = supabase.channel('room:lobby') channel.on('presence_sync', () => { console.log('Current online users:', Object.fromEntries(channel.presenceState())) }) await channel.subscribe() // Track current user as online channel.track({ user_id: 'user123', status: 'online' }) // Simulate user leaving after 5 seconds setTimeout(() => { channel.untrack() console.log('User left, updated online users:', Object.fromEntries(channel.presenceState())) }, 5000) } trackUserPresence()
Always subscribe to the channel before tracking presence.
Presence state is an object showing all users currently online.
Use track() to add yourself and untrack() to remove yourself.
Presence shows who is online in real-time.
Use Supabase realtime channels and presence API to track users.
Listen to presence_sync events to get updated online user lists.
Practice
Solution
Step 1: Understand presence feature
Presence in Supabase is designed to track and show who is online at any moment.Step 2: Identify main use case
It helps applications display real-time online user lists, not for security or backups.Final Answer:
To show which users are currently online in real-time -> Option AQuick Check:
Presence = Online user tracking [OK]
- Confusing presence with security features
- Thinking presence handles backups
- Assuming presence sends emails
Solution
Step 1: Recall Supabase presence event names
Supabase presence uses the 'sync' event to notify when presence data updates.Step 2: Match event to correct listener
The 'sync' event triggers the callback with the updated online user list.Final Answer:
channel.on('sync', callback) -> Option DQuick Check:
Presence updates use 'sync' event [OK]
- Using 'presence' event which does not exist
- Confusing 'message' event with presence updates
- Using 'update' event which is unrelated
const channel = supabase.channel('online-users').on('presence', () => {
console.log(channel.presenceState())
}).subscribe()Solution
Step 1: Understand presenceState() method
presenceState() returns the current presence data, showing online users grouped by user ID.Step 2: Analyze code behavior on 'presence' event
When a user joins, 'presence' triggers and logs the updated presence state object.Final Answer:
An object showing all currently online users -> Option AQuick Check:
presenceState() = online users object [OK]
- Thinking presenceState() is undefined
- Expecting a string message instead of object
- Assuming it returns an empty array always
const channel = supabase.channel('online-users')
channel.on('presence', () => {
console.log('Users online:', channel.presenceState())
})
What is the likely problem?Solution
Step 1: Check channel subscription
Without calling subscribe(), the channel does not connect and receive events.Step 2: Confirm event and method correctness
'presence' event and presenceState() are correct, so missing subscribe() is the issue.Final Answer:
You forgot to call subscribe() on the channel -> Option BQuick Check:
Must call subscribe() to receive events [OK]
- Skipping subscribe() call
- Using wrong event name
- Expecting presenceState() without subscription
Solution
Step 1: Understand presenceState() data
presenceState() gives user IDs and metadata, but not full usernames.Step 2: Combine presence with database queries
After getting IDs from presenceState(), query the database to fetch usernames for display.Final Answer:
Listen to 'presence' event, get user IDs from presenceState(), then query user profiles from database -> Option CQuick Check:
Presence + DB query = live usernames [OK]
- Expecting presenceState() to contain usernames
- Not querying user profiles after presence update
- Listening to wrong events like 'message' or 'update'
Ready to prove it?
Pass the test and this pattern moves unknown
