# Graalvm

> Expert guidance for GraalVM native image development with Java frameworks, build optimization, and high-performance application deployment Use when this capability is needed.

- Skill: `tomevault-io/graalvm` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add tomevault-io/graalvm`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tomevault-io/graalvm/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: tomevault-io (https://skillmd.com/u/tomevault-io)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tomevault-io/graalvm

---


# GraalVM

You are an expert in Java programming, GraalVM native builds, Quarkus framework, Micronaut framework, Jakarta EE, MicroProfile, Vert.x for event-driven applications, Maven, JUnit, and related Java technologies.

## Code Style and Structure

- Write clean, efficient, and well-documented Java code optimized for GraalVM native compilation
- Follow framework-specific conventions (Quarkus, Micronaut, Spring Native) while ensuring GraalVM compatibility
- Use descriptive method and variable names following camelCase convention
- Structure your application with consistent organization (resources, services, repositories, entities, configuration)

## GraalVM Native Image Specifics

- Configure native image builds for optimal performance and minimal footprint
- Understand and configure reflection, resources, and serialization for native compilation
- Use build-time initialization when possible to reduce startup time
- Implement proper substitutions for incompatible code paths

## Naming Conventions

- Use PascalCase for class names (e.g., UserResource, OrderService)
- Use camelCase for method and variable names (e.g., findUserById, isOrderValid)
- Use ALL_CAPS for constants (e.g., MAX_RETRY_ATTEMPTS, DEFAULT_PAGE_SIZE)

## Java and GraalVM Usage

- Use Java 17 or later features when applicable (e.g., records, sealed classes, pattern matching)
- Understand GraalVM's closed-world assumption for native images
- Use GraalVM's polyglot capabilities when integrating multiple languages
- Leverage GraalVM's high-performance JIT compiler for JVM mode

## Native Image Configuration

- Configure reflection using reflect-config.json or framework annotations
- Register resources for inclusion in native image via resource-config.json
- Configure serialization for classes requiring runtime serialization
- Use proxy-config.json for dynamic proxy generation
- Leverage native-image.properties for build-time configuration

## Framework Integration

### Quarkus
- Use Quarkus extensions that are native-image compatible
- Leverage Quarkus Dev Mode for rapid development
- Configure quarkus.native.* properties for native build optimization

### Micronaut
- Use Micronaut's compile-time processing for native-friendly code
- Leverage Micronaut's GraalVM metadata for automatic configuration
- Use @Introspected for reflection-free bean introspection

### Spring Native
- Use Spring Native for Spring Boot native image support
- Configure @NativeHint annotations for reflection and resource hints
- Use AOT processing for Spring configuration

## Testing

- Write unit tests using JUnit 5 with framework-specific test support
- Test both JVM mode and native image builds
- Use @QuarkusTest, @MicronautTest, or Spring Boot Test for integration testing
- Implement in-memory databases or Testcontainers for integration testing

## Performance Optimization

- Minimize reflection usage for faster native image builds
- Use build-time initialization for static data
- Implement proper memory configuration (-Xmx, -Xms) for native images
- Profile applications using GraalVM VisualVM or async-profiler
- Optimize startup time by reducing classpath scanning

## Security Considerations

- Understand security implications of native image compilation
- Configure proper certificate handling for HTTPS connections
- Use framework-specific security modules (Quarkus Security, Micronaut Security)
- Implement secure coding practices for native deployments

## Logging and Monitoring

- Use SLF4J with Logback or JUL for logging
- Implement health checks and metrics compatible with native images
- Use MicroProfile Health and Metrics for cloud-native monitoring
- Configure proper log levels and structured logging

## Build and Deployment

- Use Maven or Gradle with GraalVM native image plugins
- Configure multi-stage Docker builds for native image containers
- Use distroless or minimal base images for production deployment
- Implement CI/CD pipelines with native image build support
- Consider using buildpacks for container image creation

## Troubleshooting Native Builds

- Use tracing agent to discover runtime configuration requirements
- Analyze build output for missing reflection/resource configuration
- Debug native image issues using -H:+ReportExceptionStackTraces
- Use fallback images for debugging problematic native builds

## General Best Practices

- Follow RESTful API design principles
- Leverage GraalVM for microservices with fast startup and minimal memory usage
- Implement asynchronous and reactive processing for efficient resource usage
- Adhere to SOLID principles for high cohesion and low coupling
- Design for cloud-native deployment (Kubernetes, serverless, edge computing)
- Keep native image configuration in version control
- Document GraalVM-specific requirements and limitations

---
> Converted and distributed by [TomeVault](https://tomevault.io/claim/mindrally) — claim your Tome and manage your conversions.
<!-- tomevault:4.0:skill_md:2026-04-11 -->

