# mod\_presence

Source: https://zotonic.com/docs/3104/mod_presence

URI: https://zotonic.com/id/3104

Language: en



Show who is viewing a shared location using browser presence messages. Enable `mod_presence` on the site; no module configuration keys are required. The widgets use Zotonic's widget initialization and Cotonic broker bridge.

Template usage
--------------

Load the widgets and give both widgets the same location identifier:

```django
{% lib "js/modules/z.presence.js" "js/modules/z.presenceview.js" %}
<span class="do_presence do_presenceview" data-presence-where="foo"></span>
```

`do_presence` publishes the current browser's status. `do_presenceview` displays the users at that location and can be used on its own. The viewer also accepts `data-presenceview-where`. Locations are client-chosen strings. The module includes the scripts in the admin and adds presence indicators for resource editing and overview lists using `mod_admin/<resource-id>`. Override `_presence_user.tpl` to customize the user-name fragment.

Messages and display
--------------------

The publisher sends QoS 0 messages on `bridge/origin/presence/status/<where>` with `user_id`, a browser-widget `unique_id`, `where` and numeric `status`. Viewers request an update on `bridge/origin/presence/request/<where>`. The publisher checks activity each second and sends on changes or when more than seven seconds have elapsed.

Status codes are `0` gone, `1` away, `2` idle, `3` present and `4` active. Activity ages through thresholds of 10, 60 and 300 seconds; page lifecycle and element removal also feed status changes. Viewers sort by status, hide gone entries and combine multiple entries for the same user. Present and active users use `label-success`, idle users `label-info`, and away users `label-default`. This is transient browser state, not a stored attendance log.

Topic permissions
-----------------

The ACL observer handles non-wildcard topics starting with `presence`. For `presence/<kind>/mod_<name>/...`, it checks `use` permission for that module; an unknown module atom is denied. Other non-wildcard presence topics require authentication. These rules apply regardless of the MQTT action. Wildcard topics and unrelated ACL requests return `undefined` for other ACL handlers to decide. Presence payloads are supplied by clients; this observer checks topic access, not the identity fields in those payloads.

License: 

Attribution: 

Related resources: https://zotonic.com/api/agent/related/3104?language=en


## API access

- [API help](<https://zotonic.com/api-help>)
- [OpenAPI specification](<https://zotonic.com/openapi.json>)
- [This resource as JSON](<https://zotonic.com/api/agent/resource/3104?language=en>)
