Local environment setup

When developing your Keel app locally there are two things which you'll probably want to setup - our CLI and our VSCode extension. Our CLI lets you run your project and develop against your APIs locally whilst our VSCode extension provides inline validation, formatting, and syntax highlighting for Keel schema files.

Dependencies

You will need to install the following dependencies in order to use the Keel CLI locally:

Node.js

Node.js is used for running your functions and tests, and NPM is required to install Keel. We require Node version 18 or higher.

You can install Node.js using the installer which is available from https://nodejs.org/en/download (opens in a new tab).

Docker

Docker is used by the CLI to run an instance of PostgreSQL. We only require that Docker is installed and running. You do not need to configure it in any way, nor do you need to install PostgreSQL itself.

There are a few ways to get Docker installed and running on your local machine, however Docker Desktop is the easiest way to get started. Follow the installation instructions for Docker Desktop (opens in a new tab) to get set up.

Please also make sure that Docker is running. You can test this by running docker ps in your terminal.

Install the CLI

Install the CLI globally from NPM (opens in a new tab).

npm install -g keel

If the CLI has installed correctly, the following command will respond with the current version number.

$ keel -v
v0.395.0

VSCode Extension

This extension only works in the desktop version of VSCode and not in the browser.

The Keel VSCode extension provides inline validation, formatting, and syntax highlighting for Keel schema files. You can find the extension by searching for “Keel” in the Extensions tab in VSCode, or click the button below:

Autoformatting in the extension

You can enable autoformatting of your Keel schema by opening your VSCode settings (CMD + P and then type and select "Preferences: Open User Settings (JSON)"), and add the following configuration:

{
  "[keel]": {
    "editor.formatOnSave": true
  }
}

If you already have the top-level configuration value editor.formatOnSave set to true, then this will also work too.