Releases

Apache Wicket 8.x

One more Wicket 8 release follows 8.19.0; after it the line reaches end of life. Its date will be on the blog; subscribe to the announce list to hear it first.

Latest release
8.19.0
Status
Last release coming
Supported
Until its final release
Java
8 or newer
Servlet API
Servlet 3.1 or newer

Wicket 8 reaches end of life with its final release

Wicket 8 and 9 reach end of life soon: what end of life means, why, and how to move.

Plan the move to Wicket 10 LTS. It is supported until Jul 2027. Take one major version at a time:

  1. Migrating from Wicket 8 to 9
  2. Migrating from Wicket 9 to 10 LTS

For the step to 10, the OpenRewrite recipes of wicket-migration do the repetitive part: the jakarta imports, the Java 17 baseline and the moved Wicket classes.

The upgrade paths explain each step and what changes in Java and the Servlet API. If you need help or more time, companies that offer Wicket support are listed on the wiki.

Maven dependency

<!-- Apache Wicket 8.x: Java 8+, Servlet 3.1+ -->
<dependency>
    <groupId>org.apache.wicket</groupId>
    <artifactId>wicket-core</artifactId>
    <version>8.19.0</version>
</dependency>

Download the source and binaries

New in Wicket 8

  • Java 8

    Wicket 8 requires Java 8 and Servlet 3.1, so it runs on Tomcat 8, Jetty 9.1 or any Java EE 7 server.

    Java
    8
    Servlet
    3.1
  • Models as lambdas

    IModel is a functional interface: a method reference or a lambda is a model. LambdaModel replaces string-based property expressions with type-safe, refactoring-safe bindings that also run faster.

    PersonPanel.java

    add(new Label("name1", person::getName));
    add(new Label("name2", () -> person.getName()));
    add(new Label("name3", LambdaModel.of(personModel, Person::getName)));
    
  • Optional where null was possible

    The API uses Optional where a value may be absent. An AjaxFallbackLink now tells you whether it was clicked through Ajax.

    HomePage.java

    add(new AjaxFallbackLink<Void>("link") {
        @Override
        public void onClick(Optional<AjaxRequestTarget> target) {
            target.ifPresent(t -> t.add(counter));
        }
    });
    
  • Java date and time

    The java.time types are converted, validated and bound to components out of the box.

Documentation

Blog posts about Wicket 8

All posts on the blog

Download

Source and binaries

Most projects get Wicket through Maven or Gradle, with the dependency at the top of this page. To build Wicket yourself, or to use it without a build tool, download the source:

Or the binaries:

Neither package contains the libraries Wicket depends on; a build tool such as Maven or Gradle brings those in.

Verify a download

Check its PGP signature with the keys in the KEYS file, as the ASF explains.

Older releases

The mirrors carry only the latest release of each line in service. Every older release is in the Apache archives.

Change log

What changed in each release of this line is in the change log.

Requirements

The Java and Servlet API versions this line needs are at the top of the page. Some modules need more libraries, such as file upload, date and time APIs or the CDI specification; each module’s POM lists them.

Logging

Wicket logs through SLF4J, so your application needs an SLF4J implementation on the classpath. The SLF4J manual lists them.

Don’t mix Wicket versions

Use one Wicket version for every Wicket module in a project: wicket-core, wicket-extensions, wicket-spring and the others are released together and only work with the same version. Libraries built on Wicket are made for one Wicket line; use the version made for yours.