diff --git a/.gitattributes b/.gitattributes
index fc7feaf15c2733928635dc58984a01606eda31b9..ee3b531c5f08fd23564f1d72cbe6b616ab75d7fa 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1 +1,2 @@
 test/data/** filter=lfs diff=lfs merge=lfs -text
+doc/docusaurus/versioned_docs/** filter=lfs diff=lfs merge=lfs -text
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 9ce2b050967a334722e8eba9ef5d1f8c13b29a0e..63db9f7339135e2b09f467ba009ff61f9e6bab29 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -63,6 +63,15 @@ variables:
     - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
     - if: '$CI_COMMIT_BRANCH == "latest"'
 
+.build_rules: &build_rules
+  rules:
+    - !reference [.deploy_rules, rules]
+    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
+      changes:
+        - dune/**/*
+        - src/**/*
+        - .ci/**/*
+
 .setup_exec: &setup_exec
   image: ${DOCKER_IMAGE}
   stage: setup
@@ -111,6 +120,8 @@ variables:
     paths:
       - packages
     expire_in: 1h
+  rules:
+    - !reference [.build_rules, rules]
 
 .codequality: &codequality
   image: ${DEPENDENCIES_IMAGE}
@@ -120,6 +131,8 @@ variables:
   artifacts:
     reports:
       codequality: $CI_PROJECT_DIR/code_checker_report/gl-code-quality-report.json
+  rules:
+    - !reference [.build_rules, rules]
 
 .deploy: &deploy
   image: ${DOCKER_IMAGE}
@@ -162,6 +175,7 @@ codespell:
   script:
   - codespell
     --skip="./doc/docusaurus/yarn.lock,./.git/**/*"
+    --ignore-words-list="warn"
 
 config_format:
   variables:
@@ -236,6 +250,8 @@ build_wasm:debian_emscripten:
     paths:
       - packages
     expire_in: 1h
+  rules:
+    - !reference [.build_rules, rules]
 
 deploy_wasam:debian_emscripten:
   image: ${DEPENDENCIES_IMAGE}
diff --git a/doc/docusaurus/build.sh b/doc/docusaurus/build.sh
index 7b2b43924cb131a92406f1c8a88064bf2cccb7fd..e28f7babb3bad695b2b80653d07d67365b16c6ac 100755
--- a/doc/docusaurus/build.sh
+++ b/doc/docusaurus/build.sh
@@ -9,6 +9,9 @@ curl -OL https://github.com/Kitware/CMake/releases/download/v3.20.2/cmake-3.20.2
 tar -xzf cmake-3.20.2-linux-x86_64.tar.gz
 CMAKE=${PWD}/cmake-3.20.2-linux-x86_64/bin/cmake
 
+git lfs install
+git lfs pull
+
 yarn install
 
 BRANCH=$(cat ../../.git/HEAD | awk -F '/' '{print $NF}')
@@ -16,52 +19,5 @@ echo "Branch: ${BRANCH}"
 
 git stash
 
