dream

Tidy, feature-complete Web framework
README

Dream is one flat module in one package, documented on
one page, but with many examples. It offers:

...all without sacrificing ease of use — Dream has:

Every part of the API is arranged to be easy to understand, use, and remember.
Dream sticks to base OCaml types like string and list, introducing only a
few types of its own — and some of those are just abbreviations
for bare functions!

The neat interface is not a limitation. Everything is still configurable by a
large number of optional arguments, and very loose coupling. Where necessary,
Dream exposes the lower-level machinery that it is composed from. For example,
the basic body and WebSocket readers return strings, but you can
also do zero-copy streaming.

You can even run Dream as a quite bare abstraction over its underlying
set of HTTP libraries
, where it acts only as minimal glue code between
their slightly different interfaces.

And, even though Dream is presented as one package for ordinary usage, it is
internally factored into several sub-libraries, according to the
different dependencies of each, for fast porting to different environments.

Dream is a low-level and unopinionated framework, and you can swap out its
conveniences. For example, you can use TyXML with server-side JSX
instead of Dream's built-in templates. You can bundle assets into a single
Dream binary
, or use Dream in a subcommand. Dream tries to be as
functional as possible, touching global runtime state only lazily, when called
into.

Quick start

This downloads and runs quickstart.sh, which does a
sandboxed build of one of the first tutorials,
2-middleware. It's mostly the same as:

git clone https://github.com/aantron/dream.git --recursive
cd dream/example/2-middleware
npm install esy && npx esy
npx esy start

Knowing that, you can start from any other example. All of them
include their own build commands. They don't have to be subdirectories of
dream — you can copy them out to start your own project directory.
Especially consider starting with the full-stack examples, which
build both a Dream server and a JavaScript client.

opam

opam install dream

After that, go to one of the examples, such as 1-hello, and
build it:

cd example/1-hello
dune exec --root . ./hello.exe

Playground

Most of the examples are loaded into the playground. For instance,
2-middleware is at
http://dream.as/2-middleware.

Documentation

Contributing

All kinds of contributions are welcome, including examples, links to blogs,
related libraries, and, of course, PRs! See CONTRIBUTING.md.

As an immediate note, if you'd like to clone the repo, be sure to use
--recursive, because Dream uses several git submodules:

git clone https://github.com/aantron/dream.git --recursive

Acknowledgements

Dream is based on work by the authors and contributors of its many
dependencies
and their transitive dependencies. There are, however,
several influences that cannot be discovered directly:

Install
Published
17 May 2021
Maintainers
Sources
dream-1.0.0-alpha2.tar.gz
md5=1220f17530522e488653eb91115867e3
Dependencies
tyxml-ppx
with-test & >= "4.5.0"
tyxml-jsx
with-test & >= "4.5.0"
tyxml
with-test & >= "4.5.0"
reason
with-test
ppx_expect
with-test
lambdasoup
with-test
crunch
with-test
bisect_ppx
with-test & >= "2.5.0"
alcotest
with-test
faraday
>= "0.6.1"
digestif
>= "0.7.2"
bigstringaf
>= "0.5.0"
angstrom
>= "0.14.0"
uri
>= "4.2.0"
ocaml
>= "4.08.0"
multipart_form
>= "0.3.0" & < "0.4.0"
mirage-crypto
>= "0.8.1"
logs
>= "0.5.0"
ssl
>= "0.5.8"
lwt_ppx
>= "1.2.2"
fmt
>= "0.8.7"
dune
>= "2.7.0"
cstruct
>= "6.0.0"
conf-libev
os != "win32"
caqti
>= "1.4.0"
base64
>= "3.1.0"
Reverse Dependencies