Your production web stack in 2020

Not my “full-2020-stack” but I just deployed the port of https://tqtezos.github.io/TZComet/ from Tyxml_js/React/ReactiveData to Tyxml-lwd from @let-def

  • cf. https://github.com/let-def/lwd — OCaml 2020 had a talk about Nottui/Lwd
  • it’s a client-side-only JSOO app, but it can talk to public Tezos nodes, so technically the “backend” is Cohttp/Lwt-based likely behind nginx-like proxies.

Pretty happy with Tyxml_lwd:

  • I initially hit a couple of bugs, that @let-def fixed very fast (I think I was the first bigger user).
  • It is overall not that different from the Tyxml_js combo, but the API is simpler and feels way cleaner:
    • there is no “reactiveData” awkward middle-person (or let’s say its equivalent is better integrated in the Lwd case)
    • there are less (no?) traps with React.S.value throwing exceptions or == equality being used in subtle ways
    • There is no Tyxml_js.Html Vs Tyxml_js.Html.R distinction, which makes it easier to build nicer UI abstractions on top of HTML.
    • Bonus points for let empty () = Lwd.pure Lwd_seq.empty and
      let ( % ) a b = Lwd.map2 ~f:Lwd_seq.concat a b
      allowing me to have an efficient and very practical “HTML monoid” interface.
9 Likes