This document describes how to set up a local development environment and contribute to the Solo project.
- Prerequisites
- Initial setup
- Logs and debugging
- How to run the tests
- Code formatting
- How to Update Component Versions
- How to Inspect the Cluster
- Pull Request Requirements
- Node.js (use the version specified in the repository, if applicable)
- npm
- Docker or Podman
- Kubernetes (local cluster such as kind, k3d, or equivalent)
- task (Taskfile runner)
- Git
- K9s (optional)
- Clone the repository:
git clone https://github.com/hiero-ledger/solo.git
cd solo- Install dependencies:
$ npm install- Install solo as a local CLI:
$ npm linkNotes:
- This only needs to be done once.
- If solo already exists in your PATH, remove it first.
- Alternatively, you can run commands via:
npm run solo-test -- <COMMAND> <ARGS>
- Run the CLI:
$ solo- Solo logs are written to:
$HOME/.solo/logs/solo.log- A common debugging pattern is:
$ tail -f $HOME/.solo/logs/solo.log | jq-
Unit tests:
$ task test -
All other Integration and E2E test tasks can be listed using
$ task --list-all
Before committing any changes, always run:
$ task format- Edit the component's version inside
/version.ts
When debugging, it helps to inspect resources and logs in the Kubernetes cluster.
Common kubectl commands:
kubectl get pods -Akubectl get svc -Akubectl get ingress -Akubectl describe pod <pod-name> -n <namespace>kubectl logs <pod-name> -n <namespace>
Official Documentation: https://kubernetes.io/docs/reference/kubectl/
K9s is the primary tool used by the Solo team to inspect and debug Solo deployments.
Why K9s:
- Terminal UI that makes it faster to navigate Kubernetes resources
- Quickly view logs, events, and descriptions
- Simple and intuitive
Start K9s:
$ k9s -AOfficial Documentation: https://k9scli.io/topics/commands/
Two separate requirements are enforced on this repository:
Refer to the Hiero Ledger contributing docs under sign-off: https://github.com/hiero-ledger/.github/blob/main/CONTRIBUTING.md#sign-off
(Optional) Configure Git to always add the sign-off automatically:
$ git config --global format.signoff trueIn addition to the DCO sign-off, the repository also enforces a GitHub rule that blocks commits that are not signed and verified.
This means your commits must be cryptographically signed using GPG or SSH and show a Verified badge on GitHub.
If your commits are not signed, they will be rejected even if the DCO check passes.
To enable commit signing, see GitHub documentation:
After setup, verify signing is enabled:
$ git config --global commit.gpgsign trueBoth are required:
- DCO sign-off line (
-s) - Cryptographic signature (Verified commit)
Pull request titles must follow Conventional Commits.
Examples:
feat: add support for grpc-web fqdn endpointsfix: correct version resolution for platform componentsdocs: update contributing guidechore: bump dependency versions
This is required for consistent release notes and changelog generation.
- Prefer small, focused PRs that are easy to review.
- If you are unsure where to start, open a draft PR early to get feedback.
- Add description and link all related issues to the PR.