-DOCUSAURUS_SOURCE=${PWD}
-DOXYGEN_SOURCE=${PWD}/../doxygen
-HEADERS_SOURCE=${PWD}/../../dune
-DUNE_MODULE_FILE=${PWD}/../../dune.module
-
-create_doxygen_html() {
-  TAG=$1
-  HTML_PATH=$2
-  git checkout $TAG -- ${HEADERS_SOURCE} ${DUNE_MODULE_FILE}
-  mkdir -p /tmp/doxygen && rm -rf /tmp/doxygen/*
-  ${CMAKE} -S ${DOXYGEN_SOURCE} -B /tmp/doxygen
-  make -C /tmp/doxygen
-  mkdir -p ${HTML_PATH}
-  mv /tmp/doxygen/html/* ${HTML_PATH}
-  git checkout $BRANCH -- ${HEADERS_SOURCE} ${DUNE_MODULE_FILE}
-}
-
-# make a version page for each git tag
-for tag in $(git tag); do
-
-  # skip versions that do not work with current docusaurus
-  if [[ $tag = @(v0.3.0) ]]; then
-    continue
-  fi
-
-  echo "----------Checking out $tag-----------"
-  if git checkout $tag -- docs; then
-    echo "----------Inspecting files $tag-----------"
-    if [[ $(git ls-files | grep docs) ]]; then
-      echo "----------Versioning $tag-----------"
-      [[ "$BRANCH"=="master" ]] && create_doxygen_html $tag tmp_build/docs/$tag/doxygen
-      yarn run docusaurus docs:version $tag
-    fi
-  fi
-done
-
-# move last tag doxygen doc into current release
-mkdir -p tmp_build/docs/doxygen
-[[ "$BRANCH"=="master" ]] && mv tmp_build/docs/$tag/doxygen/* tmp_build/docs/doxygen
-
-echo "----------Get back to branch $BRANCH-----------"
-git checkout $BRANCH -- docs
-create_doxygen_html $BRANCH tmp_build/docs/next/doxygen
-
 echo "----------Build yarn-----------"
 yarn build
-
-rsync -av tmp_build/ build/
-rm -rf tmp_build
diff --git a/doc/docusaurus/docs/api.md b/doc/docusaurus/docs/api.mdx
similarity index 66%
rename from doc/docusaurus/docs/api.md
rename to doc/docusaurus/docs/api.mdx
index 753dc2324dc8c7330e10c4cb83358bad415cc4ff..9a9f6ab3afd610b3e5e9172b54ff827a911bee28 100644
--- a/doc/docusaurus/docs/api.md
+++ b/doc/docusaurus/docs/api.mdx
@@ -1,6 +1,7 @@
 ---
 id: api
 title: Application Programming Interface
+description: Application Programming Interface
 sidebar_label: API
 ---
 
@@ -8,8 +9,6 @@ sidebar_label: API
 
 The C++ classes are documented in the C++ source code and may be visualized with
 [Doxygen](https://www.doxygen.nl/index.html). To locally have the doxygen html
-documentation, build `dune-copasi` [manually](install_use.md) and use the
+documentation, build `dune-copasi` [manually](install_use) and use the
 `make dune-copasi-doc` target in the build directory. For this, you need to
-have `doxygen` on your system.
-
-* [Online Doxygen Documentation](pathname://./doxygen/index.html)
+have `doxygen` on your system.
\ No newline at end of file
diff --git a/doc/docusaurus/docs/assets/config_opts.json b/doc/docusaurus/docs/assets/config_opts.json
index fe6d24bbaeeeae81f4960e2c727a517ba900d036..777860df10c86ba8bd5ab708b3833da7b02f40c5 100644
--- a/doc/docusaurus/docs/assets/config_opts.json
+++ b/doc/docusaurus/docs/assets/config_opts.json
@@ -41,7 +41,11 @@
       },
       "path": {
         ".type": "path",
-        ".brief": "Path to a Gmsh file containing a grid"
+        ".brief": "Path to a Gmsh file containing a grid",
+        ".details": [
+          "Reads [`gmsh` format v2.0](https://gmsh.info/doc/texinfo/gmsh.html#MSH-file-format) and constructs the grid with it.",
+          "Additionally, the token `gmsh_id` will be added to the math parsers for each entity of the grid. It will contain the physical id in the gmsh file."
+        ]
       },
       "cells": {
         ".type": "integer-list",
@@ -117,7 +121,7 @@
       "51 -0.5",
       "```",
       "This example would assign the values `+0.5` and `-0.5` to the cells `50` and `51` respectively for the coarsest entities of the grid.",
-      "Note that the indexation of the entities starts with `0`, whereas file formats like GMSH v2.0 start their indices with `1`."
+      "Note that the indexation of the entities starts with `0`, whereas file formats like gmsh start their indices with `1`."
     ]
   },
   "model.[order|is_linear|parser_type]": {
@@ -359,8 +363,20 @@
   },
   "model.time_step_operator.linear_solver.layout.writer.svg.path": {
     ".type": "path",
-    ".brief": "Path to write SVG pattern of the matrix",
-    ".details": "This option can only be used together with `matrix_free=false`"
+    ".brief": "Path to write `svg` layout of the matrix",
+    ".details": [
+      "Writes a `svg` file with the matrix layout of the jacobian of the system in the current directory.",
+      "",
+      "There are a number of parameters that affect the resulting layout:",
+      "* The `model.blocked_layout.[compartments|scalar_fields]=<bool>` options affect the hierarchal structure of the matrix.",
+      "* The number of scalar fields in `model.scalar_field.{var}.*` and the compartment `{cmp}`  where the belong (i.e., `model.scalar_field.{var}.compartment={cmp}`) affacts the position of the matrix entries.",
+      "* The grid connectivity affects the position of the matrix entries.",
+      "* The jacobian options of the reaction operator (i.e. `model.scalar_field.{var}.reaction.jacobian.{wrt}.expression`) affects the appearance of many entries in the matrix.",
+      "",
+      "To visualize the results of this option use your web browser, [GIMP](https://www.gimp.org), [Inkscape](https://inkscape.org), [Affinity Designer](https://affinity.serif.com) or [another vector graphics editor](https://en.wikipedia.org/wiki/Comparison_of_vector_graphics_editors).",
+      "",
+      "This option will only have effect when the a matrix is created, (e.g., matrix-free computation won't write any file)."
+    ]
   },
   "model.time_step_operator.nonlinear_solver.[norm|linearization_threshold|dx_inverse_fixed_tolerance|dx_inverse_min_relative_tolerance]": {
     ".brief": "Options of the non-linear solver",
@@ -550,7 +566,12 @@
   },
   "model.writer.vtk.path": {
     ".type": "path",
-    ".brief": "If not empty, path to write VTK results"
+    ".brief": "If not empty, path to write VTK results",
+    ".details": [
+      "Writes a set `vtu` files with the scalar field solution of the problem in the file system under `{prefix}-{cmp}` directory for each `{cmp}` compartment.",
+      "Additionally, a compendium of all timesteps for each compartment is written in a `pvd` file on the same directory.",
+      "The resulting `vtu` and `pvd` files can be opened by [ParaView](https://www.paraview.org/) or [VisiIt](https://wci.llnl.gov/simulation/computer-codes/visit/) to visualize their results."
+    ]
   },
   "parser_context.{tkn}.[type|expression|parser_type|domain|range|value|path|interpolate|seed]": {
     ".brief": "Sets up a token `{tkn}` in the dune-copasi parsers",
@@ -566,7 +587,11 @@
             ".brief": "Sets token `{tkn}` as an inline function. Options: `parser_context.{tkn}.[expression|interpolate|interpolation.[...]]`"
           },
           "'tiff'": {
-            ".brief": "Sets token `{tkn}` as a 2D function with the contents of a tiff file. Options: `parser_context.{tkn}.path`"
+            ".brief": "Sets token `{tkn}` as a 2D function with the contents of a tiff file. Options: `parser_context.{tkn}.path`",
+            ".details": [
+              "Reads an image file with [`tiff` format](https://en.wikipedia.org/wiki/TIFF) and makes it available as a 2D function expression with the `{tkn}` token.",
+              "Images with grayscale values of `8`, `16`, `32`, and `64` bits are supported."
+            ]
           },
           "'interpolation'": {
             ".brief": "Sets token `{tkn}` as a 1D interpolation function. Options: `parser_context.{tkn}.[domain|range]`"
@@ -654,6 +679,10 @@
       }
     }
   },
+  "parser_context.{tkn}.{parafields-key}={parafields-value}": {
+    ".brief": "Parameters to generate the random field in token `{tkn}`",
+    ".details": "When the token `{tkn}` is a `'random_field'` type, all parameters `{parafields-key}={parafields-value}` under the `parser_context.{tkn}` subsection will be forwarded to the [`parafields-core`](https://github.com/parafields/parafields-core) engine."
+  },
   "parser_context.{tkn}.interpolation.[domain.{arg}|intervals|out_of_bounds]": {
     ".brief": "Interpolation options for the context function `{tkn}`",
     ".options": {
@@ -685,8 +714,9 @@
     ".type": "path",
     ".brief": "Path to write VTK file of `random_field` contexts",
     ".details": [
-      "If empty, no output will be written.",
-      "This option can only be used together with `parser_context.{tkn}.type=random_field`."
+      "Writes a `vtu` file with the contents of the generated random field in the filesystem with the `{tkn}` keyword as a base name.",
+      "This option can only be used together with `parser_context.{tkn}.type=random_field`.",
+      "The resulting `vtu` files can be opened by [ParaView](https://www.paraview.org/) or [VisiIt](https://wci.llnl.gov/simulation/computer-codes/visit/) to visualize their results."
     ]
   },
   "parser_context.parser_type": {
@@ -698,6 +728,10 @@
   "trace.path": {
     ".type": "path",
     ".brief": "File path to store the trace of the program",
-    ".details": "Only available if binary is built with Perfetto. To visualize the trace, use <https://ui.perfetto.dev/>"
+    ".details": [
+      "Writes a trace file with the timing information of the simulation on the current directory. ",
+      "To visualize the trace, use [Perfetto Trace Viewer](https://ui.perfetto.dev/).",
+      "Only available if binary is built with Perfetto. "
+    ]
   }
 }
\ No newline at end of file
diff --git a/doc/docusaurus/docs/ini_file.md b/doc/docusaurus/docs/ini_file.md
deleted file mode 100644
index a04f9ee28d85fa5c0eafa668088143cb603aecc2..0000000000000000000000000000000000000000
--- a/doc/docusaurus/docs/ini_file.md
+++ /dev/null
@@ -1,92 +0,0 @@
----
-id: ini_file
-title: Ini File
-sidebar_label: Ini File
----
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-The [INI file](https://en.wikipedia.org/wiki/INI_file) creates a
-[parameter tree](param_tree.md) to initialize and run the models.
-The one we use follows the `DUNE` convention. In short, the data is composed
-of a *key–value pairs* on the form `key = value`.
-
-### Comments
-
-Lines starting with a hash `#` will be ignored
-
-```ini
-# This is a comment
-```
-
-### Value
-
-The `value` on the `key=value` pair may be of different kinds. The following is
-list of possible accepted types
-
-| Type | Description |
-| ---- | ----------- |
-| `string`      | Sequence of characters terminated an [end of line](https://en.wikipedia.org/wiki/Newline)
-| `float`       | Decimal number in floating point representation
-| `integer`     | Integer number
-| `path`        | String that represent filesystem paths absolute or relative to a program
-| `math-expr`   | [Mathematical Expression](math_expr.md)
-
-Examples
-
-```ini
-string = I am a good looking string
-float = 1e-2
-integer = 1
-path = /path/to/directory/
-math_expr = pi*sin(x)*sin(y)
-```
-
-### Group
-
-A `key` is a `string` which may be contained on a common
-group of parameters by preceding the line with the group name between
-brackets, or/and by preceding the `key` by the group name and a dot. Notice that
-the two forms may be combined.
-
-As an example, the three following ini files, are equivalent
-<Tabs
-  defaultValue="form1"
-  values={[
-      {label: 'No grouping', value: 'form1', },
-      {label: 'Grouping', value: 'form2', },
-      {label: 'Nested grouping', value: 'form3', },
-    ]
-  }>
-
-  <TabItem value="form1">
-
-```ini
-# No preceding section
-section.subsection.first = 1.0
-section.subsection.second = 2.0
-```
-
-  </TabItem>
-  <TabItem value="form2">
-
-```ini
-[section]
-subsection.first = 1.0
-subsection.second = 2.0
-```
-
-  </TabItem>
-
-
-  <TabItem value="form3">
-
-```ini
-[section.subsection]
-first = 1.0
-second = 2.0
-```
-
-  </TabItem>
-</Tabs>
diff --git a/doc/docusaurus/docs/ini_file.mdx b/doc/docusaurus/docs/ini_file.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..ce6d236fe39e192f457483c1cbd7351ff9c319b4
--- /dev/null
+++ b/doc/docusaurus/docs/ini_file.mdx
@@ -0,0 +1,84 @@
+---
+id: ini_file
+title: Config File
+description: Syntax of INI file
+sidebar_label: Config File
+---
+
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+The [INI format](https://en.wikipedia.org/wiki/INI_file) define a set of [configuration options](param_tree) to initialize and run the models.
+
+## Format
+
+The forrmat we use follows the DUNE `ini` file convention. In short, the data is composed of a *key–value pairs* on the form `key = value`.
+
+### Comments
+
+Characters followed by hash `#` will be ignored.
+
+```ini title="config.ini"
+# %highlight
+# line comment
+key = value
+```
+
+### Entries
+
+An entry is given by a *key-value pair* and must be entirely contained in one line. Additionally, *keys* must be unique.
+
+```ini title="config.ini"
+id = value
+# %highlight-error
+id = val 
+# error: repeated key 'id'
+```
+
+### Group
+
+A *key* is a string which may be contained on a common
+group of parameters by preceding the line with the *group name* between
+brackets and/or by preceding the *key* by the *group name* separated by a dot. Notice that
+the two forms may be combined.
+
+As an example, the three following `ini` files, are equivalent
+<Tabs
+  defaultValue="form1"
+  values={[
+      {label: 'No grouping', value: 'form1', },
+      {label: 'Grouping', value: 'form2', },
+      {label: 'Nested grouping', value: 'form3', },
+    ]
+  }>
+
+  <TabItem value="form1">
+
+```ini title="config.ini"
+# No preceding section
+section.subsection.first = 1.0
+section.subsection.second = 2.0
+```
+
+  </TabItem>
+  <TabItem value="form2">
+
+```ini title="config.ini"
+[section]
+subsection.first = 1.0
+subsection.second = 2.0
+```
+
+  </TabItem>
+
+
+  <TabItem value="form3">
+
+```ini title="config.ini"
+[section.subsection]
+first = 1.0
+second = 2.0
+```
+
+  </TabItem>
+</Tabs>
diff --git a/doc/docusaurus/docs/input_data.md b/doc/docusaurus/docs/input_data.md
deleted file mode 100644
index b810bc3721014b7039a875856cae2537e59b73ee..0000000000000000000000000000000000000000
--- a/doc/docusaurus/docs/input_data.md
+++ /dev/null
@@ -1,32 +0,0 @@
----
-id: input_data
-title: Input Data
-sidebar_label: Input Data
----
-
-## TIFF Images
-
-Each `key=value` pair on the `[model.data]` section defines a
-[Context-Dependet-Function](math_expr.md) with 2 arguments named as the `key`
-identifier. The corresponding `value` should contain the directory path for a
-16-bit grayscale TIFF file. These function are permitted to be used on the
-initialization of spatial variables for the compartments
-(i.e. `[model.<compartment>.initial]`). For example, on the initialization of
-variables for the `nucleus` compartment, the following math expressions for `u`
-and `v` are valid.
-
-```ini
-[model.data]
-fnc_1 = file_1.tiff
-fnc_2 = file_2.tiff
-
-[model.nucleus.initial]
-u = fnc_1(x, y) + fnc_2( -x, -y)
-v = 30 * fnc_1(x, t)
-```
-
-:::caution Out of domain behavior
-If the resulting function is evaluated outside the domain of the TIFF image, the
-arguments will be [clamped](https://en.wikipedia.org/wiki/Clamping_(graphics)) to
-the nearest valid point in the domain.
-:::
diff --git a/doc/docusaurus/docs/input_data.mdx b/doc/docusaurus/docs/input_data.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..739d6e63429996de8b9a12b2b227ae628e0f55a0
--- /dev/null
+++ b/doc/docusaurus/docs/input_data.mdx
@@ -0,0 +1,88 @@
+---
+id: input_data
+title: Input Data
+description: List of possible to input data
+sidebar_label: Input Data
+---
+
+import ConfigOptsJSON from './assets/config_opts.json';
+import Markdown from 'react-markdown';
+
+export const JoinDetailsArray = (a) => {return Array.isArray(a) ? a.join('\n') : a}
+
+Several input data files in the `dune-copasi` program are possible:
+
+### Config Options (INI Format)
+
+:::note Command Line Arguments:
+* **`--config={path}`**
+:::
+
+An extensive set of [configuration options](param_tree) can be customized via the [DUNE `ini` file convention](ini_file).
+
+::::tip Override options
+The options in the configuration file may be overridden by passing `--{key}={value}` to the command line of the program.
+::::
+
+### Grid (GMSH Format)
+
+:::note Config Options:
+* **`grid.path={path}`**
+:::
+
+<Markdown>
+{JoinDetailsArray(ConfigOptsJSON["grid.[dimension|path|cells|extensions|origin|refinement_level|axis_names]"][".options"]["path"][".details"])}
+</Markdown>
+
+:::tip Example
+Assuming that `path/to/grid.msh` contains a gmsh file with physical entities `1` and `2`, then, the example below will create compartments `inner` and `outer`. The pysical entities with index `1` will be assigned to compartment `outer` whereas the pysical entities with index `2` will be assigned to compartment `inner`.
+```ini title="config.ini"
+[grid]
+path = path/to/grid.msh
+
+[compartments]
+outer.expression = (gmsh_id == 1)
+inner.expression = (gmsh_id == 2)
+```
+:::
+
+### Grid Cell Data (TXT Format)
+
+:::note Config Options:
+* **`grid.cell_data.{dtkn}.path={prefix}`**
+:::
+
+<Markdown>
+{JoinDetailsArray(ConfigOptsJSON["grid.cell_data.{dtkn}.[type|path]"][".details"])}
+</Markdown>
+
+### Images (TIFF Format)
+
+:::note Config Options:
+* **`parser_context.{tkn}.type=tiff`**
+* **`parser_context.{tkn}.path={path}`**
+:::
+
+<Markdown>
+{JoinDetailsArray(ConfigOptsJSON["parser_context.{tkn}.[type|expression|parser_type|domain|range|value|path|interpolate|seed]"][".options"]["type"][".options"]["'tiff'"][".details"])}
+</Markdown>
+
+:::tip Example
+Assuming that `path/to/image.tif` contains a tiff file with values `1` and `2`, then, the example below will create compartments `inner` and `outer`. The grid cells where their center evaluated in `alpha` results in index `1` will be assigned to compartment `outer` whereas the grid cells where their center evaluated in `alpha` results in index `2` will be assigned to compartment `inner`.
+```ini title="config.ini"
+[parser_context.alpha]
+type = tiff
+path = path/to/image.tif
+
+[compartments]
+outer.expression = (alpha(position_x, position_y) <= 1.5)
+inner.expression = (alpha(position_x, position_y) >  1.5)
+```
+Notice how `position_x` and `position_y` are assigned on each grid cell to determine the value of the expression.
+:::
+
+:::info Out of domain behavior
+If the resulting function `{tkn}` is evaluated outside the domain of the `tiff` image, the
+arguments will be [clamped](https://en.wikipedia.org/wiki/Clamping_(graphics)) to
+the nearest valid point in the domain.
+:::
\ No newline at end of file
diff --git a/doc/docusaurus/docs/install_use.md b/doc/docusaurus/docs/install_use.mdx
similarity index 99%
rename from doc/docusaurus/docs/install_use.md
rename to doc/docusaurus/docs/install_use.mdx
index bc6c8ddf6947b5fc4951cec0c7ce32a9cc4332a7..8d584ff8da719432bf663c38802dfc1144c85eca 100644
--- a/doc/docusaurus/docs/install_use.md
+++ b/doc/docusaurus/docs/install_use.mdx
@@ -1,6 +1,7 @@
 ---
 id: install_use
 title: Installation and Usage
+description: How to use the program
 sidebar_label: Install & Use
 ---
 
@@ -31,7 +32,7 @@ with just a pair of clicks on the major plataforms. Find more information
 
 In this form, `dune-copasi` provides one executable for single compartment
 systems (`dune-copasi-sd`) and another one for multiple compartment systems
-(`dune-copasi-md`). Both executables expect one [`INI` configuration file](ini_file.md)
+(`dune-copasi-md`). Both executables expect one [`INI` configuration file](ini_file)
 which shall contain all the information to perform the simulation.
 
 ```bash
@@ -39,7 +40,7 @@ dune-copasi-md config.ini
 ```
 
 Find more information about available configurations on the
-[Parameter Tree](param_tree.md) documentation. This form may be
+[Parameter Tree](param_tree) documentation. This form may be
 installed in one of the following procedures:
 
 * [Docker Runner](#docker-runner)
@@ -53,7 +54,7 @@ to generate custom simulation rules, to couple intermediate steps with other
 tools, or to implement another GUI, etc. In such a case, `dune-copasi` must be
 available in development mode and the downstream library is expected to
 [consume the library](#importing-cmake-targets) by using the
-[CMake build system](https://cmake.org) and use the [C++ objects](api.md) in code.
+[CMake build system](https://cmake.org) and use the [C++ objects](api) in code.
 This form is available on:
 
 * [Manual Installation](#manual-installation)
diff --git a/doc/docusaurus/docs/math_expr.md b/doc/docusaurus/docs/math_expr.md
deleted file mode 100644
index aa6b4e571631ae9b76e9c3ebb3138965d9d1fbf0..0000000000000000000000000000000000000000
--- a/doc/docusaurus/docs/math_expr.md
+++ /dev/null
@@ -1,55 +0,0 @@
----
-id: math_expr
-title: Mathematical Expressions
-sidebar_label: Math Expressions
----
-
-Mathematical expressions are permitted on different sections of the
-[Parameter Tree](param_tree.md). Such expressions may contain typical math
-operations such as `+`, `-`, `*`, `^`, `sin`, `tan`, etc. The complete list of
-possibilities is found [here](https://beltoforion.de/en/muparser/features.php).
-That is, the `muParser` built in operators.
-
-Furthermore, we provide extra variables/functions that may be included on the
-math expressions.
-
-## Variables
-### Context-Independent
-
-The following list of variables are unconditionally available when defining
-expressions:
-
-| Variable | Description |
-| -------- | ----------- |
-| `t`      | Time
-| `x`      | First dimension in the cartesian coordinate system
-| `y`      | Second dimension in the cartesian coordinate system
-| `z`      | Third dimension in the cartesian coordinate system (only in 3D)
-| `dim`    | Dimension of the euclidean space
-| `pi`     | Approximation to the number π
-
-### Context-Dependent
-
-Additionally, there are other variables that are conditionally available to
-define the expression. These variables depend on the context of its definition.
-An example of it is the reaction expressions within a compartment. If the
-section `[model.nucleus.reaction]` defines expressions `u`, `v`, and `w`,
-then, they all will be available to each other. E.g.
-
-```ini
-[model.nucleus.reaction]
-u = u*v*w
-v = u*v*w
-w = u*v*w
-```
-
-## Functions
-
-### Context-Dependent
-
-There are also functions that may be conditionally available depending on the
-context. In such case, the function will have a custom name and fixed number of
-arguments and will be available for use on the mathematical expression.
-
-Currently we only provide these for defining TIFF input images as 2D functions
-for initial conditions (See [Input Data](input_data.md) section).
diff --git a/doc/docusaurus/docs/math_expr.mdx b/doc/docusaurus/docs/math_expr.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..eb0d69fd6930d9115126519235e11c4bd51ff250
--- /dev/null
+++ b/doc/docusaurus/docs/math_expr.mdx
@@ -0,0 +1,457 @@
+---
+id: math_expr
+title: Mathematical Expressions
+description: Allowed syntax for mathematical expressions
+sidebar_label: Math Expressions
+---
+
+import Markdown from 'react-markdown';
+import ConfigOptsJSON from './assets/config_opts.json';
+import Tag from '@theme/Tag';
+import CodeBlock from '@theme/CodeBlock';
+import CodeBlockLine from '@theme/CodeBlock/Line';
+
+export const JoinDetailsArray = (a) => {return Array.isArray(a) ? a.join('\n') : a}
+
+<!-- somehow the markdown title is not rendered :-| so this is a workaround -->
+# Math Expressions
+
+Mathematical expressions `{math-expr}` are permitted on different arguments of the
+[configuration options](param_tree). They consist of a string
+that when interpreted and evaluated returns a numeric value. Such expressions may contain typical math
+operations such as `+`, `-`, `*`, `sin`, `tan`, `sqrt`, etc.
+
+:::tip Example
+The example below initializes the variable `u` with $\texttt{u}_{(0)}=1+2\cdot 10^{-10}$ and sets its diffusion coefficient to $\mathsf{D}_{\texttt{u}} = \sqrt{2\cdot 10^{-10}}$.
+```ini title="config.ini"
+[model.scalar_value.u]
+initial.expression = 1.0 + 2e-10
+cross_diffusion.u.expression = sqrt(2e-10)
+```
+Note how the contents of these arguments need to be understood by a suitable math interpreter.
+:::
+
+::::note Syntax
+The exact syntax permitted within math expressions `{math-expr}` depends on the parser type used to interpret
+the expression. Every expression may be instructed to be interpreted with a different parser by setting `[*.]parser_type={enum}`. The possible parsers are:
+
+<details>
+<summary>
+`'ExprTk'`
+</summary>
+The C++ Mathematical Expression Toolkit Library. Focuses in functionality and [performance](https://github.com/ArashPartow/math-parser-benchmark-project).
+
+https://www.partow.net/programming/exprtk/index.html
+</details>
+
+<details>
+<summary>
+`'MuParser'`
+</summary>
+A fast math parser library. Available in most package managers.
+
+https://beltoforion.de/en/muparser
+</details>
+
+<details>
+<summary>
+`'SymEngine'`
+</summary>
+A symbolic manipulation library. Best known for its python bindings: [`SymPy`](https://www.sympy.org/en/index.html).
+
+https://symengine.org
+</details>
+
+<details>
+<summary>
+`'SymEngineSBML'`
+</summary>
+A [SBML](https://sbml.org/software/libsbml/5.18.0/docs/formatted/csharp-api/libsbml-csharp-math.html) flavored syntax of the `'SymEngine'` parser.
+
+https://symengine.org
+</details>
+
+
+:::caution Parser availability
+Some parsers may not be available depending on how `dune-copasi` is compiled. To see the available parsers use the `--parser-list` command.
+:::
+
+:::tip Parser composition
+Every expression in `{math-expr}` is compiled independently. This means that different parser types may be used in the same model definition. This is helful when the syntax of one parser is more convenient to write one expression. For example, the
+`ExprTk` parser allows the usage of [ternary conditional operator](https://en.wikipedia.org/wiki/Ternary_conditional_operator) `cond ? expr1 : expr2` whereas `SymEngine` does not:
+```ini title="config.ini"
+[parser_context.pulse]
+type = function
+# %highlight
+expression = t, t0, dt: abs(t-t0) < dt ? 1 : 0
+parser_type = ExprTk
+
+[model.scalar_value.u]
+reaction.expression = 1e10 + pulse(time, 10, 1)
+# %highlight
+reaction.parser_type = SymEngine
+```
+:::
+::::
+
+# Keywords
+
+Math expressions may be evaluated in many different contextual environments, such as, in the initialization of variables,
+a coefficient interpretation, or as an aid to define the cells that belong to a comartment. Depending on the context, several keywords are defined in order to help expressing the desired mathematical model. These keywords are declared and defined in the following way:
+
+## Contextual Transient Keyword
+
+Whenever the context of the evaluation is transient, the `time` keyword will evaluate to the corresponding simulation time $t$.
+In other words,
+
+$$
+\texttt{time}:=t.
+$$
+
+## Contextual Domain Keywords
+
+Whenever an expression is evaluated at a position $x\in\Omega\subset\mathbb{R}^d$ then this position is also available within the `{math-expr}`. Such position is made available through the `position_[x|y|z]` keywords such that
+
+$$
+[\texttt{position\_x},\,\texttt{position\_y},\,\texttt{position\_z}]:=\hat{x},
+$$
+
+where $\hat{x}\in \mathbb{R}^3$ is the extension of $x\in\Omega$ into $\mathbb{R}^3$.
+
+:::note mesh definition
+We assume that the domain $\Omega$ is covered by a mesh $\mathcal{T}_h = \{T_1, \ldots , T_M\}$ consisting of elements which are closed sets satisfying
+
+$$
+\bigcup_{T\in \mathcal{T}_h} T = \overline{\Omega}, \quad 
+\forall T, T' \in \mathcal{T}_h, T\neq T' : \mathring{T} \cap \mathring{T}' = \emptyset,
+$$
+
+The nonempty intersections $F = T_F^-\cap T_F^+$
+of codimension 1 form the interior skeleton $\mathcal{F}_h^i=\{F_1,\ldots,F_N\}$.
+Each intersection is equipped with a unit normal vector $\nu_F$ pointing from $T_F^-$ to $T_F^+$.
+The intersections of an element $F=T_F^-\cap\partial\Omega$ with the domain
+boundary form the set of boundary intersections $\mathcal{F}_h^{\partial\Omega}=
+\{F_1,\ldots,F_L\}$.
+Each boundary intersection is equipped with a unit normal vector
+$\nu_F$ which coincides with the unit outer normal to the domain.
+:::
+Furthermore, the contextual domain evaluation is always associated to a grid element $e$. Its properties are also expossed within the parser as:
+
+$$
+\begin{aligned}
+\texttt{entity\_volume}&:=|e|\\
+\texttt{in\_volume}&:=
+  \left\{
+  \begin{matrix}
+    \texttt{true} \quad& \text{if }e\in\mathcal{T}_h\\
+    \texttt{false} \quad& \text{otherwise}
+  \end{matrix}
+  \right.\\
+\texttt{in\_boundary}&:=
+  \left\{
+  \begin{matrix}
+    \texttt{true} \quad& \text{if }e\in\mathcal{F}_h^{\partial\Omega}\\
+    \texttt{false} \quad& \text{otherwise}
+  \end{matrix}
+  \right.\\
+\texttt{in\_skeleton}&:=
+  \left\{
+  \begin{matrix}
+    \texttt{true} \quad& \text{if }e\in\mathcal{F}_h^i\\
+    \texttt{false} \quad& \text{otherwise}
+  \end{matrix}
+  \right.
+\end{aligned}
+$$
+
+
+In the cases where $e\in\mathcal{F}_h^{\partial\Omega}\cup\mathcal{F}_h^i$ we also have that its unit outer normal vector is exposed with the keywords `normal_[x|y|z]` such that
+
+$$
+[\texttt{normal\_x}, \texttt{normal\_y}, \texttt{normal\_z}] := \hat{\nu}_F,
+$$
+
+where $\hat{\nu}_F\in \mathbb{R}^3$ is the extension of $\nu_F\in\mathbb{R}^d$ into $\mathbb{R}^3$.
+
+## Contextual Scalar Field Keywords
+
+There are cases where the evaluation of `{math-expr}` is made when the results of the scalar values `{var}` (or a trial function of them) are known. In such cases, the value of `{var}` evaluated at position $x$ is made available thoruhg the parsers. Additionally, its gradient $\frac{\partial}{\partial \hat{x}}$`{var}` is also represented by the `grad_{var}_[x|y|z]` tokens.
+
+:::tip example
+The configuration file to represent the system of ordinary differential equations
+$$
+\begin{aligned}
+\partial_t \texttt{u}& - \mathcal{R}_\texttt{u}(\texttt{u}, \texttt{z}),\\
+\partial_t \texttt{z}& - \mathcal{R}_\texttt{z}(\texttt{u}, \texttt{z})
+\end{aligned}
+$$
+
+with the reaction networks on the form of
+$$
+\begin{aligned}
+\mathcal{R}_\texttt{u}(\texttt{u}, \texttt{z})&:= \texttt{z}\cdot\texttt{u}^2\cdot(1-\texttt{u}) - \texttt{u},\\
+\mathcal{R}_\texttt{z}(\texttt{u}, \texttt{z})&:=
+  \left\{
+  \begin{matrix}
+    \frac{1 - \texttt{z}}{1.25} \quad& \text{if }\texttt{u} \leq 0.1\\
+    -\texttt{z} \quad& \text{otherwise}
+  \end{matrix}
+  \right.\\
+\end{aligned}
+$$
+will contain something similar to this:
+```ini title="config.ini"
+[model.scalar_field.u]
+storage.expression = 1
+# %highlight
+reaction.expression = z*u^2*(1-u) - u
+reaction.jacobian.u.expression = u*z*(2-3*u)-1
+reaction.jacobian.z.expression = (1-u)*u^2
+
+[model.scalar_field.z]
+storage.expression = 1
+# %highlight
+reaction.expression = (u <= 0.1) ? (1 - z)/1.25 : -z
+reaction.jacobian.z.expression = (u <= 0.1) ? -1/1.25 : -1
+```
+Notice how the tokens `u` and `z` are allowed in each `{math-expr}` across different scalar field sub-sections of `*.u` and `*.z`. This allows to express non-linearities in a natural form.
+:::
+
+## Custom Keywords
+
+:::note Config Options:
+* **`parser_context.{tkn}.type={enum}`**
+* **`parser_context.{tkn}.{...}={...}`**
+:::
+
+Independently of the evaluation context, you are allowed to inject keywords into the parser in order to express mathematical expressions easier. The defined keywords will be defined and allowed to be used within `math-expr` definitions.
+
+### Constants
+
+
+:::note Config Options: 
+* **`parser_context.{tkn}.type='constant'`**
+* **`parser_context.{tkn}.value={float}`**
+:::
+
+Defines a keyword `{tkn}` that when evaluated gets replaced by the constant contained in `{float}`.
+
+:::tip Example
+```ini title="config.ini"
+[parser_context.water_diffusion]
+type = constant
+value = 2.299E10−9
+```
+is equivalent to
+
+$$
+\texttt{water\_diffusion}:=2.299\cdot 10^{-9}
+$$
+
+:::
+
+### Function Math Expressions
+
+:::note Config Options:
+* **`parser_context.{tkn}.type='function'`**
+* **`parser_context.{tkn}.expression={func-expr}`**
+* **`parser_context.{tkn}.parser_type={enum}`**
+:::
+
+Declares a keyword `{tkn}` than may be used as a function within the parsers. The definition of the function starts with up to 4 comma separated string arguments followed by a colon and a math expression.
+
+* `{args} := {arg0}[, {arg1}[, {arg2}[, {arg3}]]]`
+* `{func-expr} := {args}: {math-expr}`
+
+The math expression `{math-expr}` is allowed to use the arguments `{args}` as numerical values and any other custom defined keywords exceptuating other function keywords.
+
+:::tip example
+This example defines a keyword `pulse` that may be used in other math expression config option argument to evaluate `{math-expr}` when provided with 3 arguments.
+
+```ini title="config.ini"
+[parser_context.pulse]
+type = function
+expression = t, t0, dt: abs(t-t0) < dt ? 1 : 0
+```
+is equivalent to
+$$
+\texttt{pulse(}t, t_0, \delta_t\texttt{)}:=
+\left\{
+  \begin{matrix}
+    1, \quad& \text{if }|t-t_0| < \delta_t\\
+    0,   \quad& \text{otherwise}
+  \end{matrix}
+  \right.
+  .
+$$
+:::
+
+
+::::tip Linear interpolation
+
+:::note Config Options:
+* **`parser_context.{tkn}.interpolate={bool}`**
+* **`parser_context.{tkn}.domain.{arg}={float-pair}`**
+* **`parser_context.{tkn}.intervals={integer}`**
+* **`parser_context.{tkn}.out_of_bounds={enum}`**
+:::
+
+In cases where `{math-expr}` is very expensive to compute and the function has one argument, these options allow to replace the function definition with a linear interpolation of `{math-expr}`.
+
+::::tip example
+This example defines a keyword `my_exp` referring to an interpolation of `exp(x)` evaluated in `100` sub-intervals between the domain values `0` and `10`.
+```ini title="config.ini"
+[parser_context.my_exp]
+type = function
+expression = x: exp(x)
+# %highlight-start
+interpolate = true
+domain.x = 0 10
+intervals = 100
+out_of_bounds = error
+# %highlight-end
+```
+The interpolation may be disabled by setting `interpolate=false`, in which case `exp(x)` will be compiled and evaluated as any other mathematical expression.
+::::
+
+::::caution Other functions
+A `{math-expr}` with `'function'` type is not allowed to contain other custom keywords defined as `'function'` type. This means that recursive and composition of functions is not allowed.
+
+
+:::note example
+```ini title="config.ini"
+[parser_context.factorial]
+type = function
+# %highlight-error
+expression = n: (n > 0) ? n * factorial(n-1) : n
+# error: 'factorial' keyword is not known
+
+[parser_context.f]
+type = function
+expression = x, y: sin(x) * cos(y)
+
+[parser_context.g]
+type = function
+# %highlight-error
+expression = x: f(x, x-1)
+# error: 'f' keyword is not known
+```
+:::
+::::
+
+:::caution muparser max limit
+There is a maximum limit to the number of functions may can be defined when the `{math-expr}` is compiled using `[*.]parser_type='MuParser'`. This limit is severely reduced when the assembly is made in concurrent mode. We recommend using other parsers when defining functions.
+:::
+
+### Random Field
+
+:::note Config Options:
+* **`parser_context.{tkn}.type='random_field'`**
+* **`parser_context.{tkn}.{parafields-key}={parafields-value}`**
+:::
+
+These options generate a Gaussian random field based on circulant embedding using [parafields](https://parafields.readthedocs.io/en/latest/intro.html) and declares it as a function with the keyword `{tkn}`. The number of arguments of such function depends on the dimension of the grid used to generate the random field. All parameters `{parafields-key}={parafields-value}` under the `parser_context.{tkn}` subsection will be forwarded to the [`parafields-core`](https://github.com/parafields/parafields-core) engine.
+
+:::tip example
+
+The example below shows the definition of the keyword `my_rng` in the parsers as a 2D function with the contents of a random field. Later, the keyword `my_rng` is used within a math expression to initialize the variable `u` using the contextual domain keywords `position_x` and `position_y`.
+
+```ini title="config.ini"
+[parser_context.my_rng]
+type = random_field
+grid.extensions = 1.0 1.0
+grid.cells = 1000 1000
+randomField.transform = logNormal
+stochastic.corrLength = 0.10
+stochastic.covariance = exponential
+stochastic.variance = 0.2
+
+[model.scalar_field.u]
+initial.expression = my_rng(2*position_x, 2*position_y)
+```
+:::
+
+
+
+
+:::info Out of domain behavior
+If the resulting function `{tkn}` is evaluated outside the domain values, the
+arguments will be [clamped](https://en.wikipedia.org/wiki/Clamping_(graphics)) to
+the nearest valid point in the domain.
+:::
+
+:::caution Random Fields availability
+This option is only available when `dune-copasi` is compiled with [parafields](https://github.com/parafields/parafields-core).
+:::
+
+### 1D Linear Interpolation
+
+:::note Config Options:
+* **`parser_context.{tkn}.type='interpolation'`**
+* **`parser_context.{tkn}.domain={float-list}`**
+* **`parser_context.{tkn}.range={float-list}`**
+:::
+
+A 1D function with a [linear interpolation](https://en.wikipedia.org/wiki/Interpolation) may be generated from of domain and range pairs.
+
+:::tip example
+A configuration file with the following input
+```ini title="config.ini"
+[parser_context.f]
+type   = interopation
+domain = 0       1       2       3       4       5       6
+range  = 0       0.8415  0.9093  0.1411  −0.7568 −0.9589 −0.2794
+```
+represents a function `f(x)` with this graphical representation:
+![Function `f` interpolation](https://upload.wikimedia.org/wikipedia/commons/6/67/Interpolation_example_linear.svg)
+:::
+
+:::info Out of domain behavior
+If the resulting function `{tkn}` is evaluated outside the domain values, the
+arguments will be [clamped](https://en.wikipedia.org/wiki/Clamping_(graphics)) to
+the nearest valid point in the domain.
+:::
+
+
+### Images (TIFF Format)
+
+:::note Config Options:
+* **`parser_context.{tkn}.type='tiff'`**
+* **`parser_context.{tkn}.path={path}`**
+:::
+
+<Markdown>
+{JoinDetailsArray(ConfigOptsJSON["parser_context.{tkn}.[type|expression|parser_type|domain|range|value|path|interpolate|seed]"][".options"]["type"][".options"]["'tiff'"][".details"])}
+</Markdown>
+
+:::tip Expample
+
+The example below shows the definition of the keyword `my_image` in the parsers as a 2D function with the contents of the file in `path/to/file.tif`. Later, the keyword `my_image` is used within a math expression to initialize the variable `u` using the contextual domain keywords `position_x` and `position_y`.
+```ini title="config.ini"
+[parser_context.my_image]
+type = tiff
+path = path/to/file.tif
+
+[model.scalar_field.u]
+initial.expression = my_image(2*position_x, 2*position_y)
+:::
+
+### Grid Cell Data (TXT Format)
+
+:::note Config Options:
+* **`grid.cell_data.{dtkn}.path={prefix}`**
+:::
+
+The keywords `{dtkn}` defined by `grid.cell_data.{dtkn}.path={prefix}` will be additionally available within the math expressions that are under a domain context. When evaluated it will contain the data defined within the `{prefix}` file.
+
+## Reserved Keywords
+
+The following keywords are reserved to have special meaning within the program:
+
+| Keyword    | Description |
+| ---------  | ----------- |
+| `no_value` | Indicates that the result of an expression does not represent a numeric value |
+
+:::caution Parser reserved keywords
+Additionally to those defined here, every underlying parser has its own set of keywords that are reserved. Visit the documentation of your preferred parser to learn more about its syntax and its reserved keywords.
+:::
diff --git a/doc/docusaurus/docs/output.md b/doc/docusaurus/docs/output.md
deleted file mode 100644
index 8605be8ea48717a6a67e1aafd1529f72b94c1e1e..0000000000000000000000000000000000000000
--- a/doc/docusaurus/docs/output.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-id: output
-title: Output
-sidebar_label: Output
----
-
-The output of `dune_copasi_md` is a set of `vtk` files for the timesteps and the
-different compartments. The compendium of all timesteps is written in a `pvd`
-file on the same directory where the executables was called, while the actual
-data files for each timestep is written on folders following the
-`[model.writer.file_path]` value.
-
-The `pvd` files can be opened by [ParaView][paraview] or [VisiIt][visit] to
-inspect the results.
-
-[paraview]: https://www.paraview.org/
-[visit]: https://wci.llnl.gov/simulation/computer-codes/visit/
diff --git a/doc/docusaurus/docs/output.mdx b/doc/docusaurus/docs/output.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..24f9ff732ea0ae881635d6eb6f14baa292b6f466
--- /dev/null
+++ b/doc/docusaurus/docs/output.mdx
@@ -0,0 +1,66 @@
+---
+id: output
+title: Output Data
+description: List of possible to input data
+sidebar_label: Output Data
+---
+
+import ConfigOptsJSON from './assets/config_opts.json';
+import Markdown from 'react-markdown';
+
+export const JoinDetailsArray = (a) => {return Array.isArray(a) ? a.join('\n') : a}
+
+Several output data files in the `dune-copasi` program are possible:
+
+### Simulation Results (VTK Format)
+
+:::note Config Options:
+* **`model.writer.vtk.path={prefix}`**
+:::
+
+<Markdown>
+{JoinDetailsArray(ConfigOptsJSON["model.writer.vtk.path"][".details"])}
+</Markdown>
+
+### Simulation Trace (Perfetto Format)
+
+:::note Config Options:
+* **`trace.path={prefix}`**
+:::
+
+<Markdown>
+{JoinDetailsArray(ConfigOptsJSON["trace.path"][".details"])}
+</Markdown>
+
+### Matrix Layout (SVG Format)
+
+:::note Config Options:
+* **`model.time_step_operator.linear_solver.layout.writer.svg.path={prefix}`**
+:::
+
+<Markdown>
+{JoinDetailsArray(ConfigOptsJSON["model.time_step_operator.linear_solver.layout.writer.svg.path"][".details"])}
+</Markdown>
+
+::::caution output size
+The SVG format is helpful to understand the sparsity pattern and hierarchy of the matrix, however, this format is not particularly efficient to represent matrices. Hence, use this option only with small and medium problem sizes.
+
+:::tip
+If the resulting SVG file turns out to be too big, try converting the file into another format like `png` or `jpeg` with [Inkscape](https://inkscape.org) or similar:
+
+```bash
+inkscape -z -w 20000 -h 20000 matrix.svg -e matrix.png
+```
+:::
+::::
+
+### Random Field (VTK Format)
+
+:::note Config Options:
+* **`parser_context.{tkn}.type=random_field`**
+* **`parser_context.{tkn}.writer.vtk.path={prefix}`**
+:::
+
+<Markdown>
+{JoinDetailsArray(ConfigOptsJSON["parser_context.{tkn}.writer.vtk.path"][".details"])}
+</Markdown>
\ No newline at end of file
diff --git a/doc/docusaurus/docs/param_tree.md b/doc/docusaurus/docs/param_tree.md
deleted file mode 100644
index 3ca9570ee9c5e24fa88ec38e3e50ba90e1875c17..0000000000000000000000000000000000000000
--- a/doc/docusaurus/docs/param_tree.md
+++ /dev/null
@@ -1,46 +0,0 @@
----
-id: param_tree
-title: Configuration Options
-sidebar_label: Config Options
----
-
-import ConfigOpts from './ConfigOpts.js'
-
-
-## Key-Value Pairs
-
-The simulator may be configured by passing a collection of `key=value` pair that change the behavior of the solver.
-These options may be passed via a configuration file with the [`DUNE` ini file convention](ini_file.md) or by the command line `--{key}={value}`. Note that command line arguments take precedence over the config file parameters.
-
-::::info Placeholders
-Whenever a key in this documentation contains curly braces `{...}` it means that it is a placeholder for a user defined key.
-
-:::tip Example
-The option `compartments.domain.expression` means that the `{cmp}` placeholder in `compartments.{cmp}.expression` is being replaced with the `domain` keyword and is a valid option.
-:::
-::::
-
-
-::::info Multiple keys
-* Whenever a key in this documentation contains square brackets `[...]` it means that any of the options expanded by the contents separated by `|` is a valid option.
-
-:::tip Example
-The option `model.time_[begin|end]` means that both `model.time_begin` and `model.time_end` are valid options.
-:::
-::::
-
-Below you can find an expandable list of the parameters that may be used in the solver:
-
-<ConfigOpts/>
-
-<!-- ## Example
-
-:::tip Example
-An example of an ini file with all the parameters required by
-`dune-copasi` for the [Gray-Scott model](http://mrob.com/pub/comp/xmorphia/F420/F420-k610.html)
-is
-
-```ini title="config.ini"
-# TODO
-```
-::: -->
diff --git a/doc/docusaurus/docs/param_tree.mdx b/doc/docusaurus/docs/param_tree.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..8e3bc6057bd0c0c07ca67d802e40bb710ff0ee31
--- /dev/null
+++ b/doc/docusaurus/docs/param_tree.mdx
@@ -0,0 +1,148 @@
+---
+id: param_tree
+title: List of Options
+description: List of key-value pairs to configure the program
+sidebar_label: Options
+---
+
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+import CodeBlock from '@theme/CodeBlock';
+import ConfigOpts from './ConfigOpts.js'
+
+The simulator may be configured by passing a collection of `key=value` pair that change the behavior of the solver.
+These options may be passed via a configuration file with the [DUNE `ini` file convention](ini_file) or by the command line `--{key}={value}`. Note that command line arguments take precedence over the config file parameters.
+
+:::caution Superfluous keys
+Unknown `key`s will be ignored: This means that typos will silently be passed through the configuration
+options without any error!
+:::
+
+### Value Types
+
+The `value` on the `key=value` pair may be of different kinds. The following is
+list of possible accepted types
+
+| Type | Description |
+| ---- | ----------- |
+| `string`        | Sequence of characters terminated an [end of line](https://en.wikipedia.org/wiki/Newline)
+| `float`         | Decimal number in floating point representation
+| `integer`       | Integer number
+| `bool`          | `true` or `false`
+| `enum`          | Enumeration with a named set of identifiers
+| `path`          | String that represent filesystem paths absolute or relative to the program
+| `math-expr`     | [Math Expression](math_expr)
+| `function-expr` | [Function Math Expression](math_expr)
+
+#### Examples
+
+<Tabs
+  defaultValue="string"
+  values={[
+      {label: 'String', value: 'string', },
+      {label: 'Float', value: 'float', },
+      {label: 'Integer', value: 'integer', },
+      {label: 'Bool', value: 'bool', },
+      {label: 'Enum', value: 'enum', },
+      {label: 'Path', value: 'path', },
+      {label: 'Math Expr', value: 'mathe', },
+      {label: 'Func Expr', value: 'funce', },
+    ]
+  }>
+
+  <TabItem value="string">
+
+```ini title="config.ini"
+key = I am a good looking string
+# this next line is not part of the string
+```
+
+  </TabItem>
+  <TabItem value="float">
+
+```ini title="config.ini"
+key_a = 1e-2
+key_b = 0.1
+```
+
+  </TabItem>
+  <TabItem value="integer">
+
+```ini title="config.ini"
+key = 1
+```
+
+  </TabItem>
+  <TabItem value="bool">
+
+```ini title="config.ini"
+key_a = true
+key_b = false
+```
+
+  </TabItem>
+  <TabItem value="enum">
+
+```ini title="config.ini"
+# e.g. named set of identifiers: ['l_1', 'l_2', 'l_inf']
+key_a = l_1
+key_b = l_2
+key_c = l_inf
+# %highlight-error
+key_d = l_3
+# error: not known 'l_3' in enum
+```
+
+  </TabItem>
+  <TabItem value="path">
+
+```ini title="config.ini"
+# absolute path
+key_a = /path/to/directory/
+# relative path
+key_a = path/to/directory/
+```
+
+  </TabItem>
+  <TabItem value="mathe">
+
+```ini title="config.ini"
+# math expression using contextual 'pi', 'position_x', and 'position_y' tokens
+key = pi*sin(position_x)*sin(position_y)
+```
+
+  </TabItem>
+  <TabItem value="funce">
+
+```ini title="config.ini"
+# function math expression using 'a' and 'b' arguments of a function named 'key'
+key = a, b: sin(a)*sin(b)
+```
+
+  </TabItem>
+</Tabs>
+
+
+
+## Key Options
+
+::::info Placeholders
+Whenever a key in this documentation contains curly braces `{...}` it means that it is a placeholder for a user defined key.
+
+:::tip Example
+The option `compartments.domain.expression` means that the `{cmp}` placeholder in `compartments.{cmp}.expression` is being replaced with the `domain` keyword and is a valid option.
+:::
+::::
+
+
+::::info Multiple keys
+* Whenever a key in this documentation contains square brackets `[...]` it means that any of the options expanded by the contents separated by `|` is a valid option.
+
+:::tip Example
+The option `model.time_[begin|end]` means that both `model.time_begin` and `model.time_end` are valid options.
+:::
+::::
+
+Below you can find an expandable list of the keys that may be used in the solver:
+
+<ConfigOpts/>
\ No newline at end of file
diff --git a/doc/docusaurus/docusaurus.config.js b/doc/docusaurus/docusaurus.config.js
index 789d02bc69889494c1921816dc410490ff52722c..9413e603f0c846303af864c6e68cbfa8ed13ad60 100644
--- a/doc/docusaurus/docusaurus.config.js
+++ b/doc/docusaurus/docusaurus.config.js
@@ -1,12 +1,6 @@
 // Enable latex render
-const math = require('remark-math')
-const katex = require('rehype-katex')
-
-const copyright = `Copyright © ${new Date().getFullYear()} Ruprecht-Karls-Universität Heidelberg`
-const impressum = `<a href="https://www.uni-heidelberg.de/impressum.html" rel="noreferrer">Impressum</a>`
-const datenschutz = `<a href="https://www.uni-heidelberg.de/datenschutzerklaerung_web.html" rel="noreferrer">Datenschutzerklärung</a>`
-const disclaimer = `<a href="https://www.uni-heidelberg.de/haftungsausschluss_web.html" rel="noreferrer">Haftungsausschluss</a>`
-
+import remarkMath from 'remark-math';
+import rehypeKatex from 'rehype-katex';
 
 module.exports = {
   title: 'Dune Copasi',
@@ -15,7 +9,6 @@ module.exports = {
   baseUrl: '/',
   onBrokenLinks: 'throw',
   favicon: 'img/favicon.ico',
-  organizationName: 'dune-copasi',
   projectName: 'dune-copasi',
 
   // CSS for latex
@@ -34,7 +27,21 @@ module.exports = {
       disableSwitch: true,
     },
     prism: {
-      additionalLanguages: ['ini','cmake'],
+      additionalLanguages: ['ini', 'cmake', 'bash'],
+      magicComments: [
+        // First one: default highlighted line by docusaurus
+        {
+          className: 'theme-code-block-highlighted-line',
+          line: '%highlight',
+          block: { start: '%highlight-start', end: '%highlight-end' },
+        },
+        // Custom highlighted line
+        {
+          className: 'code-block-highlighted-error-line',
+          line: '%highlight-error',
+          block: { start: '%highlight-start-error', end: '%highlight-end-error' },
+        },
+      ],
     },
     navbar: {
       title: 'DuneCopasi',
@@ -44,9 +51,12 @@ module.exports = {
       },
       items: [
         {
-          to: 'docs/math_model',
-          label: 'Learn',
-          position: 'left',
+          to: '/docs/category/docs',
+          label: 'Docs',
+        },
+        {
+          label: 'Math Model',
+          to: '/math_model',
         },
         {
           type: 'docsVersionDropdown',
@@ -59,19 +69,19 @@ module.exports = {
           items: [
             {
               href: 'https://gitlab.dune-project.org/copasi/dune-copasi/-/releases',
-              label: 'Releases',
+              label: '🚀 Releases',
             },
             {
               href: 'https://gitlab.dune-project.org/copasi/dune-copasi/-/blob/master/LICENSE.md',
-              label: 'Licence',
+              label: '⚖️ Licence',
             },
             {
               href: 'https://gitlab.dune-project.org/copasi/dune-copasi/-/blob/master/CHANGELOG.md',
-              label: 'Changelog',
+              label: '🚧 Changelog',
             },
             {
               href: 'https://gitlab.dune-project.org/copasi/dune-copasi/-/issues?label_name%5B%5D=Bug',
-              label: 'Bug tracker',
+              label: '🐛 Bug tracker',
             },
           ],
         },
@@ -97,13 +107,99 @@ module.exports = {
     },
     footer: {
       style: 'light',
-      links: [],
+      links: [
+        {
+          title: 'Learn',
+          items: [
+            {
+              label: 'About',
+              to: '/about',
+            },
+            {
+              label: 'Math Model',
+              to: '/math_model',
+            },
+            {
+              label: 'Config Options',
+              to: '/docs/param_tree',
+            },
+            {
+              label: 'Docs',
+              to: '/docs/category/docs',
+            },
+          ],
+        },
+        {
+          title: 'Community',
+          items: [
+            {
+              label: 'Community',
+              to: '/community',
+            },
+            {
+              label: 'Participate',
+              to: '/participate',
+            },
+          ],
+        },
+        {
+          title: 'More',
+          items: [
+            {
+              label: 'GitLab',
+              href: 'https://gitlab.dune-project.org/copasi/dune-copasi',
+            },
+            {
+              label: 'GitHub',
+              href: 'https://github.com/dune-copasi/dune-copasi',
+            },
+            {
+              label: 'Docker Registry',
+              href: 'https://gitlab.dune-project.org/copasi/dune-copasi/container_registry',
+            },
+            {
+              href: 'https://gitlab.dune-project.org/copasi/dune-copasi/-/releases',
+              label: 'Releases',
+            },
+            {
+              href: 'https://gitlab.dune-project.org/copasi/dune-copasi/-/blob/master/CHANGELOG.md',
+              label: 'Changelog',
+            },
+            {
+              href: 'https://gitlab.dune-project.org/copasi/dune-copasi/-/issues?label_name%5B%5D=Bug',
+              label: 'Bug tracker',
+            },
+          ],
+        },
+        {
+          title: 'Legal',
+          items: [
+            {
+              href: 'https://gitlab.dune-project.org/copasi/dune-copasi/-/blob/master/LICENSE.md',
+              label: 'Licence',
+            },
+            {
+              label: 'Impressum',
+              href: 'https://www.uni-heidelberg.de/impressum.html',
+            },
+            {
+              label: 'Datenschutzerklärung',
+              href: 'https://www.uni-heidelberg.de/datenschutzerklaerung_web.html',
+            },
+            {
+              label: 'Haftungsausschluss',
+              href: 'https://www.uni-heidelberg.de/haftungsausschluss_web.html',
+            },
+          ],
+        },
+      ],
+
       logo: {
-        alt: 'Meta Open Source Logo',
+        href: 'https://www.bmbf.de',
+        alt: 'BMBF Logo',
         src: 'img/BMBF_logo.svg',
       },
-      // copyright: `Research funded by the German federal Ministry of Education and Research (BMBF) FKZ 031L0158</br>${copyright} | ${impressum} | ${datenschutz} | ${disclaimer}`,
-      copyright: `Research funded by the German federal Ministry of Education and Research (BMBF) FKZ 031L0158`,
+      copyright: `Research funded by the German federal Ministry of Education and Research (BMBF) FKZ 031L0158</br>Copyright © ${new Date().getFullYear()} Ruprecht-Karls-Universität Heidelberg`,
     },
   },
   presets: [
@@ -113,17 +209,34 @@ module.exports = {
         docs: {
           path: 'docs',
           sidebarPath: require.resolve('./sidebars.js'),
-          // Please change this to your repo.
           editUrl: 'https://gitlab.dune-project.org/copasi/dune-copasi/-/edit/master/doc/docusaurus/',
-          remarkPlugins: [ math ],
-          rehypePlugins: [ katex ],
+          remarkPlugins: [remarkMath],
+          rehypePlugins: [rehypeKatex],
           showLastUpdateTime: true,
           showLastUpdateAuthor: true,
         },
+        pages: {
+          path: 'src/pages',
+          routeBasePath: '',
+          include: ['**/*.{js,jsx,ts,tsx,md,mdx}'],
+          exclude: [
+            '**/_*.{js,jsx,ts,tsx,md,mdx}',
+            '**/_*/**',
+            '**/*.test.{js,jsx,ts,tsx}',
+            '**/__tests__/**',
+          ],
+          mdxPageComponent: '@theme/MDXPage',
+          remarkPlugins: [remarkMath],
+          rehypePlugins: [rehypeKatex],
+        },
         theme: {
           customCss: require.resolve('./src/css/custom.css'),
         },
       },
     ],
   ],
