We'd love your help!
General contributing guidelines are described in Contributing Guidelines.
This document provides Jaeger UI-specific guidance to complement the general guidelines.
- nvm (Node Version Manager)
- Node.JS
- npm package manager
Fork and/or clone the jaeger-ui repo and change directory into it.
git clone https://github.com/jaegertracing/jaeger-ui.git
cd jaeger-uiUse the recommended Node versions: (defined in .nvmrc file):
nvm useInstall dependencies via npm:
npm ciMake sure you have Jaeger running on http://localhost:16686. For example, you can run Jaeger all-in-one Docker image as described in getting started documentation.
If you don't have it running locally, then tunnel to the correct host and port:
ssh -fN -L 16686:$BACKEND_HOST:$BACKEND_PORT $BACKEND_HOSTIf you are using the UI Base Path feature, you need to append the base path into jaeger-ui/jaeger-ui/vite.config.js in proxyConfig object. For example, if the base path is "/jaeger", then the target should be "http://localhost:16686/jaeger" and your proxyConfig object would be:
const proxyConfig = {
target: 'http://localhost:16686/jaeger',
secure: false,
changeOrigin: true,
ws: true,
xfwd: true,
};Start the development server with hot loading:
npm startThe above command will run a web server on http://localhost:5173 that will serve the UI assets, with hot reloading support, and it will proxy all API requests to http://localhost:16686 where Jaeger query should be running.
| Command | Description |
|---|---|
npm start |
Starts development server with hot reloading and api proxy. |
npm test |
Run all the tests |
npm test $file |
Run tests for a specific file, e.g. npm test src/api/jaeger.test.js |
npm run lint |
Lint the project (eslint, prettier, typescript) |
npm run fmt |
Apply Prettier source code formatting |
npm run build |
Runs production build. Outputs files to packages/jaeger-ui/build. |
This project uses Jest for testing with high coverage standards and Codecov integration for tracking.
| Command | Description |
|---|---|
npm test -- --coverage |
Run all tests with coverage report |
npm test -- --coverage --collectCoverageFrom="src/path/to/file.tsx" |
Coverage for specific files |
npm test -- --testPathPattern=Component --coverage |
Coverage for specific test patterns |
npm test -- --coverage --coverageReporters=text-lcov --coverageReporters=html |
Generate detailed coverage reports |
Coverage Metrics:
- Statements: % of executable statements covered by tests
- Branches: % of conditional branches (if/else, switch cases) covered
- Functions: % of functions called during tests
- Lines: % of lines executed during tests
Example: npm test -- --testPathPattern=DdgNodeContent --coverage --collectCoverageFrom="src/components/DeepDependencies/Graph/DdgNodeContent/index.tsx"
While we don't natively support Windows OS for running the Jaeger UI Dev Environment, you can use Windows Subsystem for Linux (WSL) to run it.
Here are some steps to follow:
- Install WSL: https://learn.microsoft.com/en-us/windows/wsl/install
- Install Node.JS: https://learn.microsoft.com/en-us/windows/dev-environment/javascript/nodejs-on-wsl
- Connect WSL Environment with VSCode: https://learn.microsoft.com/en-us/windows/dev-environment/javascript/nodejs-on-wsl#install-visual-studio-code
- Use the WSL Terminal inside VSCode and follow the Jaeger UI installation steps
Use the following launch.json configuration:
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Jest: current file",
"skipFiles": ["<node_internals>/**"],
"program": "${workspaceFolder}/node_modules/.bin/jest",
"args": ["${file}"],
"console": "integratedTerminal",
"cwd": "${workspaceFolder}/packages/jaeger-ui"
}
]
}Use typescript for new code. Check types via npm run tsc-lint.
We use prettier, an "opinionated" code formatter. It can be applied to both JavaScript and CSS source files via npm run prettier.
Then, most issues will be caught by the linter, which can be applied via npm run eslint.
Finally, we generally adhere to the Airbnb Style Guide, with exceptions as noted in our .eslintrc.
If you are adding a new file it should have a header like below.
// Copyright (c) 2025 The Jaeger Authors.
// SPDX-License-Identifier: Apache-2.0
Please see RELEASE.md.