<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[**#ActivityPub support in #Madblog**]]></title><description><![CDATA[<p dir="auto"><strong>#ActivityPub support in #Madblog</strong></p>
<p dir="auto"><div class="card col-md-9 col-lg-6 position-relative link-preview p-0">



<a href="https://blog.fabiomanganiello.com/article/Madblog-federated-blogging-from-markdown" title="Madblog: A Markdown Folder That Federates Everywhere">
<img src="https://s3.fabiomanganiello.com/fabio/img/madblog.png" class="card-img-top not-responsive" style="max-height: 15rem;" alt="Link Preview Image" onerror="this.parentElement.remove()" />
</a>



<div class="card-body">
<h5 class="card-title">
<a class="text-decoration-none" href="https://blog.fabiomanganiello.com/article/Madblog-federated-blogging-from-markdown">
Madblog: A Markdown Folder That Federates Everywhere
</a>
</h5>
<p class="card-text line-clamp-3">Fabio&#x27;s Blog</p>
</div>
<a href="https://blog.fabiomanganiello.com/article/Madblog-federated-blogging-from-markdown" class="card-footer text-body-secondary small d-flex gap-2 align-items-center lh-2">



<img src="https://blog.fabiomanganiello.com/favicon.ico" alt="favicon" class="not-responsive overflow-hiddden" style="max-width: 21px; max-height: 21px;" onerror="this.remove()"/>



<p class="d-inline-block text-truncate mb-0">Fabio Manganiello <span class="text-secondary">(blog.fabiomanganiello.com)</span></p>
</a>
</div></p>
<p dir="auto">I am glad to announce that <a href="https://git.fabiomanganiello.com/madblog" target="_blank" rel="noopener noreferrer nofollow ugc">Madblog</a> has now officially joined the #Fediverse family.</p>
<p dir="auto">If you want to test it out, search for <a href="https://blog.fabiomanganiello.com/article/Madblog-federated-blogging-from-markdown" target="_blank" rel="noopener noreferrer nofollow ugc">this URL</a> on your Fediverse client.</p>
<p dir="auto">Madblog has already supported #Webmentions <a href="https://blog.fabiomanganiello.com/article/webmentions-with-batteries-included" target="_blank" rel="noopener noreferrer nofollow ugc">for the past couple of weeks</a>, 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.</p>
<p dir="auto">It now adds ActivityPub support too, using #Pubby, another <a href="https://git.fabiomanganiello.com/pubby" target="_blank" rel="noopener noreferrer nofollow ugc">little Python library</a> that I've put together myself (just like <a href="https://git.fabiomanganiello.com/pubby" target="_blank" rel="noopener noreferrer nofollow ugc">Webmentions</a>) as a mean to quickly plug ActivityPub support to any Python Web app.</p>
<p dir="auto">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 <code>bind_webmentions</code> or <code>bind_activitypub</code> call to your existing Flask/FastAPI/Tornado application should suffice for most of the cases.</p>
<p dir="auto">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.</p>
<p dir="auto">If you have a registered domain and a certificate, then hosting your federated blog is now just a matter of:</p>
<pre><code>mkdir -p ~/madblog/markdown
cat &lt;&lt;EOF &gt; ~/madblog/markdown/hello-world.md
# My first post

This is my first post on [Madblog](https://git.fabiomanganiello.com/madblog)!
EOF

docker run -it \
  -p 8000:8000 \
  -v &quot;$HOME/madblog:/data&quot; \
  quay.io/blacklight/madblog
</code></pre>
<p dir="auto">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...</p>
<p dir="auto">Federation support is also at a quite advanced state compared to e.g. #WriteFreely. It currently supports:</p>
<ul>
<li>
<p dir="auto"><strong>Interactions rendered on the articles</strong>: 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)</p>
</li>
<li>
<p dir="auto"><strong>Guestbook support</strong> (optional): mentions to the federated Madblog handle that are not in response to articles are now rendered on a separate <code>/guestbook</code> route</p>
</li>
<li>
<p dir="auto"><strong>Email notifications</strong>: all interactions can have email notifications</p>
</li>
<li>
<p dir="auto"><strong>Support for quotes</strong>, also on Mastodon</p>
</li>
<li>
<p dir="auto"><strong>Support for mentions</strong>, just drop a <code>@joe@example.com</code> in your Markdown file and Joe will get a notification</p>
</li>
<li>
<p dir="auto"><strong>Support for hashtag federation</strong></p>
</li>
<li>
<p dir="auto"><strong>Support for split-domain configurations</strong>, you can host your blog on <code>blog.example.com</code> but have a Fediverse handle like <code>@blog@example.com</code>. Search by direct post URL on Mastodon will work with both cases</p>
</li>
<li>
<p dir="auto"><strong>Support for custom profile fields</strong>, all rendered on Mastodon, with verification support</p>
</li>
<li>
<p dir="auto"><strong>Support for moderation</strong>, either through blocklist or allowlist, with support for rules on handles/usernames, URLs, domains or regular expressions</p>
</li>
<li>
<p dir="auto">A partial (but comprehensive for the provided features) implementation of the <strong>Mastodon API</strong></p>
</li>
</ul>
<p dir="auto">If you want you can follow both the profiles of my blogs - they are now both federated:</p>
<ul>
<li>
<p dir="auto">My personal blog: <a class="plugin-mentions-user plugin-mentions-a" href="/user/fabio%40manganiello.blog" aria-label="Profile: fabio@manganiello.blog">@<bdi>fabio@manganiello.blog</bdi></a> (it used to run WriteFreely before, so if you followed it you may need to unfollow it and re-follow it)</p>
</li>
<li>
<p dir="auto">The #Platypush blog: <a class="plugin-mentions-user plugin-mentions-a" href="/user/blog%40platypush.tech" aria-label="Profile: blog@platypush.tech">@<bdi>blog@platypush.tech</bdi></a></p>
</li>
</ul>
]]></description><link>https://citiverse.it/topic/036e7a55-3b4c-4fb2-852f-5bfe6aec15cd/activitypub-support-in-madblog</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 17:39:57 GMT</lastBuildDate><atom:link href="https://citiverse.it/topic/036e7a55-3b4c-4fb2-852f-5bfe6aec15cd.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 10 Mar 2026 12:51:34 GMT</pubDate><ttl>60</ttl></channel></rss>