This guide will help you get started with contributing to the Opik backend.
Before you start, please review our general Contribution Overview and the Contributor License Agreement (CLA).
The Opik backend is a Java application (source in apps/opik-backend) that forms the core of the Opik platform. It handles data ingestion, storage, API requests, and more.
We provide multiple ways to develop the backend. Choose the approach that best fits your workflow:
Best for rapid development
This mode runs the backend as a local process while infrastructure and other services run in Docker:
The backend API will be accessible at http://localhost:8080.
Benefits:
Prerequisites:
For comprehensive documentation on all development modes, troubleshooting, and advanced workflows, see our Local Development Guide.
We use Spotless for code formatting. Before submitting a PR, please ensure your code is formatted correctly:
Our CI (Continuous Integration) will check formatting using mvn spotless:check and fail the build if it’s not correct.
Ensure your changes pass all backend tests:
Tests leverage the testcontainers library to run integration tests against real instances of external services (Clickhouse, MySQL, etc.). Ports for these services are randomly assigned by the library during tests to avoid conflicts.
After implementing your changes, ensuring tests pass, and code is formatted, commit your work and open a Pull Request against the main branch of the comet-ml/opik repository.
To check the health of your locally running backend application, you can access the health check endpoint in your browser or via curl at http://localhost:8080/healthcheck.
Opik uses Liquibase for managing database schema changes (DDL migrations) for both MySQL and ClickHouse.
apps/opik-backend/src/main/resources/liquibase/{{DB}}/migrations (where {{DB}} is db for MySQL or dbAnalytics for ClickHouse).apps/opik-backend/run_db_migrations.sh script, Docker images, and Helm charts in deployed environments.Running Migrations in Local Development:
This command will:
Requirements for DDL Migrations:
empty if Liquibase cannot auto-generate one). Refer to Evolutionary Database Design and Liquibase Rollback Docs.DML (Data Manipulation Language) migrations are for changes to data itself, not the schema.
CHANGELOG.md (link to GitHub: CHANGELOG.md) and the scripts are placed at
apps/opik-backend/data-migrations along with detailed instructions.You can query the ClickHouse REST endpoint directly. For example, to get the version:
Sample output: 23.8.15.35