+  plugins: [
+    require.resolve("@cmfcmf/docusaurus-search-local"),
+    process.env.NODE_ENV === 'production' && '@docusaurus/plugin-debug',
+  ].filter(Boolean),
 };
diff --git a/doc/docusaurus/package.json b/doc/docusaurus/package.json
index 7673579a9224a3dfb2bad4ee1a3de69862fb4335..c11005f6428ac989198eb8a45bee3d5ba7d14c3c 100644
--- a/doc/docusaurus/package.json
+++ b/doc/docusaurus/package.json
@@ -12,11 +12,13 @@
     "clear": "docusaurus clear"
   },
   "dependencies": {
+    "@cmfcmf/docusaurus-search-local": "^1.1.0",
     "@docusaurus/core": "3.0.0",
     "@docusaurus/preset-classic": "3.0.0",
     "@mdx-js/react": "^3.0.0",
     "clsx": "^1.1.1",
     "prism-react-renderer": "^2.1.0",
+    "raw-loader": "^4.0.2",
     "react": "^18.2.0",
     "react-dom": "^18.2.0",
     "react-markdown": "^9.0.1",
diff --git a/doc/docusaurus/sidebars.js b/doc/docusaurus/sidebars.js
index 3e65ffd53a27f1e0ade389ea3e9da515902d1fd9..3af806193e6427088bc96362cc8f506836840326 100644
--- a/doc/docusaurus/sidebars.js
+++ b/doc/docusaurus/sidebars.js
@@ -2,26 +2,30 @@ module.exports = {
   docs: [
     {
       type: 'category',
-      label: 'Information',
-      items: [
-        'about',
-        'math_model',
-        'community',
-        'participate',
-      ],
-    },
-    {
-      type: 'category',
-      label: 'Getting Started',
+      label: 'Documentation',
+      link: {
+        type: 'generated-index',
+        slug: '/category/docs',
+      },
       items: [
         'install_use',
-        'api',
-        'ini_file',
-        'math_expr',
-        'input_data',
-        'param_tree',
+        {
+          type: 'category',
+          label: 'Configuration Options',
+          link: {
+            type: 'generated-index',
+            slug: '/category/docs/config',
+          },
+          items: [
+            'ini_file',
+            'param_tree',
+            'input_data',
+            'math_expr',
+          ]
+        },
         'output',
-      ],
-    },
+        'api',
+      ]
+    }
   ],
 };
