Wim Deblauwe
@wimdeblauwe.com
Software Engineer. Writes mostly Java & Spring.
Author of "Taming Thymeleaf" and "Modern frontends with htmx".
Blogs at http://wimdeblauwe.com.
YouTube: https://youtube.com/@WimDeblauwe
Author of "Taming Thymeleaf" and "Modern frontends with htmx".
Blogs at http://wimdeblauwe.com.
YouTube: https://youtube.com/@WimDeblauwe
ttcli 1.10.0 now supports generating Spring Boot 4 projects with Thymeleaf or JTE as your templating engine of choice.
The generated project is automatically configured with the correct versions of libraries to quickly start your next server-side rendering project.
See github.com/wimdeblauwe/...
The generated project is automatically configured with the correct versions of libraries to quickly start your next server-side rendering project.
See github.com/wimdeblauwe/...
Release 1.10.0 · wimdeblauwe/ttcli
Changelog
🚀 Features
82347dc feat: Support Spring Boot 4 for project generation
🛠 Build
219b741 build: Use htmx 2.0.8
b37ee68 build: Use Bootstrap 5.3.8
e1e4ba0 build: Use AlpineJS 3.15.1
96d07...
github.com
November 8, 2025 at 12:46 PM
ttcli 1.10.0 now supports generating Spring Boot 4 projects with Thymeleaf or JTE as your templating engine of choice.
The generated project is automatically configured with the correct versions of libraries to quickly start your next server-side rendering project.
See github.com/wimdeblauwe/...
The generated project is automatically configured with the correct versions of libraries to quickly start your next server-side rendering project.
See github.com/wimdeblauwe/...
vite-spring-boot 2.0.0-rc.1 has been released for Spring Boot 4 github.com/wimdeblauwe/...
Release 2.0.0-rc.1 · wimdeblauwe/vite-spring-boot
What's Changed
build: Replace nexus-staging-maven-plugin with central-publishing-maven-plugin by @wimdeblauwe in #15
Migrate to spring boot 4 and jackson 3. Closes gh-16. by @aspan in #17
build: U...
github.com
November 8, 2025 at 9:45 AM
vite-spring-boot 2.0.0-rc.1 has been released for Spring Boot 4 github.com/wimdeblauwe/...
Upgraded 2 of my open source libraries for Spring Boot 4.0.0-RC1:
* error-handling-spring-boot-starter: github.com/wimdeblauwe/...
* htmx-spring-boot: github.com/wimdeblauwe/...
* error-handling-spring-boot-starter: github.com/wimdeblauwe/...
* htmx-spring-boot: github.com/wimdeblauwe/...
October 29, 2025 at 5:36 PM
Upgraded 2 of my open source libraries for Spring Boot 4.0.0-RC1:
* error-handling-spring-boot-starter: github.com/wimdeblauwe/...
* htmx-spring-boot: github.com/wimdeblauwe/...
* error-handling-spring-boot-starter: github.com/wimdeblauwe/...
* htmx-spring-boot: github.com/wimdeblauwe/...
I just released vite-plugin-spring-boot 1.0.0. It is identical to the 0.7.0, except for the Vite 7 support that has been added. See github.com/wimdeblauwe/...
New projects generated using ttlci will pick it up automatically.
New projects generated using ttlci will pick it up automatically.
Release 1.0.0 · wimdeblauwe/vite-plugin-spring-boot
What's Changed
Update package.json to support Vite 7.0 by @semyonsh in #4
New Contributors
@semyonsh made their first contribution in #4
Full Changelog: 0.7.0...1.0.0
github.com
September 30, 2025 at 7:42 PM
I just released vite-plugin-spring-boot 1.0.0. It is identical to the 0.7.0, except for the Vite 7 support that has been added. See github.com/wimdeblauwe/...
New projects generated using ttlci will pick it up automatically.
New projects generated using ttlci will pick it up automatically.
📝 Just published the final post in my Spring Boot series: "How I document production-ready Spring Boot applications"
🚀 Learn how to:
* Keep docs in sync with code using AsciiDoc
* Auto-generate REST API docs from tests
* Create living architecture documentation
www.wimdeblauwe.com/blog/2025/09...
🚀 Learn how to:
* Keep docs in sync with code using AsciiDoc
* Auto-generate REST API docs from tests
* Create living architecture documentation
www.wimdeblauwe.com/blog/2025/09...
How I document production-ready Spring Boot applications
This blog post explains how I like to document a Spring Boot application I am writing.
It is the third and last post in my series on writing production-ready Spring Boot applications.
See How I write ...
www.wimdeblauwe.com
September 8, 2025 at 6:03 PM
📝 Just published the final post in my Spring Boot series: "How I document production-ready Spring Boot applications"
🚀 Learn how to:
* Keep docs in sync with code using AsciiDoc
* Auto-generate REST API docs from tests
* Create living architecture documentation
www.wimdeblauwe.com/blog/2025/09...
🚀 Learn how to:
* Keep docs in sync with code using AsciiDoc
* Auto-generate REST API docs from tests
* Create living architecture documentation
www.wimdeblauwe.com/blog/2025/09...
tedpatrick.substack.com/p/html-is-un...
"Having worked with countless JS and server frameworks for web development, I found this model to be the best I have ever experienced. Our team was able to deliver features productively, and our team velocity was about double what I expected."
"Having worked with countless JS and server frameworks for web development, I found this model to be the best I have ever experienced. Our team was able to deliver features productively, and our team velocity was about double what I expected."
HTML is Underrated
The web is a fantastic platform, but its power is not evenly distributed.
tedpatrick.substack.com
August 7, 2025 at 3:21 PM
tedpatrick.substack.com/p/html-is-un...
"Having worked with countless JS and server frameworks for web development, I found this model to be the best I have ever experienced. Our team was able to deliver features productively, and our team velocity was about double what I expected."
"Having worked with countless JS and server frameworks for web development, I found this model to be the best I have ever experienced. Our team was able to deliver features productively, and our team velocity was about double what I expected."
📝 Just published: How I test production-ready Spring Boot applications
- Use case tests with in-memory repositories (no mocking!)
- Repository tests with Testcontainers
- Controller tests
- Integration tests
- Architecture tests
Read the full guide: www.wimdeblauwe.com/blog/2025/07...
- Use case tests with in-memory repositories (no mocking!)
- Repository tests with Testcontainers
- Controller tests
- Integration tests
- Architecture tests
Read the full guide: www.wimdeblauwe.com/blog/2025/07...
How I test production-ready Spring Boot applications
My previous blog post How I write production-ready Spring Boot applications explained how I like to write and structure my production code in Spring Boot applications.
This blog post will further expl...
www.wimdeblauwe.com
July 31, 2025 at 8:32 PM
📝 Just published: How I test production-ready Spring Boot applications
- Use case tests with in-memory repositories (no mocking!)
- Repository tests with Testcontainers
- Controller tests
- Integration tests
- Architecture tests
Read the full guide: www.wimdeblauwe.com/blog/2025/07...
- Use case tests with in-memory repositories (no mocking!)
- Repository tests with Testcontainers
- Controller tests
- Integration tests
- Architecture tests
Read the full guide: www.wimdeblauwe.com/blog/2025/07...
Proficiat Belgian Cats! 🏀
June 29, 2025 at 7:18 PM
Proficiat Belgian Cats! 🏀
🚀 New blog post: How I write production-ready Spring Boot applications
After 25+ years of Java development, here's my approach to:
- DDD-based package structure
- Clean use case architecture
- Why I avoid Hexagonal Architecture
Full breakdown: www.wimdeblauwe.com/blog/2025/06...
After 25+ years of Java development, here's my approach to:
- DDD-based package structure
- Clean use case architecture
- Why I avoid Hexagonal Architecture
Full breakdown: www.wimdeblauwe.com/blog/2025/06...
How I write production-ready Spring Boot applications
This blog post will explain how I currently write Spring Boot applications.
I have been writing Java for over 25 years, and most of that involved Spring and its ecosystem.
I will talk about how I arch...
www.wimdeblauwe.com
June 24, 2025 at 2:02 PM
🚀 New blog post: How I write production-ready Spring Boot applications
After 25+ years of Java development, here's my approach to:
- DDD-based package structure
- Clean use case architecture
- Why I avoid Hexagonal Architecture
Full breakdown: www.wimdeblauwe.com/blog/2025/06...
After 25+ years of Java development, here's my approach to:
- DDD-based package structure
- Clean use case architecture
- Why I avoid Hexagonal Architecture
Full breakdown: www.wimdeblauwe.com/blog/2025/06...
Rather use JTE as template engine instead of Thymeleaf with Spring Boot? ttcli 1.9.0 can now generate such a project to get live reload out of the box. Just save and the browser reloads. See github.com/wimdeblauwe/...
Release 1.9.0 · wimdeblauwe/ttcli
Changelog
🚀 Features
765acc8 feat: JTE support - Configure Vite so that live reload of JTE templates works
1842385 feat: JTE support - insert correct CSS and JS links depending on template type
f9...
github.com
June 4, 2025 at 6:54 PM
Rather use JTE as template engine instead of Thymeleaf with Spring Boot? ttcli 1.9.0 can now generate such a project to get live reload out of the box. Just save and the browser reloads. See github.com/wimdeblauwe/...
Lot's of video's already online from the @springio.net conference, see www.youtube.com/@SpringIOCon... #spring #java
Spring I/O
Spring I/O conference in Barcelona
www.youtube.com
May 28, 2025 at 4:02 PM
Lot's of video's already online from the @springio.net conference, see www.youtube.com/@SpringIOCon... #spring #java
vite-spring-boot 0.9.0 released with support for JTE as an alternative to Thymeleaf as template engine for Spring Boot so you can have all the Vite niceness for your CSS and JavaScriipt bits.
github.com/wimdeblauwe/...
github.com/wimdeblauwe/...
Release 0.9.0 · wimdeblauwe/vite-spring-boot
What's Changed
Support for Java Template Engine by @pbaris in #11
build: Update to Spring Boot 3.3.12 by @wimdeblauwe in #12
New Contributors
@pbaris made their first contribution in #11
Full C...
github.com
May 26, 2025 at 6:10 PM
vite-spring-boot 0.9.0 released with support for JTE as an alternative to Thymeleaf as template engine for Spring Boot so you can have all the Vite niceness for your CSS and JavaScriipt bits.
github.com/wimdeblauwe/...
github.com/wimdeblauwe/...
vite-spring-boot 0.8.0 released: github.com/wimdeblauwe/...
Release 0.8.0 · wimdeblauwe/vite-spring-boot
What's Changed
feat: Allow to specify an optional context path for dev and build modes by @wimdeblauwe in #10
Full Changelog: 0.7.0...0.8.0
github.com
May 16, 2025 at 6:51 AM
vite-spring-boot 0.8.0 released: github.com/wimdeblauwe/...
Just published: "Combine Testcontainers and Spring Boot with Multiple Containers" 🐳 + 🍃
www.wimdeblauwe.com/blog/2025/05...
#SpringBoot #Testcontainers #Java #Testing
www.wimdeblauwe.com/blog/2025/05...
#SpringBoot #Testcontainers #Java #Testing
Combine Testcontainers and Spring Boot with multiple containers
Testcontainers is a great technology to run Docker containers of dependencies like a database or a messaging middleware like ActiveMq or Kafka.
It might not immediately be obvious how to combine JUnit...
www.wimdeblauwe.com
May 14, 2025 at 6:49 PM
Just published: "Combine Testcontainers and Spring Boot with Multiple Containers" 🐳 + 🍃
www.wimdeblauwe.com/blog/2025/05...
#SpringBoot #Testcontainers #Java #Testing
www.wimdeblauwe.com/blog/2025/05...
#SpringBoot #Testcontainers #Java #Testing
What is currently the best practice to combine Testcontainers and Spring Boot to ensure containers are only started once for the whole test suite?
I have always used a `ApplicationContextInitializer` with static block that starts the container. A trick I have learned from Philip Riecks.
I have always used a `ApplicationContextInitializer` with static block that starts the container. A trick I have learned from Philip Riecks.
May 12, 2025 at 8:07 AM
What is currently the best practice to combine Testcontainers and Spring Boot to ensure containers are only started once for the whole test suite?
I have always used a `ApplicationContextInitializer` with static block that starts the container. A trick I have learned from Philip Riecks.
I have always used a `ApplicationContextInitializer` with static block that starts the container. A trick I have learned from Philip Riecks.
Thinking about writing down my favorite way to architect my Spring Boot apps. Just have to decide if I will name it after a shape or a vegetable.
May 8, 2025 at 7:39 PM
Thinking about writing down my favorite way to architect my Spring Boot apps. Just have to decide if I will name it after a shape or a vegetable.
New release of error-handling-spring-boot-starter -> github.com/wimdeblauwe/...
It now uses the response status from RestClientResponseException if that exception is thrown like it already did for ResponseStatusException.
It now uses the response status from RestClientResponseException if that exception is thrown like it already did for ResponseStatusException.
Release 4.6.0 · wimdeblauwe/error-handling-spring-boot-starter
What's Changed
adding openapi & swagger usage documentation by @vova-volvo in #109
docs: Document the need to manually include custom handlers when runn… by @wimdeblauwe in #110
build: update to S...
github.com
April 24, 2025 at 2:15 PM
New release of error-handling-spring-boot-starter -> github.com/wimdeblauwe/...
It now uses the response status from RestClientResponseException if that exception is thrown like it already did for ResponseStatusException.
It now uses the response status from RestClientResponseException if that exception is thrown like it already did for ResponseStatusException.
Reposted by Wim Deblauwe
Spring Framework 6.2 introduced MockMvcTester to support writing AssertJ style assertions.
blog.jetbrains.com/idea/2025/04...
In this article I have covered testing:
✨REST API JSON response
✨API exception handling
✨Thymeleaf view rendering
✨URL redirects & flash attributes
✨Model validation errors
blog.jetbrains.com/idea/2025/04...
In this article I have covered testing:
✨REST API JSON response
✨API exception handling
✨Thymeleaf view rendering
✨URL redirects & flash attributes
✨Model validation errors
A Practical Guide to Testing Spring Controllers With MockMvcTester | The IntelliJ IDEA Blog
Spring Framework 6.2 introduced MockMvcTester to support writing AssertJ style assertions using AssertJ under the hood. If you’re using Spring Boot, the spring-boot-starter-test dependency transiti
blog.jetbrains.com
April 23, 2025 at 3:57 AM
Spring Framework 6.2 introduced MockMvcTester to support writing AssertJ style assertions.
blog.jetbrains.com/idea/2025/04...
In this article I have covered testing:
✨REST API JSON response
✨API exception handling
✨Thymeleaf view rendering
✨URL redirects & flash attributes
✨Model validation errors
blog.jetbrains.com/idea/2025/04...
In this article I have covered testing:
✨REST API JSON response
✨API exception handling
✨Thymeleaf view rendering
✨URL redirects & flash attributes
✨Model validation errors
📢 After the success of Taming Thymeleaf, I'm thrilled to reveal my next TWO projects: 'Amplifying Angular' and 'Ruling React'! After years of resistance, I've finally seen the light - JavaScript is my new true love. Thymeleaf who? 😉
April 1, 2025 at 5:06 AM
📢 After the success of Taming Thymeleaf, I'm thrilled to reveal my next TWO projects: 'Amplifying Angular' and 'Ruling React'! After years of resistance, I've finally seen the light - JavaScript is my new true love. Thymeleaf who? 😉
ttcli 1.8.0 released which allows to select between Tailwind CSS 3 or the new version 4. Also some of the webjars have been updated. See github.com/wimdeblauwe/... for details. #springboot #thymeleaf #livereload
Release 1.8.0 · wimdeblauwe/ttcli
Changelog
🚀 Features
88e660d feat: Allow Tailwind CSS version 3 or 4 selection
🛠 Build
2af9a48 build: Update to Shoelace 2.20.0
030ef0a build: Update to htmx 2.0.4
355c93d build: Update to Alpi...
github.com
February 21, 2025 at 10:03 PM
ttcli 1.8.0 released which allows to select between Tailwind CSS 3 or the new version 4. Also some of the webjars have been updated. See github.com/wimdeblauwe/... for details. #springboot #thymeleaf #livereload
Just used wiremock-spring-boot for the first time, really like the smooth integration! Thank you @maciejwalkowiak.bsky.social ❤️
February 18, 2025 at 2:41 PM
Just used wiremock-spring-boot for the first time, really like the smooth integration! Thank you @maciejwalkowiak.bsky.social ❤️
Interesting links about SAFe and why it is not agile.
Safe: a collection of comments from leading experts.
https://www.smharter.com/blog/safe-a-collection-of-comments-from-leading-experts/
https://www.smharter.com/blog/safe-a-collection-of-comments-from-leading-experts/
February 16, 2025 at 4:43 PM
Interesting links about SAFe and why it is not agile.
Version 0.7.0 of vite-spring-boot has been released with a bug fix for Gradle users: github.com/wimdeblauwe/... #springboot #serversiderendering
Release 0.7.0 · wimdeblauwe/vite-spring-boot
What's Changed
Fix reading the HMR config file location when using Gradle by @wimdeblauwe in #8
Full Changelog: 0.6.0...0.7.0
github.com
February 15, 2025 at 10:39 AM
Version 0.7.0 of vite-spring-boot has been released with a bug fix for Gradle users: github.com/wimdeblauwe/... #springboot #serversiderendering