# A Lightweight OCaml Webapp Tutorial (Using Opium, Caqti, and Tyxml)

**URL:** <https://discuss.ocaml.org/t/a-lightweight-ocaml-webapp-tutorial-using-opium-caqti-and-tyxml/4967>\
**Category:** Community\
**Tags:** opium, tyxml, caqti, web\
**Created:** [January 6, 2020, 2:57am UTC](https://discuss.ocaml.org/t/a-lightweight-ocaml-webapp-tutorial-using-opium-caqti-and-tyxml/4967 "2020-01-06T02:57:41Z")\
**Posts on this page:** 1\
**Showing post:** 1

<div class="post-metadata">

**Author:** ![shonfeder](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ocaml.org/shonfeder/32/424_2.png) [@shonfeder](https://discuss.ocaml.org/u/shonfeder)\
**Post date:** [January 6, 2020, 2:57am UTC](https://discuss.ocaml.org/t/a-lightweight-ocaml-webapp-tutorial-using-opium-caqti-and-tyxml/4967/1 "2020-01-06T02:57:42Z")

</div>

The tutorial is [hosted on gitlab pages](https://shonfeder.gitlab.io/ocaml_webapp/), out of [this repository](https://gitlab.com/anuragsoni/ocaml_webapp).

I put this together in response to some requests for introductory material on the topic (here and on [/r/ocaml](https://www.reddit.com/r/ocaml/). I don’t have much expertise to offer in this area, but I had hacked together some simple servers based on Opium in the past few months, so it seemed like I should be able to memorialize some of what I learned for the benefit of others. I received some critical guidance by the Opium maintainers, rgrinberg and anuragsoni, and from other resources online (mentioned at the end of the tutorial).

Any feedback or improvements are welcome: this is my first time writing such lengthy instructional material, and I’m sure there’s lots of room to make it better.

---

_[View the full topic](https://discuss.ocaml.org/t/a-lightweight-ocaml-webapp-tutorial-using-opium-caqti-and-tyxml/4967)._
