Using Vaadin Components

Vaadin includes a set of components, with server-side Java APIs, that you can use to build your UI.

The components, together with Flow, are included as platform dependencies.

Tip
Free training courses
Watch the Vaadin 14: Introduction free training video to learn more about Vaadin terminology and what Vaadin components are.

The vaadin-core module includes all open-source components, such as Text Field, Button and Grid. The vaadin module extends this set to include all officially supported components in Vaadin, like Vaadin Charts.

Vaadin Dependency

The components are part of Vaadin and are included as dependencies, together with Flow. Each component has a Java API.

Using the platform dependency (com.vaadin:vaadin) ensures that all available components, both open source and commercial, are included automatically. You are guaranteed to get compatible versions of both Flow and the components.

Example: Declaring the vaadin.platform dependency.

<dependencies>
    <!-- other dependencies -->
    <!-- component dependency -->
    <dependency>
        <groupId>com.vaadin</groupId>
        <artifactId>vaadin</artifactId>
        <version>${vaadin.platform.version}</version>
    </dependency>
</dependencies>
Note
It is possible to include components individually by declaring a dependency for each component. See below for an example.

The platform also includes themes for the components that you can customize to ensure the styling suits your needs. See Design System for more information.

You can find additional prebuilt Web Components (with Java APIs) contributed by the Vaadin community in the Vaadin Directory.

Individual Component Dependencies

As an alternative to using the platform dependency, you can declare single components as dependencies.

You should add both the Vaadin bom and the relevant Flow component package, for example vaadin-button-flow, to your project dependencies. The Vaadin bom fixes all vaadin-related dependencies to a tested combination, so that the individual components can be added safely. Without the BOM, some dependencies may change in the future, because of new releases, or because of their use of version ranges.

Example: Adding the Button component in your pom.xml using Maven.

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.vaadin</groupId>
            <artifactId>vaadin-bom</artifactId>
            <version>
                ${vaadin.platform.version}
            </version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <!-- other dependencies -->

    <!-- component dependency -->
    <dependency>
        <groupId>com.vaadin</groupId>
        <artifactId>vaadin-button-flow</artifactId>
    </dependency>
</dependencies>