What's changed
JHipster 9.2.0 is a polish release for v9. It focuses on finishing the move to Vitest on the frontend, tightening generated backend security and validation, fixing a few high-impact generation bugs, and continuing the TypeScript and template cleanup across the generator.
ð Highlights
ð§Đ Templates and internal improvements
- Our 3000+ EJS templates are now checked and formatted by eslint
- Improved blueprint generation and internals with stronger generate-blueprint typing and compatibility, reworked bootstrap generator composition, and MemFsEditorFile integration
ð Spring Boot and security
- Upgraded to Spring Boot 4.0.7 and improved generated backend hardening with a safer AccountResource
- An application generation fix restores initial project generation without requiring
--forcein the affected scenarios - Reactive generated entities avoid negative
BigDecimalscales (#33751) and Neo4j samples add BlockHound customization (#33816)
ðĨïļ Frontend
- Vitest is now the only generated frontend test framework, with Jest removal from client choices and Angular cleanup of leftover Jest conditionals
- Generated frontend behavior is more reliable across frameworks with PUT support for entities without autogenerated IDs, a React entity creation fix, and a Vue Boolean field rendering fix
- Vue webpack microservice samples now use Vite, and the selected auth option is preserved when generating client apps with
--skip-server
ðĶ Toolchain updates
- Build tooling moved to Node 24.18.0, Gradle 9.6.1, and webpack-dev-server 6
- Supporting dependencies moved to Spring Cloud 2025.1.2, Prettier 3.9.3, GraalVM reachability metadata 1.0.5, and ngx-translate 18
ð By the numbers
- 515 closed issues and pull requests since 9.1.0 (full list)
- 7 human contributors helped ship this release
- Toolchain updates include Spring Boot 4.0.7, Node.js 24.18.0, Gradle 9.6.1, and webpack-dev-server 6
ð§ More changes
ð§ Core generator, testing, and code quality
- Sonar: Replace this fixed wait with a synchronization on an observable condition (#34033) @qmonmert
- chore(deps): update dependency graalvm-reachability-metadata to v1.0.5 (#34026) @renovate[bot]
- Simplify EJS templates (#33973) @qmonmert
- ESLint: enable and configure
@typescript-eslint/no-unused-vars(#34004) @qmonmert - chore(deps): update dependency graalvm-reachability-metadata to v1.0.4 (#33983) @renovate[bot]
- Revert "ci: switch dev-server test to oauth2" (#33971) @mshima
- Refactor EJS templates (#33932) @qmonmert
- Remove non-existent types folder from tsconfig.spec.json (#33930) @qmonmert
- generate-blueprint: add Generator type to JHipsterCommandDefinition (#33927) @mshima
- generate-blueprint: pass JHI_JWT_SECRET_KEY to improve compare-sample (#33926) @mshima
- Add regression test for invalid Checkstyle and Spotless config (#33921) @qmonmert
- Clean up the Checkstyle configuration file (#33920) @mshima
- generate-blueprint: keep TypeScript compatibility for JavaScript blueprints (#33925) @mshima
- generate-blueprint: only run tsc in TypeScript blueprints (#33924) @mshima
- Fix application generation (#33507) @qmonmert
- Sonar: Prefer a more specific assertion instead of this generic one (#33899) @qmonmert
- Sonar: Add at least one assertion to this test case (#33354) @qmonmert
- Sonar: Remove this forced interaction and wait for the element to be actionable instead (#33896) @qmonmert
- Update ESLint EJS ignored rules (#33886) @mshima
- Add gold sponsors section to the README (#33895) @jdubois
- chore(deps): update node.js to v24.18.0 (#33880) @renovate[bot]
- Java: simplify some EJS templates (#33856) @qmonmert
- Java: simplify some EJS templates (#33855) @qmonmert
- Sonar: Only one method in a class should be annotated @beforeeach (#33830) @qmonmert
- Sonar: Use assertDoesNotThrow() instead of try/catch and fail() in the catch block (#33826) @qmonmert
- Sonar: Do not use the system clock in tests (#33825) @qmonmert
- chore(deps): update node.js to v24.17.0 (#33824) @renovate[bot]
- Neo4j: add BlockHound customization (#33816) @mshima
- cypress: replace cy.url with cy.location('pathname') (#33804) @mshima
- cypress: replace cy.url with cy.location('pathname') (#33802) @mshima
- ci: add permissions to github workflows (#33801) @mshima
- jdl: Inefficient regular expression (#33799) @mshima
- from-issue: Inefficient regular expression (#33798) @mshima
- Add angular-eslint to angular group (#33784) @mshima
- Improve AccountResource security, validation, and exception mapping (#33671) @Swarajbhoite
- Sonar: Only one method in a class should be annotated @beforeeach (#33758) @qmonmert
- fix(reactive): avoid negative BigDecimal scale in generated entities (#33751) @This-Is-Ram
- chore(deps): update dependency graalvm-reachability-metadata to v1.0.3 (#33713) @renovate[bot]
- Vue: switch webpack microservice sample from webpack to Vite (#33660) @mshima
- fix: rename files (#33692) @qmonmert
- chore(deps): update dependency sonarqube-community-branch-plugin to v26.5.0 (#33634) @renovate[bot]
- Improve JSDoc (#33615) @qmonmert
- Remove the unused
.gitentry from.gitignore(#33572) @qmonmert - Post release (#33575) @qmonmert
ðĨïļ Frontend
- Angular: fix Prettier overrides path when the root is not empty (#34032) @mshima
- fix(angular): always use PUT API for entities without autogenerated IDs (#34013) @Jatti045
- React/Sonar: complete assertions so
expectactually checks something (#34047) @qmonmert - Sonar: prefer
node:osoveros(#34046) @qmonmert - React: cannot create entity (#34029) @qmonmert
- Angular: disable watch mode for
npm testby default to match CI behavior (#34031) @mshima - Drop Jest from
clientTestFrameworkchoices and default to Vitest (#34017) @qmonmert - React: remove old and unnecessary SCSS (#34016) @qmonmert
- React: remove unnecessary
as anycasts (#34015) @qmonmert - React: remove unnecessary assertions (#34014) @qmonmert
- Angular: remove leftover Jest conditionals now that Vitest is the only test framework (#34006) @qmonmert
- Angular: bump minor dependencies (#33987) @mshima
- React/Vue: bump webpack-dev-server to v6.0.0 (#34007) @qmonmert
- ESLint: enable @stylistic/max-statements-per-line (#34003) @qmonmert
- Fix: bump webpack from 5.106.2 to 5.108.3 in /generators/angular/resources (#33977) @qmonmert
- [React] Remove @module-federation/utilities dependency (#33982) @qmonmert
- Update Prettier from 3.8.4 to 3.9.3 (#33972) @qmonmert
- Add missing license headers (#33931) @qmonmert
- ci: switch dev-server test to oauth2 (#28316) @mshima
- Bump ngx-translate to v18 (#33831) @mshima
- Sonar: Prefer a more specific assertion instead of this generic one (#33894) @qmonmert
- Sonar: Prefer a more specific assertion instead of this generic one (#33877) @qmonmert
- Sonar: Rename this test title to make it unique within the suite (#33875) @qmonmert
- Angular: simplify some EJS templates (#33842) @qmonmert
- Sonar: Add an id attribute to this input field and associate it with a label (#33837) @qmonmert
- Sonar: Associate a valid label to this input field (#33836) @qmonmert
- fix(common): persist auth option when
--skip-serveris used (#33631) @bunnysunny24 - internal: rework bootstrap generators composing (#33688) @mshima
- workspaces: copy overrides from workspaces (#33807) @mshima
- [Vue] Boolean fields not rendered correctly in entity create/update forms (#33759) @qmonmert
- Angular: move Swagger gitignore to the Angular generator (#33712) @mshima
- Simplify EJS templates (#33687) @qmonmert
- Simplify EJS templates (#33672) @qmonmert
- Remove empty block (#33653) @qmonmert
- [Angular] Remove TranslationModule (#33611) @qmonmert
- Replace/remove
anytype (#33613) @qmonmert - [Angular] Fix the Angular bump (#33591) @qmonmert
ðū JDL/Internals/Blueprints
- Drop Jest from
clientTestFrameworkchoices and default to Vitest (#34017) @qmonmert - Add missing license headers (#33931) @qmonmert
- use MemFsEditorFile instead of vinyl's File (#33922) @mshima
- fix(common): persist auth option when
--skip-serveris used (#33631) @bunnysunny24 - internal: rework bootstrap generators composing (#33688) @mshima
- move baseName and creationTimestamp to project-name generator (#33808) @mshima
- Replace/remove
anytype (#33613) @qmonmert
ðŠķ Maven
ð Gradle
- Update Prettier from 3.8.4 to 3.9.3 (#33972) @qmonmert
- Add missing license headers (#33931) @qmonmert
- chore(deps): update gradle to v9.6.1 (#33915) @renovate[bot]
- chore(deps): update gradle to v9.6.0 (#33828) @renovate[bot]
- Fix: bump org.springframework.cloud:spring-cloud-dependencies from 2025.1.1 to 2025.1.2 (#33760) @qmonmert
ðĶ Dependency updates
- internal: do not copy IDE-generated resources (#34030) @mshima
- Angular: bump minor dependencies (#33987) @mshima
- React/Vue: bump webpack-dev-server to v6.0.0 (#34007) @qmonmert
- Bump transitional dependencies (#34005) @github-actions[bot]
- Remove redundant lib/jdl path from update-snapshots script (#33994) @qmonmert
- Fix: bump webpack from 5.106.2 to 5.108.3 in /generators/angular/resources (#33977) @qmonmert
- Remove empty email property (#33992) @qmonmert
- Align NPM version with Node version (#33993) @qmonmert
- [React] Remove @module-federation/utilities dependency (#33982) @qmonmert
- Update Prettier from 3.8.4 to 3.9.3 (#33972) @qmonmert
- Fix the copy-types script (#33928) @mshima
- Remove the unused
@types/npmcli__arboristdependency (#33917) @qmonmert - Bump transitional dependencies (#33918) @github-actions[bot]
- Bump
eslint-plugin-nfrom 18.1.0 to 18.2.1 (#33913) @qmonmert - Bump ngx-translate to v18 (#33831) @mshima
- Finish the ESLint 10 bump (#32244) @qmonmert
- Bump transitional dependencies (#33835) @github-actions[bot]
- Bump transitional dependencies (#33756) @github-actions[bot]
- Update Spring Boot to v4.0.7 (#33753) @github-actions[bot]
- Fix: bump yeoman-test from 11.5.2 to 11.5.3 (#33754) @qmonmert
- Update Spring Boot to v3.5.15 (#33752) @github-actions[bot]
- Bump transitional dependencies (#33690) @github-actions[bot]
- [Angular] Fix bump Angular (#33591) @qmonmert
- Bump transitional dependencies (#33609) @github-actions[bot]
- Apply new ESLint EJS rules (#33573) @mshima
ðĶ Install
npm install -g generator-jhipster@9.2.0Refer to the upgrade instructions for upgrading existing applications.
ð Contributors
Thanks to everyone who contributed to this release!