Modal Editing from the Future
Bryan Phelps

VimConf Live 2020
@bryphe
My Vim Journey
2007
College
Visual Studio / C#
…commit tool
2015
Built-in Keyword Completion
YouCompleteMe
SuperTab
deoplete
Custom omnifuncs
+ UltiSnips
Bringing Completion to Vim…
VsVim in Visual Studio
Bringing Vim to other editors….
Sublime Text w/ vintage mode
VSCode + VSCodeVim
Building…
Vim-electrify Onivim v1
ReasonML
A functional programming language based on OCaml
ReasonML
Early 2019
Initial build
Onivim v1 (Electron): ~5s

Onivim v2 (ReasonML): ~0.5s
Startup Performance:
….10x improvement in startup time!
…and building
Fast, Native
VSCode
Compatibility
VimL
Compatibility
Easy to Setup
Easy to Learn
Modern
Demo: Modern Experience
aka, breaking free of terminal limitations
Why VSCode Extensions?
Why VSCode Extensions?
Plugins “just work”

Popularity

Ecosystem
…but isn’t it just an implementer of LSP (Language Server Protocol)?
Extension Host Protocol
Extension Host Protocol & LSP
Exthost Protocol - superset of LSP

Case 1:
Extension host language features trickle down into
LSP - just after a delay.

Case 2: 

Some functionality never makes it to LSP….



VSCode plugin will always be the 

premiere experience.
Demo: Out-of-box JavaScript
Bundled VSCode Extensions
Demo: Installing Extensions
Editor Spectrum
VSCodeVim
Ease Learning Curve
Visual Feedback
init.vim / vimrc compactibility
Faithful Vim experience
Fast, native performanceFamiliar UI paradigms
Demo: Vim Settings
Placeholder: Demo
Architecture
Architecture: libvim
Architecture: libvim
libvim
Extract a minimal subset
Architecture: libvim
libvim
libvim.h
•Remove terminal UI rendering

•Refactor (invert control)

•Minimal build
Libvim in the wild
Paravim
https://www.github.com/oakes/paravim
Vim Cubed
https://www.github.com/oakes/vim-cubed
Architecture: libvim
libvim
Architecture: Editor
libvim
GUI Process
oniguruma
Syntax Highlight Process
Native front-end
√
Architecture: Editor
libvim
GUI Process
oniguruma
Syntax Highlight Process
•Native UI framework

•Cross-platform

•React-inspired

•Compiles to native code

•Built on ReasonML/OCaml
Architecture: Editor
•Native UI framework

•Cross-platform

•React-inspired

•Compiles to native code

•Built on ReasonML/OCaml
√
Architecture: VSCode
Front-End Process
Browser UI
Extension Host

Protocol Back-End Process
Extension Host
Extension 1 Extension 2 Extension N
Language
Server 1
Language
Server 2
Electron
Architecture: Split out Extension Host
Back-End Process
Extension Host
Extension 1 Extension 2 Extension N
Language
Server 1
Language
Server 2
Node
Architecture: Split out Extension Host
Back-End Process
Extension Host
Extension 1 Extension 2 Extension N
Language
Server 1
Language
Server 2
Node
√
libvim
GUI Process
oniguruma
Syntax Highlight Process
Native ReasonML
Extension
Host

Protocol
Architecture: Split out Extension Host
Back-End Process
Extension Host
Extension 1 Extension 2 Extension N
Language
Server 1
Language
Server 2
Node
√
libvim
GUI Process
oniguruma
Syntax Highlight Process
Native ReasonML
Extension
Host

Protocol
Funding
Funding open-source is hard!

…and not fun.

Donor model at first…
Funding: Time-Delay Dual License
onivim/oni2
EULA License
onivim/oni2-mit
MIT License
18 months - Relicense
100+ commits have been
relicensed
• Free for educational & non-commercial use.
• License needed for commercial use.
Funding: Giving Back
Vim
https://www.vim.org/sponsor
Neovim
https://salt.bountysource.com/teams/neovim
What’s Next
October December
• Vim navigation across UI

• Vim Workflow

• Settings

• Keymaps

• VimL plugin support

• Marks / Register / List
• Trial Build

• Auto-Update
• Bug fixes (daily editor blockers)

• Stabilization

• Performance improvements

• IME / Input Improvements

• Polish
August
0.5.0 Alpha Minimum Viable Product
Our Team
Thank you!
Patreon: https://patreon.com/onivim
Twitter: @oni_vim | @bryphe
Github: https://github.com/onivim/oni2
Website: https://v2.onivim.io

Onivim: Modal Editing from the Future