Replica, primary development repository is
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
jjg bb9951362a
Merge pull request 'Preserve github history' (#33) from clacke/ into master
3 years ago
css Use CSS to tell browser to respect image orientation EXIF tag. Closes #13 3 years ago
images Initial import from Github. 4 years ago
.gitignore Initial support for user-specific podcasts. 3 years ago
LICENSE Initial commit 4 years ago Various copy and doc updates 4 years ago
favicon.ico Initial import from Github. 4 years ago Initial import from Github. 4 years ago
index.html Add podcast link to index head. 3 years ago
multi-col.html Archive old style and add examples of new. 4 years ago
podcast.xml Added author tag to site-wide podcast xml. 3 years ago
podcastrssindextemplate.xml Initial support for user-specific podcasts. 3 years ago
postindextemplate.html Try adding some color to links. 4 years ago
postrssindextemplate.xml Initial import from Github. 4 years ago
posttemplate.html Try adding dates back to posts. 4 years ago Initial import from Github. 4 years ago Add cover image and add additional tags to site-wide podcast. 3 years ago


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".