package ppxlib

  1. Overview
  2. Docs
Standard infrastructure for ppx rewriters

Install

Dune Dependency

Authors

Maintainers

Sources

ppxlib-0.36.0.tbz
sha256=5aba1bce14c53108614130110c843d004bf93bd2cf3a0778fd7086b85390a434
sha512=1e3e8fee42fe74bffc178dbcbb2db8ec38dd23e71f6fed3c4c92618cf93892f5847787e6e9abb322f5c85d29a76afde28ce840b42e10fedc14cd82ba578ad06a

Description

Ppxlib is the standard infrastructure for ppx rewriters and other programs that manipulate the in-memory representation of OCaml programs, a.k.a the "Parsetree".

It also comes bundled with two ppx rewriters that are commonly used to write tools that manipulate and/or generate Parsetree values; ppxlib.metaquot which allows to construct Parsetree values using the OCaml syntax directly and ppxlib.traverse which provides various ways of automatically traversing values of a given type, in particular allowing to inject a complex structured value into generated code.

Published: 05 Mar 2025

README

Ppxlib - Meta-programming for OCaml

Ppxlib documentation

Overview

Ppxlib is the standard library for ppx rewriters and other programs that manipulate the in-memory representation of OCaml programs, a.k.a. the "Parsetree".

It also comes bundled with two ppx rewriters that are commonly used to write tools that manipulate and/or generate Parsetree values: ppxlib.metaquot, which allows constructing Parsetree values using the OCaml syntax directly, and ppxlib.traverse, which provides various ways of automatically traversing values of a given type, in particular allowing to inject a complex structured value into generated code.

For more information about ppxlib and how to use it, please consult the documentation.

What is the relation between ppxlib and other ppx libraries?

The ppx world has a long and storied history, and if you look around, you may find other projects that offer functionalities similar to ppxlib. The following blog post gives a good overview of the various libraries that have been developed over time. At this point, ppxlib is considered the de facto library for writing ppx rewriters.

History of the project

This repository was created by merging several older smaller projects that were developed at Jane Street. See the history for more details.

Dependencies (6)

  1. stdlib-shims
  2. sexplib0 >= "v0.12"
  3. ppx_derivers >= "1.0"
  4. ocaml-compiler-libs >= "v0.11.0"
  5. ocaml >= "4.08.0" & < "5.4.0"
  6. dune >= "3.8"

