Publish your thoughts to a Write Freely instance from within Emacs Org Mode
Switch branches/tags
Nothing to show
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information. Support for MELPA has landed. Nov 30, 2018
writefreely-el-demo.gif Add screencast to readme. Nov 21, 2018
writefreely.el Define beginnings of minor mode and simple keymap Nov 29, 2018


This small library allows you to publish and update your Org-mode files as posts to any instance of the federated blogging platform write freely. No account nor registration is required for anonymous posts in the platform.

View it in action:


An example post generated with this library can be found here.


This project is available on Melpa. To use it:

(use-package writefreely
  :after org
  :ensure t
  ;; Authentification token, if wanted.
  ;; Alternatively (setq writefreely-auth-token "00000000-0000-0000-0000-000000000000")
  :config (load-library "writefreely-auth-token.el.gpg"))

This package now depends on ox-gfm to get the code export done properly.


  1. Write an Org file. You may want to set the following options, to tweak ox-gfm’s export: toc:nil -:nil \n:t.
  2. Call writefreely-publish-or-update to push the post to Here writefreely.el will store the post-id and post-access-token as local variables directly in your org document. This allows you to visit your post online, or update it later.
  3. Call writefreely-visit-post to visit your post online.

To configure your writefreely instance, simply customise the variables writefreely-instance-url and, most importanly, writefreely-instance-api-endpoint. Per default they point to

All posts will be created anonymously, unless you set the variable writefreely-auth-token is set to a valid user access token. For more information about generating access tokens visit

When authenticated, you may choose to submit posts anonymously or to one of your collections.

If using the, instance, for example, copy and paste the following into your shell, changing the username and password to those of your account:

curl "" \
  -H "Content-Type: application/json" \
  -X POST \
  -d '{"alias": "user", "pass": "12345"}'