Skip to main content
Join the official Python Developers Survey 2018 and win valuable prizes: Start the survey!

A conduit for pushing changes in a feed to the rest of the IndieWeb

Project description


A simple tool that parses content feeds and sends out appropriate push notifications (WebSub, webmention, etc.) when they change.

See for the motivation.


  • Will send WebSub notifications for feeds which declare a WebSub hub
  • Will send webnotify notifications for entries discovered on those feeds or specified directly
  • Can perform autodiscovery of additional feeds on entry pages
  • Can do a full site submission on Atom feeds configured with RFC 5005
  • When configured to use a cache directory, can detect entry deletions and updates to implement the webmention update and delete protocols



First, you'll want to have your Atom (or RSS) feed implement the WebSub protocol. The short version is that you should have a <link rel="hub" href="http://path/to/hub" /> in your feed's top-level element.

There are a number of WebSub hubs available; I use Superfeedr.

For WebMentions, configure your site templates with the various microformats; by default, Pushl will use the following tags as the top-level entry container, in descending order of priority:

  • Anything with a class of h-entry
  • An <article> tag
  • Anything with a class of entry

For more information on how to configure your templates, see the microformats h-entry specification.23

Sending notifications

pip install pushl
pushl -c cache_dir

If your feed implements RFC 5005, the -a flag will scan past entries for WebMention as well.

While you can run it without the -c argument, its use is highly recommended so that subsequent runs are both less spammy and so that it can detect changed and deleted entries, for the best webmention support.

Advanced usage

Pings from individual entries

If you just want to send webmentions from an entry page without processing an entire feed, the -e/--entry flag indicates that the following URLs are pages or entries, rather than feeds; e.g.

pushl -e

will simply send the webmentions for that page.

Additional feed discovery

The -r/--recurse flag will discover any additional feeds that are declared on entries. This is useful if you have per-category feeds that you would also like to send WebSub notifications on.

Note that -r and -e in conjunction will also cause the feed declared on the entry page to be processed further. While it is tempting to use this in a feed autodiscovery context e.g.

pushl -re

this will also send webmentions from the blog page itself which is probably not what you want to do.

My setup

I use pipenv to keep my Python environments separate. My initial setup looked something like this:

mkdir $(HOME)/pushl
cd $(HOME)/pushl
pipenv install pushl

and created this script as $(HOME)/pushl/


cd $(dirname "$0")
LOG=$(date +%Y%m%d.log)
date >> $LOG
flock -n run.lock $HOME/.local/bin/pipenv run pushl -rvvc cache >> "$LOG" 2>&1

Then I have a cron job:

*/15 * * * * $HOME/pushl/

which runs it every 15 minutes.

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
Pushl-0.1.2-py3-none-any.whl (11.4 kB) Copy SHA256 hash SHA256 Wheel py3 Oct 12, 2018
Pushl-0.1.2.tar.gz (8.9 kB) Copy SHA256 hash SHA256 Source None Oct 12, 2018

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page