Building the Editor
- Install Git
- Install Node
- Install Esy (0.6.2 or above is required, but the latest version is recommended:
npm install -g esy@latest)
NOTE: Linux-only: if you need to install using
sudo npm install -g esy@latestthen your NPM installation might be broken follow the instruction here to fix it this is related to this issue esy/esy#1099.
- Windows-only: Run
npm install -g windows-build-tools(this installs some build tools that aren't included by default on Windows)
- Install any other system packages required by Oni2 dependencies, as outlined below.
All platforms require
esy, and the ones outlined in the
No additional requirements.
gettext from homebrew:
brew install libtool gettext.
Some Linux distributions may need other packages:
- Ubuntu :
libncurses-devlatter two for
- Fedora/CentOS :
- Xorg related libraries:
Build and Run
git clone https://github.com/onivim/oni2 cd oni2
Install node dependencies
npm install -g node-gyp node install-node-deps.js
NOTE: The non-standard
node install-node-deps.jsstep instead of
npm installis necessary because the script picks up our vendored node binary.
node install-node-deps.jscommand will need to be re-run whenever the extension host is upgraded.
Build the front-end
NOTE: On Windows, you must build from a shell running as administrator. This is a requirement of esy because creating symlinks requires administrator permissions. More info at esy/esy#389.
NOTE: On macOS, if you receive an
error: Too many open files, you can run
ulimit -Sn 4096to increase the file limit. More info at esy/esy#1057
# Install dependencies in package.json esy install # Builds most dependencies and run Oni2 specific bootstrapping. # Takes upwards of 30 mins on a normal machine. # esy does intelligently cache to ~/.esy, subsequent builds are fast. esy bootstrap # Finish up remaining parts of building. Should be quick. esy build
--checkhealthargument validates all dependencies are available and working.
esy run -f --checkhealth
Run Onivim 2
esy '@test' install
esy '@test' build
esy '@test' run
Inline Unit Tests
esy '@test' inline
esy build dune build @check
esy '@bench' install
esy '@bench' build
esy '@bench' run
We use auto formatting tool, you might want to run it before you commit changes
NOTE: On macOS, checkhealth may report that a library is not loaded (e.g. Sparkle). This is normal. To check that libraries are loaded in a generated release build, see the section on macOS below.
To create a release build, run:
esy '@release' run -f --checkhealth
esy '@release' install
esy '@release' run --help
esy '@release' create
This will create a
_esy/release folder at the root with the application bundle inside that folder there will be folders for built binaries, in
Oni2 binary resides along
With the exception of macOS, these are actually symbolic links to
oni2/_esy/release/store/b/oni2-<hashvalue>/install/default/bin/Oni2, the same is true for the
Oni2_editor binary. On macOS, the symlinks are replaced with the actual binaries.
To create an installation package for Windows, run the following PowerShell script:
When building a release on newer versions of macOS, checkhealth will report that some libraries are not loaded. This is because the libraries are not accessible until the app is fully built and can be ignored.
To check that the libraries are in fact included in a generated release build, you can run the following command from the
./_release/Onivim2.app/Contents/MacOS/Oni2 -f --checkhealth
You can also install Oni2 in your
Run the following from the
cp -R _release/Onivim2.app /Applications
If you want to open the editor from the terminal with an
oni2 command, you can add Oni2 to the system PATH using a command
from within the app:
- Open Oni2 from launchpad
- Open command palette with
Cmd + Shift + P
System: Add Oni2 to System PATH
If you want to develop, or debug, an extension integration, the following tips may help:
Testing with oni-dev-extenion
There is a development extension in
src/development_extensions/oni-dev-extension which can be used to implement dummy functionality that is often easier to test and integrate with than real extensions.
To add logging, use
console.error - messages on
stderr will be shown in Onivim's log. (Make sure to turn debug logging on, via
ONI2_DEBUG=1 environment variable or the
--debug command-line arg).
Both the oni-dev-extension and any other extension can be instrumented, as they're usually included in non-minified form.
If there's a problem in-between Oni2 and the extension, it can be helpful to build and instrument your own copy of the extension host.
- Navigate to your home directory (ie,
cd ~on Linux / macOS, or
cd /on Windows)
git clone https://github.com/onivim/vscode-exthost
You can use the
yarn watch command too - this is useful for iterating quickly!
You can use the
ONI2_EXTHOST environment variable to override the default extension host with your local extension host:
- `ONI2_EXTHOST=/Users/<your-username>/vscode-exthost esy run -f --debug``
For example, adding the logging here (the
$executeContributedCommand proxy method)
Results in this debug logging:
The extension host protocol is defined in extHost.protocol.ts. Interfaces prefixed with
MainThread refer to messages sent from the extension host to the "main thread", which in our case is Oni2. While interfaces prefixed with
ExtHost refer to messages sent to the extension host.
Building the Documentation Website