Developing EdgeDB
This section describes how to build EdgeDB locally, how to use its internal tools, and how to contribute to it.
Building Locally
The following instructions should be used to create a “dev” build on Linux or macOS. Windows is not currently supported.
Build Requirements
GNU make version 3.80 or newer;
C compiler (GCC or clang);
Rust compiler and Cargo 1.59 or later;
autotools;
Python 3.10 dev package;
Bison 1.875 or later;
Flex 2.5.31 or later;
Perl 5.8.3 or later;
Zlib (zlibg1-dev on Ubuntu);
Readline dev package;
Libuuid dev package;
Node.js 14 or later;
Yarn 1
Instructions
The easiest way to set up a development environment is to create a Python “venv” with all dependencies and commands installed into it.
- Make a new directory that will contain checkouts of edgedb and edgedb-python. The name of the directory is arbitrary, we will use “dev” in this guide:
```
$
```
```
mkdir ~/dev
```
```
$
```
```
cd ~/dev
```
- Clone the edgedb repository using
--recursive
to clone all submodules:
```
$
```
```
git clone --recursive https://github.com/edgedb/edgedb.git
```
- Create a Python 3.10 virtual environment and activate it:
```
$
```
```
python3.10 -m venv edgedb-dev
```
```
$
```
```
source edgedb-dev/bin/activate
```
- Build edgedb (the build will take a while):
```
$
```
```
cd edgedb
```
```
$
```
```
pip install -v -e ".[test]"
```
In addition to compiling EdgeDB and all dependencies, this will also install the `edb` and `edgedb` command line tools into the current Python virtual environment.
It will also install libraries used during development.
- Run tests:
```
$
```
```
edb test
```
The new virtual environment is now ready for development and can be activated at any time.
Running Tests
To run all EdgeDB tests simply use the $ edb test
command without arguments.
The command also supports running a few selected tests. To run all tests in a test case file:
$
edb test tests/test_edgeql_calls.py
# or run two files:
$
edb test tests/test_edgeql_calls.py tests/test_edgeql_for.py
To pattern-match a test by its name:
$
edb test -k test_edgeql_calls_01
# or run all tests that contain "test_edgeql_calls":
$
edb test -k test_edgeql_calls
See $ edb test --help
for more options.
Dev Server
Use the $ edb server
command to start the development server.
You can then use another terminal to open a REPL to the server using the $ edgedb
command, or connect to it using one of the language bindings.
Test Databases
Use the $ edb inittestdb
command to create and populate databases that are used by unit tests.