Hashtags and JSON-LD¶
The examples here are various variations of creating the Hashtag element in the tag list. These variations can be useful in understanding how strict an application sees JSON-LD.
Hashtags are a good illustration of JSON-LD parsing as Hashtag is not part of the ActivityStreams vocabulary.
All examples except the first are questionable, and probably should not
be used when publishing to the Fediverse. The examples marked with
⚠️ are expected to fail with a JSON-LD parser. The examples using
as:Hashtag
are expected to fail with a JSON only parser.
Examples¶
Example 1¶
activity
{
"@context": [
"https://www.w3.org/ns/activitystreams",
{
"Hashtag": "as:Hashtag",
"sensitive": "as:sensitive"
}
],
"type": "Create",
"actor": "http://pasture-one-actor/actor",
"to": [
"https://www.w3.org/ns/activitystreams#Public",
"http://mbin/u/oscar"
],
"id": "http://pasture-one-actor/activity/HMekL95RDYM",
"published": "2025-09-09T11:11:38Z",
"object": {
"type": "Note",
"attributedTo": "http://pasture-one-actor/actor",
"to": [
"https://www.w3.org/ns/activitystreams#Public",
"http://mbin/u/oscar"
],
"id": "http://pasture-one-actor/object/VobaUr2x-_A",
"published": "2025-09-09T11:11:38Z",
"content": "text",
"tag": {
"type": "Hashtag",
"name": "#test"
},
"cc": []
}
}
mbin
{
"content": "<div class=\"content\">\n<p>text</p>\n</div>",
"html": "<blockquote class=\"section post subject\" data-action=\"notifications:Notification@window->subject#notification\" data-controller=\"post subject mentions html-refresh\" id=\"post-14\">\n<header>\n<a class=\"user-inline\" data-action=\"mouseover->mentions#user_popup mouseout->mentions#user_popup_out\" data-mentions-username-param=\"@actor@pasture-one-actor\" href=\"/u/@actor@pasture-one-actor\" title=\"@actor@pasture-one-actor\">\n actor <i aria-description=\"This user is new (active for less than 30 days)\" class=\"fa-solid fa-leaf new-user-icon\" title=\"This user is new (active for less than 30 days)\"></i>\n</a>\n<span>, </span>\n<a class=\"link-muted\" href=\"/m/random/p/14/text\"><time class=\"timeago\" datetime=\"2025-09-09T11:11:38+00:00\" title=\"2025-09-09T11:11:38+00:00\">1 second ago \n</time></a>\n</header>\n<figure>\n<a data-action=\"mouseover->mentions#user_popup mouseout->mentions#user_popup_out\" data-mentions-username-param=\"actor@pasture-one-actor\" href=\"/u/@actor@pasture-one-actor\">\n<div class=\"no-avatar\"></div>\n</a>\n</figure>\n<div class=\"content\">\n<p>text</p>\n</div>\n<aside class=\"vote\">\n<form action=\"/pf/14?choice=0\" class=\"vote__up\" method=\"post\">\n<button aria-label=\"Favorite\" data-action=\"subject#vote\" title=\"Favorite\" type=\"submit\">\n<span data-subject-target=\"favCounter\">0</span> <span><i aria-hidden=\"true\" class=\"fa-solid fa-arrow-up\"></i></span>\n</button>\n</form>\n</aside>\n<footer>\n<menu>\n<li>\n<a class=\"stretched-link\" data-action=\"subject#getForm\" href=\"/m/random/p/14/text/reply\">Reply</a>\n</li>\n<li>\n<form action=\"/pb/14\" method=\"post\">\n<button class=\"boost-link stretched-link\" data-action=\"subject#favourite\" type=\"submit\">\n Boost <span class=\"hidden\" data-subject-target=\"upvoteCounter\">(0)</span>\n</button>\n</form>\n</li>\n<li class=\"dropdown\">\n<button class=\"stretched-link\" data-subject-target=\"more\">More</button>\n<ul class=\"dropdown__menu\" data-controller=\"clipboard\">\n<li>\n<a class=\"\" data-action=\"subject#getForm\" href=\"/pr/14\">\n Report\n </a>\n</li>\n<li>\n<a class=\"\" href=\"/m/random/p/14/text/votes?type=up\">\n Activity\n </a>\n</li>\n<li class=\"dropdown__separator\"></li>\n<li>\n<a href=\"http://pasture-one-actor/object/VobaUr2x-_A\" rel=\"nofollow noopener noreferrer\" target=\"_blank\">\n Open original URL\n </a>\n</li>\n<li>\n<a data-action=\"clipboard#copy\" href=\"http://pasture-one-actor/object/VobaUr2x-_A\" rel=\"nofollow noopener noreferrer\">\n Copy original URL\n </a>\n</li>\n<li>\n<a data-action=\"clipboard#copy\" href=\"/m/random/p/14/text\">\n Copy Mbin URL\n </a>\n</li>\n</ul>\n</li>\n<li data-subject-target=\"loader\" style=\"display:none\">\n<div class=\"loader\" role=\"status\">\n<span class=\"visually-hidden\">Loading...</span>\n</div>\n</li>\n</menu>\n<div class=\"js-container\" data-subject-target=\"container\">\n</div>\n</footer>\n</blockquote>"
}
Example 2¶
activity
{
"@context": [
"https://www.w3.org/ns/activitystreams",
{
"Hashtag": "as:Hashtag",
"sensitive": "as:sensitive"
}
],
"type": "Create",
"actor": "http://pasture-one-actor/actor",
"to": [
"https://www.w3.org/ns/activitystreams#Public",
"http://mbin/u/oscar"
],
"id": "http://pasture-one-actor/activity/WyIXMVVqRvY",
"published": "2025-09-09T11:11:39Z",
"object": {
"type": "Note",
"attributedTo": "http://pasture-one-actor/actor",
"to": [
"https://www.w3.org/ns/activitystreams#Public",
"http://mbin/u/oscar"
],
"id": "http://pasture-one-actor/object/VNiz9PWd7Ok",
"published": "2025-09-09T11:11:39Z",
"content": "using as:Hashtag",
"tag": {
"type": "as:Hashtag",
"name": "#test"
},
"cc": []
}
}
mbin
{
"content": "<div class=\"content\">\n<p>using as:Hashtag</p>\n</div>",
"html": "<blockquote class=\"section post subject\" data-action=\"notifications:Notification@window->subject#notification\" data-controller=\"post subject mentions html-refresh\" id=\"post-15\">\n<header>\n<a class=\"user-inline\" data-action=\"mouseover->mentions#user_popup mouseout->mentions#user_popup_out\" data-mentions-username-param=\"@actor@pasture-one-actor\" href=\"/u/@actor@pasture-one-actor\" title=\"@actor@pasture-one-actor\">\n actor <i aria-description=\"This user is new (active for less than 30 days)\" class=\"fa-solid fa-leaf new-user-icon\" title=\"This user is new (active for less than 30 days)\"></i>\n</a>\n<span>, </span>\n<a class=\"link-muted\" href=\"/m/random/p/15/using-as-Hashtag\"><time class=\"timeago\" datetime=\"2025-09-09T11:11:39+00:00\" title=\"2025-09-09T11:11:39+00:00\">2 seconds ago \n</time></a>\n</header>\n<figure>\n<a data-action=\"mouseover->mentions#user_popup mouseout->mentions#user_popup_out\" data-mentions-username-param=\"actor@pasture-one-actor\" href=\"/u/@actor@pasture-one-actor\">\n<div class=\"no-avatar\"></div>\n</a>\n</figure>\n<div class=\"content\">\n<p>using as:Hashtag</p>\n</div>\n<aside class=\"vote\">\n<form action=\"/pf/15?choice=0\" class=\"vote__up\" method=\"post\">\n<button aria-label=\"Favorite\" data-action=\"subject#vote\" title=\"Favorite\" type=\"submit\">\n<span data-subject-target=\"favCounter\">0</span> <span><i aria-hidden=\"true\" class=\"fa-solid fa-arrow-up\"></i></span>\n</button>\n</form>\n</aside>\n<footer>\n<menu>\n<li>\n<a class=\"stretched-link\" data-action=\"subject#getForm\" href=\"/m/random/p/15/using-as-Hashtag/reply\">Reply</a>\n</li>\n<li>\n<form action=\"/pb/15\" method=\"post\">\n<button class=\"boost-link stretched-link\" data-action=\"subject#favourite\" type=\"submit\">\n Boost <span class=\"hidden\" data-subject-target=\"upvoteCounter\">(0)</span>\n</button>\n</form>\n</li>\n<li class=\"dropdown\">\n<button class=\"stretched-link\" data-subject-target=\"more\">More</button>\n<ul class=\"dropdown__menu\" data-controller=\"clipboard\">\n<li>\n<a class=\"\" data-action=\"subject#getForm\" href=\"/pr/15\">\n Report\n </a>\n</li>\n<li>\n<a class=\"\" href=\"/m/random/p/15/using-as-Hashtag/votes?type=up\">\n Activity\n </a>\n</li>\n<li class=\"dropdown__separator\"></li>\n<li>\n<a href=\"http://pasture-one-actor/object/VNiz9PWd7Ok\" rel=\"nofollow noopener noreferrer\" target=\"_blank\">\n Open original URL\n </a>\n</li>\n<li>\n<a data-action=\"clipboard#copy\" href=\"http://pasture-one-actor/object/VNiz9PWd7Ok\" rel=\"nofollow noopener noreferrer\">\n Copy original URL\n </a>\n</li>\n<li>\n<a data-action=\"clipboard#copy\" href=\"/m/random/p/15/using-as-Hashtag\">\n Copy Mbin URL\n </a>\n</li>\n</ul>\n</li>\n<li data-subject-target=\"loader\" style=\"display:none\">\n<div class=\"loader\" role=\"status\">\n<span class=\"visually-hidden\">Loading...</span>\n</div>\n</li>\n</menu>\n<div class=\"js-container\" data-subject-target=\"container\">\n</div>\n</footer>\n</blockquote>"
}
Example 3¶
activity
{
"@context": [
"https://www.w3.org/ns/activitystreams",
{
"Hashtag": "as:Hashtag",
"sensitive": "as:sensitive"
}
],
"type": "Create",
"actor": "http://pasture-one-actor/actor",
"to": [
"https://www.w3.org/ns/activitystreams#Public",
"http://mbin/u/oscar"
],
"id": "http://pasture-one-actor/activity/tFJSyAHeTd0",
"published": "2025-09-09T11:11:41Z",
"object": {
"type": "Note",
"attributedTo": "http://pasture-one-actor/actor",
"to": [
"https://www.w3.org/ns/activitystreams#Public",
"http://mbin/u/oscar"
],
"id": "http://pasture-one-actor/object/zmC5vVNo96s",
"published": "2025-09-09T11:11:41Z",
"content": "no type \u26a0\ufe0f ",
"tag": {
"name": "#test"
},
"cc": []
}
}
mbin
{
"content": "<div class=\"content\">\n<p>no type \u26a0\ufe0f</p>\n</div>",
"html": "<blockquote class=\"section post subject\" data-action=\"notifications:Notification@window->subject#notification\" data-controller=\"post subject mentions html-refresh\" id=\"post-16\">\n<header>\n<a class=\"user-inline\" data-action=\"mouseover->mentions#user_popup mouseout->mentions#user_popup_out\" data-mentions-username-param=\"@actor@pasture-one-actor\" href=\"/u/@actor@pasture-one-actor\" title=\"@actor@pasture-one-actor\">\n actor <i aria-description=\"This user is new (active for less than 30 days)\" class=\"fa-solid fa-leaf new-user-icon\" title=\"This user is new (active for less than 30 days)\"></i>\n</a>\n<span>, </span>\n<a class=\"link-muted\" href=\"/m/random/p/16/no-type\"><time class=\"timeago\" datetime=\"2025-09-09T11:11:41+00:00\" title=\"2025-09-09T11:11:41+00:00\">now \n</time></a>\n</header>\n<figure>\n<a data-action=\"mouseover->mentions#user_popup mouseout->mentions#user_popup_out\" data-mentions-username-param=\"actor@pasture-one-actor\" href=\"/u/@actor@pasture-one-actor\">\n<div class=\"no-avatar\"></div>\n</a>\n</figure>\n<div class=\"content\">\n<p>no type \u26a0\ufe0f</p>\n</div>\n<aside class=\"vote\">\n<form action=\"/pf/16?choice=0\" class=\"vote__up\" method=\"post\">\n<button aria-label=\"Favorite\" data-action=\"subject#vote\" title=\"Favorite\" type=\"submit\">\n<span data-subject-target=\"favCounter\">0</span> <span><i aria-hidden=\"true\" class=\"fa-solid fa-arrow-up\"></i></span>\n</button>\n</form>\n</aside>\n<footer>\n<menu>\n<li>\n<a class=\"stretched-link\" data-action=\"subject#getForm\" href=\"/m/random/p/16/no-type/reply\">Reply</a>\n</li>\n<li>\n<form action=\"/pb/16\" method=\"post\">\n<button class=\"boost-link stretched-link\" data-action=\"subject#favourite\" type=\"submit\">\n Boost <span class=\"hidden\" data-subject-target=\"upvoteCounter\">(0)</span>\n</button>\n</form>\n</li>\n<li class=\"dropdown\">\n<button class=\"stretched-link\" data-subject-target=\"more\">More</button>\n<ul class=\"dropdown__menu\" data-controller=\"clipboard\">\n<li>\n<a class=\"\" data-action=\"subject#getForm\" href=\"/pr/16\">\n Report\n </a>\n</li>\n<li>\n<a class=\"\" href=\"/m/random/p/16/no-type/votes?type=up\">\n Activity\n </a>\n</li>\n<li class=\"dropdown__separator\"></li>\n<li>\n<a href=\"http://pasture-one-actor/object/zmC5vVNo96s\" rel=\"nofollow noopener noreferrer\" target=\"_blank\">\n Open original URL\n </a>\n</li>\n<li>\n<a data-action=\"clipboard#copy\" href=\"http://pasture-one-actor/object/zmC5vVNo96s\" rel=\"nofollow noopener noreferrer\">\n Copy original URL\n </a>\n</li>\n<li>\n<a data-action=\"clipboard#copy\" href=\"/m/random/p/16/no-type\">\n Copy Mbin URL\n </a>\n</li>\n</ul>\n</li>\n<li data-subject-target=\"loader\" style=\"display:none\">\n<div class=\"loader\" role=\"status\">\n<span class=\"visually-hidden\">Loading...</span>\n</div>\n</li>\n</menu>\n<div class=\"js-container\" data-subject-target=\"container\">\n</div>\n</footer>\n</blockquote>"
}
Example 4¶
activity
{
"@context": "https://www.w3.org/ns/activitystreams",
"type": "Create",
"actor": "http://pasture-one-actor/actor",
"to": [
"https://www.w3.org/ns/activitystreams#Public",
"http://mbin/u/oscar"
],
"id": "http://pasture-one-actor/activity/YpA1l54AnEM",
"published": "2025-09-09T11:11:41Z",
"object": {
"type": "Note",
"attributedTo": "http://pasture-one-actor/actor",
"to": [
"https://www.w3.org/ns/activitystreams#Public",
"http://mbin/u/oscar"
],
"id": "http://pasture-one-actor/object/LCY52fiGIUc",
"published": "2025-09-09T11:11:41Z",
"@context": "https://www.w3.org/ns/activitystreams",
"content": "Hashtag not in @context \u26a0\ufe0f ",
"tag": {
"type": "Hashtag",
"name": "#test"
},
"cc": []
}
}
mbin
{
"content": "<div class=\"content\">\n<p>Hashtag not in <span class=\"mention mention--unresolvable\">@context</span> \u26a0\ufe0f</p>\n</div>",
"html": "<blockquote class=\"section post subject\" data-action=\"notifications:Notification@window->subject#notification\" data-controller=\"post subject mentions html-refresh\" id=\"post-17\">\n<header>\n<a class=\"user-inline\" data-action=\"mouseover->mentions#user_popup mouseout->mentions#user_popup_out\" data-mentions-username-param=\"@actor@pasture-one-actor\" href=\"/u/@actor@pasture-one-actor\" title=\"@actor@pasture-one-actor\">\n actor <i aria-description=\"This user is new (active for less than 30 days)\" class=\"fa-solid fa-leaf new-user-icon\" title=\"This user is new (active for less than 30 days)\"></i>\n</a>\n<span>, </span>\n<a class=\"link-muted\" href=\"/m/random/p/17/Hashtag-not-in-at-context\"><time class=\"timeago\" datetime=\"2025-09-09T11:11:41+00:00\" title=\"2025-09-09T11:11:41+00:00\">2 seconds ago \n</time></a>\n</header>\n<figure>\n<a data-action=\"mouseover->mentions#user_popup mouseout->mentions#user_popup_out\" data-mentions-username-param=\"actor@pasture-one-actor\" href=\"/u/@actor@pasture-one-actor\">\n<div class=\"no-avatar\"></div>\n</a>\n</figure>\n<div class=\"content\">\n<p>Hashtag not in <span class=\"mention mention--unresolvable\">@context</span> \u26a0\ufe0f</p>\n</div>\n<aside class=\"vote\">\n<form action=\"/pf/17?choice=0\" class=\"vote__up\" method=\"post\">\n<button aria-label=\"Favorite\" data-action=\"subject#vote\" title=\"Favorite\" type=\"submit\">\n<span data-subject-target=\"favCounter\">0</span> <span><i aria-hidden=\"true\" class=\"fa-solid fa-arrow-up\"></i></span>\n</button>\n</form>\n</aside>\n<footer>\n<menu>\n<li>\n<a class=\"stretched-link\" data-action=\"subject#getForm\" href=\"/m/random/p/17/Hashtag-not-in-at-context/reply\">Reply</a>\n</li>\n<li>\n<form action=\"/pb/17\" method=\"post\">\n<button class=\"boost-link stretched-link\" data-action=\"subject#favourite\" type=\"submit\">\n Boost <span class=\"hidden\" data-subject-target=\"upvoteCounter\">(0)</span>\n</button>\n</form>\n</li>\n<li class=\"dropdown\">\n<button class=\"stretched-link\" data-subject-target=\"more\">More</button>\n<ul class=\"dropdown__menu\" data-controller=\"clipboard\">\n<li>\n<a class=\"\" data-action=\"subject#getForm\" href=\"/pr/17\">\n Report\n </a>\n</li>\n<li>\n<a class=\"\" href=\"/m/random/p/17/Hashtag-not-in-at-context/votes?type=up\">\n Activity\n </a>\n</li>\n<li class=\"dropdown__separator\"></li>\n<li>\n<a href=\"http://pasture-one-actor/object/LCY52fiGIUc\" rel=\"nofollow noopener noreferrer\" target=\"_blank\">\n Open original URL\n </a>\n</li>\n<li>\n<a data-action=\"clipboard#copy\" href=\"http://pasture-one-actor/object/LCY52fiGIUc\" rel=\"nofollow noopener noreferrer\">\n Copy original URL\n </a>\n</li>\n<li>\n<a data-action=\"clipboard#copy\" href=\"/m/random/p/17/Hashtag-not-in-at-context\">\n Copy Mbin URL\n </a>\n</li>\n</ul>\n</li>\n<li data-subject-target=\"loader\" style=\"display:none\">\n<div class=\"loader\" role=\"status\">\n<span class=\"visually-hidden\">Loading...</span>\n</div>\n</li>\n</menu>\n<div class=\"js-container\" data-subject-target=\"container\">\n</div>\n</footer>\n</blockquote>"
}
Example 5¶
activity
{
"@context": "https://www.w3.org/ns/activitystreams",
"type": "Create",
"actor": "http://pasture-one-actor/actor",
"to": [
"https://www.w3.org/ns/activitystreams#Public",
"http://mbin/u/oscar"
],
"id": "http://pasture-one-actor/activity/xIKRNHKQIH8",
"published": "2025-09-09T11:11:43Z",
"object": {
"type": "Note",
"attributedTo": "http://pasture-one-actor/actor",
"to": [
"https://www.w3.org/ns/activitystreams#Public",
"http://mbin/u/oscar"
],
"id": "http://pasture-one-actor/object/Nwi3_ehgkKE",
"published": "2025-09-09T11:11:43Z",
"@context": "https://www.w3.org/ns/activitystreams",
"content": "Hashtag not in @context; as:Hashtag",
"tag": {
"type": "as:Hashtag",
"name": "#test"
},
"cc": []
}
}
mbin
{
"content": "<div class=\"content\">\n<p>Hashtag not in <span class=\"mention mention--unresolvable\">@context</span>; as:Hashtag</p>\n</div>",
"html": "<blockquote class=\"section post subject\" data-action=\"notifications:Notification@window->subject#notification\" data-controller=\"post subject mentions html-refresh\" id=\"post-18\">\n<header>\n<a class=\"user-inline\" data-action=\"mouseover->mentions#user_popup mouseout->mentions#user_popup_out\" data-mentions-username-param=\"@actor@pasture-one-actor\" href=\"/u/@actor@pasture-one-actor\" title=\"@actor@pasture-one-actor\">\n actor <i aria-description=\"This user is new (active for less than 30 days)\" class=\"fa-solid fa-leaf new-user-icon\" title=\"This user is new (active for less than 30 days)\"></i>\n</a>\n<span>, </span>\n<a class=\"link-muted\" href=\"/m/random/p/18/Hashtag-not-in-at-context-as-Hashtag\"><time class=\"timeago\" datetime=\"2025-09-09T11:11:43+00:00\" title=\"2025-09-09T11:11:43+00:00\">1 second ago \n</time></a>\n</header>\n<figure>\n<a data-action=\"mouseover->mentions#user_popup mouseout->mentions#user_popup_out\" data-mentions-username-param=\"actor@pasture-one-actor\" href=\"/u/@actor@pasture-one-actor\">\n<div class=\"no-avatar\"></div>\n</a>\n</figure>\n<div class=\"content\">\n<p>Hashtag not in <span class=\"mention mention--unresolvable\">@context</span>; as:Hashtag</p>\n</div>\n<aside class=\"vote\">\n<form action=\"/pf/18?choice=0\" class=\"vote__up\" method=\"post\">\n<button aria-label=\"Favorite\" data-action=\"subject#vote\" title=\"Favorite\" type=\"submit\">\n<span data-subject-target=\"favCounter\">0</span> <span><i aria-hidden=\"true\" class=\"fa-solid fa-arrow-up\"></i></span>\n</button>\n</form>\n</aside>\n<footer>\n<menu>\n<li>\n<a class=\"stretched-link\" data-action=\"subject#getForm\" href=\"/m/random/p/18/Hashtag-not-in-at-context-as-Hashtag/reply\">Reply</a>\n</li>\n<li>\n<form action=\"/pb/18\" method=\"post\">\n<button class=\"boost-link stretched-link\" data-action=\"subject#favourite\" type=\"submit\">\n Boost <span class=\"hidden\" data-subject-target=\"upvoteCounter\">(0)</span>\n</button>\n</form>\n</li>\n<li class=\"dropdown\">\n<button class=\"stretched-link\" data-subject-target=\"more\">More</button>\n<ul class=\"dropdown__menu\" data-controller=\"clipboard\">\n<li>\n<a class=\"\" data-action=\"subject#getForm\" href=\"/pr/18\">\n Report\n </a>\n</li>\n<li>\n<a class=\"\" href=\"/m/random/p/18/Hashtag-not-in-at-context-as-Hashtag/votes?type=up\">\n Activity\n </a>\n</li>\n<li class=\"dropdown__separator\"></li>\n<li>\n<a href=\"http://pasture-one-actor/object/Nwi3_ehgkKE\" rel=\"nofollow noopener noreferrer\" target=\"_blank\">\n Open original URL\n </a>\n</li>\n<li>\n<a data-action=\"clipboard#copy\" href=\"http://pasture-one-actor/object/Nwi3_ehgkKE\" rel=\"nofollow noopener noreferrer\">\n Copy original URL\n </a>\n</li>\n<li>\n<a data-action=\"clipboard#copy\" href=\"/m/random/p/18/Hashtag-not-in-at-context-as-Hashtag\">\n Copy Mbin URL\n </a>\n</li>\n</ul>\n</li>\n<li data-subject-target=\"loader\" style=\"display:none\">\n<div class=\"loader\" role=\"status\">\n<span class=\"visually-hidden\">Loading...</span>\n</div>\n</li>\n</menu>\n<div class=\"js-container\" data-subject-target=\"container\">\n</div>\n</footer>\n</blockquote>"
}