Jmix
Status: Production-ready
Java Version: 17+ (21 recommended)
Learning Curve: Moderate
Last Release: v2.7.5 (March 2026)
Jmix WebsiteJmix is a full-stack Java development platform for building data-centric enterprise web applications without frontend overhead. Built on top of Spring Boot and Vaadin Flow, it gives Java developers a unified, code-first approach to deliver rich web UIs entirely in Java—no JavaScript or TypeScript required. The platform offers a visual data model designer, automatic CRUD screen generation, role-based access control, audit logging, business process management (BPM), reporting, and full-text search as ready-to-use add-ons. Jmix Studio, an IntelliJ IDEA plugin, accelerates development with scaffolding wizards, visual designers for entity and UI layouts, and integrated deployment tools. Unlike traditional low-code platforms, Jmix does not lock you into a proprietary runtime—you own the generated source code and can extend it freely. The platform supports horizontal scaling, modular composite architecture, and observability out of the box. It is used in production by global enterprises including Johnson & Johnson, WIPO, and Sky for admin panels, ERP extensions, BPA systems, and legacy modernisation projects.
Code Example
// Entity definition using Jmix JPA annotations
@JmixEntity
@Table(name = "CUSTOMER")
@Entity
public class Customer {
@JmixGeneratedValue
@Column(name = "ID", nullable = false)
@Id
private UUID id;
@Column(name = "NAME")
private String name;
@Column(name = "EMAIL")
private String email;
// getters and setters ...
}
// List view - auto-generated by Jmix Studio, customisable in Java
@Route(value = "customers", layout = MainView.class)
@ViewController("Customer.list")
@ViewDescriptor("customer-list-view.xml")
@LookupComponent("customersDataGrid")
@DialogMode(width = "64em")
public class CustomerListView extends StandardListView<Customer> {
// Jmix injects the data grid; filtering, paging, sorting included out-of-the-box
}
// Detail view for editing a single Customer instance
@Route(value = "customers/:id", layout = MainView.class)
@ViewController("Customer.detail")
@ViewDescriptor("customer-detail-view.xml")
@EditedEntityContainer("customerDc")
public class CustomerDetailView extends StandardDetailView<Customer> {
// Save, discard, and validation are handled automatically
}