Quarkus Super Heroes
A sample application demonstrating Quarkus features and best practices through a microservices-based superhero battle system.
A sample application demonstrating Quarkus features and best practices. Superheroes fight against supervillains across multiple microservices communicating via REST, gRPC, and Kafka.
Architecture
The application consists of several microservices, communicating either synchronously via REST or asynchronously using Kafka. The base JVM version for all the applications is Java 25.

Services
| Service | Port | Type | Database | Language |
|---|---|---|---|---|
| Hero REST API | 8083 | REST (reactive) | PostgreSQL | Java |
| Villain REST API | 8084 | REST (blocking) | PostgreSQL | Java |
| Fight REST API | 8082 | REST (reactive) | MongoDB | Java |
| Narration REST API | 8087 | REST (blocking) | — (OpenAI) | Java |
| Location gRPC API | 8089 | gRPC (blocking) | MariaDB | Kotlin |
| Event Statistics | 8085 | Kafka consumer + WebSocket | — | Java |
| Battle UI | 8080 | React (via Quinoa) | — | TypeScript |
Demo
Communication Flow
- UI → rest-fights (REST)
- rest-fights → rest-heroes, rest-villains, rest-narration (REST via SmallRye Stork)
- rest-fights → grpc-locations (gRPC)
- rest-fights → Kafka (Avro messages via Apicurio Registry)
- event-statistics ← Kafka consumer
Observability
All services export traces, metrics, and logs via OpenTelemetry (OTLP) to the Grafana LGTM stack (Loki, Grafana, Tempo, Prometheus).