Chris Kohler

Navigate back to the homepage

Introducing Papertown

Chris Kohler
November 9th, 2019 · 1 min read

Papertown syncs you personal markdown blog with blog platforms like It’s a command line tool and works perfectly in combination with static blog frameworks like Gatsby.

The idea 💡

The core idea of Papertown is that it runs on every commit and creates and updates blogpost on and other platforms.

1// Current setup
2+-----------+ +-----------+ +-----------+
3| Commit md | ---> | Gatsby | ---> | Webhost |
4+-----------+ +-----------+ +-----------+
1// With Papertown
3 +-----------+ +-----------+
4 / |  Gatsby | ---> | Webhost |
5+-----------+ / +-----------+ +-----------+
6| Commit md |
7+-----------+ \ +-----------+ +-----------+
8 \ | Papertown | ---> | devto etc |
9 +-----------+ +-----------+

Why did I write it? 📝

I had two requirements for my personal blog:

✅ Blog content is owned and managed by me

✅ I want to syndicate my post on other platforms as easy as possible

How to use it 🚀

The easiest way to get started is to just run it locally with npx within you blog root folder:

1npx papertown sync --devtoApiKey apikey

Don’t worry, no blogpost are pushed to unless you add a masterid to a blogpost


Papertown needs an Id to identify blogpost and update them. Blogpost without a masterid are ignored.

2title: "Minimal Blogpost example frontmatter"
3author: "Chris Kohler"
4masterid: 20191109
5published: false
6canonical_url: ""

Draft or published?

Add published: false if you don’t want to publish the blogpost right now.

1published: false

Correct root folder

The default rootfolder is blog-articles. To change it just set the root folder:

1papertown sync --rootFolder posts

Alternatives to Papertown 🔭

There are two solutions I know of:

RSS feed support by

RSS feed support is not bad but is not as flexibel as I’d wish for updates and drafts.

Use as a source together with Gastby as a source is not an option for me since I want to be the master of the blog articles.

Source 👨‍💻

Source is MIT and on Github:

What’s next? 👀

Over the next weeks I will focus on the integration and fixing bugs. The highest prioritiy currently is adding support for images. After that I will start to work on the medium integration. If you would like to help please open an issue or pr on Github. All contributions are appreciated.


Version 1.2.0 comes with image support. That means that relative urls are now converted to github raw urls.

More articles from Chris Kohler

It’s a trap - The biggest pitfall of String.prototype.replace()

How to avoid the biggest pitfall of the replace function

June 30th, 2020 · 2 min read

Lessons learned from building a Grid List in React Native

How to build a robust grid list in React Native

June 5th, 2020 · 2 min read
© 2020 Chris Kohler
Link to $ to $ to $ to $