Need help with
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

610 Stars 43 Forks GNU Affero General Public License v3.0 823 Commits 23 Opened issues


A self-hosted, single-user, ActivityPub powered microblog.

Services available


Need anything else?

Contributors list

A self-hosted, single-user, ActivityPub powered microblog.

Build Status on Matrix License Code style: black

Still in early development/I do not recommend to run an instance yet.


  • Implements a basic ActivityPub server (with federation)
    • S2S (Server to Server) and C2S (Client to Server) protocols
    • Compatible with Mastodon and others (Pleroma, Misskey, Plume, PixelFed, Hubzilla...)
  • Exposes your outbox as a basic microblog
    • Support all content types from the Fediverse (
    • Markdown support
    • Server-side code syntax highlighting
  • Comes with an admin UI with notifications and the stream of people you follow
    • Private "bookmark" support
    • List support
    • Allows you to attach files to your notes
    • Custom emojis support
  • Cares about your privacy
    • The image upload endpoint strips EXIF meta data before storing the file
    • Every attachment/media is cached (or proxied) by the server
  • No JavaScript, that's it. Even the admin UI is pure HTML/CSS
    • (well except for the Emoji picker within the admin, but it's only few line of hand-written JavaScript)
  • Easy to customize (the theme is written Sass)
    • mobile-friendly theme
    • with dark and light version
  • IndieWeb citizen
    • Microformats aware (exports
      , ...)
      • Export a feed in the HTML that is WebSub compatible
    • Partial Micropub support (implementation report)
    • Implements IndieAuth endpoints (authorization and token endpoint)
      • You can use your ActivityPub identity to login to other websites/app (with U2F support)
    • Send Webmentions to linked website (only for public notes)
    • Exports RSS/Atom/JSON feeds
    • You stream/timeline is also available in an (authenticated) JSON feed
    • Comes with a tiny HTTP API to help posting new content and and read your inbox/notifications
  • Deployable with Docker (Docker compose for everything: dev, test and deployment)
  • Focused on testing

User Guide

Remember that is still in early development.

The easiest and recommended way to run in production is to use the provided docker-compose config.

First install Docker and Docker Compose. Python is not needed on the host system.

Note that all the generated data (config included) will be stored on the host (i.e. not only in Docker) in



$ git clone
$ cd
$ make config

Once the initial configuration is done, you can still tweak the config by editing



To spawn the docker-compose project (running this command will also update to latest and restart everything if it's already running):

$ make run

By default, the server will listen on

(http://localhost:5005 should work if you're running locally).

For production, you need to setup a reverse proxy (nginx, caddy) to forward your domain to the local server (and check certbot for getting a free TLS certificate).


The easiest way to backup all of your data is to backup the
directory directly (that's what I do and I have been able to restore super easily). It should be safe to copy the directory while the Docker compose project is running.


The project requires Python3.7+.

The most convenient way to hack on is to run the Python server on the host directly, and evetything else in Docker.

# One-time setup (in a new virtual env)
$ pip install -r requirements.txt
# Start MongoDB and poussetaches
$ make poussetaches
$ env POUSSETACHES_AUTH_KEY="" docker-compose -f docker-compose-dev.yml up -d
# Run the server locally
$ FLASK_DEBUG=1 MICROBLOGPUB_DEBUG=1 POUSSETACHES_AUTH_KEY="" flask run -p 5005 --with-threads


Contributions/PRs are welcome, please open an issue to start a discussion before your start any work.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.