Notes

Short thoughts, updates, and quick posts. (1715 total)

  • indieweb

    My indiekit blog now support comments authentication using RelMeAuth or IndieAuth, it also supports webmentions if you’re part of the #indieweb dance !

  • Fedi
  • Fedi

    This post is made from my indiekit #fedify spec implementation turning my indiekit blog into an effective AP instance on the fediverse

    • first I thought, why not reuse Microsub reader to consume AP content coming from the fediverse ? I tested it, customizing a bit the view to better handle AP activity (boost, star, quote, reply) but using a dedicated Microsub Channel as a Fediverse input for the AP fedify server turned out to be odd, an AP post is not an RSS item from a blog, and the firehose of posts, reply, quote, boost is too much to handle in a Microsub Channel, I resolved to build a proper reader for AP content
  • ActivityPub / Fedify Compliance Report Indiekit

    FieldValue
    Targetrmendes.net (@rick)
    Date2026-02-20T21:20:08Z
    Tests22 total: 22 passed, 0 failed, 0 skipped
    GradeA+ — Full compliance — all tests pass
    Fedify^1.10.3
    SoftwareIndiekit + @rmdes/indiekit-endpoint-activitypub

    Summary

    CategoryPassFailSkipStatus
    Discovery300✅
    Actor300✅
    Collections800✅
    Content300✅
    Inbox200✅
    Federation200✅
    HTTP100✅

    Detailed Results

    Discovery

    TestStatusDetail
    WebFinger resolution✅ PASSWebFinger OK: acct:rick@rmendes.net → https://rmendes.net/activitypub/users/rick
    NodeInfo endpoint✅ PASSNodeInfo OK: indiekit v1.0.0, 249 local posts, protocol: activitypub
    NodeInfo well-known chain✅ PASSNodeInfo well-known OK: Discovery chain valid, schema 2.1

    Actor

    TestStatusDetail
    Actor lookup (fedify)✅ PASSActor OK: Person at https://rmendes.net/activitypub/users/rick
    Actor required fields✅ PASSActor fields OK: inbox, outbox, followers, following, liked, featured, featuredTags, publicKey, assertionMethods, sharedInbox, name, icon, published
    Actor JSON structure✅ PASSActor JSON OK: Person with all required fields, collection links, and security keys

    Collections

    TestStatusDetail
    Outbox collection✅ PASSOutbox OK: OrderedCollection with 249 items
    Followers collection✅ PASSFollowers OK: OrderedCollection with 832 items
    Following collection✅ PASSFollowing OK: OrderedCollection with 2563 items
    Liked collection✅ PASSLiked OK: OrderedCollection with 68 items
    Featured (pinned) collection✅ PASSFeatured OK: OrderedCollection with 0 pinned items
    Featured tags collection✅ PASSFeatured tags OK: Collection with 0 tags
    Collection URI resolution✅ PASSCollection URIs OK: All actor collection endpoints return valid JSON
    Outbox traversal (first page)✅ PASSOutbox traversal OK: Contains Create activities with Note objects, proper addressing

    Content

    TestStatusDetail
    Post returns AS2 JSON✅ PASSContent negotiation OK: https://rmendes.net/notes/2026/02/20/f3f0e serves AS2 JSON
    Root URL redirects to actor✅ PASSRoot redirect OK: https://rmendes.net/ → https://rmendes.net/activitypub/users/rick
    Object dispatcher (dereference)✅ PASSObject dispatcher OK: Note at https://rmendes.net/notes/2026/02/20/f3f0e

    Inbox

    TestStatusDetail
    GET inbox returns 405✅ PASSInbox GET OK: returns 405 Method Not Allowed
    GET shared inbox returns 405✅ PASSShared inbox GET OK: returns 400 (rejected)

    Federation

    TestStatusDetail
    Instance actor (Application)✅ PASSInstance actor OK: Application type with hostname identifier
    WebFinger alias resolution✅ PASSWebFinger alias OK: profile URL and /@handle both resolve

    HTTP

    TestStatusDetail
    HTTP headers compliance✅ PASSHTTP headers OK: Correct content types on actor, outbox, and WebFinger

    Fedify Feature Compliance Matrix

    Maps implemented Fedify features against the Fedify SDK capabilities.

    Core Federation

    FeatureFedify APIStatusNotes
    Actor DispatchersetActorDispatcher()✅ ImplementedPerson/Service/Group/Organization via config
    Key PairssetKeyPairsDispatcher()✅ ImplementedRSA-2048 + Ed25519 dual keys
    Handle Mapping.mapHandle()✅ ImplementedHandle + hostname (instance actor)
    Alias Mapping.mapAlias()✅ ImplementedProfile URL + /@handle resolution
    Inbox ListenerssetInboxListeners()✅ ImplementedFollow, Undo, Accept, Reject, Like, Announce, Create, Update, Delete
    Shared InboxInbox URL pattern✅ Implemented/activitypub/inbox
    WebFingerAutomatic✅ ImplementedVia Fedify’s built-in handler
    NodeInfosetNodeInfoDispatcher()✅ ImplementedSchema 2.1, dynamic version

    Collections

    FeatureFedify APIStatusNotes
    OutboxsetOutboxDispatcher()✅ ImplementedPaginated, Create activities
    FollowerssetFollowersDispatcher()✅ ImplementedPaginated, ordered
    FollowingsetFollowingDispatcher()✅ ImplementedPaginated, ordered
    LikedsetLikedDispatcher()✅ ImplementedObjects the actor has liked
    FeaturedsetFeaturedDispatcher()✅ ImplementedPinned posts, admin UI
    Featured TagssetFeaturedTagsDispatcher()✅ ImplementedHashtag discovery, admin UI

    Content Resolution

    FeatureFedify APIStatusNotes
    Object DispatchersetObjectDispatcher()✅ ImplementedNote/Article dereferencing
    Content NegotiationCustom middleware✅ ImplementedAS2 JSON for post URLs

    Delivery & Reliability

    FeatureFedify APIStatusNotes
    Message QueueRedisMessageQueue✅ ImplementedRedis-backed persistent queue
    Parallel QueueParallelMessageQueue✅ ImplementedConfigurable worker count (default: 5)
    Ordering KeyssendActivity({ orderingKey })✅ ImplementedPer-follower ordering
    Collection SyncsendActivity({ syncCollection })✅ ImplementedFEP-8fcf, shared inbox sync
    Permanent Failure HandlersetOutboxPermanentFailureHandler()⏳ DeferredRequires Fedify 2.0+ API changes
    Context DatacreateFederation({ contextData })✅ ImplementedHandle + publication URL

    Security & Identity

    FeatureFedify APIStatusNotes
    HTTP SignaturesAutomatic (RSA)✅ ImplementedVia key pairs dispatcher
    Object Integrity ProofsAutomatic (Ed25519)✅ ImplementedVia assertionMethods multikey
    Instance ActorApplication type actor✅ ImplementedDomain-level federation actor
    Authorized Fetch.authorize() predicate⏳ DeferredRemoved — requires authenticated document loader to avoid 401 loops with remote servers
    Configurable Actor TypeConstructor selection✅ ImplementedPerson/Service/Organization/Group

    Discovery Extensions

    FeatureFedify APIStatusNotes
    NodeInfo Dynamic VersioncreateRequire()✅ ImplementedReads from @indiekit/indiekit/package.json
    alsoKnownAsActor property✅ ImplementedFor Mastodon account migration
    Profile AttachmentsPropertyValue✅ ImplementedKey-value metadata fields

    Generated by activitypub-tests/run-all.sh — 2026-02-20T21:20:48Z

  • Testing ActivityPub syndication after Fedify feature completeness update — this note should appear on the fediverse. 🧪

  • Fedi blog coding

    Really cool, now when I like/repost/reply to a URL, be it a #indieweb blog or a Fediverse post, the resulting web action (reply, like, repost, bookmark) display a nice unfurl of the opengraph tags of the remote URL

  • Fedi

    Testing syndication from my indiekit blog to self-hosted fedify AP implementation

  • Fedi

    As seen in FediDB node explorer tool :

    {
      "$schema": "http://nodeinfo.diaspora.software/ns/schema/2.1#",
      "version": "2.1",
      "software": {
        "name": "indiekit",
        "version": "1.0.0"
      },
      "protocols": [
        "activitypub"
      ],
      "services": {
        "inbound": [],
        "outbound": []
      },
      "openRegistrations": false,
      "usage": {
        "users": {
          "total": 1,
          "activeMonth": 1,
          "activeHalfyear": 1
        },
        "localPosts": 237,
        "localComments": 0
      },
      "metadata": {}
    }
    
  • Fedi

    Hi #fediverse community I’m an old timer here and other Mastodon server since 2016 I was previously @rmdes@mstdn.social and very recently moved to my own #Fedify #indiekit AP instance meaning I’m the only indiekit user with an AP actor endpoint https://browser.pub/rmendes.net I’m still testing migration (ongoing) I may have lost some social connection but its okay. I’m using this account to verify my Fedify AP works as expected my future account is @rick@rmendes.net once everything is stable

  • Fedi

    Test Fedi from #indiekit activitypub plugin

  • Fedi

    Test indiekit #activitypub plugin

  • Fedi Mastodon Fedify

    Very much in development but I have thinkered around Microsub and developing a Fedify driven indiekit plugin so that I can be my own AP actor in the fediverse from where I run my blog (indiekit) https://rmendes.net/content/notes/2026-02-19-8b1d5/

    If you search #mastodon from any URL’s on my blog, it will return its AP representation, now I’m hacking microsub to be able to reuse its reader capability to read from AP timelines

  • Test from Indiekit ActivityPub plugin, if you see this, please react :)

  • Fedi

    I Guess I’m now the first ever Indiekit Instance on the #fediverse

    Thanks to Fedify

    {
      "@context": [
        "https://www.w3.org/ns/activitystreams",
        "https://w3id.org/security/v1"
      ],
      "type": "Person",
      "id": "https://rmendes.net/",
      "preferredUsername": "rick",
      "name": "Ricardo Mendes",
      "url": "https://rmendes.net/",
      "inbox": "https://rmendes.net/activitypub/inbox",
      "outbox": "https://rmendes.net/activitypub/outbox",
      "followers": "https://rmendes.net/activitypub/followers",
      "following": "https://rmendes.net/activitypub/following",
      "publicKey": {
        "id": "https://rmendes.net/#main-key",
        "owner": "https://rmendes.net/",
        "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4F2MDzCr5lYiI9LSFpf4\nsysMIQK63Po5FkVPKzfQSdxHJjYEFqniKRHa+gpQzg0aadSWMIsBbZWvVKypKZZR\nd3g3LDvtV6zyCOdQ0XUxp4ggYmvj22VcdZkyeygMSxkl9D8zr6U5TzAEfPYBMUMx\nwruTUAAFpyLQTCQmSCcMllxlPvgeHCF54VYg8QArTvvYz9G7IMsjR1OWM1AAg2Iy\n1UevOPBLVdSt2SBYf1GccsLjHEwgPTFT2iBtE2FTwlVgthOpEG5imB1Up0G1gZtA\nA5RCG1nR9ymRCFpDfg5Awtx+vtNCQ64guM1yjMeKEk7KJoULWqF2O+iEzvyR/BPq\n8QIDAQAB\n-----END PUBLIC KEY-----\n"
      },
      "summary": "Personal website of Ricardo Mendes",
      "icon": {
        "type": "Image",
        "url": "https://rmendes.net/images/user/avatar.jpg"
      },
      "alsoKnownAs": [
        "https://mstdn.social/users/rmdes"
      ]
    }
    
  • podcasts

    Lately I have spent more time bookmarking /podcasts episodes I don’t want to miss than actually listening to them !

  • politics Trump Colbert

    “Let’s just call this what it is: Donald Trump’s administration wants to silence anyone who says anything bad about Trump on TV, because all Trump does is watch TV, OK? He’s like a toddler with too much screen time. He gets cranky and then drops a load in his diaper.”

    Read More

  • feedland Cloudron

    Anyone can now install #FeedLand on their #Cloudron without building anything : deploy repo package is here

    cloudron install --image rmdes/feedland-cloudron:latest --location feedland.example.com

  • Integrated a Feedland widget on my blog sidebar https://rmendes.net/content/articles/2026-02-14-deploying-your-own-indieweb-site/ (you’ll have to scroll down to see it) #blogroll

  • indiekit feedland microsub RSS

    My indiekit blogroll plugin now supports feeding a blogroll page/widget from OPML URL, OPML FILE, Microsub and Feedland the first two are a given, but the microsub source basically reuse the already subscribed feed from my indiekit microsub implementation and display them as blogroll items and Feedland is more or less the same idea but the source here is a feedland server providing the dynamic OPML input.

  • Test

    Test Note to test post edit on my site