Menu
Documentation
Documentation versions (currently viewingVaadin 24)
V24
Vaadin 24.4 (pre)
Vaadin 24
Vaadin 23
Vaadin 22
Vaadin 14
Vaadin 10
Vaadin 8
Vaadin 7
Search
Change to dark theme
Documentation
Expand top-level sections
Overview
Show sub-pages of Get Started
Get Started
Quick Start
Start a Project
Show sub-pages of Step-by-Step Guide
Step-by-Step Guide
Importing to an IDE
Running an Application
Show sub-pages of Tutorial
Tutorial
Overview
Project Setup
Create a View
Create a Component
Database Access
Forms & Validation
Handling View State
Navigation & App Layout
Login & Authentication
Installable Offline
Unit & Integration Testing
End-to-End Testing
Production Deployment
Download PDF version
Show sub-pages of Components
Components
Figma Libraries
Accordion
App Layout
Avatar
Badge
Basic Layouts
Board
Button
CRUD
Show sub-pages of Charts
Charts
Installing Charts for Vaadin Flow
Basic Use
Chart Types
Chart Configuration
Chart Styling
Chart Data
Migrating from Earlier Versions
Timeline
Exporting Charts as SVG
Elements API
Figma Library
Checkbox
Combo Box
Confirm Dialog
Context Menu
Cookie Consent
Custom Field
Date Picker
Date Time Picker
Details
Dialog
Email Field
Form Layout
Grid
Grid Pro
Horizontal Layout
Icons
List Box
Login
Map
Menu Bar
Message Input
Message List
Multi-Select Combo Box
Notification
Number Field
Password Field
Progress Bar
Radio Button
Rich Text Editor
Scroller
Select
Side Navigation
Split Layout
Spreadsheet
Tabs
Text Area
Text Field
Time Picker
Tooltip
Tree Grid
Upload
Vertical Layout
Virtual List
Show sub-pages of Application Basics
Application Basics
Building a UI
Handling Events
Creating a Main View
Basic Routing & Navigation
Images & Icons
Styling
Show sub-pages of Routing & Navigation
Routing & Navigation
Defining Routes
Navigating Between Routes
Route Parameters
Updating URL Parameters without Navigation
Navigation Lifecycle
Router Layouts & Nested Router Targets
Retrieving Routes
Router Exception Handling
Getting Registered Routes
Updating Page Title on Navigation
Registering Routes Dynamically
Show sub-pages of Additional Guides
Additional Guides
Query Parameters
Route Templates
Show sub-pages of Creating UI
Creating UI
Basic Features
Enabled State
Keyboard Shortcuts
HTML Elements
Show sub-pages of Creating Components
Creating Components
Single Element
Multiple Elements
Using API Helpers to Define Component Properties
Using Existing Components
Extending Components
Using Events
Component Containers
Lifecycle Callbacks
Using Vaadin Mixin Interfaces
Show sub-pages of Integrating Web Components
Integrating Web Components
Creating a Java API
Debugging
In-Project Component
Web Components Intro
Show sub-pages of Element API
Element API
Properties & Attributes
Listening to User Events
Remote Procedure Calls
Retrieving User Input
Dynamic Styling
Shadow Roots
Show sub-pages of Drag & Drop
Drag & Drop
Drag Source
Drop Target
Show sub-pages of Templates
Templates
Template-based Components
Binding to Components
Combining with Binder
Sub-Templates
Adding Server-side Components
Styling
Detecting Component Mappings
Limitations
Show sub-pages of Polymer Templates (deprecated)
Polymer Templates (deprecated)
Create a Simple Component Using Template API
Combining Templates & Binders
Dynamically Add Server-Side Components to Templates
Handling User Events
Binding Model Data
Using Model Beans
Using Model Encoders
Creating Content Dynamically from a List
Using Parent Layout
Show sub-pages of Styling
Styling
Show sub-pages of Lumo
Lumo
Show sub-pages of Lumo Style Properties
Lumo Style Properties
Color
Typography
Size & Space
Shape
Elevation
Interaction
Lumo Variants
Utility Classes
Application Theme
Show sub-pages of Styling Vaadin Components
Styling Vaadin Components
Stylable Parts & States
Styling Component Instances
Sharing Styles with Component Types
Generating Styles Dynamically
Styling Other UI Elements
Show sub-pages of Advanced Styling Topics
Advanced Styling Topics
Creating Style Properties
Using a Theme in Multiple Applications
Parent & Sub-Themes
Loading Theme Resources from npm Packages
Lazy-Loading Stylesheets
Loading Stylesheets Dynamically
Loading Theme Images from Java Code
Run-time Theme Switching
Application Themes for Embedded Components
Shadow DOM Styling of Components
Disabling the Default Theme
Show sub-pages of Legacy Styling Features
Legacy Styling Features
Show sub-pages of Material Theme
Material Theme
Typography
Color
CssImport Annotation
Show sub-pages of Data Binding
Data Binding
Binding Data to Forms
Validating & Converting User Input
Loading & Saving to Business Objects
Binding Beans to Forms
Binding Items to Components
Creating a Component that Has a Value
Show sub-pages of Security
Security
Enabling Security
Show sub-pages of Advanced Security Topics
Advanced Security Topics
Security Architecture
Security Practices at Vaadin
Common Vulnerabilities
Frequently Reported Issues
Securing Plain Java Applications
Navigation Access Control
Storing Sensitive Data
Hide sub-pages of Testing
Testing
Show sub-pages of UI Unit Testing
UI Unit Testing
Getting Started
Querying Components
UI Snapshots
Spring-based Projects
Show sub-pages of End-to-End Testing
End-to-End Testing
Getting Started
Installing WebDrivers
Creating Tests
Tests with Page Objects
Low-Level Element Interactions
Taking & Comparing Screenshots
Advanced Testing Methods
Making Tests Reliable
Behavior-Driven Development
Running Tests with Maven
Running Tests on a CI Server
Running Tests on Multiple Browsers
Test Grid Set Up
Testing with Playwright
Testing with Selenium
Browser-based Testing
Advanced Testing Concepts
Behavior-Driven Development
Creating Maintainable Tests using Page Objects
Creating Tests
Getting Started
Installing WebDrivers
Low-Level Element Interactions
Making Tests Reliable
Running Tests on Multiple Browsers in a Grid
Running Tests on a CI Server
Running Tests with Maven
Selenium Testing
Setting up your Own Test Grid
Taking & Comparing Screenshots
Browser-less Testing
Browser-less Testing with Spring Framework
Getting Started
Screenshots in Browser-less Testing
Searching for Components
Show sub-pages of Integrations
Integrations
Hilla
Show sub-pages of Spring
Spring
Spring Boot
Spring MVC
Routing
Scopes
Configuration
Show sub-pages of CDI
CDI
Using CDI Beans
Vaadin CDI Scopes
Observable Vaadin Events
Vaadin Service Interfaces as CDI Beans
Show sub-pages of Embedding
Embedding
Tutorial
Application Properties
Theming
Configuring Push
Security
Preserve on Refresh
Limitations
Quarkus
Show sub-pages of Databases
Databases
PostgreSQL
MariaDB
MySQL
OSGi
Apache Karaf
Using Services with Vaadin
Portlet Support
Appendix A - Address Book Example Project Demonstration
Creating Vaadin Portlets
Handling Portlet Phases
Inter-Portlet Communication
Multi-Module Portlet Project
Show sub-pages of Configuration
Configuration
Properties
Show sub-pages of Development Mode
Development Mode
Node.js
npm/pnpm/bun
Show sub-pages of Development Tools
Development Tools
Component Locator
Development Tools Plugin Support
Hot Deploy & Live Reload
PWA
Web Push
Maven
Source Control
Licenses
Feature Flags
Show sub-pages of Deploying to Production
Deploying to Production
Production Build
Servlet Container
Spring Boot
Native Image Compilation
Show sub-pages of Cloud Providers
Cloud Providers
Amazon Web Services
Azure
Google Cloud
Heroku
Docker Deployment
Distributed Deployment Architecture
Troubleshooting
Show sub-pages of Advanced Topics
Advanced Topics
Application Lifecycle
Localization
Modifying Bootstrap Page at Runtime
Classic Components
The Loading Indicator
Modifying how dependencies are loaded with DependencyFilter
Service Init Listener
Dynamic Content
History API
StreamReceiver
Session & UI Listeners
Custom Error Handling
Customizing System Messages
Preserving the State on Refresh
Servlet-Container Authentication
Handling Long-Running Tasks
Browser Access
Loading Resources
CSS Loading Order
Server Push
Server-Side Modality
Custom Instantiator
Web Storage API
Preparing for V8 Upgrade Automation
Show sub-pages of Tools
Tools
Show sub-pages of AI Form Filler
AI Form Filler
Getting Started
AI Models
API Reference
Advanced Example
Best Practices & Limits
Show sub-pages of AppSec Kit
AppSec Kit
Getting Started
Advanced Topics
Show sub-pages of Azure Cloud Kit
Azure Cloud Kit
Getting Started
Autoscaling
Transport Layer Security
Multiple Environments
Show sub-pages of Collaboration Kit
Collaboration Kit
Overview
Quick Start Guide
Licensing Model
Production Configuration
Show sub-pages of Binder & Components
Binder & Components
Binder
Avatar Group
Message List
Show sub-pages of Collaboration Managers
Collaboration Managers
Presence Manager
Message Manager
Form Manager
Show sub-pages of Advanced
Advanced
Connection Context
Topic API
Collaboration List
External Servlets
Clustering Support
Session Replication with Kubernetes Kit
Show sub-pages of Design System Publisher
Design System Publisher
Overview
Getting Started
Development Server
Site Content
Site Customization
Custom Theme
Configuration
Production Setup
Updating
Troubleshooting
UI Examples
Show sub-pages of Designer
Designer
Overview
Show sub-pages of Tutorial
Tutorial
Getting Started
Build Main View
Build Contact Form
Get Application Running
Connect Main View to Java
Connect Contact Form to Java
Wrap Up
Show sub-pages of Using Designer
Using Designer
Designing
Connect to Java
Previewing
Laying Out Views
Theming
Frequently Asked Questions
Show sub-pages of Kubernetes Kit
Kubernetes Kit
Getting Started
Rolling Updates
Session Replication
Session Replication Debug Tool
Configuration
Show sub-pages of Multiplatform Runtime
Multiplatform Runtime
Overview
Show sub-pages of Step-by-Step Guide
Step-by-Step Guide
Configure pom.xml for Vaadin 7
Configure pom.xml for Vaadin 8
Removing Legacy Servlets
Converting Legacy UIs
Running Spring Boot Applications
Vaadin Legacy CDI Application with MPR & Flow
Navigation using Navigator
Converting a UI Without Other Frameworks
Converting UI parameters
Adding Legacy Components to Flow layouts
Show sub-pages of Configuration & Advanced Topics
Configuration & Advanced Topics
Adding Legacy Components in a Flow Layout
Legacy Theme in MPR
Custom Widget Set & MPR
Limitations of MPR
Set Up Production Mode
Push & MPR
Using Sessions with MPR
Custom Legacy UI Class
V7 & V14+ CDI Applications Side-by-Side
Show sub-pages of Observability Kit
Observability Kit
Getting Started
Configuration
Customization
Show sub-pages of Integrations
Integrations
Datadog
Grafana
Jaeger & Prometheus
New Relic
Reference
Show sub-pages of SSO Kit
SSO Kit
Getting Started
Theming
Show sub-pages of Integrations
Integrations
Azure Active Directory
Keycloak
Okta
Show sub-pages of Swing Kit
Swing Kit
Getting Started
Adding Views
Cross-Communication
Exception Handling
Visual Theme Editor
Visual View Builder
Upgrading Guide
Upgrading from Vaadin 23 (removed)
Supported Technologies
API Reference
Show sub-pages of Contributing
Contributing
Editor Settings
Pull Requests
Creating Tests
Show sub-pages of Documentation
Documentation
Vale
Style Guide
Word List
Contributing to Vaadin Projects
Knowledge Base
Documentation
Testing
Browser-less Testing
This page has moved:
UI Unit Testing
Overview