···11+opam-version: "2.0"
22+33+synopsis: "Tidy, feature-complete Web framework"
44+tags: ["http" "web" "framework" "websocket" "graphql" "server" "http2" "tls"]
55+66+description: """
77+Dream is a feature-complete Web framework with a simple programming
88+model and no boilerplate. It provides only two data types, request and
99+response.
1010+1111+Almost everything else is either a built-in OCaml type, or an
1212+abbreviation for a bare function. For example, a Web app, known in
1313+Dream as a handler, is just an ordinary function from requests to
1414+responses. And a middleware is then just a function from handlers to
1515+handlers.
1616+1717+Within this model, Dream adds:
1818+1919+- Session management with pluggable back ends.
2020+- A fully composable router.
2121+- Support for HTTP/1.1, HTTP/2, and HTTPS.
2222+- WebSockets.
2323+- GraphQL, including subscriptions and a built-in GraphiQL editor.
2424+- SQL connection pool helpers.
2525+- Server-side HTML templates.
2626+- Automatic secure handling of cookies and forms.
2727+- Unified, internationalization-friendly error handling.
2828+- A neat log, and OCaml runtime configuration.
2929+- Helpers for Web formats, such as Base64url, and a modern cipher.
3030+3131+Because of the simple programming model, everything is optional and
3232+composable. It is trivailly possible to strip Dream down to just a
3333+bare driver of the various HTTP protocols.
3434+3535+Dream is presented as a single module, whose API is documented on one
3636+page. In addition, Dream comes with a large number of examples.
3737+Security topics are introduced throughout, wherever they are
3838+applicable."""
3939+4040+license: "MIT"
4141+homepage: "https://github.com/aantron/dream"
4242+doc: "https://aantron.github.io/dream"
4343+bug-reports: "https://github.com/aantron/dream/issues"
4444+dev-repo: "git+https://github.com/aantron/dream.git"
4545+4646+author: "Anton Bachin <antonbachin@yahoo.com>"
4747+maintainer: "Anton Bachin <antonbachin@yahoo.com>"
4848+4949+depends: [
5050+ "base-unix"
5151+ "bigarray-compat"
5252+ "camlp-streams"
5353+ "caqti" {>= "2.0.0"}
5454+ "caqti-lwt" {>= "2.0.0"}
5555+ ("conf-libev" {os != "win32"} | "ocaml" {os = "win32"})
5656+ "cstruct" {>= "6.0.0"}
5757+ "dream-httpaf" {>= "1.0.0~alpha3"}
5858+ "dream-pure" {>= "1.0.0~alpha2"}
5959+ "dune" {>= "2.7.0"} # --instrument-with.
6060+ "fmt" {>= "0.8.7"} # `Italic.
6161+ "graphql_parser"
6262+ "graphql-lwt"
6363+ "lambdasoup" {>= "0.6.1"}
6464+ "lwt"
6565+ "lwt_ppx" {>= "1.2.2"}
6666+ "lwt_ssl"
6767+ "logs" {>= "0.5.0"}
6868+ "magic-mime"
6969+ "markup" {>= "1.0.2"}
7070+ "mirage-clock" {>= "3.0.0"} # now_d_ps : unit -> int * int64.
7171+ "mirage-crypto" {>= "0.8.1"} # AES-256-GCM.
7272+ "mirage-crypto-rng"
7373+ "mirage-crypto-rng-lwt"
7474+ "multipart_form" {>= "0.4.0"}
7575+ "multipart_form-lwt"
7676+ "ocaml" {>= "4.08.0"}
7777+ "ptime" {>= "0.8.1"} # Ptime.v.
7878+ "ssl" {>= "0.5.8"} # Ssl.get_negotiated_alpn_protocol.
7979+ "uri" {>= "4.2.0"}
8080+ "yojson" # ...
8181+8282+ # Testing, development.
8383+ "alcotest" {with-test}
8484+ "bisect_ppx" {with-test & >= "2.5.0"} # --instrument-with.
8585+ "caqti-driver-postgresql" {with-test}
8686+ "caqti-driver-sqlite3" {with-test}
8787+ "crunch" {with-test}
8888+ "js_of_ocaml" {with-test}
8989+ "js_of_ocaml-ppx" {with-test}
9090+ "ppx_expect" {with-test & >= "v0.15.0"} # Formatting changes.
9191+ "ppx_yojson_conv" {with-test}
9292+ "reason" {with-test}
9393+ "tyxml" {with-test & >= "4.5.0"}
9494+9595+ # Blocked until https://github.com/ocsigen/tyxml/pull/312.
9696+ # "tyxml-jsx" {with-test & >= "4.5.0"}
9797+ # "tyxml-ppx" {with-test & >= "4.5.0"}
9898+]
9999+100100+build: [
101101+ ["dune" "build" "-p" name "-j" jobs]
102102+]
103103+104104+url {
105105+ src: "https://github.com/aantron/dream/releases/download/1.0.0-alpha6/dream-1.0.0-alpha6.tar.gz"
106106+ checksum: "sha256=8d3b6344c0e175aca628b3d5bb8ee58265e8c1074fc2d40d63f136fef83daf90"
107107+}