NVM, Node, and npm

For server and client-side app code.

Install nvm.

nvm install # will install version from .nvmrc
nvm use


Install the latest version of Go


Install the latest version of Docker


Generates certificates for use with our local nginx proxy. On Mac install with homebrew:

brew install mkcert

Otherwise follow the installation instructions here:

Install dependencies

Just run ./public/scripts/install_deps at the root of this repo.

It will install all required npm dependencies (global, shared, public, and private). It also prunes to keep all modules in sync.

Local Proxy

Add the following line to /etc/hosts:


Create development database:



Each of these is usually run in its own terminal pane.


Api runs locally in community open source mode.

$ ./public/scripts/start_api_community_dev

Runs the api server at (curl as a health check).

client core process

$ ./public/scripts/start_core_process

By default, it runs an express server on 19047 and a local websocket server on 19048.

Can also be run inline in the electron app.

Ui dev server

Builds the EnvKey web app and serves it locally with webpack-dev-server

$ ./public/scripts/start_ui_dev_server

Ui electron app

Requires the api and ui dev server to be running.

If it's the first time you're running the app, or else if something has changed in the electron wrapper public/app/client/electron (as opposed to the ui itself in public/app/client/ui), then use:


That will build/rebuild electron-specific code before starting.

Otherwise, you can start it without building, which is faster:


If the core process isn't already running, the Electron app will run it inline in its main process.

EnvKey CLI

In development, you can run CLI commands like this:

./public/scripts/cli accounts

For CLI help:

./public/scripts/cli -h
./public/scripts/cli command -h
./public/scripts/cli category -h
./public/scripts/cli category command -h

The CLI relies on the core process, and it will start its own detached core process if one isn't running.


To run tests, first make sure the api is running in a different terminal pane:


Then run all the tests:

$ ./public/scripts/test

VSCode Plugins

For the best VSCode experience, install the following plugins:

  • Prettier - Code formatter
  • Go
  • Auto Import

change-case can also be useful for converting symbols between case formats (camelCase, CONSTANT_CASE, snake_case, etc.)