QQQ: a year of making the framework contract explicit
I judge a framework by how much repeated reasoning it lets an application stop doing. Forms and data actions are visible examples. The harder work is agreeing on identity, permissions, version compatibility and what happens when a process crosses a boundary. QQQ's public history over this period makes that work visible.
CTO to Human: what the history tells us
The progression from Java 21 adoption through computed fields and the 4.0 versioning contract is a useful way to read the history. Each milestone makes another assumption explicit. The 4.1 candidates extend the discussion into messaging and richer frontend behavior, while retaining documented acceptance limitations. A release candidate is a place to inspect those limits, not a reason to omit them.
Engineer to Engineer: the boundary that matters
A field function has to mean something consistent across backends. An OAuth2 deployment needs to distinguish the URL used inside a cluster from the one a person reaches outside it. An event trigger needs concurrency, retry and failure behavior. These contracts are more valuable when they compose through the same metadata and process model than when each application solves them independently.
Milestones in the public record
- 2025-10-14 — Making scheduled work understandable. Cron expressions are compact enough for software and often opaque to the person operating it. The October change expanded the UI capabilities around cron-expression fields. Project journal.
- 2025-11-04 — Measuring the work behind a data action. The November query-statistics change added QueryStats across low-level table actions, including record counts. It made the framework action itself a place to observe data work. Project journal.
- 2025-12-28 — QQQ 0.35: moving the baseline to Java 21. QQQ 0.35 moved the framework baseline from Java 17 to Java 21. Its release notes also identify JUnit 6, Checkstyle updates, health-check middleware and improved single-page-application deep linking. Project journal.
- 2026-01-09 — An extension point for OAuth2 authentication. January brought customizer support to OAuth2AuthenticationModule. The change gives applications an explicit place to extend authentication behavior within the framework. Project journal.
- 2026-02-02 — Quick Saved Views bring reusable queries closer to the user. February introduced Quick Saved Views as an extension of Saved Views, with a quicker presentation path. The commit describes the new concept and its relationship to the existing saved-view model. Project journal.
- 2026-03-29 — QQQ 0.40: computed fields and stronger data boundaries. QQQ 0.40 brought field functions with backend-specific implementations, OAuth2 externalBaseUrl support and fixes around joins and in-memory record handling. The notes also call out removal of SHA1 compatibility from table-based password authentication. Project journal.
- 2026-05-02 — Making middleware package boundaries explicit. The May refactoring consolidated the Javalin middleware into the middleware.javalin package. The commit names it as a breaking change. .
The public record supports a story of increasingly explicit boundaries. It does not support calling every branch feature stable, treating a paired UI candidate as universally accepted, or turning every merged fix into a performance claim. That precision is part of explaining a technical vision: describe the direction, then be equally clear about what has actually shipped.
Retrospective written on October 12, 2026, covering the public evidence available for October 12, 2025 through October 12, 2026. Linked journal entries use source event dates; this essay is a newly written retrospective. Quiet months do not imply an unrecorded release, and short-lived projects are not presented as having a full year of activity.