Dear OCaml developers: Given that bitten by PPX from time to time, finally, I think it is a time to spend two hours sharing my experience with PPX and why you(the OCaml library developer) should avoid PPX as much as you can. Here is a story I just experienced this morning, I tried to install a package from opam, and it complained my compiler is too old - 4.02.3, to be honest, 4.02.3 is still a pretty modern OCaml compiler, even debian stable still stays on 4.01. Anyway, I switched to 4.04.1, after half an hour, it failed to compile again, complaning about some ppx error message. This is not my first time experience, and finally it made me to write an essay about why PPX is harmful. PPX is a compiler plugin, it imposes a very large compiler surface API to your library, and we don't have any backward compatibility guarantee from the compiler, which means your library will only work against a specific compiler. Even worse, OCaml is an elegant but small community, we don't have too many maintainers for a library, if you have a library which relies on PPX (the dependency chain could be really really huge, for example, ppx_metaquot depends on typing environment, you can find lots of stories about node_modules in Node community), it will probably not work against next version of OCaml compiler, and it will be a huge maintenance overhead for other people to pick it up. OCaml is already a very expressive language, probably more expressive than any other mainstream language, (Go, Java, C/C++, etc), it is fine to write some boilerplate code, or we can cut PPX as a dev dependency, after your PPXed your code, check in the generated source code(via -dsource), so it will not bring dependency to end users. There are some valid use cases of PPX, for example, in BuckleScript or JS_of_OCaml, we want to customize OCaml language a bit for external FFI, or if you have a very large team, and committed effort to maintain your PPX. Happy hacking in OCaml without PPX, Thanks -- Hongbo