I would like to advertise the release of Forester 2.2.1 on opam, which is an OCaml utility to develop “Forests”, which are densely interlinked mathematical websites / Zettelkästen similar to the Stacks Project or Kerodon. An example of a “Forest” is my own website.
Package: opam - forester
Forester is potentially of technical interest to this community as it makes use of new OCaml 5 features like effect handlers, as well as certain functions from
Beautiful! I will definitely try it out, as I have thought about having my evergreen notes / digital garden-like website for several months.
Update: I am building my website with it: https://trail.brackets-salad.com/. The result looks fantastic and I will continue to try for a while longer.
Forester is licensed under the GPLv3 (excellent) so, technically, if I use
assets/ in the repository as a starting point, my website is a covered work in a GPLv3 sense?
Well, I believe that @jonsterling’s intent differs, but, to be clear, would you make a separate repository for a forest template licensed under CC0, zlib, MIT or such?
Hi, thanks for pointing this out. It is indeed not intentional that your use of the example code should force you to adopt a particular license for your own forest, or even force you to contribute back changes to (e.g.) the XSLT stylesheet. To avoid any ambiguity, I think i will move the example code to a new repository licensed more permissively. The only thing i intend to be copylefted was the OCaml utility itself.
Out of curiosity, what is the backing store for forester? Is it Irmin?
@yawaramin Good question. Right now the “store” is just some hashtables in memory, as well as some graphs from the
ocamlgraph library. These things are reconstituted from your actual plain-text forest (
.tree files) every time forester is executed. In the future, especially as forests get larger and more deeply transcluded, it may become important to have a better story for this. Definitely open to proposals and contributions!
Forester’s markup language reminds me SATySFi that is also implemented in OCaml, by the way.