{"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-30T21:03:21","modified_gmt":"2026-09-30T21:03:21","slug":"presence-api","status":"publish","type":"plugin","link":"https:\/\/lij.wordpress.org\/plugins\/presence-api\/","author":5911429,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.12.2","stable_tag":"0.12.2","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-30 21:03:21","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":3245,"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.10.0":{"tag":"0.10.0","author":"JoeFusco","date":"2026-09-27 20:29:51","revision":3716039},"0.11.0":{"tag":"0.11.0","author":"JoeFusco","date":"2026-09-27 22:51:30","revision":3716118},"0.12.0":{"tag":"0.12.0","author":"JoeFusco","date":"2026-09-29 16:12:11","revision":3719419},"0.12.1":{"tag":"0.12.1","author":"JoeFusco","date":"2026-09-29 18:15:20","revision":3719601},"0.12.2":{"tag":"0.12.2","author":"JoeFusco","date":"2026-09-30 21:03:21","revision":3722034},"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},"0.7.0":{"tag":"0.7.0","author":"JoeFusco","date":"2026-09-24 18:13:30","revision":3711836},"0.8.0":{"tag":"0.8.0","author":"JoeFusco","date":"2026-09-25 00:05:25","revision":3712185},"0.9.0":{"tag":"0.9.0","author":"JoeFusco","date":"2026-09-27 15:25:27","revision":3715661}},"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":3722038,"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\":\"defineWpConfigConsts\",\"consts\":{\"WP_DEBUG\":true}},{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"presence-api\"},\"options\":{\"activate\":true}},{\"step\":\"writeFile\",\"path\":\"\\\/wordpress\\\/wp-content\\\/plugins\\\/presence-api\\\/includes\\\/debugger-admin-bar.php\",\"data\":{\"resource\":\"url\",\"url\":\"https:\\\/\\\/raw.githubusercontent.com\\\/WordPress\\\/presence-api\\\/v0.12.2\\\/plugins\\\/presence-api\\\/includes\\\/debugger-admin-bar.php\"}},{\"step\":\"writeFile\",\"path\":\"\\\/wordpress\\\/wp-content\\\/plugins\\\/presence-api\\\/demo-seeder.php\",\"data\":{\"resource\":\"url\",\"url\":\"https:\\\/\\\/raw.githubusercontent.com\\\/WordPress\\\/presence-api\\\/v0.12.2\\\/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.12.2\\\/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( 25 ); update_user_meta( 1, 'show_welcome_panel', 0 ); update_user_meta( 1, 'meta-box-order_dashboard', array( 'normal' => '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.10.0","0.11.0","0.12.0","0.12.1","0.12.2","0.2.0","0.2.1","0.3.0","0.4.0","0.5.0","0.6.0","0.7.0","0.8.0","0.9.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3716118,"resolution":"1","location":"assets","locale":"","width":2560,"height":1568}},"screenshots":[]},"plugin_section":[262246],"plugin_tags":[13780,5901,28310,866],"plugin_category":[],"plugin_contributors":[274871,273209,275765,271448,273072,222961,278189,282606,81359,283009,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-jaredrethman","plugin_contributors-joefusco","plugin_contributors-jooahmed","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":[{"src":"https:\/\/ps.w.org\/presence-api\/assets\/screenshot-1.png?rev=3716118","caption":""}],"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>Admin bar indicator showing who's online and who's on this page<\/li>\n<li>Active Posts dashboard widget grouped by post<\/li>\n<li>Editors column in the post list<\/li>\n<li>Online filter in the Users list<\/li>\n<li>AI agents labelled in Who's Online, the admin bar, and the Editors column, once a plugin such as Agent Users marks them<\/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>A 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.12.2<\/h4>\n\n<ul>\n<li>Elect the Heartbeat ping leader per site among visible tabs (<a href=\"https:\/\/github.com\/WordPress\/presence-api\/issues\/675\">#675<\/a>).<\/li>\n<li>Avoid repeated network summary table checks (<a href=\"https:\/\/github.com\/WordPress\/presence-api\/issues\/657\">#657<\/a>).<\/li>\n<li>Read each presence query once per request until the table changes (<a href=\"https:\/\/github.com\/WordPress\/presence-api\/issues\/678\">#678<\/a>).<\/li>\n<li>Trust the presence table's version option and recheck it only after a failed write (<a href=\"https:\/\/github.com\/WordPress\/presence-api\/issues\/682\">#682<\/a>).<\/li>\n<\/ul>\n\n<h4>0.12.1<\/h4>\n\n<ul>\n<li>Translate Heartbeat debugger plurals and units (<a href=\"https:\/\/github.com\/WordPress\/presence-api\/issues\/660\">#660<\/a>).<\/li>\n<\/ul>\n\n<h4>0.12.0<\/h4>\n\n<ul>\n<li>Add an admin bar debugger and remove the Dashboard widget (<a href=\"https:\/\/github.com\/WordPress\/presence-api\/issues\/652\">#652<\/a>).<\/li>\n<li>Label agent presence rows across the admin UI (<a href=\"https:\/\/github.com\/WordPress\/presence-api\/issues\/653\">#653<\/a>).<\/li>\n<li>Let plugins add rows and indicators to the debugger (<a href=\"https:\/\/github.com\/WordPress\/presence-api\/issues\/666\">#666<\/a>).<\/li>\n<li>Give the debugger and DB viewer's muted text AA contrast (<a href=\"https:\/\/github.com\/WordPress\/presence-api\/issues\/648\">#648<\/a>).<\/li>\n<\/ul>\n\n<h4>0.11.0<\/h4>\n\n<ul>\n<li>Show presence on every post type edited in the admin (<a href=\"https:\/\/github.com\/WordPress\/presence-api\/issues\/631\">#631<\/a>).<\/li>\n<li>Give presence to roles that edit only pages or a custom post type (<a href=\"https:\/\/github.com\/WordPress\/presence-api\/issues\/637\">#637<\/a>).<\/li>\n<li>Join the post room for what the Site Editor has open (<a href=\"https:\/\/github.com\/WordPress\/presence-api\/issues\/638\">#638<\/a>).<\/li>\n<li>Keep post locks in the presence table with recording off (<a href=\"https:\/\/github.com\/WordPress\/presence-api\/issues\/644\">#644<\/a>).<\/li>\n<li>Name post types, untitled posts and sites in the dashboard widgets (<a href=\"https:\/\/github.com\/WordPress\/presence-api\/issues\/634\">#634<\/a>).<\/li>\n<li>Stop labelling Active Posts as posts being edited (<a href=\"https:\/\/github.com\/WordPress\/presence-api\/issues\/645\">#645<\/a>).<\/li>\n<li>Translate reused core strings under the plugin's text domain (<a href=\"https:\/\/github.com\/WordPress\/presence-api\/issues\/646\">#646<\/a>).<\/li>\n<\/ul>\n\n<h4>0.10.0<\/h4>\n\n<ul>\n<li>Fold shared screens into one row in the admin bar menu (<a href=\"https:\/\/github.com\/WordPress\/presence-api\/issues\/615\">#615<\/a>).<\/li>\n<li>List people editing posts first in the admin bar menu (<a href=\"https:\/\/github.com\/WordPress\/presence-api\/issues\/603\">#603<\/a>).<\/li>\n<li>Refresh the Editors column on each heartbeat (<a href=\"https:\/\/github.com\/WordPress\/presence-api\/issues\/606\">#606<\/a>).<\/li>\n<li>Refresh the Online users list on each heartbeat (<a href=\"https:\/\/github.com\/WordPress\/presence-api\/issues\/604\">#604<\/a>).<\/li>\n<li>Show the stale-screen banner on Settings API, Privacy and Network Admin screens (<a href=\"https:\/\/github.com\/WordPress\/presence-api\/issues\/619\">#619<\/a>).<\/li>\n<li>Bump the right Users screen on a row Remove and skip bumps while deleting a site (<a href=\"https:\/\/github.com\/WordPress\/presence-api\/issues\/628\">#628<\/a>).<\/li>\n<li>Link admin bar rows to the comment, user or term being edited (<a href=\"https:\/\/github.com\/WordPress\/presence-api\/issues\/617\">#617<\/a>).<\/li>\n<li>Link Network Admin rows and count the network in the admin bar (<a href=\"https:\/\/github.com\/WordPress\/presence-api\/issues\/618\">#618<\/a>).<\/li>\n<li>Read the network Online view from the heartbeat's screen (<a href=\"https:\/\/github.com\/WordPress\/presence-api\/issues\/622\">#622<\/a>).<\/li>\n<li>Refresh presence rows on SQLite with CASE instead of IF() (<a href=\"https:\/\/github.com\/WordPress\/presence-api\/issues\/623\">#623<\/a>).<\/li>\n<li>Cut e2e runtime with backdated fixtures and readiness waits (<a href=\"https:\/\/github.com\/WordPress\/presence-api\/issues\/621\">#621<\/a>).<\/li>\n<\/ul>","raw_excerpt":"System-wide presence and awareness for WordPress.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/lij.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/299441","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lij.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/lij.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"author":[{"embeddable":true,"href":"https:\/\/lij.wordpress.org\/plugins\/wp-json\/wp\/v2\/users\/5911429"}],"replies":[{"embeddable":true,"href":"https:\/\/lij.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=299441"}],"wp:attachment":[{"href":"https:\/\/lij.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=299441"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/lij.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=299441"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/lij.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=299441"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/lij.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=299441"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/lij.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=299441"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/lij.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=299441"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}