With the Range and Selection APIs, contenteditable is almost not necessary anymore. It still requires a ton of work on top of them to build a decent editor, but it should be mostly possible now at least.