Join Nostr
2026-03-21 11:21:30 GMT

Fabio Manganiello on Nostr: **[Support for post visibility in Madblog]( )** # Support for post visibility in ...

**[Support for post visibility in Madblog](https://blog.fabiomanganiello.com/article/support-for-post-visibility-in-madblog )**


#

Support for post visibility in Madblog
#madblog has now added support for *custom visibility* for your posts and articles.


You may not want everything you write to be published on your index or federated everywhere.


Madblog now allows you to easily tweak the audience of your posts.


##

Visibility levels

<thead>
<tr>
<th style="text-align: left;">Visibility<br>Level</th>
<th style="text-align: center;">Blog<br>Index</th>
<th style="text-align: center;"><code>/unlisted</code><br>Page</th>
<th style="text-align: center;">Reactions<br>List</th>
<th>ActivityPub<br>Targets</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;"><code>public</code></td>
<td style="text-align: center;">✅</td>
<td style="text-align: center;">❌</td>
<td style="text-align: center;">✅</td>
<td><code>to: [Public]</code><br><code>cc: [followers]</code></td>
</tr>
<tr>
<td style="text-align: left;"><code>unlisted</code></td>
<td style="text-align: center;">❌</td>
<td style="text-align: center;">✅</td>
<td style="text-align: center;">✅</td>
<td><code>to: [followers]</code><br><code>cc: [Public]</code></td>
</tr>
<tr>
<td style="text-align: left;"><code>followers</code></td>
<td style="text-align: center;">❌</td>
<td style="text-align: center;">❌</td>
<td style="text-align: center;">❌</td>
<td><code>to: [followers]</code><br><code>cc: []</code></td>
</tr>
<tr>
<td style="text-align: left;"><code>direct</code></td>
<td style="text-align: center;">❌</td>
<td style="text-align: center;">❌</td>
<td style="text-align: center;">❌</td>
<td><code>to: [mentions]</code><br><code>cc: []</code></td>
</tr>
<tr>
<td style="text-align: left;"><code>draft</code></td>
<td style="text-align: center;">❌</td>
<td style="text-align: center;">❌</td>
<td style="text-align: center;">❌</td>
<td>Not federated</td>
</tr>
</tbody>

All the visibility levels (except for draft) map one-to-one with their corresponding meanings on the Fediverse.



<li><strong>public</strong>: articles are rendered on the blog indexes and replies are rendered in the comments section.</li>
<li><strong>unlisted</strong>: articles are rendered under the <code>/unlisted</code> page, replies are rendered in the comments section.</li>
<li><strong>followers</strong>: articles are not rendered on the blog, replies are not rendered in the comments section (only visible to ActivityPub followers).</li>
<li><strong>direct</strong>: articles are not rendered on the blog, replies are not rendered in the comments section (only visible to tagged ActivityPub users).</li>
<li><strong>draft</strong> content is neither rendered on the blog nor federated.</li>

##

Default visibility
You can configure the default visibility level for all of your posts on a global level via config.yaml:


<span></span><code><span class="nt">default_visibility</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">public</span>
</code>


Or MADBLOG_DEFAULT_VISIBILITY environment variable.


##

Per-post visibility
You can configure the visibility level of a post by using the visibility Markdown header:


<span></span><code><span class="gh"># A private post</span>

[<span class="nl">//</span>]: <span class="na"># (visibility: direct)</span>

<span class="ni">@alice@example</span>.com only you should be able to see this message
</code>


##

ActivityPub constraints
If a post is federated then **YOU CANNOT** change its visibility level. This is a constraint on ActivityPub itself. You should delete and re-created the post with a different audience instead.


If a post was already federated and you move it to *Draft* then the previously federated version *will not be removed*. No changes that you apply while it's a draft will be published until you change the visibility level back, but the latest federated version will still be available. If you want to delete it, then you should delete the associated file.


##

Security observations
Remember that Madblog, by design, has **NO USERS**, **NO AUTHENTICATION** and **NO WRITE API**.


Everything lives on the file system, and every Markdown file in the supported folders will have a public URL.


It means that everyone with the URL can access the content.


Be mindful about *not sharing sensitive data*, even in drafts or private messages. And, if you can, use non-easy-to-guess filenames for posts you want to keep private.