Apache Wicket™
Component-oriented. Type-safe. Production-proven across thousands of applications for over twenty years. No JavaScript framework required.
The Wicket Pattern
Each component: one Java class + one HTML template
public class TaskPanel extends Panel {
@Inject
private TaskService taskService;
public TaskPanel(String id) {
super(id);
Task task = new Task();
Form<Task> form = new Form<>("form");
form.add(new TextField<>("title",
LambdaModel.of(task::getTitle, task::setTitle)));
form.add(new AjaxButton("save") {
@Override
protected void onSubmit(AjaxRequestTarget target) {
taskService.save(task);
success("Saved!");
target.add(feedback);
}
});
add(form);
}
}
<wicket:panel>
<form wicket:id="form">
<input wicket:id="title"
type="text"
placeholder="Task title" />
<button wicket:id="save">Save</button>
</form>
<div wicket:id="feedback"></div>
</wicket:panel>
A type-safe AJAX form with lambda model binding and CDI injection. No JavaScript. Just Java.
Why Wicket
No transpiler. No bundler. No framework-of-the-month. Write Java and HTML — the same tools you'll use next year, and the year after that.
Full Content Security Policy support without unsafe directives. Automatic nonce injection. XSS protection built into the framework, not bolted on.
From prototype to millions of lines of code. Java's packages, classes, and dependency injection are your architecture — no framework-specific scaffolding required.
The Wicket Community
One Maven command gives you a working Wicket application with embedded Jetty. Edit, refresh, repeat.
Quickstart Guide →Latest News