diff --git a/Makefile b/Makefile
index 0eb460792f3838c40fd421c6f46e8ca0905fbfaf..2eacf9442596a8d2a5b26ede28df8e7957e0ebcc 100644
--- a/Makefile
+++ b/Makefile
@@ -1,8 +1,8 @@
 all:
-	dune build --root=. @install caisar.opam caisar-nnet.opam caisar-onnx.opam caisar-ovo.opam caisar-ir.opam caisar-xgboost.opam
+	dune build --root=. @install caisar.opam
 
 all-ci:
-	dune build -j2 --root=. @install caisar.opam caisar-nnet.opam caisar-onnx.opam caisar-ovo.opam caisar-ir.opam caisar-xgboost.opam
+	dune build -j2 --root=. @install caisar.opam
 
 install:
 	dune install
diff --git a/caisar-ir.opam b/caisar-ir.opam
deleted file mode 100644
index 1fc076f2b64cfe97e3e03374781165e091aec8f6..0000000000000000000000000000000000000000
--- a/caisar-ir.opam
+++ /dev/null
@@ -1,38 +0,0 @@
-# This file is generated by dune, edit dune-project instead
-opam-version: "2.0"
-version: "0.2"
-synopsis: "CAISAR's intermediate representation"
-maintainer: [
-  "LAISER team, Software Safety and Security Laboratory, CEA-List"
-]
-authors: ["LAISER team, Software Safety and Security Laboratory, CEA-List"]
-license: "LGPL-2.1-only"
-homepage: "https://git.frama-c.com/pub/caisar"
-doc: "https://git.frama-c.com/pub/caisar"
-bug-reports: "https://git.frama-c.com/pub/caisar/issues"
-depends: [
-  "dune" {>= "2.9"}
-  "ocaml" {>= "4.13"}
-  "base" {>= "v0.14.0"}
-  "ocamlgraph" {>= "1.8.8"}
-  "ppx_inline_test" {>= "0.12.0"}
-  "ppx_deriving" {>= "4.4.1"}
-  "odoc" {with-doc}
-]
-build: [
-  ["dune" "subst"] {dev}
-  [
-    "dune"
-    "build"
-    "-p"
-    name
-    "-j"
-    jobs
-    "--promote-install-files=false"
-    "@install"
-    "@runtest" {with-test}
-    "@doc" {with-doc}
-  ]
-  ["dune" "install" "-p" name "--create-install-files" name]
-]
-dev-repo: "git+https://git.frama-c.com/pub/caisar.git"
diff --git a/caisar-nnet.opam b/caisar-nnet.opam
deleted file mode 100644
index bdbceb34275e97c230e4a91df07079aceabaace9..0000000000000000000000000000000000000000
--- a/caisar-nnet.opam
+++ /dev/null
@@ -1,36 +0,0 @@
-# This file is generated by dune, edit dune-project instead
-opam-version: "2.0"
-version: "0.2"
-synopsis: "NNet parser for CAISAR"
-maintainer: [
-  "LAISER team, Software Safety and Security Laboratory, CEA-List"
-]
-authors: ["LAISER team, Software Safety and Security Laboratory, CEA-List"]
-license: "LGPL-2.1-only"
-homepage: "https://git.frama-c.com/pub/caisar"
-doc: "https://git.frama-c.com/pub/caisar"
-bug-reports: "https://git.frama-c.com/pub/caisar/issues"
-depends: [
-  "dune" {>= "2.9"}
-  "ocaml" {>= "4.13"}
-  "base" {>= "v0.14.0"}
-  "csv" {>= "2.4"}
-  "odoc" {with-doc}
-]
-build: [
-  ["dune" "subst"] {dev}
-  [
-    "dune"
-    "build"
-    "-p"
-    name
-    "-j"
-    jobs
-    "--promote-install-files=false"
-    "@install"
-    "@runtest" {with-test}
-    "@doc" {with-doc}
-  ]
-  ["dune" "install" "-p" name "--create-install-files" name]
-]
-dev-repo: "git+https://git.frama-c.com/pub/caisar.git"
diff --git a/caisar-onnx.opam b/caisar-onnx.opam
deleted file mode 100644
index 986cbfd68c9e48ddb7afb9144e117a90b8c3099d..0000000000000000000000000000000000000000
--- a/caisar-onnx.opam
+++ /dev/null
@@ -1,39 +0,0 @@
-# This file is generated by dune, edit dune-project instead
-opam-version: "2.0"
-version: "0.2"
-synopsis: "ONNX parser for CAISAR"
-maintainer: [
-  "LAISER team, Software Safety and Security Laboratory, CEA-List"
-]
-authors: ["LAISER team, Software Safety and Security Laboratory, CEA-List"]
-license: "LGPL-2.1-only"
-homepage: "https://git.frama-c.com/pub/caisar"
-doc: "https://git.frama-c.com/pub/caisar"
-bug-reports: "https://git.frama-c.com/pub/caisar/issues"
-depends: [
-  "dune" {>= "2.9"}
-  "ocaml" {>= "4.13"}
-  "base" {>= "v0.14.0"}
-  "stdio" {>= "v0.14.0"}
-  "ocaml-protoc-plugin" {>= "4.2.0"}
-  "ocplib-endian" {>= "1.0"}
-  "caisar-ir" {= version}
-  "odoc" {with-doc}
-]
-build: [
-  ["dune" "subst"] {dev}
-  [
-    "dune"
-    "build"
-    "-p"
-    name
-    "-j"
-    jobs
-    "--promote-install-files=false"
-    "@install"
-    "@runtest" {with-test}
-    "@doc" {with-doc}
-  ]
-  ["dune" "install" "-p" name "--create-install-files" name]
-]
-dev-repo: "git+https://git.frama-c.com/pub/caisar.git"
diff --git a/caisar-ovo.opam b/caisar-ovo.opam
deleted file mode 100644
index 3ed5ce417f266ae2770e4cc8e64649e4ba68dbd4..0000000000000000000000000000000000000000
--- a/caisar-ovo.opam
+++ /dev/null
@@ -1,36 +0,0 @@
-# This file is generated by dune, edit dune-project instead
-opam-version: "2.0"
-version: "0.2"
-synopsis: "OVO parser for CAISAR"
-maintainer: [
-  "LAISER team, Software Safety and Security Laboratory, CEA-List"
-]
-authors: ["LAISER team, Software Safety and Security Laboratory, CEA-List"]
-license: "LGPL-2.1-only"
-homepage: "https://git.frama-c.com/pub/caisar"
-doc: "https://git.frama-c.com/pub/caisar"
-bug-reports: "https://git.frama-c.com/pub/caisar/issues"
-depends: [
-  "dune" {>= "2.9"}
-  "ocaml" {>= "4.13"}
-  "base" {>= "v0.14.0"}
-  "csv" {>= "2.4"}
-  "odoc" {with-doc}
-]
-build: [
-  ["dune" "subst"] {dev}
-  [
-    "dune"
-    "build"
-    "-p"
-    name
-    "-j"
-    jobs
-    "--promote-install-files=false"
-    "@install"
-    "@runtest" {with-test}
-    "@doc" {with-doc}
-  ]
-  ["dune" "install" "-p" name "--create-install-files" name]
-]
-dev-repo: "git+https://git.frama-c.com/pub/caisar.git"
diff --git a/caisar-xgboost.opam b/caisar-xgboost.opam
deleted file mode 100644
index 5d4be334bb44a9747c05898f29e9a1417505b7d1..0000000000000000000000000000000000000000
--- a/caisar-xgboost.opam
+++ /dev/null
@@ -1,39 +0,0 @@
-# This file is generated by dune, edit dune-project instead
-opam-version: "2.0"
-version: "0.2"
-synopsis: "XGBOOST parser for CAISAR"
-maintainer: [
-  "LAISER team, Software Safety and Security Laboratory, CEA-List"
-]
-authors: ["LAISER team, Software Safety and Security Laboratory, CEA-List"]
-license: "LGPL-2.1-only"
-homepage: "https://git.frama-c.com/pub/caisar"
-doc: "https://git.frama-c.com/pub/caisar"
-bug-reports: "https://git.frama-c.com/pub/caisar/issues"
-depends: [
-  "dune" {>= "2.9"}
-  "ocaml" {>= "4.13"}
-  "base" {>= "v0.14.0"}
-  "ocamlgraph" {>= "1.8.8"}
-  "ppx_deriving" {>= "4.4.1"}
-  "ppx_deriving_yojson" {>= "3.6.1"}
-  "csv" {>= "2.4"}
-  "odoc" {with-doc}
-]
-build: [
-  ["dune" "subst"] {dev}
-  [
-    "dune"
-    "build"
-    "-p"
-    name
-    "-j"
-    jobs
-    "--promote-install-files=false"
-    "@install"
-    "@runtest" {with-test}
-    "@doc" {with-doc}
-  ]
-  ["dune" "install" "-p" name "--create-install-files" name]
-]
-dev-repo: "git+https://git.frama-c.com/pub/caisar.git"
diff --git a/caisar.opam b/caisar.opam
index 7ddfba04fd12c69ca7f719b6d64e127b4cf773a0..98018a4e6b8c8c79e256f3123d057dfef5179cb9 100644
--- a/caisar.opam
+++ b/caisar.opam
@@ -12,7 +12,7 @@ homepage: "https://git.frama-c.com/pub/caisar"
 doc: "https://git.frama-c.com/pub/caisar"
 bug-reports: "https://git.frama-c.com/pub/caisar/issues"
 depends: [
-  "dune" {>= "2.9"}
+  "dune" {>= "3.8"}
   "ocaml" {>= "4.13"}
   "dune-site" {>= "2.9.0"}
   "piqi" {>= "0.7.6"}
@@ -24,20 +24,19 @@ depends: [
   "cmdliner" {>= "1.1.1"}
   "fmt" {>= "0.8.9"}
   "logs" {>= "0.7.0"}
-  "ppx_deriving" {>= "5.1"}
   "yojson" {>= "1.7.0"}
   "menhirLib" {>= "20210310"}
-  "ppx_deriving_yojson" {>= "3.6.1"}
   "csv" {>= "2.4"}
   "why3" {>= "1.6.0"}
   "re" {>= "1.10.4"}
   "fpath" {>= "0.7.3"}
   "yaml" {>= "3.1.0"}
-  "caisar-nnet" {= version}
-  "caisar-ovo" {= version}
-  "caisar-onnx" {= version}
-  "caisar-ir" {= version}
-  "caisar-xgboost" {= version}
+  "ocaml-protoc-plugin" {>= "4.2.0"}
+  "stdio" {>= "v0.14.0"}
+  "ocamlgraph" {>= "1.8.8"}
+  "ppx_deriving" {>= "5.1"}
+  "ppx_inline_test" {>= "0.12.0"}
+  "ppx_deriving_yojson" {>= "3.6.1"}
   "odoc" {with-doc}
 ]
 build: [
diff --git a/dune-project b/dune-project
index 65550953bfda38181f0a373d8c8bd7989d493edd..1c4f8609b1ab9c7f4e20e4c95fc230f9896b9a42 100644
--- a/dune-project
+++ b/dune-project
@@ -1,4 +1,4 @@
-(lang dune 2.9)
+(lang dune 3.8)
 (name caisar)
 (version 0.2)
 
@@ -17,64 +17,6 @@
 (homepage https://git.frama-c.com/pub/caisar)
 (documentation https://git.frama-c.com/pub/caisar)
 
-(package
-  (name caisar-nnet)
-  (synopsis "NNet parser for CAISAR")
-  (depends
-   (ocaml (>= 4.13))
-   (base (>= v0.14.0))
-   (csv (>= 2.4))
-  )
-)
-
-(package
-  (name caisar-ovo)
-  (synopsis "OVO parser for CAISAR")
-  (depends
-   (ocaml (>= 4.13))
-   (base (>= v0.14.0))
-   (csv (>= 2.4))
-  )
-)
-
-(package
-  (name caisar-onnx)
-  (synopsis "ONNX parser for CAISAR")
-  (depends
-   (ocaml (>= 4.13))
-   (base (>= v0.14.0))
-   (stdio (>= v0.14.0))
-   (ocaml-protoc-plugin (>= 4.2.0))
-   (ocplib-endian (>= 1.0))
-   (caisar-ir (= :version))
-  )
-)
-
-(package
-  (name caisar-xgboost)
-  (synopsis "XGBOOST parser for CAISAR")
-  (depends
-   (ocaml (>= 4.13))
-   (base (>= v0.14.0))
-   (ocamlgraph (>= 1.8.8))
-   (ppx_deriving (>= 4.4.1))
-   (ppx_deriving_yojson (>= 3.6.1))
-   (csv (>= 2.4))
-  )
-)
-
-(package
-  (name caisar-ir)
-  (synopsis "CAISAR's intermediate representation")
-  (depends
-   (ocaml (>= 4.13))
-   (base (>= v0.14.0))
-   (ocamlgraph (>= 1.8.8))
-   (ppx_inline_test (>= 0.12.0))
-   (ppx_deriving (>= 4.4.1))
-  )
-)
-
 (package
   (name caisar)
   (synopsis "A platform for characterizing the safety and robustness of artificial intelligence based software")
@@ -90,20 +32,19 @@
    (cmdliner (>= 1.1.1))
    (fmt (>= 0.8.9))
    (logs (>= 0.7.0))
-   (ppx_deriving (>= 5.1))
    (yojson (>= 1.7.0))
    (menhirLib (>= 20210310))
-   (ppx_deriving_yojson (>= 3.6.1))
    (csv (>= 2.4))
    (why3 (>= 1.6.0))
    (re (>= 1.10.4))
    (fpath (>= 0.7.3))
    (yaml (>= 3.1.0))
-   (caisar-nnet (= :version))
-   (caisar-ovo (= :version))
-   (caisar-onnx (= :version))
-   (caisar-ir (= :version))
-   (caisar-xgboost (= :version))
+   (ocaml-protoc-plugin (>= 4.2.0))
+   (stdio (>= v0.14.0))
+   (ocamlgraph (>= 1.8.8))
+   (ppx_deriving (>= 5.1))
+   (ppx_inline_test (>= 0.12.0))
+   (ppx_deriving_yojson (>= 3.6.1))
   )
   (sites
    (share stdlib)
diff --git a/lib/ir/dune b/lib/ir/dune
index bacd51c99513e5922dadd6b3795781a43c3a2f92..812eda8a4e2f878817c36124e693ff9844892e69 100644
--- a/lib/ir/dune
+++ b/lib/ir/dune
@@ -1,6 +1,6 @@
 (library
  (name ir)
- (public_name caisar-ir)
+ (public_name caisar.ir)
  (preprocess
   (pps
    ppx_inline_test
diff --git a/lib/nnet/dune b/lib/nnet/dune
index 6674a9ec4282b70f92cbd6da799fd90ac915ddd0..052c7e99644147c5068654ef90ed1f461c36689e 100644
--- a/lib/nnet/dune
+++ b/lib/nnet/dune
@@ -1,5 +1,5 @@
 (library
  (name nnet)
- (public_name caisar-nnet)
+ (public_name caisar.nnet)
  (libraries base csv)
  (synopsis "NNet parser for CAISAR"))
diff --git a/lib/onnx/dune b/lib/onnx/dune
index 9d5fdba2284917e0bacf73a6933596bce2c14b5b..88dea6fe7dd2de091799a2136070dc49de027699 100644
--- a/lib/onnx/dune
+++ b/lib/onnx/dune
@@ -1,7 +1,7 @@
 (library
  (name onnx)
- (public_name caisar-onnx)
- (libraries base stdio ocaml-protoc-plugin ocplib-endian caisar-ir)
+ (public_name caisar.onnx)
+ (libraries base stdio ocaml-protoc-plugin ocplib-endian caisar.ir)
  (synopsis "ONNX parser for CAISAR"))
 
 (rule
diff --git a/lib/ovo/dune b/lib/ovo/dune
index 65525220415adc6ac4b107ec54f4e06f9d701e2d..e54243a3ef789fd90414331b78265091e3b55f7c 100644
--- a/lib/ovo/dune
+++ b/lib/ovo/dune
@@ -1,5 +1,5 @@
 (library
  (name ovo)
- (public_name caisar-ovo)
+ (public_name caisar.ovo)
  (libraries base csv)
  (synopsis "OVO parser for CAISAR"))
diff --git a/lib/xgboost/bin/dune b/lib/xgboost/bin/dune
index cef68131ea59e26e5034f93bd777e737c62b84f6..625381cdf1d2569362fbdd340a2e2abb6d008bb8 100644
--- a/lib/xgboost/bin/dune
+++ b/lib/xgboost/bin/dune
@@ -1,4 +1,4 @@
 (executable
  (name parse_xgboost)
- (libraries yojson caisar-xgboost csv)
+ (libraries yojson caisar.xgboost csv)
 )
diff --git a/lib/xgboost/dune b/lib/xgboost/dune
index 5fa6353d4455e42108350bb5807ff3c779b11b50..9a07b01ea15a7c599ef2cc4d272e1497b5227df8 100644
--- a/lib/xgboost/dune
+++ b/lib/xgboost/dune
@@ -1,5 +1,5 @@
 (library
- (public_name caisar-xgboost)
+ (public_name caisar.xgboost)
  (name caisar_xgboost)
  (preprocess
   (pps ppx_deriving.show ppx_deriving_yojson))
diff --git a/lib/xgboost/example/dune b/lib/xgboost/example/dune
index 7c048738c484bf4dd548b28397515726db2010e4..32b6e2ddd33596d20486afa2a9dbc957131f8658 100644
--- a/lib/xgboost/example/dune
+++ b/lib/xgboost/example/dune
@@ -1,9 +1,9 @@
 (cram
  (deps model-0.json agaricus.test.svm ../bin/parse_xgboost.exe)
  (applies_to logistic)
- (package caisar-xgboost))
+ (package caisar))
 
 (cram
  (deps california.json california.csv ../bin/parse_xgboost.exe)
  (applies_to california)
- (package caisar-xgboost))
+ (package caisar))
diff --git a/src/dune b/src/dune
index 38b0ce7bcb123be3ede8a36548980abadecd7535..013aad1ad73f2872edafa7fb997432b281d29898 100644
--- a/src/dune
+++ b/src/dune
@@ -24,7 +24,7 @@
   yaml.unix
   fpath
   zarith
-  caisar-xgboost)
+  caisar.xgboost)
  (preprocess
   (pps
    ppx_deriving_yojson