\ No newline at end of file
diff --git a/doc/docusaurus/src/css/custom.css b/doc/docusaurus/src/css/custom.css
index 96eb00182e9ffe7dbd5fce27abce43a9978811bb..b8d610df11306d344d512b5e8fcd2021e88740b9 100644
--- a/doc/docusaurus/src/css/custom.css
+++ b/doc/docusaurus/src/css/custom.css
@@ -85,3 +85,12 @@ html[data-theme='dark'] .header-github-link:before {
   background: url('https://api.iconify.design/fa-brands:docker.svg')
     no-repeat center center / contain;
 }
+
+/* CodeBlock line highlighting */
+.code-block-highlighted-error-line {
+  background-color: #ff000020;
+  display: block;
+  margin: 0 calc(-1 * var(--ifm-pre-padding));
+  padding: 0 var(--ifm-pre-padding);
+  border-left: 3px solid #ff000080;
+}
\ No newline at end of file
diff --git a/doc/docusaurus/docs/about.md b/doc/docusaurus/src/pages/about.mdx
similarity index 62%
rename from doc/docusaurus/docs/about.md
rename to doc/docusaurus/src/pages/about.mdx
index 6262c9715a18bf6c19101efe8d001254f19bf0e4..fa58b44aac68f65327d8ed884d9170095ab9f4dc 100644
--- a/doc/docusaurus/docs/about.md
+++ b/doc/docusaurus/src/pages/about.mdx
@@ -1,12 +1,12 @@
 ---
 id: about
