{"id":299441,"date":"2026-07-21T22:26:31","date_gmt":"2026-07-21T22:26:31","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/presence-api\/"},"modified":"2026-09-23T12:29:18","modified_gmt":"2026-09-23T12:29:18","slug":"presence-api","status":"publish","type":"plugin","link":"https:\/\/fr-be.wordpress.org\/plugins\/presence-api\/","author":5911429,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.6.0","stable_tag":"0.6.0","tested":"7.1.2","requires":"7.0","requires_php":"7.4","requires_plugins":null,"header_name":"Presence API","header_author":"WordPress Core Team","header_description":"System-wide presence and awareness for WordPress.","assets_banners_color":"3e4347","last_updated":"2026-09-23 12:29:18","external_support_url":"","external_repository_url":"https:\/\/github.com\/WordPress\/presence-api","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/make.wordpress.org\/core\/","rating":0,"author_block_rating":0,"active_installs":10,"downloads":2483,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.1.10":{"tag":"0.1.10","author":"JoeFusco","date":"2026-07-30 22:34:55","revision":3629166},"0.1.11":{"tag":"0.1.11","author":"JoeFusco","date":"2026-07-31 19:03:50","revision":3630394},"0.1.12":{"tag":"0.1.12","author":"JoeFusco","date":"2026-08-07 15:35:41","revision":3638027},"0.1.13":{"tag":"0.1.13","author":"JoeFusco","date":"2026-08-07 18:58:00","revision":3638243},"0.1.14":{"tag":"0.1.14","author":"JoeFusco","date":"2026-08-08 05:35:27","revision":3638461},"0.1.15":{"tag":"0.1.15","author":"JoeFusco","date":"2026-08-08 19:10:37","revision":3638913},"0.1.16":{"tag":"0.1.16","author":"JoeFusco","date":"2026-08-08 20:25:29","revision":3638953},"0.1.17":{"tag":"0.1.17","author":"JoeFusco","date":"2026-08-10 12:10:03","revision":3640543},"0.1.18":{"tag":"0.1.18","author":"JoeFusco","date":"2026-08-12 12:29:51","revision":3643389},"0.1.19":{"tag":"0.1.19","author":"JoeFusco","date":"2026-08-14 14:07:36","revision":3647531},"0.1.20":{"tag":"0.1.20","author":"JoeFusco","date":"2026-08-14 22:57:44","revision":3648032},"0.1.21":{"tag":"0.1.21","author":"JoeFusco","date":"2026-08-16 17:02:52","revision":3649952},"0.1.22":{"tag":"0.1.22","author":"JoeFusco","date":"2026-08-16 21:36:43","revision":3650203},"0.1.23":{"tag":"0.1.23","author":"JoeFusco","date":"2026-08-18 16:54:57","revision":3653300},"0.1.24":{"tag":"0.1.24","author":"JoeFusco","date":"2026-08-22 01:46:26","revision":3659805},"0.1.4":{"tag":"0.1.4","author":"JoeFusco","date":"2026-07-21 22:25:35","revision":3617760},"0.1.5":{"tag":"0.1.5","author":"JoeFusco","date":"2026-07-23 14:20:33","revision":3620136},"0.1.6":{"tag":"0.1.6","author":"JoeFusco","date":"2026-07-23 15:10:00","revision":3620179},"0.1.7":{"tag":"0.1.7","author":"JoeFusco","date":"2026-07-24 03:30:50","revision":3620706},"0.1.8":{"tag":"0.1.8","author":"JoeFusco","date":"2026-07-24 17:51:52","revision":3621756},"0.1.9":{"tag":"0.1.9","author":"JoeFusco","date":"2026-07-26 15:23:25","revision":3623573},"0.2.0":{"tag":"0.2.0","author":"JoeFusco","date":"2026-08-28 02:54:19","revision":3669719},"0.2.1":{"tag":"0.2.1","author":"JoeFusco","date":"2026-08-29 13:26:37","revision":3671571},"0.3.0":{"tag":"0.3.0","author":"JoeFusco","date":"2026-09-02 16:25:47","revision":3678355},"0.4.0":{"tag":"0.4.0","author":"JoeFusco","date":"2026-09-05 16:52:30","revision":3682663},"0.5.0":{"tag":"0.5.0","author":"JoeFusco","date":"2026-09-10 14:54:19","revision":3690092},"0.6.0":{"tag":"0.6.0","author":"JoeFusco","date":"2026-09-23 12:29:18","revision":3709331}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3669719,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3669719,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3669719,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3620136,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3620136,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3709333,"resolution":false,"location":"assets","locale":"","contents":"{\"$schema\":\"https:\\\/\\\/playground.wordpress.net\\\/blueprint-schema.json\",\"landingPage\":\"\\\/wp-admin\\\/index.php\",\"preferredVersions\":{\"php\":\"latest\",\"wp\":\"latest\"},\"login\":true,\"features\":{\"networking\":true},\"steps\":[{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"presence-api\"},\"options\":{\"activate\":true}},{\"step\":\"writeFile\",\"path\":\"\\\/wordpress\\\/wp-content\\\/plugins\\\/presence-api\\\/demo-seeder.php\",\"data\":{\"resource\":\"url\",\"url\":\"https:\\\/\\\/raw.githubusercontent.com\\\/WordPress\\\/presence-api\\\/v0.6.0\\\/tests\\\/e2e\\\/demo-seeder.php\"}},{\"step\":\"writeFile\",\"path\":\"\\\/wordpress\\\/wp-content\\\/mu-plugins\\\/screen-stale-demo-helper.php\",\"data\":{\"resource\":\"url\",\"url\":\"https:\\\/\\\/raw.githubusercontent.com\\\/WordPress\\\/presence-api\\\/v0.6.0\\\/tests\\\/e2e\\\/screen-stale-demo-helper.php\"}},{\"step\":\"runPHP\",\"code\":\"<?php require '\\\/wordpress\\\/wp-load.php'; require '\\\/wordpress\\\/wp-content\\\/plugins\\\/presence-api\\\/demo-seeder.php'; wp_presence_demo_seed( 5 ); update_user_meta( 1, 'show_welcome_panel', 0 ); update_user_meta( 1, 'meta-box-order_dashboard', array( 'normal' => 'presence_whos_online,presence_active_posts,dashboard_right_now,dashboard_activity', 'side' => 'dashboard_quick_press,dashboard_primary' ) ); ?>\"}]}"}},"all_blocks":[],"tagged_versions":["0.1.10","0.1.11","0.1.12","0.1.13","0.1.14","0.1.15","0.1.16","0.1.17","0.1.18","0.1.19","0.1.20","0.1.21","0.1.22","0.1.23","0.1.24","0.1.4","0.1.5","0.1.6","0.1.7","0.1.8","0.1.9","0.2.0","0.2.1","0.3.0","0.4.0","0.5.0","0.6.0"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[262246],"plugin_tags":[13780,5901,28310,866],"plugin_category":[],"plugin_contributors":[274871,273209,275765,271448,273072,222961,278189,81359,78294,277958,277988,278903,77566,277987,224222,274823,278904],"plugin_business_model":[216239],"class_list":["post-299441","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-awareness","plugin_tags-heartbeat","plugin_tags-presence","plugin_tags-real-time","plugin_contributors-aldorza","plugin_contributors-ashishjii","plugin_contributors-bejignesh","plugin_contributors-iamchitti","plugin_contributors-intenzi","plugin_contributors-iqbal1hossain","plugin_contributors-ishitaj34","plugin_contributors-joefusco","plugin_contributors-mindctrl","plugin_contributors-mitgiselle","plugin_contributors-moriikuri","plugin_contributors-muneebashraf","plugin_contributors-obenland","plugin_contributors-stfulldev","plugin_contributors-theaminuldev","plugin_contributors-wp24horas","plugin_contributors-zahidui","plugin_business_model-community","plugin_committers-joefusco","plugin_committers-wordpressdotorg"],"banners":{"banner":"https:\/\/ps.w.org\/presence-api\/assets\/banner-772x250.png?rev=3620136","banner_2x":"https:\/\/ps.w.org\/presence-api\/assets\/banner-1544x500.png?rev=3620136","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/presence-api\/assets\/icon.svg?rev=3669719","icon":"https:\/\/ps.w.org\/presence-api\/assets\/icon.svg?rev=3669719","icon_2x":false,"generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Presence API gives WordPress a system-wide awareness layer. It tracks which users are logged in, which admin screen they are on, and which posts they are editing.<\/p>\n\n<p>Data flows through the Heartbeat API and is stored in a dedicated <code>wp_presence<\/code> table with a 150-second TTL. No writes to <code>wp_postmeta<\/code> means no post-cache invalidation on every heartbeat.<\/p>\n\n<p>On a multisite network, Network Admin gets its own view of the same data: a Who's Online dashboard widget listing the busiest sites and who is on each, an Online column in the Sites list, and an Online view, filter, and column in the Users list. These require the <code>manage_network<\/code> capability.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Who's Online dashboard widget with idle detection<\/li>\n<li>Active Posts dashboard widget grouped by post<\/li>\n<li>Admin bar indicator showing who's online, grouped by who's on this page<\/li>\n<li>Editors column in the post list<\/li>\n<li>Online filter in the Users list<\/li>\n<\/ul>\n\n<h4>For Developers<\/h4>\n\n<p>PHP functions, REST endpoints, WP-CLI commands, filters, and room conventions are documented in the <a href=\"https:\/\/github.com\/WordPress\/presence-api\">GitHub repository<\/a>.<\/p>\n\n<h4>Background<\/h4>\n\n<p>An experimental feature plugin sponsored by the WordPress Core team, exploring what system-wide presence could look like for a future WordPress release. Follow development on <a href=\"https:\/\/make.wordpress.org\/core\/\">make.wordpress.org\/core<\/a> with the tag <code>#presence-api<\/code>.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>In your WordPress admin, go to <strong>Plugins \u2192 Add New Plugin<\/strong> and search for \"Presence API\", then click <strong>Install Now<\/strong>.<\/li>\n<li>Activate through the <strong>Plugins<\/strong> menu.<\/li>\n<\/ol>\n\n<p>Or install manually:<\/p>\n\n<ol>\n<li>Download the zip and upload the <code>presence-api<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate through the <strong>Plugins<\/strong> menu.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20it%20work%20on%20multisite%3F\"><h3>Does it work on multisite?<\/h3><\/dt>\n<dd><p>Yes. Network-activate it and Network Admin gains a Who's Online dashboard widget listing the busiest sites and who is on each, an Online column in the Sites list, and an Online view, filter, and column in the Users list. Every site keeps its own widgets and lists, counting only the people on that site.<\/p><\/dd>\n<dt id=\"who%20can%20see%20network-wide%20presence%3F\"><h3>Who can see network-wide presence?<\/h3><\/dt>\n<dd><p>Anyone with the <code>manage_network<\/code> capability, which on a default network means super admins. The <code>wp_presence_network_capability<\/code> filter changes what is required.<\/p><\/dd>\n<dt id=\"can%20a%20site%20stop%20recording%20presence%3F\"><h3>Can a site stop recording presence?<\/h3><\/dt>\n<dd><p>Yes. Clear the <strong>Presence<\/strong> checkbox on Settings &gt; General, or run <code>wp presence recording set off<\/code>. Every screen empties within one TTL as the rows already stored expire. On multisite, Network Admin &gt; Settings has the same checkbox for every site at once; whichever switch is off decides.<\/p>\n\n<p>For code, the <code>wp_presence_recording_enabled<\/code> and <code>wp_presence_network_recording_enabled<\/code> filters take the checkboxes as their defaults, so a filter always has the last word.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<p>Only the most recent releases are listed here. For the full history, see https:\/\/github.com\/WordPress\/presence-api\/blob\/main\/CHANGELOG.md<\/p>\n\n<h4>0.6.0<\/h4>\n\n<ul>\n<li>Add Network Admin plugin action links (<a href=\"https:\/\/github.com\/WordPress\/presence-api\/issues\/513\">#513<\/a>).<\/li>\n<li>Add wp_presence_is_available() for integrators (<a href=\"https:\/\/github.com\/WordPress\/presence-api\/issues\/519\">#519<\/a>).<\/li>\n<li>Expose the room's collaborator count as JS hooks (<a href=\"https:\/\/github.com\/WordPress\/presence-api\/issues\/503\">#503<\/a>).<\/li>\n<li>Centralize network site status filtering (<a href=\"https:\/\/github.com\/WordPress\/presence-api\/issues\/453\">#453<\/a>).<\/li>\n<li>Keep a client that is still pinging out of the idle state (<a href=\"https:\/\/github.com\/WordPress\/presence-api\/issues\/522\">#522<\/a>).<\/li>\n<li>Keep the collaboration edge state in the presence table (<a href=\"https:\/\/github.com\/WordPress\/presence-api\/issues\/514\">#514<\/a>).<\/li>\n<\/ul>\n\n<h4>0.5.0<\/h4>\n\n<ul>\n<li>Add a Settings link to the plugin row actions (<a href=\"https:\/\/github.com\/WordPress\/presence-api\/commit\/ba04159d8e780936ee8e25100d7b23e239fd8cab\">ba04159<\/a>), closes <a href=\"https:\/\/github.com\/WordPress\/presence-api\/issues\/484\">#484<\/a>.<\/li>\n<li>Let wp_set_presence() accept an explicit GMT timestamp.<\/li>\n<li>Bypass the redundant-write guard and validate $date_gmt on wp_set_presence().<\/li>\n<li>Request a retina-sharp avatar resolution across the presence surfaces.<\/li>\n<li>Stop PHPStan's bootstrap from silently exiting before analysis.<\/li>\n<\/ul>\n\n<h4>0.4.0<\/h4>\n\n<ul>\n<li>Carry the room's editor count on the editor heartbeat response.<\/li>\n<li>Gate the network column renderers on the network capability.<\/li>\n<li>Pin the patched bullseye apt sources to the image's own frozen snapshot.<\/li>\n<li>Public surface read constants.<\/li>\n<li>Skip presence writes that would only move the timestamp.<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>Add a site and network switch for whether presence is recorded.<\/li>\n<li>Add policy content, exporter and eraser for presence data.<\/li>\n<li>Switch presence recording on and off from Settings and WP-CLI.<\/li>\n<li>Add data-post-id to server-rendered Active Posts rows.<\/li>\n<li>Collapse the duplicated online-ID assembly into one helper.<\/li>\n<li>Count everyone present, including yourself, on every surface.<\/li>\n<li>Count Who's Online overflow from the heartbeat total.<\/li>\n<li>Declare the current user next to where the bar renders it.<\/li>\n<li>Distinguish a non-aggregating network from a quiet one.<\/li>\n<li>Keep the network Who's Online widget's accessible names across a re-render.<\/li>\n<li>List yourself in the widget so its rows match the count above them.<\/li>\n<li>Preserve accessible names across heartbeat re-renders in the network Who's Online widget.<\/li>\n<li>Report a switched-off site rather than a failed write.<\/li>\n<li>Report network aggregation state from the REST and CLI network reads.<\/li>\n<li>Restore the named stack limit on the admin bar avatar cap.<\/li>\n<li>Run workflows on the release pull request's final commit.<\/li>\n<li>Say so on the network dashboard widget when the network does not aggregate.<\/li>\n<li>Say the network does not aggregate on the Users list too.<\/li>\n<li>Skip the Playground preview publish when the built SHA is superseded.<\/li>\n<li>Warn on the Network Sites list when the network does not aggregate presence.<\/li>\n<li>Store network summary rows compact.<\/li>\n<\/ul>\n\n<h4>0.2.1<\/h4>\n\n<ul>\n<li>Filter out archived, spam, and deleted sites from network presence.<\/li>\n<li>Gate cross-tab relay on Web Locks availability.<\/li>\n<li>Prune network summary rows past the read cutoff.<\/li>\n<li>Stop tab coordinator rebroadcast loop when Web Locks is unavailable.<\/li>\n<\/ul>","raw_excerpt":"System-wide presence and awareness for WordPress.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/fr-be.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/299441","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fr-be.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/fr-be.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"author":[{"embeddable":true,"href":"https:\/\/fr-be.wordpress.org\/plugins\/wp-json\/wp\/v2\/users\/5911429"}],"replies":[{"embeddable":true,"href":"https:\/\/fr-be.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=299441"}],"wp:attachment":[{"href":"https:\/\/fr-be.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=299441"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/fr-be.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=299441"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/fr-be.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=299441"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/fr-be.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=299441"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/fr-be.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=299441"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/fr-be.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=299441"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}