{"id":22783811,"url":"https://github.com/greg-kennedy/phpactivitypub","last_synced_at":"2026-03-06T16:34:12.255Z","repository":{"id":86779691,"uuid":"571041886","full_name":"greg-kennedy/phpActivityPub","owner":"greg-kennedy","description":"Simple, post-only ActivityPub implementation in PHP","archived":false,"fork":false,"pushed_at":"2023-07-09T13:42:42.000Z","size":21,"stargazers_count":6,"open_issues_count":1,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-13T11:12:49.526Z","etag":null,"topics":["activitypub","activitystreams","fediverse","php"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"cc0-1.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/greg-kennedy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-11-27T00:38:45.000Z","updated_at":"2025-02-27T15:44:33.000Z","dependencies_parsed_at":null,"dependency_job_id":"c0583db1-2eba-4721-abcc-5bb900f85935","html_url":"https://github.com/greg-kennedy/phpActivityPub","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/greg-kennedy/phpActivityPub","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greg-kennedy%2FphpActivityPub","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greg-kennedy%2FphpActivityPub/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greg-kennedy%2FphpActivityPub/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greg-kennedy%2FphpActivityPub/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/greg-kennedy","download_url":"https://codeload.github.com/greg-kennedy/phpActivityPub/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greg-kennedy%2FphpActivityPub/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30185544,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-06T14:42:24.748Z","status":"ssl_error","status_checked_at":"2026-03-06T14:42:14.925Z","response_time":250,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":["activitypub","activitystreams","fediverse","php"],"created_at":"2024-12-11T22:09:31.374Z","updated_at":"2026-03-06T16:34:07.245Z","avatar_url":"https://github.com/greg-kennedy.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# phpActivityPub\nGreg Kennedy, 2023\n\nSmall, post-only ActivityPub implementation in PHP\n\n## Overview\nThis is a PHP-based project to allow a host to post messages into the Fediverse to subscribed Followers.  It implements the minimum of [the ActivityPub spec](https://www.w3.org/TR/activitypub/) for server-to-server federation, specifically:\n* a WebFinger response at /.well-known/webfinger to describe Actor inboxes and accounts\n* an Inbox which receives (and approves) Follow and Undo-Follow requests\n* a post.php webhook which accepts a post and broadcasts it to Followers' inboxes\n\nThese features together allow the host's accounts to be discoverable by other ActivityPub servers, and they may issue Follow requests which are automatically approved.  When this host wants to make a post, a cURL call will then broadcast the message to all Followers who have opted in.\n\nIt is similar to [express-activitypub](https://github.com/dariusk/express-activitypub) by Darius Kazemi, except written in PHP instead of Node.js.\n\nThere is a basic human-readable Index page with information about the Actors located on the server.  For managing Actors on this host, or manual posting, there is an admin page as well.  Newly created actors receive a randomized API Key, which must be included in the header of subsequent calls to the post.php webhook.\n\nNote that this extremely reduced spec is missing a lot of critical functionality one would expect in an ActivityPub service - for example, phpActivityPub does not accept posts from others.  It is thus mostly useful as a tool for bots, relays (RSS / Twitter / etc), or other read-only broadcast applications.\n\n## Requirements\n* PHP\n  * php-sqlite3\n  * php-openssl\n  * php-curl\n* Web server: I use Apache with `.htaccess` rewrites, you will need alternate rules for other servers\n\n## Installation\nClone the repository into your web service HTML tree.\n\nThe `admin/` folder is password-protected using HTTP Basic auth with a `.htpasswd` file.  Use the `htpasswd` utility to create a username and password for logging in.\n\n## Posting\nLog into the Admin page and click \"create\" to set up a new Actor.  The server will provide a random string of characters for your Key, which must be present in an HTTP \"X-API-KEY\" header to post.\n\nPosts should be JSON and will be added to the necessary Activity fields to build a complete post.  Some examples of post body:\n\n```json\n{ \"content\": \"Hello, world!\" }\n```\n\ncreates a Note (the default) with the text \"Hello, world!\"\n\n```json\n{ \"type\": \"Link\", \"url\": \"http://www.example.com\" }\n```\n\n```json\n{ \"type\": \"Image\", \"url\": \"http://www.example.com/image.jpg\" }\n```\n\netc.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgreg-kennedy%2Fphpactivitypub","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgreg-kennedy%2Fphpactivitypub","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgreg-kennedy%2Fphpactivitypub/lists"}