Vaadin 8 beta is out - we need your help!

Update: We are now in RC state, help us to iron out the last bugs before first stable release!

I’m happy to announce that the first beta version of the next major Vaadin Framework release is out. As discussed earlier, version 8 is a huge step forward taking advantage of the greatest and latest Java features. We have worked hard to make some of the core concepts in Vaadin Framework faster, simpler and safer to use, but now we need your help to make sure we haven’t broken essential features and to make the new features even better!

The most exciting new features are:

  • Modern typesafe API optimized for Java 8. The most relevant changes in
    • displaying data in select components and grid
    • binding data to fields
  • Faster (CPU) and more memory efficient data binding
  • Easier to implement custom form fields
  • Java 8 now supported for developing client side extensions as well
  • Improved defaults - less boilerplate code

Refer to the release notes to see the full list of changes. You can also see some code examples from the previous alpha release post and from the preliminary data binding documentation. We are working on publishing a version 8 branch of the documentation side by side with the stable documentation.

Although some of the core concepts have been completely renewed, upgrading to Vaadin 8 is still pretty easy. All old field implementations and selects using Container-Item-Property style API are still there, but moved to a separate compatibility package. We also provide an easy to use script that will change your code to use components from the compatibility package. Then you can start migrating to new more efficient APIs view by view or just use in the new code you write.

To move faster with the development, we needed to drop support for some legacy technologies. From Vaadin version 8 forward, only Java 8 is supported. Also, your application server needs to support Servlet 3 specification. Vaadin 8 also drops support for some older browsers. If you are using Internet Explorer, it has to be version 11.

How to try it out?

The new project wizard in Eclipse plug-in dialog doesn't work yet with the beta release. The easiest way to try out Vaadin 8 with fresh projects is to create a project using Maven archetype:

mvn archetype:generate  \
   -DarchetypeGroupId=com.vaadin  \
   -DarchetypeArtifactId=vaadin-archetype-application  \
   -DarchetypeRepository=  \

Once you have the project ready, just import the project to your favourite IDE. The pre-releases repository also contains compatible integration libraries for CDI and Spring, both with version 2.0.0.rc1.

Alternatively you can try out the upgrade script for existing applications:

  1. Download the jar file
  2. Execute the script from project root: java -jar path/to/your/framework8-migration-tool-8.0-SNAPSHOT.jar
  3. Add pre-releases repository to your project, see releases page
  4. Change project dependencies:
    1. vaadin-server to vaadin-compatibility-server
    2. vaadin-client-compiled to vaadin-compatibility-client-compiled if you are using DefaultWidgetSet
    3. If you are using CDI or Spring, update related Vaadin libraries to 2.0.0.beta1
  5. Recompile the widgetset if you are using add-ons

Let us know what you think

We have been working hard on the stuff and want to push it out as a stable release soon. Thus I encourage all Vaadin users to try out the new beta release and give us some feedback of every concern you have. There are probably still bugs and API decisions we haven’t thought well enough, so now is the time to get those fixed.

Let us know what you think and let’s make this the best Vaadin release so far. Report all findings through GitHub or forum. Big thanks in advance!

Release notes for Vaadin Framework 8.0.0.rc1

Add Comment
Archetype defined by properties
Downloading: http://localhost:8081/nexus/content/groups/public/com/vaadin/vaadin-archetype-application/8.0.0.beta1/vaadin-archetype-application-8.0.0.beta1.jar
Total time: 1.915 s
Finished at: 2016-12-20T15:34:51+02:00
Final Memory: 14M/208M
Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:2.4:generate (default-cli) on project standalone-pom: The desired archetype does not exist (com.vaadin:vaadin-archetype-application:8.0.0.beta1) -> [Help 1]
Posted on 12/20/16 1:40 PM.
The release notes looking good, but two things i really can't understand:

* DateField and InlineDateField don't support time anymore, meaning the highest resolution for those is Resolution.DAY
* FontAwesome icon constants have been deprecated, and will be moved to compability-server before 8.0 final. They will be replaced with Vaadin icons in an upcoming beta
Posted on 12/20/16 4:21 PM.
I'll be missing SQLContainer. By creating a simple abstraction over the most popular databases, it has allowed us to deliver software to our customers that can run on multiple databases. JPA is not a replacement as it doesn't allow run-time definition of queries and we need to be able to do this.
Posted on 12/20/16 4:39 PM.
This is beta version,
Please use Vaadin pre-release repository.
Pom example:
Posted on 12/20/16 6:01 PM in reply to Saules Ieleja.
> DateField,
Yes, for now we are missing time field in new-style API. Since there is a demand for it, we'll try to fix that. Thanks for your feedback.
> FontAwesome
Please read this comment with detailed explanations what is goint to happen with FontAwesome and why it's deprecated for the moment.
Posted on 12/20/16 6:09 PM in reply to Sebastian Filke.
There is a number of frameworks for SQL databases access.
I'd recommend MyBatis - that is well-known, feature-rich, and mature framework, and it uses similar approach as SQLContainer.
Posted on 12/20/16 6:14 PM in reply to Peter Hansson.
Is there also an integration available with spring boot so we can try this out?
Posted on 12/20/16 6:17 PM.
By far!, the best release ever! I've been using it since alpha 2. Next week I have a semi big production deployment with this new beta released emoticon
Posted on 12/20/16 7:43 PM.
Just realized that the defaults from Layouts changed. Spacing and Margin now true by default. I guess I've a lot to do....

