How do Emscripten cross-compiled things and WASM compiled things handle the display? Is it a framebuffer they blindly draw to, do they need shim layers added to interpret normal output to window-scaled in-browser output?
In this example, author implements custom UI layer as it is described in readme "WebAssembly frontend for Vim is implemented as a new GUI frontend".
Input and output is handled in JS side but core functionality resides on WebAssembly part.
I am not familiar with Vim but probably I/O is well seperated from logic code so it might be easier to modify it to work on browser but I actually don't know how it is working for other applications.