Documentation
Explanation
How the parts work and why they are shaped the way they are, at reading pace.
- The case class is the source of truth
This page is for you if you've been through the first model and want to know why one derives clause gets you a table, a form and seven routes, where each of…
- The two layers
An eezo application talks to a database, serves HTTP, or does both, and it says which by the artifact it depends on. This page is about what that choice buys…
- Routing by file layout
You've put a file under app/ and a route appeared. This page is about how that happens: what runs before the compiler, what order the table ends up in, how a…
- URLs as values, and what a mount moves
This page is about one failure and the type that prevents it. If you've mounted a set of routes under a prefix and wondered why the links kept working, this is…
- A request, read whole; a response, as a value
A handler is a function from Request to Response. This page is about the two shapes: what you're handed, what you hand back, and the decisions behind both.
- Sessions, flash and the CSRF token
What a browser carries between requests, how eezo keeps it honest, and how a form proves it came from this application and not from a stranger's page.
- Guards, guarded routes and owned rows
Three questions get mixed up in most frameworks: is somebody there, may they take this action, and are these rows theirs. eezo keeps them apart, with one type…
- The database layer
The connection pool, the two scopes a handler opens, the query layer, and the type-level trick that keeps a connection from leaking out of the block that…
- Schema, drift and migrations
The model is the schema, and the database is what drifted. This page is about how eezo proves that: the snapshot, the diff, the fingerprinted migration file,…
- The live layer
State on the server, a thin browser, one socket. This page is about what travels over that socket, how a tree is diffed, what happens when the connection goes,…
- Failures
A failure travels to the nearest boundary that owns it, and a boundary owns the failures it names. That's the whole model. This page is about the two kinds of…
- The dev loop
What eezo dev does on every save, what the browser does in response, and why a failed compile is not an outage.
- The server
Jetty on virtual threads, what stop does, and what the framework serves without being asked. This page is about the process your routes run in.
- Deployment
What one command stages, what the platform is trusted with, and why a redeploy is short and a first deploy isn't. Deploying is the recipe; this is the shape…