Development Guide

Setting Up Metlo Locally


  1. node version 18.7.0. We recommend using nvm to manage node versions.
  2. postgres version 14.
  3. redis

Initial Setup

# Clone Metlo
$ git clone
$ cd metlo

# Install Yarn
$ npm i -g yarn

# Create a test database
$ psql postgres://localhost:5432/postgres -c "CREATE DATABASE metlo_api_security;"

# Build the common modules
$ cd common
$ yarn install && yarn build

# Install npm packages for the frontend and backend
$ cd ../frontend
$ yarn install
$ cd ../backend
$ yarn install

Start Services

Finally, you can start each service in a different terminal window:

1. Start the frontend

$ cd frontend
$ yarn dev

2. Start the backend

$ cd backend
$ yarn dev

2. Start the collector service

$ cd backend
$ yarn dev-collector

2. Start the job scheduler

$ cd backend
$ yarn dev-jobs

You should now be able to view the metlo frontend at http://localhost:3000!

Load test data

Without any trace data your Metlo dashboard won't be very interesting! You can load test trace data by running the test ingestor:

# Get an API Key from the backend
$ curl -X POST 'http://localhost:3000/api/v1/keys/create' -H 'Content-Type: application/json' -d '{"name":"test-api-key"}'

# Start the test ingestor
$ cd ingestors/test_data
$ virtualenv --python=python3 env
$ source env/bin/activate
$ pip install -r requirements.txt
$ python -b http://localhost:8081 -key <YOUR_API_KEY>


When running the services in development mode, changes made directly to the database model will be synchronized with your local database if no issues are encountered. However, before pushing changes that affect database models, you must create a migration. To create a new migration, run this command in the root of the backend directory:

yarn run migration:create ./src/migrations/<MIGRATION_DESCRIPTION>

Running this command will add a new file to the migrations folder to which you will need to add queries to run for the migration. Afterwards, you will need to add the new migration class to the migrations array in the AppDataSource constructor options in the backend/src/data-source.ts file. The migrations listed here will automatically run when the DataSource is initialized in non-development mode (via start commands rather than dev).