Because writing in markdown and performing commands via the terminal makes me feel more like a hacker.

This blog is built with Plato (soon to be open source, I promise), an opinionated CLI for Metalsmith. It's a pleasure to use, since I get to write all of these posts in markdown, `plato preview` to preview the post locally, then `plato save` and `plato deploy` to push changes to GitHub, where it's hosted.

I loved writing in Markdown so much, that I wanted to do the same when publishing to Medium. When I saw that Medium released a publishing API, I knew that I had to make a CLI for it (and it's open sourced).

Here is the npm and GitHub.

Have fun!

Installation

$ npm install -g medium-cli

Usage

There are four commands: `medium create`, `medium login`, `medium publish`, and `medium open`.

create <directory name>

$ medium create buzzfeed

  medium · Successfully created your blog!

This command creates a new sub directory <directory name> in your current directory, with two example articles. The directory looks like this:

.
├── articles
|   ├── 12-classic-love-scenes-improved-by-a-chipotle-burrito
|   |   └── index.md
|   └── 51-corgi-gifs-that-will-change-your-life
|       └── index.md
└── .gitignore

The `index.md` files are the blog posts. More on this later.

login

$ medium login

  medium · Please open https://medium.com/me/settings in your browser.
         · At the bottom of the page, under `Integration Tokens`, copy
         · this description:

         · "Medium-CLI basic publishing access."

         · Then generate the new token and copy it.

  Paste your Integration Token here: XXXX

         · Authenticating into Medium..

         · Saved!

This command asks you for your Integration Token (which can be retrieved at the bottom of this page). It also auths into Medium to get your user information. Lastly, it saves the token, your `userId`, and your URL to your ~/.netrc file.

publish

$ medium publish

This command iterates through your `index.md` files in `./articles` and publishes the ones that don't have `published: true` in the front matter to your Medium account.

Here is an example of an `index.md` file:

---
title: 12 Classic Love Scenes Improved By A Chipotle Burrito
tags: burrito, gifs, love
canonicalUrl: www.buzzfeed.com/kincairm/12-classic-love-scenes-improved-by-a-chipotle-burr-a4wp#.iab3N1w76
publishStatus: draft
license: all-rights-reserved
---

# 1. Titanic (1997)

![](http://ak-hdl.buzzfed.com/static/2014-04/enhanced/webdr05/28/11/enhanced-21200-1398697731-24.jpg)

# 2. The Notebook (2004)

![](http://ak-hdl.buzzfed.com/static/2014-04/enhanced/webdr06/28/11/enhanced-13907-1398700313-2.jpg)

# 3. Dirty Dancing (1987)

![](http://ak-hdl.buzzfed.com/static/2014-04/enhanced/webdr04/28/11/enhanced-31301-1398697944-9.jpg)

Note that `title` is the only field that is required in the front matter, with all the other ones optional. For a list of the accepted possible parameters, see Medium's API documentation. `contentFormat` and `content` are not required in the front matter, as they are both added later by the `medium publish` command.

For each successful post, the `medium publish` command also adds `published: true` to the front matter.

open

$ medium open

This directs your browser to your Medium page. You need to have `medium login` first to set your Medium URL.