A modern web-based user interface for Bob CI/CD built with Helidon Nima and HTMX.
- Real-time Pipeline Monitoring: Auto-refreshing pipeline list using HTMX
- Server-Side Rendering: No complex JavaScript frameworks, just clean HTML
- OpenAPI Integration: Client validates against Bob's OpenAPI specification
- Virtual Threads: Built on Helidon Nima with Java 21's Project Loom for efficient concurrency
- Modern UI: Beautiful, responsive interface built with DaisyUI and Tailwind CSS
- Java 21+ (required for virtual threads)
- Maven 3.8+
- Bob CI/CD server running (default: http://localhost:7777)
This will start:
- Bob API server (port 7777)
- RabbitMQ message queue
- etcd distributed storage
- Supporting services (runner, artifact store, etc.)
Use JDK Version 21 or higher
mvn clean packagejava -jar target/muck-1.0.0.jarOr use Maven directly:
mvn exec:java -Dexec.mainClass=muck.MainOpen your browser to:
http://localhost:7999
Edit src/main/resources/application.yaml to configure:
server:
port: 7999 # Web server port
host: "0.0.0.0" # Bind address
dev-mode: false # auto reload freemarker templates
locale: en_us # set locale for date formatting
bob:
url: "http://localhost:7777" # Bob API URL
logger: "logger-local" # Default LoggerCurrently the apiserver expects that the logger is passed on every run. That means a UI needs offer the ability to select a logger for each run and maybe set defaults or cache a decision. The current discussion about the logger is here.
- Helidon Nima: Modern Java web framework with virtual threads
- HTMX: High-power tools for HTML
- DaisyUI: Tailwind CSS component library
- Tailwind CSS: Utility-first CSS framework
- FreeMarker: Template engine
- OpenAPI: API specification and validation
- Java 21: Virtual threads (Project Loom)
mvn testThis project uses modern Java 21+ syntax. See JAVA_STYLE.md for detailed guidelines including:
- Type inference with
var - Records for data classes
- Switch expressions
- Text blocks
- Streams and functional programming
- Code organization and formatting
Quick summary:
- Use
varwhere type is obvious - Prefer records over traditional classes for data
- Use switch expressions over statements
- Leverage Java 21+ features
- See
.editorconfigfor formatting rules
Verify Java 21+:
java -versionShould show version 21 or higher.
Muck like Bob is Free and Open Source and always will be. Licensed fully under MIT
Contributions welcome! Please ensure:
- Code compiles with Java 21
- Templates are valid FreeMarker
- HTMX attributes are properly used
- OpenAPI spec validation passes
- Tests run