Major
- Complete rework of the internal I/O model, now supporting flow control, pipe-like programming, stream transformers, low-level WebSocket events, efficient WebSocket I/O, exception passing, trivial composition with client library (2075347 to ed1c949, 5cd57e1, others).
- Convert from immutable to mutable requests and conversion of the API to
t-first style (#21). - Factor out Dream core into opam package
dream-pure, to also be used in the client (2f40d67 to e106e6e, 037645f to 8652178, dd41df9, others). - Factor out the http/af stack and helpers directly tied to it that need to be shared with the client into opam package
dream-httpaf(110575d, acc2efc). - Remove "global" (per-server) variables (d81b198).
- Rename "local" (per-message) variables to "fields" (5a54d5c).
- Use a middleware to set secrets (2529b9a).
- Use a middleware to set site prefix (3da5e23).
- Replace
?debugby just using a different error handler (640a1b2). - Rename
?httpsto?tls(7320f87). - Miscellaneous renamings. Most old values are still temporarily present with attached deprecation attributes to help migrate.
Additions
- Flash message support (#62, #137, #173, Joe Thomas).
- Warning about using
sqlite:scheme instead ofsqlite3:(#92, Anton Outkine). - Pass the entire error object to error template calls (#162, reported by
Jean-Michel Bea). ?csrfto skip the CSRF check inDream.form,Dream.multipart(#167, José Eduardo Monteiro).- Per-source log level configuration (#171, Joe Thomas).
Dream.drop_cookie(#169, Shawn McGinty).- Simplification: assign request IDs lazily and implicitly (bb2924d).
Dream.csrf_tag, a less obtrustive replacement forDream.form_tag(#201, Yawar Amin).
Bugs fixed
Dream.staticwas settingContent-Type:headers for non-existent files (#88, reported by Khoa Nguyen).- Use bigstringaf instead of
Lwt_bytesto minimize Unix dependencies (#107, Calascibetta Romain). - Limit
Dream.redirect~statusto only redirections (#130, Khoa Nguyen). Dream.redirect: don't writeLocationto the response body (b0f64df).- Restore terminal settings upon exit by
SIGINT(#151, Anton Outkine). - Don't try to ignore
SIGPIPEon Windows (#158, Manas Jayanth).
Examples
- Depend on OCaml Platform in
esy.json(#65, Dennis Dang). - Content security policy (#48, #49).
.eml.htmlusage (#68, Ryan Moore).- WebSocket chat (#77, Thomas Coopman).
- Fix esy build of js_of_ocaml example (#103, Ulrik Strid).
- Improve the playground CSS (#109, #124, #126, #127, #128, Khoa Nguyen, @artileda).
- Dream with PostgreSQL and Docker Compose (#112, Joe Thomas).
- nginx usage (#140, Joe Thomas).
- Control flow in templates (#150, Anton Outkine).
- Adapt
esy.jsons to build on M1 (#163, Peter Mondlock). - Fly deployment (#161, Dennis Dang).
- Clarify Mirage example commands (#172, Michael Bacarella).
- Update to ReScript project names in the ReScript example (#188, Glenn Slotte).
Documentation
- Fix
sqlite3URI in SQL snippet (#80, Khoa Nguyen).