Dev Dependencies (6)

  1. odoc with-doc
  2. ocamlformat with-dev-setup & = "0.26.2"
  3. cinaps with-test & >= "v0.12.1"
  4. re with-test & >= "1.9.0"
  5. ocamlfind with-test
  6. sexplib0 with-test & >= "v0.15"

  1. arrayjit
  2. awsm-codegen
  3. base_quickcheck >= "v0.17.1"
  4. bistro >= "0.6.0"
  5. bonsai >= "v0.16.0"
  6. bytestring
  7. clangml >= "4.7.0"
  8. cmdlang-to-base
  9. comby < "1.3.0"
  10. commons
  11. diff
  12. dream-html >= "3.9.5"
  13. dune >= "3.17.0"
  14. dunolint
  15. dunolint-lib
  16. ego
  17. eliom >= "8.9.0"
  18. embedded_ocaml_templates < "0.3.1" | >= "0.7"
  19. extunix >= "0.4.4"
  20. fsml
  21. GT = "0.5.1"
  22. gen_js_api < "1.0.8" | >= "1.1.1"
  23. genprint = "0.3"
  24. goblint >= "2.5.0"
  25. hack_parallel >= "1.0.1"
  26. hardcaml >= "v0.14.1" & < "v0.17.0"
  27. html_of_jsx >= "0.0.2"
  28. http_async
  29. js_of_ocaml >= "3.8.0"
  30. js_of_ocaml-lwt >= "3.10.0"
  31. js_of_ocaml-ocamlbuild >= "3.10.0" & < "5.0"
  32. js_of_ocaml-ppx_deriving_json >= "3.7.1"
  33. js_of_ocaml-toplevel >= "3.10.0"
  34. js_of_ocaml-tyxml >= "3.10.0"
  35. jsoo-react
  36. lablqml >= "0.7"
  37. lascar >= "0.7.0"
  38. learn-ocaml
  39. learn-ocaml-client
  40. lens >= "1.2.5"
  41. logs-ppx
  42. MlFront_Cli >= "2.1.4~prerel2" & < "2.3.1"
  43. MlFront_Config
  44. MlFront_Manip
  45. melange-json >= "1.2.0"
  46. melange-json-native
  47. merlin >= "4.7-412"
  48. metaquot >= "0.5.0"
  49. mlt_parser = "v0.13.0" | >= "v0.14.1"
  50. mlx
  51. mutaml >= "0.2"
  52. neural_nets_lib
  53. noCanren >= "0.3.0~alpha1"
  54. node_of_ocaml
  55. nuscr >= "2.0.0"
  56. OCanren-ppx >= "0.3.0"
  57. obus >= "1.2.5"
  58. ocaml-monadic >= "0.5"
  59. ocamlmerlin-mlx
  60. ocf_ppx
  61. ocsigen-i18n >= "4.0.0"
  62. octez-internal-libs
  63. ojs_base_ppx
  64. ometrics = "0.2.0"
  65. ortac-core
  66. ortac-qcheck-stm
  67. override = "0.2.2"
  68. pancake
  69. pgocaml_ppx >= "4.3.0"
  70. pla >= "2.0"
  71. ppx-owl-opt
  72. ppx_accessor >= "v0.14.3"
  73. ppx_assert >= "v0.13.0"
  74. ppx_bap
  75. ppx_base >= "v0.13.0"
  76. ppx_bench >= "v0.17.1"
  77. ppx_bin_prot >= "v0.17.1"
  78. ppx_blob >= "0.7.2"
  79. ppx_catch
  80. ppx_cold
  81. ppx_compare >= "v0.13.0"
  82. ppx_compose >= "0.2.1"
  83. ppx_const >= "2.0.1"
  84. ppx_conv_func >= "v0.13.0"
  85. ppx_counters
  86. ppx_css
  87. ppx_cstruct >= "6.0.0"
  88. ppx_cstubs >= "0.6.1" & < "0.7.0"
  89. ppx_csv_conv >= "v0.13.0"
  90. ppx_custom_printf >= "v0.14.1"
  91. ppx_decimal
  92. ppx_defer >= "0.5.0"
  93. ppx_demo
  94. ppx_derive_at_runtime < "v0.17.0"
  95. ppx_deriving >= "6.1.0"
  96. ppx_deriving_cad
  97. ppx_deriving_decoders < "0.2"
  98. ppx_deriving_hardcaml >= "v0.13.0"
  99. ppx_deriving_hash >= "0.1.3"
  100. ppx_deriving_json_schema
  101. ppx_deriving_jsonschema
  102. ppx_deriving_madcast >= "0.2"
  103. ppx_deriving_popper
  104. ppx_deriving_protobuf >= "3.0.0"
  105. ppx_deriving_qcheck >= "0.7"
  106. ppx_deriving_scad
  107. ppx_deriving_variant_string
  108. ppx_deriving_yojson >= "3.10.0"
  109. ppx_diff >= "v0.17.1"
  110. ppx_disable_unused_warnings
  111. ppx_dream_eml
  112. ppx_embed_file
  113. ppx_enumerate >= "v0.13.0"
  114. ppx_expect >= "v0.17.3"
  115. ppx_expect_nobase
  116. ppx_factory = "0.1.0" | >= "0.2.0"
  117. ppx_fail >= "v0.13.0"
  118. ppx_fields_conv >= "v0.14.2"
  119. ppx_fixed_literal
  120. ppx_fun
  121. ppx_gen_rec >= "2.0.0"
  122. ppx_getenv >= "2.1"
  123. ppx_globalize >= "v0.17.2"
  124. ppx_hardcaml
  125. ppx_hash >= "v0.13.0"
  126. ppx_here >= "v0.13.0"
  127. ppx_ignore_instrumentation
  128. ppx_import < "1.8.0" | >= "1.11.0"
  129. ppx_inline_test >= "v0.17.1"
  130. ppx_irmin >= "3.0.0"
  131. ppx_jane >= "v0.13.0"
  132. ppx_jsobject_conv = "0.8.0"
  133. ppx_jsonaf_conv >= "v0.15.1" & < "v0.17.0"
  134. ppx_let >= "v0.17.1"
  135. ppx_log
  136. ppx_map
  137. ppx_mica
  138. ppx_minidebug
  139. ppx_module_timer >= "v0.13.0"
  140. ppx_monad
  141. ppx_monoid >= "0.3.3"
  142. ppx_mysql >= "1.1.3"
  143. ppx_open
  144. ppx_optcomp >= "v0.17.1"
  145. ppx_optint
  146. ppx_optional >= "v0.13.0"
  147. ppx_partial
  148. ppx_pattern_bind >= "v0.13.1" & < "v0.17.0"
  149. ppx_pipebang >= "v0.13.0"
  150. ppx_pyformat
  151. ppx_python >= "v0.15.0"
  152. ppx_seq
  153. ppx_sexp_conv >= "v0.17.1"
  154. ppx_sexp_message >= "v0.14.1"
  155. ppx_sexp_value >= "v0.13.0"
  156. ppx_show >= "0.2.0"
  157. ppx_stable >= "v0.17.1"
  158. ppx_stable_witness
  159. ppx_string >= "v0.14.1"
  160. ppx_string_conv
  161. ppx_string_interpolation
  162. ppx_subliner
  163. ppx_system
  164. ppx_ts
  165. ppx_tydi >= "v0.17.1"
  166. ppx_type_directed_value
  167. ppx_typed_fields < "v0.17.0"
  168. ppx_typerep_conv >= "v0.17.1"
  169. ppx_units
  170. ppx_unreachable
  171. ppx_update
  172. ppx_variants_conv >= "v0.17.1"
  173. ppx_viewpattern >= "0.1.1"
  174. ppx_xml_conv >= "v0.13.0"
  175. ppx_yojson >= "1.3.0"
  176. ppx_yojson_conv >= "v0.15.1"
  177. ppxlib-tools >= "0.36.0"
  178. ppxlib_jane >= "v0.17.3"
  179. qcow = "0.11.0"
  180. rdf_ppx
  181. reason >= "3.16.0"
  182. reason-react-ppx >= "0.13.0" & < "0.14.1"
  183. refl >= "0.4.1"
  184. res_tailwindcss
  185. rescript-syntax
  186. sedlex >= "3.4"
  187. serde_derive
  188. server-reason-react
  189. speed
  190. spin >= "0.8.0"
  191. stdint-literals
  192. stk_ppx
  193. streamable < "v0.17.0"
  194. styled-ppx
  195. togglelog
  196. toplevel_expect_test >= "v0.14.1"
  197. tyxml-jsx >= "4.5.0"
  198. tyxml-syntax >= "4.5.0"
  199. visitors >= "20210608"
  200. vlt >= "0.2.5"
  201. volgo
  202. volgo-base
  203. volgo-git-backend
  204. volgo-git-eio
  205. volgo-git-unix
  206. volgo-hg-backend
  207. volgo-hg-eio
  208. volgo-hg-unix
  209. volgo-vcs
  210. wasm_of_ocaml-compiler
  211. wtr < "3.0.0"
  212. wtr-ppx
  213. xtmpl_ppx

Conflicts (3)

  1. ocaml-variants = "5.1.0~alpha1+options"
  2. ocaml-base-compiler = "5.1.0~alpha1"
  3. ocaml-migrate-parsetree < "2.0.0"
OCaml

Innovation. Community. Security.