---
title: "Developer Setup"
description: >
  The steps to install DevLake in developer mode.
sidebar_position: 1
---


## Requirements

- <a href="https://docs.docker.com/get-docker" target="_blank">Docker v19.03.10+</a>
- <a href="https://golang.org/doc/install" target="_blank">Golang v1.19+</a>
- <a href="https://www.gnu.org/software/make/" target="_blank">GNU Make</a>
  - Mac (Preinstalled)
  - Windows: [Download](http://gnuwin32.sourceforge.net/packages/make.htm)
  - Ubuntu: `sudo apt-get install build-essential libssl-dev`

## How to setup dev environment

The following guide will walk through how to run DevLake's frontend (`config-ui`) and backend in dev mode.


1. Navigate to where you would like to install this project and clone the repository:

   ```sh
   git clone https://github.com/apache/incubator-devlake.git
   cd incubator-devlake
   ```

2. Install dependencies for plugins:

   - [RefDiff](../Plugins/refdiff.md#development)

3. Install Go packages

    ```sh
    cd backend
	go get
    cd ..
    ```

4. Copy the sample config file to new local file:

    ```sh
    cp .env.example .env
    ```

5. Update the following variables in the file `.env`:

    * `DB_URL`: Replace `mysql:3306` with `127.0.0.1:3306`

6. Start the MySQL and Grafana containers:

    > Make sure the Docker daemon is running before this step.

    ```sh
    docker-compose up -d mysql grafana
    ```

7. Run `devlake` and `config-ui` in dev mode in two separate terminals:

    ```sh
    # run devlake
    make dev
    # run config-ui
    make configure-dev
    ```

    For common errors, please see [Troubleshooting](#troubleshotting).

8.  Config UI is running at `localhost:4000`
    - For how to use Config UI, please refer to our [tutorial](Configuration/Tutorial.md)

## Running Tests

```sh
# install mockery
go install github.com/vektra/mockery/v2@latest
# generate mocking stubs
make mock
# run tests
make test
```

## DB migrations

Please refer to the [Migration Doc](../DeveloperManuals/DBMigration.md).

## Using DevLake API

All DevLake APIs (core service + plugin API) are documented with swagger. To see API doc live with swagger:

    - Install [swag](https://github.com/swaggo/swag).
    - Run `make swag` to generate the swagger documentation.
    - Visit `http://localhost:8080/swagger/index.html` while `devlake` is running.


## Developing dashboards

To access Grafana, click *View Dashboards* button in the top left corner of Config UI, or visit `localhost:3002` (username: `admin`, password: `admin`).

For provisioning, customizing, and creating dashboards, please refer to our [Grafana Doc](../Configuration/Dashboards/GrafanaUserGuide.md).


## Troubleshooting


    Q: Running `make dev` yields error: `libgit2.so.1.3: cannot open share object file: No such file or directory`

    A: `libgit2.so.1.3` is required by the gitextractor plugin and should be . Make sure your program can find `libgit2.so.1.3`. `LD_LIBRARY_PATH` can be assigned like this if your `libgit2.so.1.3` is located at `/usr/local/lib`:

    ```sh
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
    ```
   
    Note that the version has to be pinned to 1.3.0. If you don't have it, you may need to build it manually with CMake from [source](https://github.com/libgit2/libgit2/releases/tag/v1.3.0).


## Compiling

    - Compile all plugins: `make build-plugin`
    - Compile specific plugins: `PLUGIN=<PLUGIN_NAME> make build-plugin`
    - Compile server: `make build`
    - Compile worker: `make build-worker`

## References

To dig deeper into developing and utilizing our built-in functions and have a better developer experience, feel free to dive into our [godoc](https://pkg.go.dev/github.com/apache/incubator-devlake) reference.
