Menu
Docs
Documentation versions (currently viewingVaadin 24)
V24
Vaadin 24
Vaadin 23
Vaadin 14
Vaadin 10
Vaadin 8
Vaadin 7
Search
Change to dark theme
Docs
Collapse top-level sections
Hide sub-pages of Getting Started
Getting Started
Start a Project
Import to an IDE
Run an Application
Add a View
Show sub-pages of Tutorial
Tutorial
Project Setup
Show sub-pages of Build a Flow UI
Build a Flow UI
First View
Second View
Add a Layout
Add Message History
Security
Styling
User Experience Tweaks
Show sub-pages of Build a Hilla UI
Build a Hilla UI
First View
Second View
Add a Layout
Add Message History
Handle Connection Issues
Build for Production
Deploy to Production
Next Steps
Hide sub-pages of Flow
Flow
What is Flow?
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 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
Content Security Policy
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
Quarkus-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
React
Show sub-pages of Spring
Spring
Spring Boot
Spring MVC
Routing
Scopes
Configuration
Spring Events
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
OSGi
Apache Karaf
Using Services with Vaadin
Portlet Support
Add a Vaadin Portlet Module to Maven Multi-Module Project
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
Show sub-pages of Licenses
Licenses
Daily Active Users
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
Menu Configuration
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
API Reference
Knowledge Base
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
Hide sub-pages of Hilla
Hilla
Tutorial
FAQ
Show sub-pages of Guides
Guides
Endpoints
Reactive Endpoints
Client Middleware
Routing
Data Grids
Show sub-pages of Forms
Forms
Binding Data to Forms
Loading & Saving Form Data
Validating User Input
Reacting to Form State Changes
Binding Data to Input Fields
Binding Arrays
Image Fields in Forms
Form Binding
Client-Side Data Caching
Styling
Show sub-pages of Security
Security
Introduction
Controlling Endpoint Access
Authentication with Spring Security
Accessing Auth Data
Stateless Authentication
Offline Authentication
Best Practices
Testing
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
Troubleshooting
React for Java Developers
Full-Stack Signals
Flow Integration
Upgrading Guide
Flow components in Hilla view
Show sub-pages of Reference
Reference
Configuration
Endpoint Generator
Gradle
React Router
Type Conversion
Type Nullability
TypeScript Client
Show sub-pages of Lit
Lit
Show sub-pages of Getting Started
Getting Started
Quick Start
Basics Tutorial
FAQ
Show sub-pages of Guides
Guides
Application Architecture
Routing & Navigation
Endpoints
Reactive Endpoints
Event Handling
State Management
Client Middleware
Show sub-pages of Forms
Forms
Binding Data to Forms
Loading & Saving Form Data
Validating User Input
Reacting to Form State Changes
Binding Arrays
Binding Data to Input Fields
Binding Data to Custom Components
Image Fields in Forms
Form Binding
Client-Side Data Caching
Styling
Show sub-pages of Security
Security
Introduction
Controlling Endpoint Access
Authentication with Spring Security
Accessing Authentication Data
Role-Based Access Control
Stateless Authentication
Offline Authentication
Session Expiration
Common Vulnerabilities
Best Practices
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
Troubleshooting
Upgrading Early Hilla Versions
Show sub-pages of Components
Components
Using Components
Creating Components
Integrating Components
Type Definitions
Show sub-pages of Reference
Reference
Configuration
Connection Indicator
Endpoint Generator
Gradle
Type Conversion
Type Nullability
TypeScript Client
Show sub-pages of Components
Components
Auto CRUD
Auto Grid
Auto Form
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
Usage with React
Usage with Lit
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
Popover
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
Hide 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 Components
Styling Components
Stylable Parts & States
Styling Component Instances
Sharing Styles with Component Types
Generating Styles Dynamically (Flow)
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 in Flow
Loading Stylesheets Dynamically in Flow
Run-time Theme Switching
Application Themes for Embedded Components
Shadow DOM Styling of Components
Disabling the Default Theme in Flow
Show sub-pages of Legacy Styling Features
Legacy Styling Features
Show sub-pages of Material Theme
Material Theme
Typography
Color
Flow CssImport Annotation
Show sub-pages of Tools
Tools
Show sub-pages of Copilot
Copilot
Internationalization
Show sub-pages of Start
Start
Editable Views
Show sub-pages of Modernization Toolkit
Modernization Toolkit
Dragonfly Transpiler
Classic Components
Feature Pack
Vaadin Modernization Toolkit Analyzer for Eclipse
Vaadin Modernization Toolkit Analyzer for Maven
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
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
Licensing Model
Production Configuration
Show sub-pages of Kubernetes Kit
Kubernetes Kit
Getting Started
Rolling Updates
Session Replication
Session Replication Debug Tool
Configuration
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
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 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 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
Hide sub-pages of Control Center
Control Center
Show sub-pages of Getting Started
Getting Started
Kubernetes on Docker Desktop
Installation of Dependencies
Show sub-pages of Application Deployment
Application Deployment
Hostname Guidelines
Local Development Mode
Security Considerations
Show sub-pages of Identity Management
Identity Management
Login and Logout
Localization
Hide sub-pages of Building Apps
Building Apps
Spring Boot
Show sub-pages of Architecture
Architecture
Design
System Components
Conceptual Layers
Monoliths
Microservices
Show sub-pages of Project Structure
Project Structure
Single-module Projects
Multi-module Projects
Show sub-pages of Presentation Layer
Presentation Layer
Show sub-pages of UX Design
UX Design
Show sub-pages of Customizing Visuals
Customizing Visuals
Color
Typography
Size and Space
Show sub-pages of Server Push
Server Push
Pushing
Threads
Callbacks
Futures
Hilla Services
Consuming Rective Streams
Show sub-pages of Application Layer
Application Layer
Application Services
Show sub-pages of Background Jobs
Background Jobs
Implementing Jobs
Triggering Jobs
Show sub-pages of UI Interaction
UI Interaction
Callbacks
Futures
Producing Reactive Streams
Show sub-pages of Data Consistency
Data Consistency
Strong Consistency
Show sub-pages of Transactions
Transactions
Declarative Transactions
Programmatic Transactions
Validation
Optimistic Locking
Pessimistic Locking
Eventual Consistency
Domain Primitives
Show sub-pages of Persistence
Persistence
Show sub-pages of Repositories
Repositories
JPA Repositories
jOOQ Repositories
Pluggable Persistence
Flyway
Upgrading Guide
Upgrading from Vaadin 23 (removed)
Supported Technologies
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
Docs
Flow
Testing
Browser-less Testing
This page has moved:
UI Unit Testing
Getting Started