Overview
A small JVM framework exploring clean design and simplicity-first APIs. Inspired by Javalin, Axiom is more of a learning sandbox for JVM patterns than a serious framework — it's a place I try things out.
/ Scope
- JVM HTTP server
- Routing DSL
- Minimal configuration surface
Highlights
01
Lightweight framework design
02
JVM ecosystem exploration
03
Simplicity-first routing API
/ Tracks
- Research
- Open source
The Problem
Coming from Node, JVM web frameworks felt heavier than they needed to be. I wanted to understand what a minimal, Javalin-like framework would look like if I wrote it myself, and what trade-offs Javalin actually makes under the hood.
Approach
Pick a small, opinionated subset of Javalin's API (routing + handlers + JSON) and rebuild it from scratch. Not to ship; to learn how JVM idioms shape an API that looks this simple on the surface.
Key Decisions
- 01
Fluent routing DSL
`app.get("/users", ctx -> ...)` reads well. Implementation is a small registry + a dispatcher.
- 02
No annotations
Kept the framework annotation-free to make the flow easier to follow. Stack traces point at user code, not at reflection magic.
Challenges & How I Solved Them
JVM ergonomics vs ts ergonomics
/ Problem
Some patterns that are trivial in TS (union types, narrow utility types) don't translate cleanly.
/ Solution
Leaned into records and sealed types where they fit. Accepted that some APIs would look different from the TS equivalents instead of forcing them.
Outcomes
- A better intuition for Javalin's design choices
- Comfort writing small, opinionated JVM code
What I Learned
- 01
Studying a framework by rebuilding it is 10x faster than reading about it
- 02
Simplicity is a design output, not a starting point
Tech Stack
/ Inspired by
- Javalin
Next Steps
- Write a short post comparing Axiom's API to Javalin's — what's similar, what's different, and why