GNU social JP
  • FAQ
  • Login
GNU social JPは日本のGNU socialサーバーです。
Usage/ToS/admin/test/Pleroma FE
  • Public

    • Public
    • Network
    • Groups
    • Featured
    • Popular
    • People

Conversation

Notices

  1. Embed this notice
    Fabio Manganiello (fabio@manganiello.eu)'s status on Tuesday, 10-Mar-2026 21:53:44 JST Fabio Manganiello Fabio Manganiello

    #ActivityPub support in #Madblog

    https://blog.fabiomanganiello.com/article/Madblog-federated-blogging-from-markdown

    I am glad to announce that Madblog has now officially joined the #Fediverse family.

    Madblog has already supported #Webmentions for the past couple of weeks, allowing your blog posts to be mentioned by other sites with Webmentions support (WordPress, Lemmy, HackerNews…) and get those mentions directly rendered on your page.

    It now adds ActivityPub support too, using #Pubby, another little Python library that I’ve put together myself (just like Webmentions) as a mean to quickly plug ActivityPub support to any Python Web app.

    Webmentions and Pubby follow similar principles and implement a similar API, and you can easily use them to add federation support to your existing Web applications - a single bind_webmentions or bind_activitypub call to your existing Flask/FastAPI/Tornado application should suffice for most of the cases.

    Madblog may have now become the easiest way to publish a federated blog - and perhaps the only way that doesn’t require a database, everything is based on plain Markdown files.

    If you have a registered domain and a certificate, then hosting your federated blog is now just a matter of:

    mkdir -p ~/madblog/markdown cat <<EOF > ~/madblog/markdown/hello-world.md This is my first post on [Madblog](https://git.fabiomanganiello.com/madblog)! EOF docker run -it \ -p 8000:8000 \ -v "$HOME/madblog:/data" \ quay.io/blacklight/madblog

    And Markdown files can be hosted wherever you like - a Git folder, an Obsidian Vault, a Nextcloud Notes installation, a folder on your phone synchronized over SyncThing…

    Federation support is also at a quite advanced state compared to e.g. #WriteFreely. It currently supports:

    • Interactions rendered on the articles: if you like, boost, quote or reply to an article, all interactions are rendered directly at the bottom of the article (interactions with WriteFreely through federated accounts were kind of lost in the void instead)

    • Guestbook support (optional): mentions to the federated Madblog handle that are not in response to articles are now rendered on a separate /guestbook route

    • Email notifications: all interactions can have email notifications

    • Support for quotes, also on Mastodon

    • Support for mentions, just drop a @joe@example.com in your Markdown file and Joe will get a notification

    • Support for hashtag federation

    • Support for split-domain configurations, you can host your blog on blog.example.com but have a Fediverse handle like @blog@example.com. Search by direct post URL on Mastodon will work with both cases

    • Support for custom profile fields, all rendered on Mastodon, with verification support

    • Support for moderation, either through blocklist or allowlist, with support for rules on handles/usernames, URLs, domains or regular expressions

    • A partial (but comprehensive for the provided features) implementation of the Mastodon API

    If you want you can follow both the profiles of my blogs - they are now both federated:

    • My personal blog: @fabio (it used to run WriteFreely before, so if you followed it you may need to unfollow it and re-follow it)

    • The #Platypush blog: @blog

    In conversation about 2 months ago from manganiello.eu permalink

    Attachments

    1. No result found on File_thumbnail lookup.
      page.it
      This domain may be for sale!
    2. Domain not in remote thumbnail source whitelist: git.platypush.tech
      madblog
      from blacklight
      A minimal, general-purpose Markdown-based CMS.


    • Embed this notice
      silverpill (silverpill@mitra.social)'s status on Tuesday, 10-Mar-2026 23:13:54 JST silverpill silverpill
      in reply to

      @fabio @fabio

      This request returns an HTML page instead of ActivityPub object:

      curl -H 'Accept: application/ld+json; profile="https://www.w3.org/ns/activitystreams"' https://blog.fabiomanganiello.com/article/Madblog-federated-blogging-from-markdown
      In conversation about 2 months ago permalink

      Attachments


      1. Domain not in remote thumbnail source whitelist: s3.fabiomanganiello.com
        Madblog: A Markdown Folder That Federates Everywhere
        A lightweight blogging engine based on text files, with native Fediverse and IndieWeb support
    • Embed this notice
      silverpill (silverpill@mitra.social)'s status on Wednesday, 11-Mar-2026 03:14:37 JST silverpill silverpill
      in reply to

      @fabio @fabio Will it also work with profile parameter? We have specify profile because ActivityPub specification requires it:

      https://www.w3.org/TR/activitypub/#retrieving-objects

      In conversation about 2 months ago permalink
    • Embed this notice
      Fabio Manganiello (fabio@manganiello.eu)'s status on Wednesday, 11-Mar-2026 03:14:38 JST Fabio Manganiello Fabio Manganiello
      in reply to
      • silverpill

      @silverpill @fabio good catch! https://git.platypush.tech/blacklight/madblog/commit/9024ba9c2dd1b4ad77e50892189c6a155eb199ce

      In conversation about 2 months ago permalink

      Attachments

      1. Domain not in remote thumbnail source whitelist: git.platypush.tech
        fix(activitypub): Treat application/ld+json Accept as AP JSON · 9024ba9c2d
        from blacklight
        - Prefer either activity+json or ld+json over text/html - Add test for ld+json Accept returning ActivityPub JSON
    • Embed this notice
      silverpill (silverpill@mitra.social)'s status on Wednesday, 11-Mar-2026 03:50:57 JST silverpill silverpill
      in reply to

      @fabio @fabio In your curl command, the closing quote (") is missing after https://www.w3.org/ns/activitystreams. When I make a request with the full media type string, the server still returns text/html

      In conversation about 2 months ago permalink

      Attachments


    • Embed this notice
      Fabio Manganiello (fabio@manganiello.eu)'s status on Wednesday, 11-Mar-2026 03:50:59 JST Fabio Manganiello Fabio Manganiello
      in reply to
      • silverpill

      @silverpill @fabio yes, I’ve just realized that luckily requests is smart enough to split header parameters 🙂

      ❯ curl -I -H 'Accept: application/ld+json; profile="https://www.w3.org/ns/activitystreams' https://manganiello.blog/article/Madblog-federated-blogging-from-markdown HTTP/2 200 server: nginx date: Tue, 10 Mar 2026 18:43:44 GMT content-type: application/activity+json content-length: 69389 last-modified: Tue, 10 Mar 2026 18:39:54 GMT etag: "81d02d339405c0ec" cache-control: public, max-age=0, must-revalidate language: en-US
      In conversation about 2 months ago permalink

      Attachments


      1. Domain not in remote thumbnail source whitelist: s3.fabiomanganiello.com
        Madblog: A Markdown Folder That Federates Everywhere
        A lightweight blogging engine based on text files, with native Fediverse and IndieWeb support
    • Embed this notice
      silverpill (silverpill@mitra.social)'s status on Wednesday, 11-Mar-2026 07:01:06 JST silverpill silverpill
      in reply to

      @fabio @fabio It's working, thanks!

      In conversation about 2 months ago permalink
    • Embed this notice
      Fabio Manganiello (fabio@manganiello.eu)'s status on Wednesday, 11-Mar-2026 07:01:07 JST Fabio Manganiello Fabio Manganiello
      in reply to
      • silverpill

      @silverpill @fabio you’re right, I completely overlooked that. Also the Python HTTP machinery isn’t as clever as I thought so I had to trim parameters manually, but it should work now https://git.fabiomanganiello.com/blacklight/madblog/commit/76e7b72337b1ab7406fb307eb163a9a4097fcc0e

      ❯ curl -I -H 'Accept: application/ld+json; profile="https://www.w3.org/ns/activitystreams"' https://manganiello.blog/article/Madblog-federated-blogging-from-markdown HTTP/2 200 server: nginx date: Tue, 10 Mar 2026 19:06:01 GMT content-type: application/activity+json content-length: 69389 last-modified: Tue, 10 Mar 2026 18:39:54 GMT etag: "81d02d339405c0ec" cache-control: public, max-age=0, must-revalidate language: en-US
      In conversation about 2 months ago permalink

      Attachments


      1. Domain not in remote thumbnail source whitelist: s3.fabiomanganiello.com
        Madblog: A Markdown Folder That Federates Everywhere
        A lightweight blogging engine based on text files, with native Fediverse and IndieWeb support
      2. Domain not in remote thumbnail source whitelist: git.platypush.tech
        fix(activitypub): Match parameterised ld+json Accept headers · 76e7b72337
        from blacklight
        - Strip media type parameters when checking ActivityPub Accept quality - Add regression test for ld+json profile Accept header

Feeds

  • Activity Streams
  • RSS 2.0
  • Atom
  • Help
  • About
  • FAQ
  • TOS
  • Privacy
  • Source
  • Version
  • Contact

GNU social JP is a social network, courtesy of GNU social JP管理人. It runs on GNU social, version 2.0.2-dev, available under the GNU Affero General Public License.

Creative Commons Attribution 3.0 All GNU social JP content and data are available under the Creative Commons Attribution 3.0 license.