Java Quarkus development guidelines for building cloud-native applications with fast startup, minimal memory footprint, and GraalVM native builds
Install
npx skills add https://github.com/mindrally/skills --skill java-quarkus-developmentSKILL.md
Java Quarkus Development Best Practices
Core Principles
- Write clean, efficient, and well-documented Java code using Quarkus best practices
- Focus on fast startup and minimal memory footprint via GraalVM native builds
- Leverage Quarkus extensions for common functionality
- Design for containerized and serverless deployments
- Follow SOLID principles and microservices architecture patterns
Development Workflow
Quarkus Dev Mode
- Use
quarkus devfor rapid iteration with live reload - Leverage continuous testing during development
- Use Dev UI for debugging and configuration inspection
- Take advantage of Dev Services for local development
Configuration
Type-Safe Configuration
- Use
@ConfigPropertyfor type-safe configuration injection - Group related configs with
@ConfigMappinginterfaces - Validate configuration at startup
- Document configuration properties
Profile-Based Configuration
- Use
%dev,%test,%prodprefixes for environment-specific configs - Override configs via environment variables in production
- Keep sensitive values out of source control
- Use
.envfiles for local development
Dependency Injection
CDI Annotations
- Use
@Injectfor dependency injection - Use
@Namedto qualify implementations - Use
@Singleton,@ApplicationScoped,@RequestScopedappropriately - Prefer constructor injection for required dependencies
Bean Discovery
- Understand Quarkus build-time bean discovery
- Use
@IfBuildProfilefor conditional beans - Avoid reflection-heavy patterns for native builds
REST API Development
RESTEasy Reactive
- Use
@Path,@GET,@POST, etc. for endpoint definitions - Return proper HTTP status codes
- Use
@Validfor input validation - Implement exception mappers for consistent error responses
Reactive Patterns
- Use Mutiny for reactive programming
- Leverage
UniandMultifor async operations - Combine reactive with imperative code where appropriate
Data Access
Hibernate ORM with Panache
- Use Panache for simplified JPA patterns
- Leverage Active Record or Repository patterns
- Use
PanacheEntityfor entities with built-in operations - Implement custom queries with
findandlistmethods
Database Operations
- Use Flyway or Liquibase for migrations
- Configure connection pooling with Agroal
- Use reactive database clients for non-blocking I/O
Testing
JUnit 5 Integration
- Use
@QuarkusTestfor integration tests - Use
@QuarkusIntegrationTestfor native image tests - Leverage test profiles for different configurations
REST Endpoint Testing
- Use rest-assured for endpoint testing
- Test both success and error scenarios
- Verify response bodies and status codes
- Test authentication and authorization
Performance Optimization
Native Image Optimization
- Build native images with GraalVM for production
- Test native builds regularly during development
- Use
@RegisterForReflectionwhen needed - Minimize reflection usage
Memory and Startup
- Monitor memory usage in containers
- Optimize for serverless cold starts
- Use lazy initialization where appropriate
Observability
Health Checks
- Use MicroProfile Health for liveness and readiness probes
- Implement custom health checks for dependencies
- Configure Kubernetes probes based on health endpoints
Metrics
- Use MicroProfile Metrics for application metrics
- Export metrics in Prometheus format
- Add custom metrics for business operations
Distributed Tracing
- Use OpenTracing/OpenTelemetry integration
- Propagate trace context across services
- Configure sampling appropriately for production
Security
- Use Quarkus Security extensions
- Implement authentication with OIDC or JWT
- Configure CORS for web clients
- Validate and sanitize all inputs
- Use HTTPS in production
Containerization
- Use Quarkus container image extensions
- Build multi-stage Dockerfiles for native images
- Configure resource limits appropriately
- Use distroless or minimal base images
Related skills
entra-app-registrationmicrosoft606KGuides Microsoft Entra ID app registration, OAuth 2.0 authentication, and MSAL integration. USE FOR: create app registration, register Azure AD app, configure OAuth, set up authentication, add API permissions, generate service principal, MSAL example, console app auth, Entra ID setup, Azure AD authentication. DO NOT USE FOR: Key Vault secrets (use azure-keyvault-expiration-audit), general Azure resource security guidance.azure-messagingmicrosoft595KTroubleshoot and resolve issues with Azure Messaging SDKs for Event Hubs and Service Bus. Covers connection failures, authentication errors, message processing issues, and SDK configuration problems. WHEN: event hub SDK error, service bus SDK issue, messaging connection failure, AMQP error, event processor host issue, message lock lost, message lock expired, lock renewal, lock renewal batch, send timeout, receiver disconnected, SDK troubleshooting, azure messaging SDK, event hub consumer, servicentra-agent-idmicrosoft328KProvision Microsoft Entra Agent Identity Blueprints, BlueprintPrincipals, and per-instance Agent Identities via Microsoft Graph, and configure OAuth 2.0 token exchange (fmi_path, OBO, cross-tenant) including the Microsoft Entra SDK for AgentID sidecar. USE FOR: Agent Identity Blueprint, BlueprintPrincipal, agent OAuth, fmi_path token exchange, agent OBO, Workload Identity Federation for agents, polyglot agent auth, Microsoft.Identity.Web.AgentIdentities. DO NOT USE FOR: standard Entra app registsupabasesupabase298KUse when doing ANY task involving Supabase. Triggers: Supabase products (Database, Auth, Edge Functions, Realtime, Storage, Vectors, Cron, Queues); client libraries and SSR integrations (supabase-js, @supabase/ssr) in Next.js, React, SvelteKit, Astro, Remix; auth issues (login, logout, sessions, JWT, cookies, getSession, getUser, getClaims, RLS); Supabase CLI or MCP server; schema changes, migrations, declarative schemas, security audits, Postgres extensions (pg_graphql, pg_cron, pg_vector); deb