XaiJu
onivim
onivim

patreon


Onivim 2 - v0.3.0 - Alpha Milestone

Very excited that December 31st, 2019 marks our transition to an 'Alpha Release' (although the post / video / website were updated a bit late!)

This is a big release for us - because we've taken the next step in our project's journey - we've set up the initial VSCode extension integration.

What's New

We've made a ton of progress since the Pre-Alpha:

Integration with the VSCode extension 'back-end', providing us with:
 - Code completion
 - Diagnostics
 - Go-to definition
 - Custom status bars

Bundled a few VSCode extensions:
 - typescript-language-features (JavaScript / TypeScript)
 - css-language-features (CSS)
 - reason-vscode (ReasonML/OCaml)

Initial extension management
 - Installation (via CLI)
 - A pane to show installed extensions

- Native support for VSCode Textmate grammars
- Native support for VSCode Themes

Some screenshots:

...out-of-box typescript integration:

...a welcome screen:

...a search experience:

...themes (this is the Visual Studio - Dark theme):

Our team has grown too - which is part of the reason we have these additional features!

Glenn (glennsl) has joined us full-time at the end of November, and much of the user experience improvements are thanks to him. 

He's worked on:
- A brand new search experience
- Improving our menus (command palette, Vim ex mode, quick-open) - adding scrollbars and highlights
- Improving our file explorer
- Implementing a Control+Tab experience for quickly switching between open files
- Architecture and infrastructure improvements, like filterable logs, creating a subscription model, and creating our editor-core-types project

Ryan (CrossR) has been a long-time collaborator on the project - working with me since the early days of Onivim v1! He's joined us officially part-time (he's full-time working on his Phd!). 

He's working on several improvements:
- Better, faster fuzzy-matching
- Integrating additional tree-sitter grammars
- libvim bug fixes
- OSX CLI Support (Add-to-Path)
- and, on top that, he's always helping troubleshoot on Discord and Twitter. 

Diving under the hood - technical details

As of our alpha build, this is the architecture of our editor:

We've extracted the back-end of 'Code-OSS' (the open-source piece of Visual Studio Code) - and we run it as a separate process. Communication is facilitated by a JSON-RPC protocol.

We have a few features connected at the moment - enough to support some very basic functionality. However, there's a lot left for us to wire up! The full protocol we are working against is defined here - the extHost.protocol.ts 

This 'extension host' handles more than just language features - it also provides the API surface for things like source control management, build tasks, supplying custom menus and tree views, working with debug adapters. We'd like to support the full surface area - it'll be an ongoing effort!

But it's very exciting that we have this initial plumbing in place, and that we're able to integrate holistically with VSCode extensions. This is such a huge step forward. By virtue of Code's popularity, the extensions, themes, and language support that are available tend to be very high-quality.

There was one other notable architectural change since the last update - we've gone through several iterations of our syntax highlighting:

- Iteration 1: Syntax highlighting is powered by NodeJS (vscode-textmate), and run in a separate NodeJS process
- Iteration 2: Syntax highlighting is run in-process, powered by reason-textmate.
- Iteration 3: Syntax highlighting is run in a separate process, powered by reason-textmate.

We had hoped that Iteration 2 would be enough for us. But we ran into one key limitation of ReasonML native / OCaml - the fact that you can't have threads run on multiple cores. You can have system threads - but they are limited to the same core. This is fine for I/O, but not sufficient when the task to run concurrently is computation bound (which syntax highlighting is - lots of regular expressions in the textmate grammar case, and lots of parsing in the tree-sitter case). OCaml Multicore can't come soon enough! :)

However, it was relatively straightforward to defer this work to a separate process and use the Marshal module to have strongly-typed communication between the editor UI and the syntax server. Much simpler than our JSON interop!

What's Next

So we've laid the ground-work by having our native, ReasonML-powered front-end talk to the VSCode extension host... but there's a lot more to do!

This is top of mind for our next milestone - 0.4.0 - by end of March:

New Features

- Integrated Terminal (terminal in splits, ie, :terminal)
- Keyword completion (from syntax highlighting)
- Auto-closing pairs
- Snippet support

Additional Extension Host integrations

- Formatting
- Signature Help
- Hover
- Code Actions
- Initial Source Control integration (a source control pane, change markers)

Extension Management improvements

The story for installing extensions today is very manual. We want to improve that by having a way to discover, download, and install extensions from within the editor. This will likely be a very basic experience for the next milestone, but something we want to start building.

Unblock top VSCode plugins

We've implemented enough of the API to support basic features for the extensions we've bundled. However, we need to work through the issues for additional extensions - we'd like to support some of the most popular Code extensions, like the Python, C#, and eslint plugins.

UX Polish

- Search improvements
- Completion improvements
- Explorations in improving Vim command discoverability

...and of course - lots of bug fixes! The build is still very much Alpha quality.

The hope is that, if we can unblock these top plugins, we should unblock issues that prevent other extensions from working too.

It's a very ambitious set of goals for our next release! This will still be labeled 'Alpha' but will have a version bump (0.3.0 -> 0.4.0).

And as our builds are still very much Alpha-quality - please feel free to help us log bugs / issues / feature requests: https://github.com/onivim/oni2/issues

Really appreciate all the feedback we've received so far!

THANK YOU

Lastly, I want to say thank you to everyone who's helped us, joined us in this journey, and believed in us - our contributors, patrons, pre-orderers - we wouldn't have gotten to this point without you!

For our alpha release - we've raised the pre-order price to $25 (still 75% off of our target price). We'll continue to raise the price as we make progress - so there's never a better time to pre-order than now!

Download the latest build here: https://v2.onivim.io/early-access-portal

Cheers-

Comments

Thanks for taking the time to report this, Eric! Opened a PR to address this here: https://github.com/onivim/oni2/pull/1288

I get an error + crash when clicking on a line number - Invalid_argument("index out of bounds"):


More Creators