Knowledge Hub
Comprehensive guides and references for the OpenFrame platform
OpenFrame Gen1 is Here · Our AI platform for autonomous IT is out of beta.
Comprehensive guides and references for the OpenFrame platform
Thank you for contributing to OpenFrame OSS Tenant! This guide covers code style, branch naming, the pull request process, commit message format, and the review checklist.
Important: OpenFrame OSS Tenant does not use GitHub Issues or GitHub Discussions. All development discussions, bug reports, and feature requests are handled in the OpenMSP Slack community.
The codebase follows standard Java conventions with Lombok for boilerplate reduction.
Key conventions:
@Slf4j for logging (via Lombok)@Builder, @Data, @Value annotations appropriately*Service, *Repository, *Controller, *DataFetcherPackage structure:
com.openframe.<service>.
├── config/ # Spring configuration classes
├── controller/ # REST controllers
├── datafetcher/ # GraphQL DGS data fetchers
├── dataloader/ # GraphQL DGS data loaders
├── dto/ # Data transfer objects
├── exception/ # Custom exceptions and handlers
├── mapper/ # MapStruct or manual mappers
└── service/ # Business logic services
Formatting: The Java codebase follows the default IntelliJ IDEA Java formatting. No external formatter is enforced via CI currently; use IntelliJ's built-in formatter.
Follow standard Rust conventions as enforced by rustfmt and clippy.
# Format
cargo fmt
# Lint
cargo clippy -- -D warnings
# Both before committing
cargo fmt && cargo clippy -- -D warnings
Naming conventions:
snake_casePascalCaseSCREAMING_SNAKE_CASEsnake_caseThe project uses Biome for both formatting and linting (replaces ESLint + Prettier).
cd clients/openframe-chat
# Format and lint check
npx biome check .
# Auto-fix
npx biome check --write .
Conventions:
PascalCase filenames and function namesuse prefix (e.g., useChat, useChatMessages)chatApiService.ts)PascalCaseUse descriptive branch names that reflect the purpose of the change:
# Feature branches
feat/add-script-scheduling-api
feat/openframe-chat-approval-flow
# Bug fixes
fix/agent-token-refresh-race-condition
fix/tenant-isolation-in-device-query
# Refactoring
refactor/extract-nats-publisher-interface
# Documentation
docs/update-architecture-diagram
# Chores / maintenance
chore/upgrade-spring-boot-3.3.1
chore/update-openframe-libs-5.65.0
Format: <type>/<short-description-in-kebab-case>
| Type | When to Use |
|---|---|
feat |
New feature or capability |
fix |
Bug fix |
refactor |
Code restructuring without behavior change |
docs |
Documentation updates |
chore |
Dependency updates, CI, tooling |
test |
Adding or fixing tests |
perf |
Performance improvements |
OpenFrame OSS Tenant uses Conventional Commits format:
<type>(<scope>): <short summary>
[optional body]
[optional footer(s)]
Examples:
feat(api): add script schedule assignment endpoint
Adds GraphQL mutation for assigning scripts to device groups with
configurable cron triggers. Validates against existing schedule conflicts.
Closes #123
fix(openframe-client): prevent token refresh during shutdown
The token refresh run manager now checks the shutdown flag before
scheduling the next refresh to avoid errors during graceful shutdown.
chore(deps): upgrade openframe-libs to 5.65.0
Types:
| Type | Description |
|---|---|
feat |
New feature |
fix |
Bug fix |
refactor |
Code refactoring |
docs |
Documentation only |
test |
Tests only |
chore |
Build, CI, dependencies |
perf |
Performance improvement |
style |
Formatting only (no logic change) |
Scope examples: api, gateway, auth, openframe-client, openframe-chat, stream, management
mvn clean install -DskipTests (for Java) or cargo build (for Rust) or npm run build (for TypeScript)mvn test or cargo test or npx tsc --noEmitcargo fmt && cargo clippy (Rust) or npx biome check --write . (TypeScript)A good PR description includes:
Template:
## Summary
Brief description of what this PR changes and why.
## Changes
- List of specific changes made
## Testing
How to verify this change works correctly.
## Breaking Changes
Any breaking changes and migration path (if applicable).
Use this checklist when reviewing PRs:
@Valid or equivalentapplication.yml, not hardcoded@Async or reactive patterns consistently@ChangeUnit) follow the naming conventioncargo clippy -- -D warnings passes with no warningsanyhow::Result or thiserror appropriatelyArc/Mutex usage is minimal and necessaryWhen updating the shared openframe-libs version (openframe.libs.version in pom.xml):
pom.xmlmvn clean install -DskipTestsmvn testFor the openframe-chat frontend dependencies (package.json):
cd clients/openframe-chat
npm update
npm install
npx tsc --noEmit
npx biome check .
By contributing to OpenFrame OSS Tenant, you agree that your contributions will be licensed under the same license as the project. See the repository for license details.