-title: About
-sidebar_label: About
+description: General info
 ---
+# About
 
 `dune-copasi` is a library that provides numerical simulators for
 reaction-diffusion systems on single and multiple compartments. We do so by
-providing [C++ classes](api.md) that represent solution states as well as the
+providing [C++ classes](/docs/api) that represent solution states as well as the
 means to evolve them with respect to time. We also provide **ready-to-use**
 executables able to perform forward simulations. Both classes and executables
-may be configured using a convenient [Parameter Tree](param_tree.md).
+may be configured using a convenient [Parameter Tree](/docs/param_tree).
diff --git a/doc/docusaurus/docs/community.md b/doc/docusaurus/src/pages/community.mdx
similarity index 96%
rename from doc/docusaurus/docs/community.md
rename to doc/docusaurus/src/pages/community.mdx
index 9ac8f718529c113d57569bc9ac4a4aa7d8048518..6ef02a190a1c93612c63dee3227035b57b856f4f 100644
--- a/doc/docusaurus/docs/community.md
+++ b/doc/docusaurus/src/pages/community.mdx
@@ -1,9 +1,10 @@
 ---
 id: community
-title: Community
-sidebar_label: Community
+description: With whom do we collaborate?
 ---
 
+# Community
+
 A piece of software is nothing without who maintains it **and** who uses it.
 We all form the community that make this package to be useful around the globe.
 
