Replica, primary development repository is
Go to file
jjg bb9951362a Merge pull request 'Preserve github history' (#33) from clacke/ into master
Awesome, thank-you for pulling this together.
2020-03-07 17:01:46 +01:00
css Use CSS to tell browser to respect image orientation EXIF tag. Closes #13 2019-10-14 16:29:34 +00:00
images Initial import from Github. 2019-10-07 04:38:18 +00:00
.gitignore Initial support for user-specific podcasts. 2019-10-24 14:06:49 -05:00
LICENSE Initial commit 2019-10-07 06:36:22 +02:00 Various copy and doc updates 2019-10-07 00:20:11 -05:00
favicon.ico Initial import from Github. 2019-10-07 04:38:18 +00:00 Initial import from Github. 2019-10-07 04:38:18 +00:00
index.html Add podcast link to index head. 2019-10-25 09:24:31 -05:00
multi-col.html Archive old style and add examples of new. 2019-10-07 13:29:05 -05:00
podcast.xml Added author tag to site-wide podcast xml. 2019-10-25 09:29:13 -05:00
podcastrssindextemplate.xml Initial support for user-specific podcasts. 2019-10-24 14:06:49 -05:00
postindextemplate.html Try adding some color to links. 2019-10-07 15:25:32 -05:00
postrssindextemplate.xml Initial import from Github. 2019-10-07 04:38:18 +00:00
posttemplate.html Try adding dates back to posts. 2019-10-07 15:34:58 -05:00 Initial import from Github. 2019-10-07 04:38:18 +00:00 Add cover image and add additional tags to site-wide podcast. 2019-10-25 09:04:53 -05:00


When Posterous was created, it was perfect.

Over time it became bloated, but it's heart was still in the right place. Then it died. is an attempt to ressurect the heart of Posterous, in around 500 lines of Python.


After a long hiatus, this project is being revived, slowly. Once a permanent blog has been established to track progress, a link will be added here.

How it works

To start a new blog, send a post via email to's email address. will read the email, create a new blog and post your initial entry. When you want to create a new post, send another email. To edit/update an existing post, send another email with a subject line that is identical to the title of the post you want to update. To delete a post, send an email with an identical title that contains no text in the body. maintains an index of all bloggers using each server, and generates an index for the posts in each blog as well. Blogs are identified by the email address used to post, so to create additional blogs, just submit a post from a different email address.

Anything that can send an email can publish via

Requirements requires Python (tested with 2.7, but probably works with any 2.x version), and a webserver that can serve static HTML; thats all. No database, no external libraries, nada.


To setup a server, start by setting up an email address that the server will listen to (an address you'll be sending posts to), free gmail addresses work great for this.

Next clone this repository and copy to Using your favorite editor, open, theres a couple configuration variables you'll need to setup for your site.

Once the script is configured, send a post to the email address you setup above and then run the script. If all goes well it will return silently, and you should have a new directory where you specified the web root to be. If the script returns an error, or doesn't create a new blog directory, review the Issues list here to see if you're experiencing a known issue. If not, and if you don't know what else to do, post a new Issue here with details on your setup and how to recreate the error.

If all goes well the next step is to expose your blog files to the web. The files generated by are simple HTML and can be served using any webserver (or even viewed directly in a browser). Finally, setup a cron job to run on a scheduled basis to automatically post new blog entries whenever they come into the mailbox.

If you just want to use but don't want to run your own server email your first post to "post at".