From e5258c530340392664fab8d192031e54a6faae05 Mon Sep 17 00:00:00 2001 From: Sebastian Willenbrink Date: Mon, 5 Oct 2026 17:38:48 +0200 Subject: [PATCH 1/7] Update maintainers --- LICENSE.md | 2 +- docs/web/web.opam | 2 +- dream-httpaf.opam | 2 +- dream-mirage.opam | 2 +- dream-pure.opam | 2 +- dream.opam | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/LICENSE.md b/LICENSE.md index c90d556c..e9cded04 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,4 +1,4 @@ -Copyright (c) 2021-2024, Anton Bachin +Copyright (c) 2021-2026, Anton Bachin Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/docs/web/web.opam b/docs/web/web.opam index 75555f02..b24cc514 100644 --- a/docs/web/web.opam +++ b/docs/web/web.opam @@ -1,7 +1,7 @@ opam-version: "2.0" synopsis: "Dream docs" -maintainer: "Anton Bachin " +maintainer: ["Sebastian Willenbrink " "Yawar Amin " "Anton Bachin "] depends: [ "lambdasoup" "odoc" {= "2.0.2"} diff --git a/dream-httpaf.opam b/dream-httpaf.opam index 093b5d97..19695529 100644 --- a/dream-httpaf.opam +++ b/dream-httpaf.opam @@ -10,7 +10,7 @@ bug-reports: "https://github.com/camlworks/dream/issues" dev-repo: "git+https://github.com/camlworks/dream.git" author: "Anton Bachin " -maintainer: "Anton Bachin " +maintainer: ["Sebastian Willenbrink " "Yawar Amin " "Anton Bachin "] depends: [ "dream-pure" diff --git a/dream-mirage.opam b/dream-mirage.opam index 5b273304..e6faa803 100644 --- a/dream-mirage.opam +++ b/dream-mirage.opam @@ -44,7 +44,7 @@ bug-reports: "https://github.com/camlworks/dream/issues" dev-repo: "git+https://github.com/camlworks/dream.git" author: "Anton Bachin " -maintainer: "Anton Bachin " +maintainer: ["Sebastian Willenbrink " "Yawar Amin " "Anton Bachin "] depends: [ "bigarray-compat" diff --git a/dream-pure.opam b/dream-pure.opam index 2fb24e63..4199c010 100644 --- a/dream-pure.opam +++ b/dream-pure.opam @@ -10,7 +10,7 @@ bug-reports: "https://github.com/camlworks/dream/issues" dev-repo: "git+https://github.com/camlworks/dream.git" author: "Anton Bachin " -maintainer: "Anton Bachin " +maintainer: ["Sebastian Willenbrink " "Yawar Amin " "Anton Bachin "] depends: [ "base64" {>= "3.1.0"} # Base64.encode_string. diff --git a/dream.opam b/dream.opam index ba7989b4..617817d4 100644 --- a/dream.opam +++ b/dream.opam @@ -44,7 +44,7 @@ bug-reports: "https://github.com/camlworks/dream/issues" dev-repo: "git+https://github.com/camlworks/dream.git" author: "Anton Bachin " -maintainer: "Anton Bachin " +maintainer: ["Sebastian Willenbrink " "Yawar Amin " "Anton Bachin "] depends: [ "base-unix" From 0384e083cdfc47a02eab087adf0ad3a57cab98b0 Mon Sep 17 00:00:00 2001 From: Sebastian Willenbrink Date: Mon, 5 Oct 2026 17:39:56 +0200 Subject: [PATCH 2/7] Remove mentions of alpha --- example/README.md | 2 +- example/g-upload/README.md | 2 +- example/r-graphql/esy.json | 2 +- example/r-hello/esy.json | 2 +- example/r-html_of_jsx/README.md | 2 +- example/r-html_of_jsx/esy.json | 2 +- example/r-template-files/esy.json | 2 +- example/r-template-logic/esy.json | 2 +- example/r-template-stream/esy.json | 2 +- example/r-template/esy.json | 2 +- example/r-tyxml/README.md | 2 +- example/r-tyxml/esy.json | 2 +- example/w-esy/README.md | 2 +- example/w-esy/esy.json | 2 +- example/w-fullstack-rescript/esy.json | 2 +- example/z-docker-esy/esy.json | 2 +- example/z-fly/esy.json | 2 +- example/z-heroku/esy.json | 2 +- 18 files changed, 18 insertions(+), 18 deletions(-) diff --git a/example/README.md b/example/README.md index 2351c386..6e0f2715 100644 --- a/example/README.md +++ b/example/README.md @@ -154,7 +154,7 @@ if something is missing! # Roadmap -These examples will be trickled in during the alpha releases. +These examples will be trickled in during future releases. Ideas: diff --git a/example/g-upload/README.md b/example/g-upload/README.md index 472e1144..00765d8a 100644 --- a/example/g-upload/README.md +++ b/example/g-upload/README.md @@ -69,7 +69,7 @@ This example uses [`Dream.multipart`](https://camlworks.github.io/dream/#val-multipart) (named after `Content-Type: multipart/form-data`). [`Dream.multipart`](https://camlworks.github.io/dream/#val-multipart) receives -entire files into strings. Size limits will be added in one of the early alphas. +entire files into strings. Size limits will be added in a future release. However, this is only good for rare, small uploads, such as user avatars, or for prototyping. diff --git a/example/r-graphql/esy.json b/example/r-graphql/esy.json index 6482d70e..efee2157 100644 --- a/example/r-graphql/esy.json +++ b/example/r-graphql/esy.json @@ -1,7 +1,7 @@ { "dependencies": { "@opam/conf-libssl": "3", - "@opam/dream": "1.0.0~alpha5", + "@opam/dream": "1.0.0", "@opam/dune": "^3.0", "@opam/reason": "^3.8.0", "ocaml": "^4.14.0" diff --git a/example/r-hello/esy.json b/example/r-hello/esy.json index f310f7ec..d5f376fd 100644 --- a/example/r-hello/esy.json +++ b/example/r-hello/esy.json @@ -1,7 +1,7 @@ { "dependencies": { "@opam/conf-libssl": "3", - "@opam/dream": "1.0.0~alpha5", + "@opam/dream": "1.0.0", "@opam/dune": "^3.0", "@opam/reason": "^3.8.0", "ocaml": "^4.14.0" diff --git a/example/r-html_of_jsx/README.md b/example/r-html_of_jsx/README.md index 8f8db583..299f1f57 100644 --- a/example/r-html_of_jsx/README.md +++ b/example/r-html_of_jsx/README.md @@ -35,7 +35,7 @@ To get this, we depend on package `html_of_jsx` in
{
   "dependencies": {
-    "@opam/dream": "1.0.0~alpha4",
+    "@opam/dream": "1.0.0",
     "@opam/dune": "^2.0",
     "@opam/reason": "^3.8.0",
     "@opam/html_of_jsx": "*",
diff --git a/example/r-html_of_jsx/esy.json b/example/r-html_of_jsx/esy.json
index 89c700aa..6ae78b11 100644
--- a/example/r-html_of_jsx/esy.json
+++ b/example/r-html_of_jsx/esy.json
@@ -1,7 +1,7 @@
 {
   "dependencies": {
     "@opam/conf-libssl": "3",
-    "@opam/dream": "1.0.0~alpha5",
+    "@opam/dream": "1.0.0",
     "@opam/dune": "^3.0",
     "@opam/reason": "^3.8.0",
     "@opam/html_of_jsx": "0.0.4",
diff --git a/example/r-template-files/esy.json b/example/r-template-files/esy.json
index 62d26806..3d21e0c2 100644
--- a/example/r-template-files/esy.json
+++ b/example/r-template-files/esy.json
@@ -1,7 +1,7 @@
 {
   "dependencies": {
     "@opam/conf-libssl": "3",
-    "@opam/dream": "1.0.0~alpha5",
+    "@opam/dream": "1.0.0",
     "@opam/dune": "^3.0",
     "ocaml": "^4.14.0"
   },
diff --git a/example/r-template-logic/esy.json b/example/r-template-logic/esy.json
index e29ae7c3..1e30e8e6 100644
--- a/example/r-template-logic/esy.json
+++ b/example/r-template-logic/esy.json
@@ -1,7 +1,7 @@
 {
   "dependencies": {
     "@opam/conf-libssl": "3",
-    "@opam/dream": "1.0.0~alpha5",
+    "@opam/dream": "1.0.0",
     "@opam/dune": "^3.0",
     "@opam/reason": "^3.8.0",
     "ocaml": "^4.14.0"
diff --git a/example/r-template-stream/esy.json b/example/r-template-stream/esy.json
index 3ef68400..d2ab7d59 100644
--- a/example/r-template-stream/esy.json
+++ b/example/r-template-stream/esy.json
@@ -1,7 +1,7 @@
 {
   "dependencies": {
     "@opam/conf-libssl": "3",
-    "@opam/dream": "1.0.0~alpha5",
+    "@opam/dream": "1.0.0",
     "@opam/dune": "^3.0",
     "@opam/reason": "^3.8.0",
     "ocaml": "^4.14.0"
diff --git a/example/r-template/esy.json b/example/r-template/esy.json
index e29ae7c3..1e30e8e6 100644
--- a/example/r-template/esy.json
+++ b/example/r-template/esy.json
@@ -1,7 +1,7 @@
 {
   "dependencies": {
     "@opam/conf-libssl": "3",
-    "@opam/dream": "1.0.0~alpha5",
+    "@opam/dream": "1.0.0",
     "@opam/dune": "^3.0",
     "@opam/reason": "^3.8.0",
     "ocaml": "^4.14.0"
diff --git a/example/r-tyxml/README.md b/example/r-tyxml/README.md
index ab74097b..9af0f67b 100644
--- a/example/r-tyxml/README.md
+++ b/example/r-tyxml/README.md
@@ -41,7 +41,7 @@ To get this, we depend on package `tyxml-jsx` in
 
 
{
   "dependencies": {
-    "@opam/dream": "1.0.0~alpha4",
+    "@opam/dream": "1.0.0",
     "@opam/dune": "^2.0",
     "@opam/reason": "^3.8.0",
     "@opam/tyxml": "*",
diff --git a/example/r-tyxml/esy.json b/example/r-tyxml/esy.json
index 3010d31e..7ada98f2 100644
--- a/example/r-tyxml/esy.json
+++ b/example/r-tyxml/esy.json
@@ -1,7 +1,7 @@
 {
   "dependencies": {
     "@opam/conf-libssl": "3",
-    "@opam/dream": "1.0.0~alpha5",
+    "@opam/dream": "1.0.0",
     "@opam/dune": "^3.0",
     "@opam/reason": "^3.8.0",
     "@opam/tyxml": "*",
diff --git a/example/w-esy/README.md b/example/w-esy/README.md
index ce14f999..3d5121ba 100644
--- a/example/w-esy/README.md
+++ b/example/w-esy/README.md
@@ -10,7 +10,7 @@ and looks like this:
 ```json
 {
   "dependencies": {
-    "@opam/dream": "1.0.0~alpha4",
+    "@opam/dream": "1.0.0",
     "@opam/dune": "^2.0",
     "ocaml": "4.12.x"
   },
diff --git a/example/w-esy/esy.json b/example/w-esy/esy.json
index 3dc785b3..d18edfb9 100644
--- a/example/w-esy/esy.json
+++ b/example/w-esy/esy.json
@@ -1,7 +1,7 @@
 {
   "dependencies": {
     "@opam/conf-libssl": "3",
-    "@opam/dream": "1.0.0~alpha5",
+    "@opam/dream": "1.0.0",
     "@opam/dune": "^3.0",
     "ocaml": "^4.14.0"
   },
diff --git a/example/w-fullstack-rescript/esy.json b/example/w-fullstack-rescript/esy.json
index 8d952651..f17507d1 100644
--- a/example/w-fullstack-rescript/esy.json
+++ b/example/w-fullstack-rescript/esy.json
@@ -1,7 +1,7 @@
 {
   "dependencies": {
     "@opam/conf-libssl": "3",
-    "@opam/dream": "1.0.0~alpha5",
+    "@opam/dream": "1.0.0",
     "@opam/dune": "^3.0",
     "ocaml": "^4.14.0"
   },
diff --git a/example/z-docker-esy/esy.json b/example/z-docker-esy/esy.json
index 486351a1..50e733bf 100644
--- a/example/z-docker-esy/esy.json
+++ b/example/z-docker-esy/esy.json
@@ -1,7 +1,7 @@
 {
   "dependencies": {
     "@opam/conf-libssl": "3",
-    "@opam/dream": "1.0.0~alpha5",
+    "@opam/dream": "1.0.0",
     "@opam/dune": "^3.0",
     "ocaml": "^4.14.0"
   },
diff --git a/example/z-fly/esy.json b/example/z-fly/esy.json
index f4022d8c..3d5b4c38 100644
--- a/example/z-fly/esy.json
+++ b/example/z-fly/esy.json
@@ -5,7 +5,7 @@
   },
   "dependencies": {
     "@opam/conf-libssl": "3",
-    "@opam/dream": "1.0.0~alpha5",
+    "@opam/dream": "1.0.0",
     "@opam/dune": "^3.0",
     "ocaml": "^4.14.0"
   },
diff --git a/example/z-heroku/esy.json b/example/z-heroku/esy.json
index 7020dae3..bcc60f99 100644
--- a/example/z-heroku/esy.json
+++ b/example/z-heroku/esy.json
@@ -1,7 +1,7 @@
 {
   "dependencies": {
     "@opam/conf-libssl": "3",
-    "@opam/dream": "1.0.0~alpha5",
+    "@opam/dream": "1.0.0",
     "@opam/dune": "^3.0",
     "ocaml": "^4.14.x"
   },

From ecb58afda1f284a690a916c735eb9741d075b686 Mon Sep 17 00:00:00 2001
From: Sebastian Willenbrink 
Date: Mon, 5 Oct 2026 17:40:09 +0200
Subject: [PATCH 3/7] Add {= version} constraints for dream pkgs

See https://opam.ocaml.org/blog/opam-extended-dependencies/#Computed-versions
---
 dream-httpaf.opam | 2 +-
 dream-mirage.opam | 6 +++---
 dream.opam        | 4 ++--
 3 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/dream-httpaf.opam b/dream-httpaf.opam
index 19695529..49b9784f 100644
--- a/dream-httpaf.opam
+++ b/dream-httpaf.opam
@@ -13,7 +13,7 @@ author: "Anton Bachin "
 maintainer: ["Sebastian Willenbrink " "Yawar Amin " "Anton Bachin "]
 
 depends: [
-  "dream-pure"
+  "dream-pure" {= version}
   "dune" {>= "2.7.0"}  # --instrument-with.
   "gluten"
   "gluten-lwt-unix"
diff --git a/dream-mirage.opam b/dream-mirage.opam
index e6faa803..a0aca4db 100644
--- a/dream-mirage.opam
+++ b/dream-mirage.opam
@@ -50,9 +50,9 @@ depends: [
   "bigarray-compat"
   "bigstringaf"
   "digestif" {>= "1.0.0"}
-  "dream"
-  "dream-httpaf"
-  "dream-pure"
+  "dream" {= version}
+  "dream-httpaf" {= version}
+  "dream-pure" {= version}
   "dune" {>= "2.7.0"}
   "duration"
   "emile" {>= "1.1"}
diff --git a/dream.opam b/dream.opam
index 617817d4..7a4ad8d8 100644
--- a/dream.opam
+++ b/dream.opam
@@ -55,8 +55,8 @@ depends: [
   ("conf-libev" {os != "win32"} | "ocaml" {os = "win32"})
   "cstruct" {>= "6.0.0"}
   "digestif" {>= "0.7"}  # to_raw_string.
-  "dream-httpaf" {>= "1.0.0~alpha4"}
-  "dream-pure" {>= "1.0.0~alpha2"}
+  "dream-httpaf" {= version}
+  "dream-pure" {= version}
   "dune" {>= "2.7.0"}  # --instrument-with.
   "fmt" {>= "0.8.7"}  # `Italic.
   "graphql_parser"

From 8372ab6ed0ff3707fbd9bf5f76f74ca1eef739e2 Mon Sep 17 00:00:00 2001
From: Sebastian Willenbrink 
Date: Tue, 6 Oct 2026 13:42:42 +0200
Subject: [PATCH 4/7] Bump version shown in docs

---
 docs/web/templates/index.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/docs/web/templates/index.html b/docs/web/templates/index.html
index 25c85f69..d434db8e 100644
--- a/docs/web/templates/index.html
+++ b/docs/web/templates/index.html
@@ -36,7 +36,7 @@ 
Tidy Web framework for OCaml and ReasonML
    -
  • 1.0.0~alpha7
  • +
  • 1.0.0
  • opam install dream
  • GitHub
  • Edit these docs
  • From a0fee5dbdd351fed4f4335a01d7df2799c4e944b Mon Sep 17 00:00:00 2001 From: Sebastian Willenbrink Date: Tue, 6 Oct 2026 13:52:15 +0200 Subject: [PATCH 5/7] Add name to dune-project --- dune-project | 1 + 1 file changed, 1 insertion(+) diff --git a/dune-project b/dune-project index 45acd3f0..679ad41c 100644 --- a/dune-project +++ b/dune-project @@ -1 +1,2 @@ (lang dune 2.7) +(name dream) From 8c5dd4cf564a996ef005b57cef5fa0d22af8bac9 Mon Sep 17 00:00:00 2001 From: Sebastian Willenbrink Date: Tue, 6 Oct 2026 16:46:01 +0200 Subject: [PATCH 6/7] Add CHANGES.md --- CHANGES.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 CHANGES.md diff --git a/CHANGES.md b/CHANGES.md new file mode 100644 index 00000000..989bb10c --- /dev/null +++ b/CHANGES.md @@ -0,0 +1,18 @@ +# 1.0.0 + +This release brings support for OCaml 5.5 and marks the completed transition to the camlworks organization and, with it, more active maintenance. 1.0.0 does not mean that Dream is feature complete or bug free, only that we use semantic versioning from now on. Stay tuned for more regular releases in the future! + +Additions and improvements: +- Require an initialization call for `Dream.memory_sessions`. Fix `Dream.memory_sessions` when combined with `Dream.scope` (@boechat107, #385) +- Shut down server on SIGTERM/SIGINT even when running in docker (@yawaramin, #406) +- Clean up socket file before binding to it if started as Unix socket server (@yawaramin, #407) +- Add `post_connect` option to `sql_pool` (@gahr, #422) +- Suppress EML template detection inside OCaml comments (@MavenRain, #431) + +Miscellaneous: +- Move project to new camlworks organization (#417) +- Update dependencies and support OCaml 5.5 (@lthms, @bensmrs, #381, #415, #434, #439) +- Support latest Mirage version (@boechat107, @hannesm, #383, #393, #395) +- Improve documentation (@aantron, @sabine, @yawaramin, @funwithcthulhu, @blendux, #372, #391, #403, #404, #423, #433) +- Improve examples (@asymmetric, @mostafatouny, @yotamN, @yawaramin, #366, #370, #379, #380, #386, #405) +- CI fixes (#416, #418, #435) From af945fb470bc2f51879248fca45266001657deaf Mon Sep 17 00:00:00 2001 From: Sebastian Willenbrink Date: Tue, 6 Oct 2026 17:14:22 +0200 Subject: [PATCH 7/7] Update docs postprocess --- docs/web/postprocess/index.ml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/web/postprocess/index.ml b/docs/web/postprocess/index.ml index 35e901e4..232d47d4 100644 --- a/docs/web/postprocess/index.ml +++ b/docs/web/postprocess/index.ml @@ -1906,7 +1906,7 @@ let invalidate_session_expected = {|
    - val memory_sessions : ?lifetime:float -> middleware + val memory_sessions : ?lifetime:float -> unit -> middleware
    |} @@ -1951,8 +1951,7 @@ let graphiql_expected = {|
    |} let sql_pool_expected = {|
    - val sql_pool : ?size:int -> -?post_connect:((module Caqti_lwt.CONNECTION) -> (unit, Caqti_error.t) Stdlib.result promise) -> string -> middleware + val sql_pool : ?size:int -> ?post_connect:(Caqti_lwt.connection -> unit promise) -> string -> middleware
    |} @@ -2383,7 +2382,7 @@ let pretty_print_signatures soup = "#val-all_session_fields" all_session_fields_expected ["string"; "list"]; link_stdlib_type "#val-invalidate_session" invalidate_session_expected ["unit"]; - link_stdlib_type "#val-memory_sessions" memory_sessions_expected ["float"]; + link_stdlib_type "#val-memory_sessions" memory_sessions_expected ["float"; "unit"]; link_stdlib_type "#val-cookie_sessions" cookie_sessions_expected ["float"]; link_stdlib_type "#val-sql_sessions" sql_sessions_expected ["float"]; link_stdlib_type "#val-session_id" session_id_expected ["string"]; @@ -2405,7 +2404,7 @@ let pretty_print_signatures soup = multiline "#val-graphql" graphql_expected graphql_replacement; link_stdlib_type "#val-graphiql" graphiql_expected ["string"]; - link_stdlib_type "#val-sql_pool" sql_pool_expected ["int"; "string"]; + link_stdlib_type "#val-sql_pool" sql_pool_expected ["int"; "string"; "unit"]; multiline "#val-sql" sql_expected sql_replacement; replace "#val-log" log_expected log_replacement;