Menu
Docs
Documentation versions (currently viewingVaadin 25)
V25
Vaadin 25.2 (pre-release)
Vaadin 25
Vaadin 24
Vaadin 23
Vaadin 14
Vaadin 10
Vaadin 8
Vaadin 7
Documentation translations (currently viewingEnglish)
English
Chinese
English
Finnish
German
Spanish
Search
Change to dark theme
Docs
Expand top-level sections
Show sub-pages of Getting Started
Getting Started
Quick Start
Show sub-pages of Dev Environment
Dev Environment
Install a JDK
Install an IDE
Show sub-pages of Import a Project
Import a Project
IntelliJ IDEA
Visual Studio Code
Eclipse IDE
NetBeans
Show sub-pages of Run a Project
Run a Project
IntelliJ IDEA
Visual Studio Code
Eclipse IDE
NetBeans
Any Java IDE
Show sub-pages of Starters
Starters
Show sub-pages of Vaadin Start
Vaadin Start
Show sub-pages of Playground
Playground
Editable Views
Templates
Spring Initializr
Maven Archetype
Gradle
Show sub-pages of Tutorial
Tutorial
Setup Project
List Data
Sort & Filter
Show Details
Edit Details
Add Data
Deep Link
Next Steps
Show sub-pages of Building Apps
Building Apps
Show sub-pages of UI Basics
UI Basics
Compose with Components
Arrange with Layouts
Write HTML
Add Images and Icons
Add Dialogs and Popovers
Show a Notification
Add Styling
Add Keyboard Shortcuts
Add Drag and Drop
Show sub-pages of Views & Navigation
Views & Navigation
Add a View
Navigate to a View
Show sub-pages of Pass Data to a View
Pass Data to a View
Route Parameters
Route Templates
Query Parameters
Add a Router Layout
Add a Navigation Menu
Add a Master-Detail View
Show sub-pages of Forms & Data
Forms & Data
Show sub-pages of Add a Form
Add a Form
Fields & Binding
Form Validation
Loading & Saving
Dialogs & Drawers
Add a Custom Field
Show sub-pages of Add a Grid
Add a Grid
Static Data
Buffered Data
Paginated Data
Show sub-pages of Persistence
Persistence
Add Flyway
Add Spring Data JPA
Add jOOQ
JPA & Spring Data
jOOQ
Handle File Uploads
Handle File Downloads
Generate PDF Reports
Replace H2
Show sub-pages of Consistency
Consistency
Strong Consistency
Show sub-pages of Transactions
Transactions
Declarative Transactions
Programmatic Transactions
Validation
Domain Primitives
Optimistic Locking
Pessimistic Locking
Eventual Consistency
Show sub-pages of Components
Components
Build a Component
Style a Component
Package a Component
Publish a Component
Wrap a JavaScript Library
Wrap a Web Component
Wrap a React Component
Show sub-pages of Business Logic
Business Logic
Add a Service
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 Server Push
Server Push
Pushing
Threads
Callbacks
Futures
Hilla Services
Consuming Reactive Streams
Show sub-pages of Security
Security
Add Login
Add Logout
Protect Views
Protect Services
Show sub-pages of Integration
Integration
REST API
Show sub-pages of AI & LLMs
AI & LLMs
Show sub-pages of Technical Setup
Technical Setup
API Key for your IDE
Quick Start-Guide
Show sub-pages of MCP Server
MCP Server
Setup Guide
Show sub-pages of Architecture
Architecture
Conceptual Layers
Monoliths
Microservices
APIs and SPIs
Package Structure
Show sub-pages of Project Structure
Project Structure
Single-module Projects
Multi-module Projects
Cookbook
Show sub-pages of Flow Reference
Flow Reference
What is Flow?
Show sub-pages of UI State
UI State
Component Bindings
Local Signals
Effects and Computed Signals
Shared Signals
Element Bindings
Transactions
Show sub-pages of Usage Examples
Usage Examples
Form Binding with Dynamic Validation
Conditional Visibility
Real-Time Dashboard
Shopping Cart Example
In-Memory Grid Filtering
Show sub-pages of Routing & Navigation
Routing & Navigation
Defining Routes
Navigating Between Routes
Menu Configuration
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 Forms & Data Binding
Forms & 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
Vaadin Security Configurer
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
Show sub-pages of Testing
Testing
Show sub-pages of Browserless Testing
Browserless Testing
Getting Started
Component Testers
Querying Components
Testing Overlay Components
Spring Security Testing
Snapshots
Non-Spring Projects
Quarkus-based Projects
Optimizing Tests
Migrating from UI Unit Testing
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
UI Unit Testing
Getting Started
Non-Spring Projects
Quarkus-based Projects
Querying Components
Testing Overlay Components
UI Snapshots
Show sub-pages of Integrations
Integrations
Hilla
React
Show sub-pages of Spring
Spring
Spring Boot
Spring MVC
Routing
Scopes
Configuration
Spring Events
OAuth2 Authentication
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
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
Gradle
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