Skip to content

jchavarri/ocaml_webapp

Repository files navigation

ocaml_webapp

A minimal example of a lightweight webapp in OCaml.

It features a possible organization of files to maximize code sharing between server (native OCaml) and client (BuckleScript). Some of the things shared are:

  • React components, which are server-side rendered with Tyxml and hydrated with ReasonReact
  • Routes, through the OCaml library Routes.
  • API endpoints interface types, through library ATD, that also generates encoders / decoders automatically.

Potentially, shared folder can contain other shared code like validation functions, data processing, etc.

Getting started

Create an opam local switch:

make create-switch

Install dune in the newly created switch:

opam install dune

Install all dependencies:

make deps

Build client:

yarn webpack:dev

Build and run the server:

make run

Open the browser and go to http://localhost:3000/.

It's also possible to get hot reloading while developing. For that, start the server (to be able to serve API requests) with make run, run BuckleScript in yarn start and then start Webpack dev server with yarn server.

Run databases locally

docker-compose -f docker-compose.dev.yml up -d

Deploying to Heroku

Right now, the example allows to easily deploy the app to Heroku. Build times are longer than they should, but hopefully this will be fixed soon.

  • Install the Heroku CLI: http://toolbelt.heroku.com/
  • Run heroku create your_app from the app folder
  • Set stack for the app to container: heroku stack:set container
  • git push heroku master

Resources