Appearance
Presence state in Supabase realtime
What is presence?
When working with realtime, it's often useful to receive and display information about online users. Enter "presence".
Presence is what allows you to see who is present in a realtime channel.
If you’re building a collaborative tool, for instance, presence allows you to see who is actively editing or viewing a document:

If you are building a message board or a game, it allows users to see who is available to join a game or who is actively participating.
Ultimately, the choice of using presence depends on your specific use case.
Presence in Supabase
To get information about presence in a Supabase channel, you will need to listen for Supabase presence events via a page or app workflow:

TIP
Depending on your use case, you may choose to listen to only specific type of presence events:
syncleavejoin
In the example above, you can see:
- We are listening to all presence events in the
room1channel. - We used the
Logaction to log a presence message in case we need to debug things. - We use branches to update a number variable called
supabaseOnlineUsers:- If Supabase sends a
joinevent, we add 1 to our active user count. - If Supabase sends a
leaveevent, we remove 1 from our active user count.
- If Supabase sends a
On our UI, we can easily bind the supabaseOnlineUsers value to a text element to display the number of active users:

Debugging
When working with event listeners, we highly recommend getting into the habit of adding a Log action that's bound to the Event you receive from Supabase:

This is helpful because it allows you to see the event as it comes in.
In the example above, despite only one user joining the channel, the workflow was triggered twice. That's because, when a user joins a channel, Supabase triggers two presence events: first a join event, followed by a sync event.
If we didn't see that information in the logs, we might have been confused and counted two users instead of one.

