How to Contribute
This guide covers the development workflow, coding conventions, and pull request process for contributing to Axiom.
For a quick overview of ways to get involved, see the Getting Started > How to Contribute page.
Development Setup
- Fork the repository on GitHub
- Clone your fork:
- Start development mode:
- Open
http://localhost:9191and verify the UI loads
See the Building Axiom guide for prerequisites and build details.
Code Organization
When making changes, use this guide to find the right module:
| Change | Module |
|---|---|
| REST API endpoint | common/api (OpenAPI spec) + app/rest/ (implementation) |
| Domain entity or lifecycle | core/ |
| Manager behavior | manager/ |
| Claude Code engine/actor | actors/claude-code/ |
| OpenCode engine/actor | engine/opencode/ |
| GitHub polling | events/github/ |
| Jira polling | events/jira/ |
| Pipeline orchestration | app/ (PipelineOrchestrator, TaskExecutionService, etc.) |
| UI page or component | ui/src/pages/ or ui/src/components/ |
| API client functions | ui/src/config/api.ts |
| Database migration | app/src/main/resources/db/migration/ |
Coding Conventions
Java (Backend)
- Follow existing Quarkus patterns:
@ApplicationScoped,@Inject,@ConfigProperty,@Scheduled - Use Panache active record for entities (no separate DAO/repository layer)
- Use builders for configuration objects (
AiEngineConfig.Builder, etc.) - Async work returns
CompletableFuture - Keep transactional boundaries small — one
@Transactionalmethod per database operation
TypeScript (Frontend)
- Code is formatted and linted with Biome
- Run
npm run lintbefore committing - Use PatternFly 6 components — don't introduce other UI libraries
- API calls go in
ui/src/config/api.ts - Pages go in
ui/src/pages/, reusable components inui/src/components/
Commit Message Format
Use conventional commits:
| Prefix | Usage |
|---|---|
feat: |
New feature |
fix: |
Bug fix |
docs: |
Documentation only |
refactor: |
Code restructuring without behavior change |
test: |
Adding or updating tests |
chore: |
Dependencies, tooling, CI |
Examples:
feat: add Jira event source polling
fix: resolve timeout in Claude Code subprocess
docs: add extending-axiom developer guide
Pull Request Workflow
- Create a branch from
main: - Make your changes following the conventions above
- Test locally:
mvn test— run backend unit testsnpm run lint— check frontend code quality./dev.sh— verify the change works end-to-end- Commit with a conventional commit message
- Push and open a pull request against
main - Describe what the PR does and why, and reference related issues (e.g. "Fixes #42")
PR Guidelines
- Keep PRs focused on a single feature or fix
- Update documentation if the change affects user-facing behavior
- Ensure CI checks pass (build, lint)
- Be responsive to review feedback
All submissions require code review before merging.
Testing
Unit Tests
Standard Maven tests — run with mvn test from the project root or a specific module
directory.
Integration Tests
Some tests require a running AI engine CLI. These are gated behind an environment variable:
This requires the claude CLI on your PATH and a valid ANTHROPIC_API_KEY.
Frontend Linting
Documentation
The documentation site uses MkDocs with the Material for MkDocs theme.
Local Preview
This starts a local server at http://localhost:8000 with live reload.
Adding a Page
- Create a Markdown file in the appropriate
docs/subdirectory - Add a nav entry in
mkdocs.yml - Verify the build:
python3 -m mkdocs build --strict