posted on December 23, 2015 in sakebowl, project, web

The sad state of JavaScript markdown editors

One of the essential parts of Sakebowl will be the editor. Maybe even the most essential one - in the end it is a content management system, so you have to enter and edit content. I was planning to stick with markdown. It is fast to write, it has a clear syntax and everyone can pick it up in a matter of minutes. But trying to make markdown editing usable in a browser slowly leads me away from this idea.

Since I want to get a prototype done I was looking for existing JavaScript markdown editors. There are dozens of them. Some have a split view, rendering your markdown live and showing you how your content will look like, some have a preview mode, some only have a toolbar with quick access to the most common formatting options. But they are all unbelievable bad at different things.

My biggest complaint is that nearly all of them mess up the textarea you are writing in, which means no auto correct, sometimes no default copy & past functionality in iOS or not being able to scroll on a mobile device. Now you can say what you want about Ghost, but there is one thing they definitely got right: the editor.

ghost editor

And I still believe this editor is far from user friendly. It is user friendly if someone knows markdown. But why not just add a few buttons for the basic formatting needs like bold, italic and adding a link or image? Maybe they felt like usability would clutter their design. Or they never intended to have a non-technical user base.

Right now it looks like I will have to write an editor. Adding the buttons is easy thanks to markdowns simple syntax. Adding a preview is also no rocket science, there are enough JavaScript library to render markdown. Adding the nice stuff like drag and drop for images or a proper media manager triggered by the preview window gets harder. But I feel like not putting some time into the core component of a CMS would not be the smartest decision.

I will still continue to look into possibilities and other options than writing it myself, but currently I think I am out of luck with existing solutions. Maybe if I manage to build a decent implementation I will extract the component and release it as a separate project, but that will surely take some time.

I would love to talk to you about this post, your ideas or awesome projects.

I am @fallenhitokiri on Twitter and GitHub or you can send me a mail.