diff --git a/doc/docusaurus/src/pages/index.js b/doc/docusaurus/src/pages/index.js
index 6eba8f2431ca52c17668482a7c0daa90478d1af3..1e137542b56455f902b216f87fff08472852c4d0 100644
--- a/doc/docusaurus/src/pages/index.js
+++ b/doc/docusaurus/src/pages/index.js
@@ -40,7 +40,8 @@ function Home() {
                 'button button--outline button--secondary button--lg',
                 styles.getStarted,
               )}
-              to={useBaseUrl('docs/install_use')}>
+              to={useBaseUrl('/docs/category/docs')}
+              >
               Get Started
             </Link>
           </div>
diff --git a/doc/docusaurus/docs/math_model.mdx b/doc/docusaurus/src/pages/math_model.mdx
similarity index 98%
rename from doc/docusaurus/docs/math_model.mdx
rename to doc/docusaurus/src/pages/math_model.mdx
index 6996b4b638836b3639afd7a8d23601f9943234c0..1760bdde046a3ffa56c3c532398ccb66a97d3a05 100644
--- a/doc/docusaurus/docs/math_model.mdx
+++ b/doc/docusaurus/src/pages/math_model.mdx
@@ -1,8 +1,8 @@
 ---
 id: math_model
-title: Mathematical Model
-sidebar_label: Math Model
+description: Formulation of the problem
 ---
+# Mathematical Model
 
 In the following, we describe in mathemathical terms the actual model problem
 that we want to solve.
diff --git a/doc/docusaurus/docs/participate.md b/doc/docusaurus/src/pages/participate.mdx
similarity index 74%
rename from doc/docusaurus/docs/participate.md
rename to doc/docusaurus/src/pages/participate.mdx
index a0047e48201bc809e1c059eee02b88c602b376e4..1ba2423a32e2b1beb9ae068a3ad367f845670f36 100644
--- a/doc/docusaurus/docs/participate.md
+++ b/doc/docusaurus/src/pages/participate.mdx
@@ -1,8 +1,8 @@
 ---
 id: participate
-title: Participate!
-sidebar_label: Participate
+description: Get involved!
 ---
+# Participate!
 
 There are several ways you can participate.
 
