Repository navigation
Home
This wiki collects practical notes, examples, and best practices derived from the vaadin-create23 demo project. While new articles will be added over time, the current content reflects the main focus of the wiki: documenting Vaadin 8 patterns and techniques that tend to be underrepresented or only briefly mentioned in the official documentation. The emphasis is on real‑world usage, maintainability, and architectural clarity, with each article grounded in concrete code from the demo project rather than isolated snippets or theoretical examples.
Vaadin 8 is in extended maintenance, not in active feature development. This wiki exists because framework age and engineering quality are independent concerns.
A premature rewrite to a newer stack rarely modernizes the engineering — it consumes the budget, and the result is often the same application with the same architectural problems, the same missing tests, and the same accessibility gaps, just on a newer runtime. Meanwhile, investing in testing discipline, security, observability, accessibility, and clean architecture delivers value to production users today and reduces the actual risk surface of the running system right now.
The articles here demonstrate that an actively maintained application can follow modern engineering practices — comprehensive test pyramids, XSS‑safe HTML composition, OpenTelemetry instrumentation, ARIA‑compliant accessibility, session serialization discipline, containerized test environments — regardless of which framework generation it runs on.
There is also a forward‑looking payoff: a codebase with strong test coverage, consistent patterns, clean layer separation, and well‑documented conventions is dramatically easier to migrate when the time comes. The tests act as a behavioral specification. The clean architecture allows replacing layers independently. The consistency enables mechanical — and increasingly AI‑assisted — transformation. The effort of a delayed modernization can be smaller than a premature one, precisely because technical debt has been managed rather than compounded.
In short: modern practices on a legacy platform is a fundamentally different situation from legacy practices on a legacy platform — and arguably a better one than legacy practices on a modern platform.
- How to Use OpenTelemetry in a Vaadin 8 Application
- How to Improve Accessibility (a11y) in a Vaadin 8 Application
- How to Localize a Vaadin 8 Application
- How to Validate a Vaadin 8 Project with GitHub Actions
- How to Create an Accessible Application Shell with Vaadin 8
- How to Write Browserless UI Tests with Vaadin 8
- How to Use Asynchronous Updates in Vaadin 8
- How to Customize the Valo Theme in Vaadin 8
- How to Test Vaadin 8 Charts with TestBench
- How to Test Vaadin 8 Components in Isolation with TestBench
- How to Use the Vaadin 8 Component Event Bus
- How To Use the Latest Vaadin 8 Binder Features
- How to Implement an Application Event Bus for a Typical Vaadin Business App
- How To Reduce Flaky Tests in Vaadin 8 TestBench
- How To Show Non-Interactive, Accessible Details in a Vaadin 8 Grid
- How To Compose HTML Content in Vaadin 8 Safely
- How to implement hierarchical navigation in Vaadin 8
- How to Build a Test Pyramid for Vaadin 8 Apps
- How to Optimize Paged Queries for a Vaadin 8 Grid
- How To Build a Containerized Test Environment for a Vaadin 8 App
- How To Make a Vaadin 8 Application a PWA
- How To Use Composite Pattern in Vaadin 8
- How to Upgrade GWT and Selenium in a Vaadin 8 Project Running on Java 11+
- How To Ensure Serializable Sessions With Vaadin 8
- How to Write a Custom Field That Works with Vaadin 8 Binder