Skip to content
A powerful micro/blogging engine with IndieWeb features
Elixir HTML CSS Other
Branch: master
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
mrb Add workaround for app engine brotli bug Sep 22, 2019
priv/static Move letter-spacing to main Sep 16, 2019
tpl Fix reply order Sep 23, 2019
.credo.exs credo Aug 24, 2019
.formatter.exs Add ex_early_ret Aug 23, 2019
.gitignore Use env for static path in h2o Aug 21, 2019
h2o.yaml h2o: Add utf-8 mimetypes, fixes #1 Sep 26, 2019
mix.lock Add observer cli Sep 24, 2019


A powerful micro/blogging engine with IndieWeb features.

  • monolithic BEAM app written in Elixir with no external database (everything is stored in Mnesia)
  • your site is dynamic and static at the same time
    • it's not a traditional "static site generator", it's very much a long-running server
    • but all pages are saved to static HTML files for performance (served from a frontend server like h2o)
  • uniform data model: every page is a microformats2 style object
    • special object types are used for stuff like feeds (for dynamic feeds, children are the result of a query)
    • and they create more virtual pages (e.g. dynamic feeds are paginated: /notes/notes/page1, /notes/page2…)
  • asset management: automatic compression and cache busting
  • local password authentication, IndieAuth app authorization
  • Micropub is the primary way of working with pages
    • micro-panel is integrated as the post editing interface
  • Webmentions are supported for distributed conversations across websites
    • Salmentions are sent as a natural consequence of the architecture (received mention → update event → mentions are sent)
  • WebSub notifications are sent for quick updates in readers


Mix tasks:

  • sweetroll2.setup creates the database
  • sweetroll2.bootstrap adds initial posts
  • sweetroll2.drop deletes the database

Environment variables:

  • MIX_ENV: in prod, logging will be in JSON (ready for shipping somewhere with something), scheduled background tasks will be active, the plug debug middleware won't be active, etc.
  • SR2_SERVER_SOCKET or SR2_SERVER_PORT: where to listen for connections (default is port 6969)
  • SR2_PASSWORD_HASH: Argon2 hash of the admin password (REQUIRED, e.g. $argon2id$v=19$m=…)
  • SR2_CANONICAL_HOME_URL: scheme and hostname (NO SLASH) of the website (REQUIRED, e.g.
  • SR2_WEBSUB_HUB: URL of the WebSub hub to use (default (make sure to also modify in h2o settings for static files!!)
  • SR2_STATIC_GEN_OUT_DIR: where to write static HTML (default out; also the h2o scripts use it!)


This is free and unencumbered software released into the public domain.
For more information, please refer to the UNLICENSE file or

(Note: different licenses apply to dependencies.)

You can’t perform that action at this time.