package ppxlib

  1. Overview
  2. Docs
Standard infrastructure for ppx rewriters

Install

Dune Dependency

Authors

Maintainers

Sources

ppxlib-0.35.0.tbz
sha256=d9d959fc9f84260487e45684dc741898a92fc5506b61a7f5cac65d21832db925
sha512=e428b1e3b89261c7efdaa18016264d1afbf067cb9b0d41124b04796c2487ac7ca8ee9a24a60d56f20d1774cb44aaa9ecf1512f17455812ba8d62d4ef93616ee7

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: 04 Feb 2025

README

Ppxlib - Meta-programming for OCaml

ocaml-ci status" trunk-build-status" AppVeyor status"

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. bam-ppx
  4. base_quickcheck = "v0.13.0" | >= "v0.14.1" & < "v0.17.1"
  5. bisect_ppx >= "2.8.3"
  6. bistro >= "0.6.0"
  7. bonsai >= "v0.16.0"
  8. brisk-reconciler
  9. bytestring
  10. clangml >= "4.7.0"
  11. cmdlang-to-base
  12. comby < "1.3.0"
  13. commons
  14. config
  15. crs
  16. diff
  17. dream-html >= "3.9.5"
  18. dune >= "3.17.2"
  19. dunolint
  20. dunolint-lib
  21. ego
  22. eliom >= "8.9.0"
  23. elpi
  24. embedded_ocaml_templates < "0.3.1" | >= "0.7"
  25. extunix >= "0.3.1" & < "0.4.4"
  26. flow_parser >= "0.229.1"
  27. fsml
  28. fstar >= "2025.02.17" & < "2025.06.20"
  29. GT = "0.5.1"
  30. gen_js_api < "1.0.8" | >= "1.1.1"
  31. genprint = "0.3"
  32. goblint >= "2.5.0"
  33. gospel >= "0.2.0"
  34. graphql_ppx >= "1.2.2"
  35. hack_parallel >= "1.0.1"
  36. hardcaml >= "v0.14.1"
  37. html_of_jsx >= "0.0.2"
  38. http_async
  39. js_of_ocaml >= "3.8.0"
  40. js_of_ocaml-compiler >= "3.8.0"
  41. js_of_ocaml-lwt >= "3.10.0" & < "6.1.0"
  42. js_of_ocaml-ocamlbuild >= "3.10.0" & < "5.0"
  43. js_of_ocaml-ppx >= "3.8.0"
  44. js_of_ocaml-ppx_deriving_json >= "3.7.1"
  45. js_of_ocaml-toplevel >= "3.10.0"
  46. js_of_ocaml-tyxml >= "3.10.0" & < "6.1.0"
  47. jsoo-react
  48. lablqml >= "0.7"
  49. landmarks-ppx
  50. lascar >= "0.7.0"
  51. learn-ocaml
  52. learn-ocaml-client
  53. lens >= "1.2.5"
  54. logs-ppx
  55. lwt_ppx >= "2.0.2"
  56. MlFront_Cli >= "2.1.4~prerel2" & < "2.3.1"
  57. MlFront_Config
  58. MlFront_Manip
  59. melange >= "1.0.0"
  60. melange-json >= "1.2.0"
  61. melange-json-native
  62. merlin >= "4.7-412"
  63. metapp >= "0.4.4"
  64. metaquot >= "0.5.0"
  65. mlt_parser = "v0.13.0" | >= "v0.14.1"
  66. mlx
  67. mutaml
  68. neural_nets_lib
  69. noCanren >= "0.3.0~alpha1"
  70. node_of_ocaml
  71. nuscr >= "2.0.0"
  72. OCanren-ppx
  73. obus >= "1.2.5"
  74. ocaml-monadic >= "0.5"
  75. ocamlmerlin-mlx
  76. ocf_ppx
  77. ocsigen-i18n >= "4.0.0"
  78. ocsigen-ppx-rpc
  79. octez-internal-libs
  80. ojs_base_ppx
  81. ometrics = "0.2.0"
  82. ortac-core
  83. ortac-qcheck-stm
  84. ortac-wrapper
  85. pacomb
  86. pancake
  87. pgocaml_ppx >= "4.3.0"
  88. pla >= "2.0"
  89. ppx-owl-opt
  90. ppx_accessor >= "v0.14.3"
  91. ppx_assert >= "v0.13.0"
  92. ppx_bap
  93. ppx_base >= "v0.13.0"
  94. ppx_bench >= "v0.15.1" & < "v0.17.1"
  95. ppx_bin_prot >= "v0.13.0" & < "v0.17.1"
  96. ppx_bitstring >= "4.1.0"
  97. ppx_blob >= "0.7.2"
  98. ppx_camlrack
  99. ppx_catch
  100. ppx_cold
  101. ppx_compare >= "v0.13.0"
  102. ppx_compose >= "0.2.1"
  103. ppx_const >= "2.0.1"
  104. ppx_conv_func >= "v0.13.0"
  105. ppx_counters
  106. ppx_css
  107. ppx_cstruct >= "6.0.0"
  108. ppx_cstubs >= "0.6.1"
  109. ppx_csv_conv >= "v0.13.0"
  110. ppx_custom_printf >= "v0.14.1"
  111. ppx_decimal
  112. ppx_default
  113. ppx_defer >= "0.5.0"
  114. ppx_demo
  115. ppx_derive_at_runtime
  116. ppx_deriving >= "5.2" & < "6.1.0"
  117. ppx_deriving_cad
  118. ppx_deriving_decoders
  119. ppx_deriving_encoding >= "0.2"
  120. ppx_deriving_ezjsonm < "0.4.1"
  121. ppx_deriving_hardcaml >= "v0.13.0"
  122. ppx_deriving_hash < "0.1.3"
  123. ppx_deriving_json_schema
  124. ppx_deriving_jsonschema
  125. ppx_deriving_jsoo >= "0.2"
  126. ppx_deriving_madcast >= "0.2"
  127. ppx_deriving_popper
  128. ppx_deriving_protobuf >= "3.0.0"
  129. ppx_deriving_rpc
  130. ppx_deriving_scad
  131. ppx_deriving_variant_string
  132. ppx_deriving_yaml < "0.4.1"
  133. ppx_deriving_yojson >= "3.7.0" & < "3.10.0"
  134. ppx_diff < "v0.17.1"
  135. ppx_disable_unused_warnings
  136. ppx_distr_guards >= "0.3"
  137. ppx_dream_eml
  138. ppx_embed_file
  139. ppx_enumerate >= "v0.13.0"
  140. ppx_expect >= "v0.13.0" & != "v0.14.0" & < "v0.17.3"
  141. ppx_expect_nobase
  142. ppx_factory = "0.1.0" | >= "0.2.0"
  143. ppx_fail >= "v0.13.0"
  144. ppx_fields_conv >= "v0.14.2"
  145. ppx_fixed_literal
  146. ppx_fun
  147. ppx_gen_rec >= "2.0.0"
  148. ppx_getenv >= "2.1"
  149. ppx_globalize < "v0.17.2"
  150. ppx_hardcaml
  151. ppx_hash >= "v0.13.0"
  152. ppx_here >= "v0.13.0"
  153. ppx_ignore_instrumentation
  154. ppx_import < "1.8.0" | >= "1.11.0"
  155. ppx_inline_alcotest
  156. ppx_inline_test >= "v0.15.1" & < "v0.17.1"
  157. ppx_inline_test_nobase
  158. ppx_interact
  159. ppx_irmin >= "3.0.0"
  160. ppx_jane >= "v0.13.0"
  161. ppx_js_style >= "v0.13.0"
  162. ppx_jsobject_conv = "0.8.0" | >= "0.9.3"
  163. ppx_jsonaf_conv >= "v0.15.1"
  164. ppx_let >= "v0.13.0" & < "v0.17.1"
  165. ppx_log
  166. ppx_lun
  167. ppx_make
  168. ppx_map
  169. ppx_marshal
  170. ppx_marshal_ext
  171. ppx_matches
  172. ppx_mica
  173. ppx_minidebug < "2.3.0"
  174. ppx_module_timer >= "v0.13.0"
  175. ppx_monad
  176. ppx_monoid >= "0.3.3"
  177. ppx_mysql >= "1.1.3"
  178. ppx_open
  179. ppx_optcomp >= "v0.14.2" & < "v0.17.1"
  180. ppx_optint
  181. ppx_optional >= "v0.13.0"
  182. ppx_parser
  183. ppx_partial
  184. ppx_pattern_bind >= "v0.13.1"
  185. ppx_pipebang >= "v0.13.0"
  186. ppx_protocol_conv >= "5.1.3"
  187. ppx_pyformat
  188. ppx_python >= "v0.15.0"
  189. ppx_quick_test
  190. ppx_rapper < "1.0.1"
  191. ppx_regexp >= "0.5.1"
  192. ppx_repr >= "0.6.0"
  193. ppx_seq
  194. ppx_sexp_conv >= "v0.15.1" & < "v0.17.1"
  195. ppx_sexp_message >= "v0.14.1"
  196. ppx_sexp_value >= "v0.13.0"
  197. ppx_show >= "0.2.0"
  198. ppx_stable >= "v0.14.1" & < "v0.17.1"
  199. ppx_stable_witness
  200. ppx_string >= "v0.14.1"
  201. ppx_string_conv
  202. ppx_string_interpolation
  203. ppx_subliner
  204. ppx_system
  205. ppx_trace
  206. ppx_ts
  207. ppx_tydi < "v0.17.1"
  208. ppx_type_directed_value
  209. ppx_typed_fields
  210. ppx_typerep_conv >= "v0.14.2" & < "v0.17.1"
  211. ppx_units
  212. ppx_update
  213. ppx_variants_conv >= "v0.14.2" & < "v0.17.1"
  214. ppx_viewpattern < "0.1.1"
  215. ppx_xml_conv >= "v0.13.0"
  216. ppx_yojson >= "1.3.0"
  217. ppx_yojson_conv >= "v0.15.1"
  218. ppxlib_jane < "v0.17.3"
  219. ppxx >= "2.5.0"
  220. qcow = "0.11.0"
  221. rdf_ppx
  222. reactjs-jsx-ppx
  223. reason >= "3.9.0" & < "3.16.0"
  224. reason-react-ppx
  225. refl >= "0.4.1"
  226. repr-fuzz >= "0.2.1"
  227. res_tailwindcss
  228. rescript-syntax
  229. sedlex >= "2.6"
  230. serde_derive
  231. server-reason-react
  232. speed
  233. spin >= "0.8.0"
  234. spoc_ppx
  235. stdint-literals
  236. stk_ppx
  237. streamable
  238. styled-ppx
  239. togglelog
  240. toplevel_expect_test >= "v0.14.1"
  241. tyxml-jsx >= "4.5.0"
  242. tyxml-ppx >= "4.5.0"
  243. tyxml-syntax >= "4.5.0"
  244. validate
  245. visitors >= "20210608"
  246. vlt
  247. volgo
  248. volgo-base
  249. volgo-git-backend
  250. volgo-git-eio
  251. volgo-git-unix
  252. volgo-hg-backend
  253. volgo-hg-eio
  254. volgo-hg-unix
  255. volgo-vcs
  256. wasm_of_ocaml-compiler
  257. wtr < "3.0.0"
  258. wtr-ppx
  259. 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.