Thank you for your interest in contributing to Storm! This document provides guidelines and information for contributors.
- Report bugs: Open an issue describing the bug, including steps to reproduce
- Suggest features: Open an issue describing your idea and use case
- Improve documentation: Fix typos, clarify explanations, add examples
- Submit code: Bug fixes, new features, performance improvements
- JDK 21 or later
- Kotlin 2.0 or later (for Kotlin modules)
- Maven 3.9+
# Clone the repository
git clone https://github.com/storm-repo/storm-framework.git
cd storm-framework
# Build all modules
mvn clean installstorm-framework/
├── storm-bom/ # Bill of Materials (BOM) for version management
├── storm-core/ # Core library (no preview dependencies)
├── storm-java21/ # Java 21+ API (uses String Templates)
├── storm-kotlin/ # Kotlin API
├── storm-spring/ # Spring integration (Java)
├── storm-kotlin-spring/ # Spring integration (Kotlin)
├── storm-spring-boot-starter/ # Spring Boot Starter (Java)
├── storm-kotlin-spring-boot-starter/ # Spring Boot Starter (Kotlin)
├── storm-oracle/ # Oracle dialect
├── storm-mysql/ # MySQL dialect
├── storm-mariadb/ # MariaDB dialect
├── storm-postgresql/ # PostgreSQL dialect
├── storm-mssqlserver/ # MS SQL Server dialect
├── storm-jackson/ # Jackson JSON support
├── storm-kotlinx-serialization/ # Kotlinx serialization support
└── storm-metamodel-processor/ # Annotation processor
Storm uses Spotless to enforce consistent code formatting across the project. Formatting is checked automatically in CI and can be enforced locally with a git pre-push hook.
- Java is formatted with Palantir Java Format (4-space indentation)
- Kotlin is formatted with ktlint (Kotlin coding conventions)
mvn spotless:applymvn spotless:checkTo automatically check formatting before every push:
git config core.hooksPath .githooks- Follow existing code style and conventions
- Write clear, self-documenting code
- Keep changes focused; one feature or fix per PR
- Add tests for new functionality
- Use idiomatic Kotlin (data classes, extension functions, etc.)
- Prefer immutability
- Use coroutines for async operations
- Follow Kotlin coding conventions
- Use records for immutable data
- Leverage pattern matching where appropriate
- Follow standard Java naming conventions
- Use
Optionalfor nullable return values
- Write unit tests for new functionality
- Ensure existing tests pass before submitting
- Use meaningful test names that describe the scenario
# Run all tests
mvn test
# Run tests for a specific module
mvn test -pl storm-kotlin- Fork the repository
- Create a branch for your changes
git checkout -b feature/your-feature-name
- Make your changes with clear, atomic commits
- Test your changes thoroughly
- Push to your fork
- Open a Pull Request against the
mainbranch
- Provide a clear description of the changes
- Reference any related issues
- Keep PRs focused and reasonably sized
- Respond to review feedback promptly
Write clear commit messages that explain what and why:
Add support for composite foreign keys
- Handle multiple column FKs in entity mapping
- Update metamodel generator for composite keys
- Add tests for various composite key scenarios
Fixes #123
When reporting bugs, please include:
- Storm version
- Java/Kotlin version
- Database and JDBC driver version
- Minimal code example reproducing the issue
- Expected vs actual behavior
- Stack trace (if applicable)
When suggesting features:
- Describe the use case and problem being solved
- Explain how you envision the feature working
- Consider providing API examples
- Note any alternatives you've considered
- Check the FAQ first
- Open a discussion for general questions
- Open an issue for bugs or feature requests
By contributing to Storm, you agree that your contributions will be licensed under the Apache 2.0 License.