Very nice article., thank you. Now I use Quill but I have hard time customising it and have to hack it hard to make it work for my needs :(

I will try ProseMirror if you recommend it.

Also question, why do all editors enforce content schema? Why is not enough to capture past event and clean possible junk, and allow easy modifiable schema-less editor (insert any “junk” on purpose).

Hi Dino! In your specific case, what are you trying to build?

In my experience you almost never want a free-form (=schema-less) editor. That’s what a browser-native raw contenteditable field would give you. But then when you copy&paste from somewhere a text from a blue box, it would end up in your editor as a blue box as well — but you only wanted to capture the text. So what you want to do is define some rules for your editor and the operations that are possible. E.g. at a certain cursor position, what does “insert image” mean? It could mean, insert it inline. Or it could mean split up the current paragraph into two, and add an image block in between. Stuff like that…