Your blog mainly focus on pooling (an integrated function of the dream framework), and only expose a trivial SQL execution. (Caqti typically uses embedded typ2 or t2 function for types description) ppx_rapper is complementary and is useful with complex query with many fields (input and output). See my Cookbook article SQLite CREATE, INSERT, SELECT using ppx_rapper_lwt - OCaml Cookbook or the official documentation GitHub - roddyyaga/ppx_rapper: Syntax extension for writing SQL in OCaml