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…