@@ -12,15 +12,17 @@ There are several ways you can participate.
   a short *Merge Request* or *Issue* to our
   [GitLab](https://gitlab.dune-project.org/copasi/dune-copasi).
 * **Report bugs**: You may be using the program and experience unexpected
-  behavior, this may either come from wrong input data or from a `dune-copasi`
+  behavior, this may either come from wrong input data or from a **dune-copasi**
   component not working as intended. If you suspect is the latter one, first
   check the [bug tracker] to see if someone else is having the same problem,
-  otherwise, [let us know]!
+  otherwise, let us know at
+  ![Service Desk](https://img.shields.io/badge/dune--copasi%40dune--project.org-informational).
+
 * **Contribute with code**: If you happen know how to fix a bug, add a feature,
   extend the package, etc. and want to do it, we would be very pleased to
-  receive a *Merge Request* with your contributions. Read the
+  receive a *[Merge Request]* with your contributions. Read the
   [contribution guide] for more information.
 
 [contribution guide]: https://gitlab.dune-project.org/copasi/dune-copasi/-/blob/master/CONTRIBUTING.md
-[let us know]: https://gitlab.dune-project.org/copasi/dune-copasi/-/issues/new?issue%5Bassignee_id%5D=&issue%5Bmilestone_id%5D=
-[bug tracker]: https://gitlab.dune-project.org/copasi/dune-copasi/-/issues?label_name%5B%5D=Bug
+[bug tracker]: https://gitlab.dune-project.org/copasi/dune-copasi/-/issues?label_name%5B%5D=Kind%3ABug
+[Merge Request]: https://gitlab.dune-project.org/copasi/dune-copasi/-/merge_requests
diff --git a/doc/docusaurus/versioned_docs/version-v1.0.0/api.md b/doc/docusaurus/versioned_docs/version-v1.0.0/api.md
new file mode 100644
index 0000000000000000000000000000000000000000..5c6d8440f4385ef24e103e4c1c6bb8f26cc42eda
--- /dev/null
+++ b/doc/docusaurus/versioned_docs/version-v1.0.0/api.md
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1bc1378cfb96392f745b65c09ec473cd6d15aef5732bae09072e69fd28585ea6
+size 1863
diff --git a/doc/docusaurus/versioned_docs/version-v1.0.0/img/spatial-model-editor.png b/doc/docusaurus/versioned_docs/version-v1.0.0/img/spatial-model-editor.png
new file mode 100644
index 0000000000000000000000000000000000000000..9bafc7a5b454a775bd0f3cb35d0c47f04ff38445
--- /dev/null
+++ b/doc/docusaurus/versioned_docs/version-v1.0.0/img/spatial-model-editor.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0047a44e8060d14d4396062327ab000e8ac3bc26e09058cd6f57b245b0c2f62e
+size 174740
diff --git a/doc/docusaurus/versioned_docs/version-v1.0.0/ini_file.md b/doc/docusaurus/versioned_docs/version-v1.0.0/ini_file.md
new file mode 100644
index 0000000000000000000000000000000000000000..34b6990c278a2cbaebb5b81a20e440f819a5aa17
--- /dev/null
+++ b/doc/docusaurus/versioned_docs/version-v1.0.0/ini_file.md
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:40bc3eafa6d539f6f60801cde3f5874b952d6e0b3f9804b834f37355f412f27b
+size 2019
diff --git a/doc/docusaurus/versioned_docs/version-v1.0.0/input_data.md b/doc/docusaurus/versioned_docs/version-v1.0.0/input_data.md
new file mode 100644
index 0000000000000000000000000000000000000000..e7a377574499ee3095f772e67e5da0fd44e6933f
--- /dev/null
+++ b/doc/docusaurus/versioned_docs/version-v1.0.0/input_data.md
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:eff3753027ce04edf89ab385b75525ac4886b9f19d2e27ea741f5ec7f7c1e3d6
+size 996
diff --git a/doc/docusaurus/versioned_docs/version-v1.0.0/install_use.md b/doc/docusaurus/versioned_docs/version-v1.0.0/install_use.md
new file mode 100644
index 0000000000000000000000000000000000000000..faf16286bd61d16c0e729c8118cd96b391fc368c
--- /dev/null
+++ b/doc/docusaurus/versioned_docs/version-v1.0.0/install_use.md
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fd1feb8105c1d91a293438ce3d1bc489d28c1bc572dd195d92574df5a434835a
+size 14769
diff --git a/doc/docusaurus/versioned_docs/version-v1.0.0/math_expr.md b/doc/docusaurus/versioned_docs/version-v1.0.0/math_expr.md
new file mode 100644
index 0000000000000000000000000000000000000000..d0b0dbdb71b22661a01febc7d567584b7de21310
--- /dev/null
+++ b/doc/docusaurus/versioned_docs/version-v1.0.0/math_expr.md
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e425dd5e53c8e667dacf5d64de4ab44a92d3124fa1792d7ab450061f134c1425
+size 1889
diff --git a/doc/docusaurus/versioned_docs/version-v1.0.0/output.md b/doc/docusaurus/versioned_docs/version-v1.0.0/output.md
new file mode 100644
index 0000000000000000000000000000000000000000..ff8fb333800aab4330aafe8549a0bc3209b6507a
--- /dev/null
+++ b/doc/docusaurus/versioned_docs/version-v1.0.0/output.md
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5f24232c684460f6c6de4b0b0989c34dcb1ce94f6bd0bc3577ac6261d151c1ad
+size 592
diff --git a/doc/docusaurus/versioned_docs/version-v1.0.0/param_tree.md b/doc/docusaurus/versioned_docs/version-v1.0.0/param_tree.md
new file mode 100644
index 0000000000000000000000000000000000000000..ef39cdae294030f804d0cc461b3957444d9709cf
--- /dev/null
+++ b/doc/docusaurus/versioned_docs/version-v1.0.0/param_tree.md
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e4d93b5de23f7de3ff2984d0a951265c29f5a0e12218659e7a70b2c9ab9a01d8
+size 14189
diff --git a/doc/docusaurus/versioned_docs/version-v1.1.1/api.md b/doc/docusaurus/versioned_docs/version-v1.1.1/api.md
new file mode 100644
index 0000000000000000000000000000000000000000..5c6d8440f4385ef24e103e4c1c6bb8f26cc42eda
--- /dev/null
+++ b/doc/docusaurus/versioned_docs/version-v1.1.1/api.md
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1bc1378cfb96392f745b65c09ec473cd6d15aef5732bae09072e69fd28585ea6
+size 1863
diff --git a/doc/docusaurus/versioned_docs/version-v1.1.1/img/spatial-model-editor.png b/doc/docusaurus/versioned_docs/version-v1.1.1/img/spatial-model-editor.png
new file mode 100644
index 0000000000000000000000000000000000000000..9bafc7a5b454a775bd0f3cb35d0c47f04ff38445
--- /dev/null
+++ b/doc/docusaurus/versioned_docs/version-v1.1.1/img/spatial-model-editor.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0047a44e8060d14d4396062327ab000e8ac3bc26e09058cd6f57b245b0c2f62e
+size 174740
diff --git a/doc/docusaurus/versioned_docs/version-v1.1.1/ini_file.md b/doc/docusaurus/versioned_docs/version-v1.1.1/ini_file.md
new file mode 100644
index 0000000000000000000000000000000000000000..34b6990c278a2cbaebb5b81a20e440f819a5aa17
--- /dev/null
+++ b/doc/docusaurus/versioned_docs/version-v1.1.1/ini_file.md
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:40bc3eafa6d539f6f60801cde3f5874b952d6e0b3f9804b834f37355f412f27b
+size 2019
diff --git a/doc/docusaurus/versioned_docs/version-v1.1.1/input_data.md b/doc/docusaurus/versioned_docs/version-v1.1.1/input_data.md
new file mode 100644
index 0000000000000000000000000000000000000000..e7a377574499ee3095f772e67e5da0fd44e6933f
--- /dev/null
+++ b/doc/docusaurus/versioned_docs/version-v1.1.1/input_data.md
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:eff3753027ce04edf89ab385b75525ac4886b9f19d2e27ea741f5ec7f7c1e3d6
+size 996
diff --git a/doc/docusaurus/versioned_docs/version-v1.1.1/install_use.md b/doc/docusaurus/versioned_docs/version-v1.1.1/install_use.md
new file mode 100644
index 0000000000000000000000000000000000000000..55edbb9f4bf973596f0a5eead9456ffd408ba167
--- /dev/null
+++ b/doc/docusaurus/versioned_docs/version-v1.1.1/install_use.md
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9546c1cc21356d65af4b617a1bad2888b382059b7e6eff1f04ab279e043705ff
+size 14699
diff --git a/doc/docusaurus/versioned_docs/version-v1.1.1/math_expr.md b/doc/docusaurus/versioned_docs/version-v1.1.1/math_expr.md
new file mode 100644
index 0000000000000000000000000000000000000000..d0b0dbdb71b22661a01febc7d567584b7de21310
--- /dev/null
+++ b/doc/docusaurus/versioned_docs/version-v1.1.1/math_expr.md
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e425dd5e53c8e667dacf5d64de4ab44a92d3124fa1792d7ab450061f134c1425
+size 1889
diff --git a/doc/docusaurus/versioned_docs/version-v1.1.1/output.md b/doc/docusaurus/versioned_docs/version-v1.1.1/output.md
new file mode 100644
index 0000000000000000000000000000000000000000..ff8fb333800aab4330aafe8549a0bc3209b6507a
--- /dev/null
+++ b/doc/docusaurus/versioned_docs/version-v1.1.1/output.md
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5f24232c684460f6c6de4b0b0989c34dcb1ce94f6bd0bc3577ac6261d151c1ad
+size 592
diff --git a/doc/docusaurus/versioned_docs/version-v1.1.1/param_tree.md b/doc/docusaurus/versioned_docs/version-v1.1.1/param_tree.md
new file mode 100644
index 0000000000000000000000000000000000000000..1b39c27389ba65d9662bbf7360a9cb4aa521cecd
--- /dev/null
+++ b/doc/docusaurus/versioned_docs/version-v1.1.1/param_tree.md
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d12e8ac6aa1d15914d7b4f497dfb577450c2faae138c1290e78813afb184d797
+size 14893
diff --git a/doc/docusaurus/versioned_sidebars/version-v1.0.0-sidebars.json b/doc/docusaurus/versioned_sidebars/version-v1.0.0-sidebars.json
new file mode 100644
index 0000000000000000000000000000000000000000..e083f87afeed3031697e84caff1abd73b8842be1
--- /dev/null
+++ b/doc/docusaurus/versioned_sidebars/version-v1.0.0-sidebars.json
@@ -0,0 +1,31 @@
+{
+  "docs": [
+    {
+      "type": "category",
+      "label": "Documentation",
+      "link": {
+        "type": "generated-index",
+        "slug": "/category/docs"
+      },
+      "items": [
+        "install_use",
+        {
+          "type": "category",
+          "label": "Configuration Options",
+          "link": {
+            "type": "generated-index",
+            "slug": "/category/docs/config"
+          },
+          "items": [
+            "ini_file",
+            "param_tree",
+            "input_data",
+            "math_expr"
+          ]
+        },
+        "output",
+        "api"
+      ]
+    }
+  ]
+}
diff --git a/doc/docusaurus/versioned_sidebars/version-v1.1.1-sidebars.json b/doc/docusaurus/versioned_sidebars/version-v1.1.1-sidebars.json
new file mode 100644
index 0000000000000000000000000000000000000000..e083f87afeed3031697e84caff1abd73b8842be1
--- /dev/null
+++ b/doc/docusaurus/versioned_sidebars/version-v1.1.1-sidebars.json
@@ -0,0 +1,31 @@
+{
+  "docs": [
+    {
+      "type": "category",
+      "label": "Documentation",
+      "link": {
+        "type": "generated-index",
+        "slug": "/category/docs"
+      },
+      "items": [
+        "install_use",
+        {
+          "type": "category",
+          "label": "Configuration Options",
+          "link": {
+            "type": "generated-index",
+            "slug": "/category/docs/config"
+          },
+          "items": [
+            "ini_file",
+            "param_tree",
+            "input_data",
+            "math_expr"
+          ]
+        },
+        "output",
+        "api"
+      ]
+    }
+  ]
+}
diff --git a/doc/docusaurus/versions.json b/doc/docusaurus/versions.json
new file mode 100644
index 0000000000000000000000000000000000000000..74ceeea0d6263f3529ad5e366918da818a1f391b
--- /dev/null
+++ b/doc/docusaurus/versions.json
@@ -0,0 +1,4 @@
+[
+  "v1.1.1",
+  "v1.0.0"
+]
diff --git a/doc/docusaurus/yarn.lock b/doc/docusaurus/yarn.lock
index 6aa86bba5ae307a420c4c0c6937e46a3b0612b38..5b90cbbce3df99aa3a8e2a76202724151182e99a 100644
--- a/doc/docusaurus/yarn.lock
+++ b/doc/docusaurus/yarn.lock
@@ -2,6 +2,14 @@
 # yarn lockfile v1
 
 
+"@algolia/autocomplete-core@1.17.0":
+  version "1.17.0"
+  resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.17.0.tgz#b9e62d9677dc0ee818bb59d917ff58908356a9a0"
+  integrity sha512-6E4sVb5+fGtSQs9mULlxUH84OWFUVZPMapa5dMCtUc7KyDRLY6+X/dA8xbDA8CX5phdBn1plLUET1B6NZnrZuw==
+  dependencies:
+    "@algolia/autocomplete-plugin-algolia-insights" "1.17.0"
+    "@algolia/autocomplete-shared" "1.17.0"
+
 "@algolia/autocomplete-core@1.9.3":
   version "1.9.3"
   resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz#1d56482a768c33aae0868c8533049e02e8961be7"
@@ -10,6 +18,24 @@
     "@algolia/autocomplete-plugin-algolia-insights" "1.9.3"
     "@algolia/autocomplete-shared" "1.9.3"
 
+"@algolia/autocomplete-js@^1.8.2":
+  version "1.17.0"
+  resolved "https://registry.yarnpkg.com/@algolia/autocomplete-js/-/autocomplete-js-1.17.0.tgz#91f0ef2232646316a26c79dadbeb2e7791de623c"
+  integrity sha512-RbD98hXtZOl6VohSAo7kMOFWQHR1x4wWaJFadJradFQ1TAA9hFEyirSIM+yT96UpKkdi08V2EBI+YwZ3/VETvw==
+  dependencies:
+    "@algolia/autocomplete-core" "1.17.0"
+    "@algolia/autocomplete-preset-algolia" "1.17.0"
+    "@algolia/autocomplete-shared" "1.17.0"
+    htm "^3.1.1"
+    preact "^10.13.2"
+
+"@algolia/autocomplete-plugin-algolia-insights@1.17.0":
+  version "1.17.0"
+  resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.0.tgz#dcec9b03a47375860a9f927816a1275d885ebdff"
+  integrity sha512-zbWImu+VxBDzUQONEhQXq3OzlipHLEtWbL4Nf/VOb1p1qHG/f96jCegOzzEZVPiQvZpRJnmhCUmsYNHlIBxKWw==
+  dependencies:
+    "@algolia/autocomplete-shared" "1.17.0"
+
 "@algolia/autocomplete-plugin-algolia-insights@1.9.3":
   version "1.9.3"
   resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz#9b7f8641052c8ead6d66c1623d444cbe19dde587"
@@ -17,6 +43,13 @@
   dependencies:
     "@algolia/autocomplete-shared" "1.9.3"
 
+"@algolia/autocomplete-preset-algolia@1.17.0":
+  version "1.17.0"
+  resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.0.tgz#9d7d9673a922d75dfbedd3119e7ffa76f4c118c6"
+  integrity sha512-DhTkMs/9BzThhTU2nSTpQxVxHLzaRDZLid4Tf56D8s9IhEGfmzbNuLRmJNzgAOPv1smHtUErndmC+S9QNMDEJA==
+  dependencies:
+    "@algolia/autocomplete-shared" "1.17.0"
+
 "@algolia/autocomplete-preset-algolia@1.9.3":
   version "1.9.3"
   resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz#64cca4a4304cfcad2cf730e83067e0c1b2f485da"
@@ -24,11 +57,21 @@
   dependencies:
     "@algolia/autocomplete-shared" "1.9.3"
 
+"@algolia/autocomplete-shared@1.17.0":
+  version "1.17.0"
+  resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.0.tgz#7d0a8e504fe555c48df7ae6854d3d6633b0b32f5"
+  integrity sha512-7su4KH/2q2Fhud2VujUNhCMbIh7yp6wqWR3UuVje5P3kDRhTotPRmg3iRQi48YRYkk9o+airsrLl+rxJ/9FWng==
+
 "@algolia/autocomplete-shared@1.9.3":
   version "1.9.3"
   resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz#2e22e830d36f0a9cf2c0ccd3c7f6d59435b77dfa"
   integrity sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==
 
+"@algolia/autocomplete-theme-classic@^1.8.2":
+  version "1.17.0"
+  resolved "https://registry.yarnpkg.com/@algolia/autocomplete-theme-classic/-/autocomplete-theme-classic-1.17.0.tgz#bbd79df8f5240b3ddd3f9cdc9b8273753f15cd25"
+  integrity sha512-FsW/J/mG1YIPv93/QQ7KxMVNXAiVi9accGgoK2y3zDz58WpVgUug97SUoQzP4I9EMZAZAHQo0QbWXxpqTWkcOA==
+
 "@algolia/cache-browser-local-storage@4.20.0":
   version "4.20.0"
   resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.20.0.tgz#357318242fc542ffce41d6eb5b4a9b402921b0bb"
@@ -36,11 +79,23 @@
   dependencies:
     "@algolia/cache-common" "4.20.0"
 
+"@algolia/cache-browser-local-storage@4.22.1":
+  version "4.22.1"
+  resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.22.1.tgz#14b6dc9abc9e3a304a5fffb063d15f30af1032d1"
+  integrity sha512-Sw6IAmOCvvP6QNgY9j+Hv09mvkvEIDKjYW8ow0UDDAxSXy664RBNQk3i/0nt7gvceOJ6jGmOTimaZoY1THmU7g==
+  dependencies:
+    "@algolia/cache-common" "4.22.1"
+
 "@algolia/cache-common@4.20.0":
   version "4.20.0"
   resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.20.0.tgz#ec52230509fce891091ffd0d890618bcdc2fa20d"
   integrity sha512-vCfxauaZutL3NImzB2G9LjLt36vKAckc6DhMp05An14kVo8F1Yofb6SIl6U3SaEz8pG2QOB9ptwM5c+zGevwIQ==
 
+"@algolia/cache-common@4.22.1":
+  version "4.22.1"
+  resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.22.1.tgz#c625dff4bc2a74e79f9aed67b4e053b0ef1b3ec1"
+  integrity sha512-TJMBKqZNKYB9TptRRjSUtevJeQVXRmg6rk9qgFKWvOy8jhCPdyNZV1nB3SKGufzvTVbomAukFR8guu/8NRKBTA==
+
 "@algolia/cache-in-memory@4.20.0":
   version "4.20.0"
   resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.20.0.tgz#5f18d057bd6b3b075022df085c4f83bcca4e3e67"
@@ -48,6 +103,13 @@
   dependencies:
     "@algolia/cache-common" "4.20.0"
 
+"@algolia/cache-in-memory@4.22.1":
+  version "4.22.1"
+  resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.22.1.tgz#858a3d887f521362e87d04f3943e2810226a0d71"
+  integrity sha512-ve+6Ac2LhwpufuWavM/aHjLoNz/Z/sYSgNIXsinGofWOysPilQZPUetqLj8vbvi+DHZZaYSEP9H5SRVXnpsNNw==
+  dependencies:
+    "@algolia/cache-common" "4.22.1"
+
 "@algolia/client-account@4.20.0":
   version "4.20.0"
   resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.20.0.tgz#23ce0b4cffd63100fb7c1aa1c67a4494de5bd645"
@@ -57,6 +119,15 @@
     "@algolia/client-search" "4.20.0"
     "@algolia/transporter" "4.20.0"
 
+"@algolia/client-account@4.22.1":
+  version "4.22.1"
+  resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.22.1.tgz#a7fb8b66b9a4f0a428e1426b2561144267d76d43"
+  integrity sha512-k8m+oegM2zlns/TwZyi4YgCtyToackkOpE+xCaKCYfBfDtdGOaVZCM5YvGPtK+HGaJMIN/DoTL8asbM3NzHonw==
+  dependencies:
+    "@algolia/client-common" "4.22.1"
+    "@algolia/client-search" "4.22.1"
+    "@algolia/transporter" "4.22.1"
+
 "@algolia/client-analytics@4.20.0":
   version "4.20.0"
   resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.20.0.tgz#0aa6bef35d3a41ac3991b3f46fcd0bf00d276fa9"
@@ -67,6 +138,16 @@
     "@algolia/requester-common" "4.20.0"
     "@algolia/transporter" "4.20.0"
 
+"@algolia/client-analytics@4.22.1":
+  version "4.22.1"
+  resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.22.1.tgz#506558740b4d49b1b1e3393861f729a8ce921851"
+  integrity sha512-1ssi9pyxyQNN4a7Ji9R50nSdISIumMFDwKNuwZipB6TkauJ8J7ha/uO60sPJFqQyqvvI+px7RSNRQT3Zrvzieg==
+  dependencies:
+    "@algolia/client-common" "4.22.1"
+    "@algolia/client-search" "4.22.1"
+    "@algolia/requester-common" "4.22.1"
+    "@algolia/transporter" "4.22.1"
+
 "@algolia/client-common@4.20.0":
   version "4.20.0"
   resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.20.0.tgz#ca60f04466515548651c4371a742fbb8971790ef"
@@ -75,6 +156,14 @@
     "@algolia/requester-common" "4.20.0"
     "@algolia/transporter" "4.20.0"
 
+"@algolia/client-common@4.22.1":
+  version "4.22.1"
+  resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.22.1.tgz#042b19c1b6157c485fa1b551349ab313944d2b05"
+  integrity sha512-IvaL5v9mZtm4k4QHbBGDmU3wa/mKokmqNBqPj0K7lcR8ZDKzUorhcGp/u8PkPC/e0zoHSTvRh7TRkGX3Lm7iOQ==
+  dependencies:
+    "@algolia/requester-common" "4.22.1"
+    "@algolia/transporter" "4.22.1"
+
 "@algolia/client-personalization@4.20.0":
   version "4.20.0"
   resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.20.0.tgz#ca81308e8ad0db3b27458b78355f124f29657181"
@@ -84,6 +173,15 @@
     "@algolia/requester-common" "4.20.0"
     "@algolia/transporter" "4.20.0"
 
+"@algolia/client-personalization@4.22.1":
+  version "4.22.1"
+  resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.22.1.tgz#ff088d797648224fb582e9fe5828f8087835fa3d"
+  integrity sha512-sl+/klQJ93+4yaqZ7ezOttMQ/nczly/3GmgZXJ1xmoewP5jmdP/X/nV5U7EHHH3hCUEHeN7X1nsIhGPVt9E1cQ==
+  dependencies:
+    "@algolia/client-common" "4.22.1"
+    "@algolia/requester-common" "4.22.1"
+    "@algolia/transporter" "4.22.1"
+
 "@algolia/client-search@4.20.0":
   version "4.20.0"
   resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.20.0.tgz#3bcce817ca6caedc835e0eaf6f580e02ee7c3e15"
@@ -93,6 +191,15 @@
     "@algolia/requester-common" "4.20.0"
     "@algolia/transporter" "4.20.0"
 
+"@algolia/client-search@4.22.1", "@algolia/client-search@^4.12.0":
+  version "4.22.1"
+  resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.22.1.tgz#508cc6ab3d1f4e9c02735a630d4dff6fbb8514a2"
+  integrity sha512-yb05NA4tNaOgx3+rOxAmFztgMTtGBi97X7PC3jyNeGiwkAjOZc2QrdZBYyIdcDLoI09N0gjtpClcackoTN0gPA==
+  dependencies:
+    "@algolia/client-common" "4.22.1"
+    "@algolia/requester-common" "4.22.1"
+    "@algolia/transporter" "4.22.1"
+
 "@algolia/events@^4.0.1":
   version "4.0.1"
   resolved "https://registry.yarnpkg.com/@algolia/events/-/events-4.0.1.tgz#fd39e7477e7bc703d7f893b556f676c032af3950"
@@ -103,6 +210,11 @@
   resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.20.0.tgz#f148ddf67e5d733a06213bebf7117cb8a651ab36"
   integrity sha512-xouigCMB5WJYEwvoWW5XDv7Z9f0A8VoXJc3VKwlHJw/je+3p2RcDXfksLI4G4lIVncFUYMZx30tP/rsdlvvzHQ==
 
+"@algolia/logger-common@4.22.1":
+  version "4.22.1"
+  resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.22.1.tgz#79cf4cd295de0377a94582c6aaac59b1ded731d9"
+  integrity sha512-OnTFymd2odHSO39r4DSWRFETkBufnY2iGUZNrMXpIhF5cmFE8pGoINNPzwg02QLBlGSaLqdKy0bM8S0GyqPLBg==
+
 "@algolia/logger-console@4.20.0":
   version "4.20.0"
   resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.20.0.tgz#ac443d27c4e94357f3063e675039cef0aa2de0a7"
@@ -110,6 +222,13 @@
   dependencies:
     "@algolia/logger-common" "4.20.0"
 
+"@algolia/logger-console@4.22.1":
+  version "4.22.1"
+  resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.22.1.tgz#0355345f6940f67aaa78ae9b81c06e44e49f2336"
+  integrity sha512-O99rcqpVPKN1RlpgD6H3khUWylU24OXlzkavUAMy6QZd1776QAcauE3oP8CmD43nbaTjBexZj2nGsBH9Tc0FVA==
+  dependencies:
+    "@algolia/logger-common" "4.22.1"
+
 "@algolia/requester-browser-xhr@4.20.0":
   version "4.20.0"
   resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.20.0.tgz#db16d0bdef018b93b51681d3f1e134aca4f64814"
@@ -117,11 +236,23 @@
   dependencies:
     "@algolia/requester-common" "4.20.0"
 
+"@algolia/requester-browser-xhr@4.22.1":
+  version "4.22.1"
+  resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.22.1.tgz#f04df6fe9690a071b267c77d26b83a3be9280361"
+  integrity sha512-dtQGYIg6MteqT1Uay3J/0NDqD+UciHy3QgRbk7bNddOJu+p3hzjTRYESqEnoX/DpEkaNYdRHUKNylsqMpgwaEw==
+  dependencies:
+    "@algolia/requester-common" "4.22.1"
+
 "@algolia/requester-common@4.20.0":
   version "4.20.0"
   resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.20.0.tgz#65694b2263a8712b4360fef18680528ffd435b5c"
   integrity sha512-9h6ye6RY/BkfmeJp7Z8gyyeMrmmWsMOCRBXQDs4mZKKsyVlfIVICpcSibbeYcuUdurLhIlrOUkH3rQEgZzonng==
 
+"@algolia/requester-common@4.22.1":
+  version "4.22.1"
+  resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.22.1.tgz#27be35f3718aafcb6b388ff9c3aa2defabd559ff"
+  integrity sha512-dgvhSAtg2MJnR+BxrIFqlLtkLlVVhas9HgYKMk2Uxiy5m6/8HZBL40JVAMb2LovoPFs9I/EWIoFVjOrFwzn5Qg==
+
 "@algolia/requester-node-http@4.20.0":
   version "4.20.0"
   resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.20.0.tgz#b52b182b52b0b16dec4070832267d484a6b1d5bb"
@@ -129,6 +260,13 @@
   dependencies:
     "@algolia/requester-common" "4.20.0"
 
+"@algolia/requester-node-http@4.22.1":
+  version "4.22.1"
+  resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.22.1.tgz#589a6fa828ad0f325e727a6fcaf4e1a2343cc62b"
+  integrity sha512-JfmZ3MVFQkAU+zug8H3s8rZ6h0ahHZL/SpMaSasTCGYR5EEJsCc8SI5UZ6raPN2tjxa5bxS13BRpGSBUens7EA==
+  dependencies:
+    "@algolia/requester-common" "4.22.1"
+
 "@algolia/transporter@4.20.0":
   version "4.20.0"
   resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.20.0.tgz#7e5b24333d7cc9a926b2f6a249f87c2889b944a9"
@@ -138,6 +276,15 @@
     "@algolia/logger-common" "4.20.0"
     "@algolia/requester-common" "4.20.0"
 
+"@algolia/transporter@4.22.1":
+  version "4.22.1"
+  resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.22.1.tgz#8843841b857dc021668f31647aa557ff19cd9cb1"
+  integrity sha512-kzWgc2c9IdxMa3YqA6TN0NW5VrKYYW/BELIn7vnLyn+U/RFdZ4lxxt9/8yq3DKV5snvoDzzO4ClyejZRdV3lMQ==
+  dependencies:
+    "@algolia/cache-common" "4.22.1"
+    "@algolia/logger-common" "4.22.1"
+    "@algolia/requester-common" "4.22.1"
+
 "@ampproject/remapping@^2.2.0":
   version "2.2.1"
   resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630"
@@ -1185,6 +1332,20 @@
     "@babel/helper-validator-identifier" "^7.22.20"
     to-fast-properties "^2.0.0"
 
+"@cmfcmf/docusaurus-search-local@^1.1.0":
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/@cmfcmf/docusaurus-search-local/-/docusaurus-search-local-1.1.0.tgz#3db5d7d6e05985cc3b06cec10436385c53033c69"
+  integrity sha512-0IVb/aA0IK8ZlktuxmgXmluXfcSpo6Vdd2nG21y1aOH9nVYnPP231Dn0H8Ng9Qf9ronQQCDWHnuWpYOr9rUrEQ==
+  dependencies:
+    "@algolia/autocomplete-js" "^1.8.2"
+    "@algolia/autocomplete-theme-classic" "^1.8.2"
+    "@algolia/client-search" "^4.12.0"
+    algoliasearch "^4.12.0"
+    cheerio "^1.0.0-rc.9"
+    clsx "^1.1.1"
+    lunr-languages "^1.4.0"
+    mark.js "^8.11.1"
+
 "@colors/colors@1.5.0":
   version "1.5.0"
   resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9"
@@ -2533,6 +2694,26 @@ algoliasearch-helper@^3.13.3:
   dependencies:
     "@algolia/events" "^4.0.1"
 
+algoliasearch@^4.12.0:
+  version "4.22.1"
+  resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.22.1.tgz#f10fbecdc7654639ec20d62f109c1b3a46bc6afc"
+  integrity sha512-jwydKFQJKIx9kIZ8Jm44SdpigFwRGPESaxZBaHSV0XWN2yBJAOT4mT7ppvlrpA4UGzz92pqFnVKr/kaZXrcreg==
+  dependencies:
+    "@algolia/cache-browser-local-storage" "4.22.1"
+    "@algolia/cache-common" "4.22.1"
+    "@algolia/cache-in-memory" "4.22.1"
+    "@algolia/client-account" "4.22.1"
+    "@algolia/client-analytics" "4.22.1"
+    "@algolia/client-common" "4.22.1"
+    "@algolia/client-personalization" "4.22.1"
+    "@algolia/client-search" "4.22.1"
+    "@algolia/logger-common" "4.22.1"
+    "@algolia/logger-console" "4.22.1"
+    "@algolia/requester-browser-xhr" "4.22.1"
+    "@algolia/requester-common" "4.22.1"
+    "@algolia/requester-node-http" "4.22.1"
+    "@algolia/transporter" "4.22.1"
+
 algoliasearch@^4.18.0, algoliasearch@^4.19.1:
   version "4.20.0"
   resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.20.0.tgz#700c2cb66e14f8a288460036c7b2a554d0d93cf4"
@@ -2974,7 +3155,7 @@ cheerio-select@^2.1.0:
     domhandler "^5.0.3"
     domutils "^3.0.1"
 
-cheerio@^1.0.0-rc.12:
+cheerio@^1.0.0-rc.12, cheerio@^1.0.0-rc.9:
   version "1.0.0-rc.12"
   resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683"
   integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==
@@ -4651,6 +4832,11 @@ hpack.js@^2.1.6:
     readable-stream "^2.0.1"
     wbuf "^1.1.0"
 
+htm@^3.1.1:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/htm/-/htm-3.1.1.tgz#49266582be0dc66ed2235d5ea892307cc0c24b78"
+  integrity sha512-983Vyg8NwUE7JkZ6NmOqpCZ+sh1bKv2iYTlUkzlWmA5JD2acKoxd4KVxbMmxX/85mtfdnDmTFoNKcg5DGAvxNQ==
+
 html-entities@^2.3.2:
   version "2.4.0"
   resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.4.0.tgz#edd0cee70402584c8c76cc2c0556db09d1f45061"
@@ -5383,6 +5569,16 @@ lru-cache@^6.0.0:
   dependencies:
     yallist "^4.0.0"
 
+lunr-languages@^1.4.0:
+  version "1.14.0"
+  resolved "https://registry.yarnpkg.com/lunr-languages/-/lunr-languages-1.14.0.tgz#6e97635f434631729dd0e5654daedd291cd6f2d0"
+  integrity sha512-hWUAb2KqM3L7J5bcrngszzISY4BxrXn/Xhbb9TTCJYEGqlR1nG67/M14sp09+PTIRklobrn57IAxcdcO/ZFyNA==
+
+mark.js@^8.11.1:
+  version "8.11.1"
+  resolved "https://registry.yarnpkg.com/mark.js/-/mark.js-8.11.1.tgz#180f1f9ebef8b0e638e4166ad52db879beb2ffc5"
+  integrity sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==
+
 markdown-extensions@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/markdown-extensions/-/markdown-extensions-2.0.0.tgz#34bebc83e9938cae16e0e017e4a9814a8330d3c4"
@@ -6880,6 +7076,11 @@ postcss@^8.4.17, postcss@^8.4.21, postcss@^8.4.26:
     picocolors "^1.0.0"
     source-map-js "^1.0.2"
 
+preact@^10.13.2:
+  version "10.19.6"
+  resolved "https://registry.yarnpkg.com/preact/-/preact-10.19.6.tgz#66007b67aad4d11899f583df1b0116d94a89b8f5"
+  integrity sha512-gympg+T2Z1fG1unB8NH29yHJwnEaCH37Z32diPDku316OTnRPeMbiRV9kTrfZpocXjdfnWuFUl/Mj4BHaf6gnw==
+
 pretty-error@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6"
@@ -7031,6 +7232,14 @@ raw-body@2.5.1:
     iconv-lite "0.4.24"
     unpipe "1.0.0"
 
+raw-loader@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-4.0.2.tgz#1aac6b7d1ad1501e66efdac1522c73e59a584eb6"
+  integrity sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==
+  dependencies:
+    loader-utils "^2.0.0"
+    schema-utils "^3.0.0"
+
 rc@1.2.8:
   version "1.2.8"
   resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"