What jimble is#
jimble is a web framework for Java. It sits on Helidon's Níma (virtual threads) and gives you routing, DB, templates, batch, MQ, SSE, WebSocket, and MCP as one piece.
get("/hello", context -> context.response().send("hello, jimble\n"));
What makes it different#
Most frameworks aim to reduce how much you write. jimble aims to let the person reading the code follow it top to bottom.
- No annotations. There is no
@Controller, no@Inject, no@Transactional. A route exists only whereget("/hello", ...)is written. - No DI container. You
newyour objects. Who creates whom is right there in the code. - No classpath scanning at startup. Startup is fast, and nothing fights with native images.
In exchange, you
install()what you use yourself.
Hold to these three and the "why does this even work?" hours disappear. The price is a few extra lines. jimble thinks that is the cheaper side of the trade.
Read Principles for the details.
What it can do today#
| What you can do | Where to look |
|---|---|
| HTTP routing, path parameters, filters | Routing |
| Reading and validating requests, building responses | Request and response |
| File upload and download | File upload |
| Input validation, paging | Validation and paging |
| Handling exceptions, unmatched routes, validation failures | Error handling |
| jte templates (precompiled) | Templates |
| Serving static files, SPAs, MPAs | Static files and SPAs |
| Session, CSRF, flash, signed cookies | Session and safe defaults |
| Rate limiting (per route, per IP) | Rate limiting |
| Virtual threads, what runs where, how to stop it | Execution model |
| SQL DSL, generating table definitions | Using the DB |
| The migration and code generation flow | Migrations and code generation |
| Transactions | Transactions |
| Cache (DB / memory / Redis) and distributed locks | Cache and locks |
| Batch jobs on cron, and the admin screen | Batch |
| A queue backed by the DB | MQ |
| Server-Sent Events | SSE |
| WebSocket | WebSocket |
| A Model Context Protocol server | MCP |
| Installing the CLI, generating a skeleton, hot reload | The jimble command / Hot reload |
| Gradle tasks and configuration | the Gradle plugins |
| How to write tests (including how to split off the ones that use the DB) | Testing |
| Data, JSON, HTTP client, CSV, crypto | Utilities |
| Ports, limits, proxies, compression | Server configuration |
| Access logs, execution IDs, logback configuration | Logging |
About versions#
This site describes the latest release. It is published only when a release is cut, so what you read here works on the version you can download.
The releases are on Maven Central. The dependency coordinates and a build file that works as it stands are on the Gradle plugins page; the source is on GitHub.