ActivityPub Viewer

A small tool to view real-world ActivityPub objects as JSON! Enter a URL or username from Mastodon or a similar service below, and we'll send a request with the right Accept header to the server to view the underlying object.

Open in browser →
{ "@context": [ "https://www.w3.org/ns/activitystreams", { "ostatus": "http://ostatus.org#", "atomUri": "ostatus:atomUri", "inReplyToAtomUri": "ostatus:inReplyToAtomUri", "conversation": "ostatus:conversation", "sensitive": "as:sensitive", "toot": "http://joinmastodon.org/ns#", "votersCount": "toot:votersCount", "litepub": "http://litepub.social/ns#", "directMessage": "litepub:directMessage", "Hashtag": "as:Hashtag" } ], "id": "https://neuromatch.social/users/jonny/statuses/114289503532227805", "type": "Note", "summary": null, "inReplyTo": "https://neuromatch.social/users/jonny/statuses/114288976460931162", "published": "2025-04-06T06:03:46Z", "url": "https://neuromatch.social/@jonny/114289503532227805", "attributedTo": "https://neuromatch.social/users/jonny", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://neuromatch.social/users/jonny/followers" ], "sensitive": false, "atomUri": "https://neuromatch.social/users/jonny/statuses/114289503532227805", "inReplyToAtomUri": "https://neuromatch.social/users/jonny/statuses/114288976460931162", "conversation": "tag:neuromatch.social,2025-04-06:objectId=26379923:objectType=Conversation", "content": "<p><a href=\"https://neuromatch.social/@jonny/113784556826934111\" target=\"_blank\">quoting myself</a>, bittorrent is like the Hegel of <a href=\"https://neuromatch.social/tags/P2P\" class=\"mention hashtag\" rel=\"tag\">#<span>P2P</span></a>, it is the simplest protocol i am aware of that is quite literally just the core of the idea as a spec and then decades of history, culture, and practice crusted on top of it. hashes of chunks of data overlaid on top of the data itself to facilitate sharing it. that's it. i am a peer. i have heard of some data via its hash. i ask around for that data. i get it and check it against the hash. end of algorithm. Yes yes, choking algorithms, trackers, transport protocols, holepunching, but that's implementation details.</p><p>You can't think about P2P without taking some implicit or explicit disposition towards bittorrent because it's such a pure expression of the idea. An analogous argument is that you can't really implement a P2P protocol without accidentally making it in <em>some way</em> (maybe through a few steps) compatible with bittorrent. v2 makes that bar almost zero by just being literally a set of per-file merkle trees. you can just ignore the .torrent file entirely and deal with the trees directly, all you need to do is understand when someone asks for hashes at a specific level of the tree.</p><p>If i was designing a P2P protocol, which i always am in some part of my being, I would start from bittorrent v2 and branch out from there. Being able to talk to a bittorrent client is <em>so trivial</em> it's almost an afterthought, an afternoon of writing udp packing and unpacking functions. If you ignore the rest of the lessons like the obvious UX affordance of having a thing to trade around like .torrent files, magnet links which are an identifier and a non-definitive starting point for resolving it, trackers which are a means of coordinating the swarm, you're just throwing away an entire generation of practical experience</p>", "contentMap": { "en": "<p><a href=\"https://neuromatch.social/@jonny/113784556826934111\" target=\"_blank\">quoting myself</a>, bittorrent is like the Hegel of <a href=\"https://neuromatch.social/tags/P2P\" class=\"mention hashtag\" rel=\"tag\">#<span>P2P</span></a>, it is the simplest protocol i am aware of that is quite literally just the core of the idea as a spec and then decades of history, culture, and practice crusted on top of it. hashes of chunks of data overlaid on top of the data itself to facilitate sharing it. that's it. i am a peer. i have heard of some data via its hash. i ask around for that data. i get it and check it against the hash. end of algorithm. Yes yes, choking algorithms, trackers, transport protocols, holepunching, but that's implementation details.</p><p>You can't think about P2P without taking some implicit or explicit disposition towards bittorrent because it's such a pure expression of the idea. An analogous argument is that you can't really implement a P2P protocol without accidentally making it in <em>some way</em> (maybe through a few steps) compatible with bittorrent. v2 makes that bar almost zero by just being literally a set of per-file merkle trees. you can just ignore the .torrent file entirely and deal with the trees directly, all you need to do is understand when someone asks for hashes at a specific level of the tree.</p><p>If i was designing a P2P protocol, which i always am in some part of my being, I would start from bittorrent v2 and branch out from there. Being able to talk to a bittorrent client is <em>so trivial</em> it's almost an afterthought, an afternoon of writing udp packing and unpacking functions. If you ignore the rest of the lessons like the obvious UX affordance of having a thing to trade around like .torrent files, magnet links which are an identifier and a non-definitive starting point for resolving it, trackers which are a means of coordinating the swarm, you're just throwing away an entire generation of practical experience</p>" }, "attachment": [], "tag": [ { "type": "Hashtag", "href": "https://neuromatch.social/tags/p2p", "name": "#p2p" } ], "replies": { "id": "https://neuromatch.social/users/jonny/statuses/114289503532227805/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://neuromatch.social/users/jonny/statuses/114289503532227805/replies?min_id=114289544759075059&page=true", "partOf": "https://neuromatch.social/users/jonny/statuses/114289503532227805/replies", "items": [ "https://neuromatch.social/users/jonny/statuses/114289544759075059" ] } }, "likes": { "id": "https://neuromatch.social/users/jonny/statuses/114289503532227805/likes", "type": "Collection", "totalItems": 31 }, "shares": { "id": "https://neuromatch.social/users/jonny/statuses/114289503532227805/shares", "type": "Collection", "totalItems": 12 } }