{"id":47787713,"url":"https://github.com/wordpress/presence-api","last_synced_at":"2026-06-10T02:01:42.122Z","repository":{"id":348561432,"uuid":"1186574905","full_name":"WordPress/presence-api","owner":"WordPress","description":"System-wide presence and awareness for WordPress.","archived":false,"fork":false,"pushed_at":"2026-04-02T14:38:31.000Z","size":138,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-04-03T17:42:55.865Z","etag":null,"topics":["heartbeat-api","real-time","wordpress","wordpress-plugin"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/WordPress.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-19T19:14:57.000Z","updated_at":"2026-04-02T14:38:36.000Z","dependencies_parsed_at":null,"dependency_job_id":"7e0cf812-6c70-411e-bee0-1bd5ad201614","html_url":"https://github.com/WordPress/presence-api","commit_stats":null,"previous_names":["wordpress/presence-api"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/WordPress/presence-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WordPress%2Fpresence-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WordPress%2Fpresence-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WordPress%2Fpresence-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WordPress%2Fpresence-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/WordPress","download_url":"https://codeload.github.com/WordPress/presence-api/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WordPress%2Fpresence-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31485516,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-06T17:22:55.647Z","status":"ssl_error","status_checked_at":"2026-04-06T17:22:54.741Z","response_time":112,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["heartbeat-api","real-time","wordpress","wordpress-plugin"],"created_at":"2026-04-03T15:02:03.107Z","updated_at":"2026-06-10T02:01:42.107Z","avatar_url":"https://github.com/WordPress.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Presence API\n\n[![PHPCS](https://github.com/WordPress/presence-api/actions/workflows/phpcs.yml/badge.svg)](https://github.com/WordPress/presence-api/actions/workflows/phpcs.yml) [![PHPUnit](https://github.com/WordPress/presence-api/actions/workflows/phpunit.yml/badge.svg)](https://github.com/WordPress/presence-api/actions/workflows/phpunit.yml) [![Multisite](https://github.com/WordPress/presence-api/actions/workflows/multisite.yml/badge.svg)](https://github.com/WordPress/presence-api/actions/workflows/multisite.yml)\n\n\u003e **Status:** Experimental feature plugin\n\nSystem-wide presence and awareness for WordPress.\n\n## Problem\n\nWordPress has no way to know who is logged in, what screen they are on, or which posts are being edited — without writing to shared tables like `wp_postmeta` or `wp_options`. High-frequency writes to those tables invalidate caches site-wide ([#64696](https://core.trac.wordpress.org/ticket/64696)). This plugin uses a dedicated `wp_presence` table with a 60-second TTL to provide that awareness with zero cache side effects.\n\n\u003e \"This idea of presence I think is really cool and seeing where people are... you log into your WordPress, I see oh Matias is moderating some comments, Lynn is on the dashboard maybe reading some news... that idea of like you log in and you can kind of see the neighborhood of like who else is also there.\" — [Matt Mullenweg, WordPress 7.0 planning session](https://youtu.be/F-xMPY9WqG4?si=YK0rIUM2nuYy7x45\u0026t=2435)\n\n[![Watch the demo on YouTube](https://img.youtube.com/vi/Xa5WkZdjBD4/maxresdefault.jpg)](https://youtu.be/Xa5WkZdjBD4)\n\n▶ [Watch the demo on YouTube](https://youtu.be/Xa5WkZdjBD4) (no audio)\n\n## Try it\n\n[Test in WordPress Playground](https://playground.wordpress.net/?blueprint-url=https://raw.githubusercontent.com/WordPress/presence-api/main/blueprint.json)\n\nOr run locally:\n\n```bash\nnpm install\nnpx wp-env start\n```\n\nThen open [localhost:8888/wp-admin/](http://localhost:8888/wp-admin/) (admin / password).\n\n## Data flow\n\n1. Browser sends `presence-ping` via Heartbeat\n2. Server upserts into `wp_presence`\n3. Server reads the room and returns entries in the heartbeat response\n4. Client diffs a signature of user IDs and swaps HTML when content changes\n5. Client-side interval re-evaluates idle state every 5s between heartbeat ticks\n\n## Rooms\n\n| Pattern | Example |\n|---|---|\n| `admin/online` | All admin pages |\n| `postType/{type}:{id}` | `postType/post:42` |\n\nPost types opt in via `add_post_type_support( 'post', 'presence' )`.\n\n## Post-lock bridge\n\nCreates presence entries alongside `_edit_lock` postmeta when a post lock is refreshed via Heartbeat. Both systems coexist.\n\n## Capability\n\nAll features require `edit_posts`.\n\n## Maintainers\n\n- [@josephfusco](https://github.com/josephfusco)\n\nSponsored by the [Core team](https://make.wordpress.org/core/). Updates posted on [make.wordpress.org/core](https://make.wordpress.org/core/) with the tag `#presence-api`.\n\n## Support\n\nQuestions and bug reports: [GitHub Issues](https://github.com/WordPress/presence-api/issues).\n\nDiscussion: [#feature-presence-api](https://wordpress.slack.com/archives/feature-presence-api) on WordPress Slack\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwordpress%2Fpresence-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwordpress%2Fpresence-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwordpress%2Fpresence-api/lists"}