Maybe this will have on of the biggest impacts on my daily work.
Posted on 12/20/16 9:09 PM.
Yeah, having TimeField (for LocalTime) and DateTimeField (for LocalDateTime, with possibility to convert to ZonedDateTime/Instant) would be great.
Posted on 12/20/16 9:23 PM in reply to Ilia Motornyi.
By that you mean a vaadin maintained maven archetype?

You can check out this if you want to have a quick start.
Posted on 12/20/16 10:19 PM in reply to Dimitri Frederickx.
For the changed layout defaults, the module vaadin-compatibility-server contains implementations of VerticalLayout and HorizontalLayout with different package names and the old defaults, so if you are using the compatibility package, you can just change your imports.
Posted on 12/21/16 5:59 AM in reply to Mike Götz.
Peter, could you list the features of SQLContainer that you'll miss most? I'm pretty sure we can create examples to cover those use cases with Vaadin 8.

As Ilia pointed out, MyBatis is one cool helper library for database access. I'd also mention jOOQ and Querydsl, of which both allow you to write queries using Java API.

BTW. JPA do allow you to create queries dynamically at runtime. Both with JPQL(or native SQL) and Criteria API.
Posted on 12/27/16 4:16 PM in reply to Peter Hansson.
In SQLContainer I can do "SELECT *" and not know beforehand what columns (or their type) that the table/view has. So I can browse any table/view. I gave up on figuring out how to do this with EclipseLink. Not saying it is not possible, but I've found that when authors use the word "dynamic" they sometimes refer (solely) to the WHERE clause, rather than the SELECT list.

I've published an enhanced version of SQLContainer, appropriately named "SQLContainer Enhanced" (in Vaadin Directory), which takes the database independence one step further than stock SQLContainer. We use this to create applications where the customer can choose from a list of supported RDBMSs, we don't
choose for him.

SQLContainer Enhanced also has support for DB native column types, such as Oracle's TIMESTAMPTZ. In other words column types not directly covered by the JDBC spec. I've looked at MyBatis and actually think it is possibly there, but needs more investigation.

In any case, in a future Vaadin 8 scenario, I would probably want to create a Vaadin Add-on on top of something like MyBatis and then bundle my own database independence scripts (as MyBatis doesn't really support db independence, it just makes it possible). I do not particularly want to create JDBC code myself and MyBatis looks good. I just have to verify it has the versatility I was able to have with SQLContainer.
Posted on 12/28/16 8:12 PM in reply to Matti Tahvonen.
Thanks Peter, good list! Let's build some examples that will cover such examples.
Posted on 12/30/16 8:32 AM in reply to Peter Hansson.
Just learning Vaadin for a new set of app's. How transferable is noob level V7 knowledge and skill to V8?
Posted on 1/4/17 2:13 AM.
Thanks! I like Vaadin 8 changes. One question - I thought the whole thing is to remove old unused stuff to separate compatibility packages. Then why vaadin.server contains Vaadin 6 classes like LegacyApplication?
Posted on 1/7/17 7:30 AM.
I've deployed the framework8-demo from github in my Intellij 2017.1 EAP and tried opening designer files with Designer 2.0 Beta for intellij. The problem is if I make any changes, the generic types from generated Java classes are removed and I get compilation errors.

Is this normal for the Beta or is something wrong with my plugin (i had the 1.2 plugin for intellij, but have uninstalled it after installing 2.0 Beta1).
Posted on 1/19/17 2:09 PM.
Hi Krzysztof, it seems that the design files used in the demo project have not yet been updated to contain the type information. If you open the design, set the type in the Designer and save the file, then everything will work. There is also for updating the design files in the project
Posted on 1/20/17 8:40 AM in reply to Krzysztof Cichomski.
Ok, that worked. But now I have another problem.

I've a multimodule project with a simple vaadin7 UI as one of the modules and services as the second. I've added a vaadin8 UI module, that will use the same services and I wanted to recreate functionalities of vaadin7 UI in vaadin8.

The problem is now when trying to create a new Vaadin Design 2, Designer 2.0 says:
'This project uses Vaadin 7; please upgrade the project to Vaadin 8, or install Vaadin Designer 1.'

Any way around that ?
Posted on 1/23/17 10:02 AM in reply to Artur Signell.