This guide covers how to clone, set up, and run OpenFrame OSS Tenant services locally for development.
git clone https://github.com/flamingo-stack/openframe-oss-tenant.git
cd openframe-oss-tenantopenframe-oss-tenant/
├── openframe/
│ └── services/
│ ├── openframe-api/ # GraphQL + REST API (port 8080)
│ ├── openframe-gateway/ # Spring Cloud Gateway (port 8081)
│ ├── openframe-authorization-server/ # OAuth2 (port 8082)
│ ├── openframe-external-api/ # Public API (port 8083)
│ ├── openframe-client/ # Agent service (port 8084)
│ ├── openframe-stream/ # Kafka Streams (port 8085)
│ ├── openframe-management/ # Management tasks
│ ├── openframe-config/ # Config Server
│ └── openframe-test/ # E2E test runner
├── clients/
│ └── openframe-client/ # Rust endpoint agent
├── manifests/ # Kubernetes + datasource configs
└── pom.xml # Root Maven POM
# Build all modules, skip tests
mvn clean install -DskipTests
# Build with tests
mvn clean install# Build only the API service and its dependencies
mvn clean install -pl openframe/services/openframe-api -am -DskipTestsEach Spring Boot service can be run from its module directory:
# Start the API service
cd openframe/services/openframe-api
mvn spring-boot:runOr from the root using the module flag:
mvn spring-boot:run -pl openframe/services/openframe-apiTo run the full stack locally, start services in this order (infrastructure first):
- MongoDB, Redis, Kafka, NATS, Cassandra, Pinot (via your container setup)
openframe-config(Spring Cloud Config Server)openframe-authorization-serveropenframe-apiopenframe-client(Spring Boot agent service)openframe-streamopenframe-managementopenframe-gatewayopenframe-external-api
cd clients/openframe-client
# Development build
OPENFRAME_VERSION=0.0.0-dev cargo build
# Enable dev mode for local directories and relaxed TLS
export OPENFRAME_DEV_MODE=1
# Run the agent directly (no system service)
./target/debug/openframe-client run
# Run health checks
./target/debug/openframe-client doctorRust does not have built-in hot reload, but cargo-watch provides file-watching:
# Install cargo-watch
cargo install cargo-watch
# Watch and rebuild on changes
OPENFRAME_VERSION=0.0.0-dev cargo watch -x buildThe setup script moved to openframe-oss-lib with the agent sources; run it from a side-by-side checkout:
bash <openframe-oss-lib>/clients/openframe-client/scripts/setup_dev_init_config.shThis script creates the necessary configuration files in the development directory layout used when OPENFRAME_DEV_MODE=1 is set.
- Open the project in IntelliJ IDEA
- Navigate to the application entry point (e.g.,
ApiApplication.java) - Click the debug icon (🐛) next to
main()or use Run → Debug - Set breakpoints as needed
Remote Debug (attach to running process):
# Start the service with JVM debug options
mvn spring-boot:run \
-pl openframe/services/openframe-api \
-Dspring-boot.run.jvmArguments="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005"Then attach IntelliJ to port 5005 via Run → Attach to Process.
For openframe-client, use the CodeLLDB extension in VS Code:
.vscode/launch.json:
{
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
"request": "launch",
"name": "Debug openframe-client",
"cargo": {
"args": ["build", "--manifest-path", "clients/openframe-client/Cargo.toml"]
},
"args": ["run"],
"env": {
"OPENFRAME_DEV_MODE": "1"
}
}
]
}# Build and tail output
mvn clean install -DskipTests 2>&1 | tee build.logcd clients/openframe-client
cargo cleanEach Spring Boot service exposes a Spring Actuator health endpoint:
# API service health check
curl http://localhost:8080/actuator/health
# Gateway health check
curl http://localhost:8081/actuator/health| Task | Command |
|---|---|
| Build all backend services | mvn clean install -DskipTests |
| Run API service | mvn spring-boot:run -pl openframe/services/openframe-api |
| Build Rust agent | cd clients/openframe-client && OPENFRAME_VERSION=0.0.0-dev cargo build |
| Run Rust agent (dev) | OPENFRAME_DEV_MODE=1 ./target/debug/openframe-client run |