This morning I saw a post about how to create a Mastodon status update on the command line using curl. Kinda neat right?!

It got me thinking that it could be fun to add a little bit of script around it that allowed you to create the post in your configured $EDITOR, kind of like how git will open your editor of choice when you make a commit.

I don’t foresee wanting to read and reply to posts in the terminal (I would miss the images in the fediverse too much). But similar to my approach to jounaling I thought it might be useful to be able to quickly jot down a post, without getting sucked into reading my timeline, etc.

Here’s what it looks like in action:

To try it out put this little script in your PATH (I called mine “post”) and then set the environment variables (EDITOR, MASTODON_POST_HOST, MASTODON_POST_TOKEN) for it to use:


# Set these environment variables and you can create a (text-only) post using
# your favorite command line text editor.
# - EDITOR: e.g. vim, emacs, etc
# - MASTODON_POST_HOST: the hostname for our Mastodon account, e.g.
# - MASTODON_POST_TOKEN: an app access key with write:statuses permission
# See:

if [[ -z "${EDITOR}" ]]; then
  echo "⚠️  Please set EDITOR to something (e.g. vim, emacs) in your environment"

if [[ -z "${MASTODON_POST_HOST}" ]]; then
  echo "⚠️  Please set MASTODON_POST_HOST in your environment"

if [[ -z "${MASTODON_POST_TOKEN}" ]]; then
  echo "⚠️  Please set MASTODON_POST_TOKEN in your environment, get one by creating an app at https://$MASTODON_POST_HOST/settings/applications"

post_dir=`mktemp -dt "mastodon-post.XXXXXXXXXX"`

$EDITOR $post_file

if [[ ! -f $post_file ]]; then
  echo "🛑 cancelled posting..."

curl --silent --header "Authorization: Bearer ${MASTODON_POST_TOKEN}" https://${MASTODON_POST_HOST}/api/v1/statuses --form "status=<${post_file}" > /dev/null

if [[ $? -eq 0 ]]; then
  echo "🦣 post sent!"
  echo "😟 post failed" 

It’s also available in this gist where it might see some updates. It’s probably complicated enough to warrant being written in $another_programming_language, but I know there are other fully functional terminal apps like toot and tut for anything more complicated than sending off a quick post.