diff --git a/.gitignore b/.gitignore
index 07b3ea4f9db2f99c85037cc9c0abf42a9eeba6a3..d797dcf34f597522a5e6400a096997c59385bc8d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,4 +3,5 @@ documentation.pdf
 functions.pdf
 serialbridge.mexmaci64
 
-.cargo/config.toml
\ No newline at end of file
+.cargo/config.toml
+.env
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..29a42003bcdf7c963fb1a3a21fb9373cd5c787a4
--- /dev/null
+++ b/README.md
@@ -0,0 +1,67 @@
+This README refers to the **serialbridge** module used for the Hardware In the Loop (HIL) simulation.
+
+## How to Build
+
+The following steps will generate a `mex` file that can be used in MATLAB.
+
+### With Just
+
+Just takes care of setting the correct extension.
+```bash
+just build-env <MATLAB_PATH>
+```
+Where `<MATLAB_PATH>` is the path to the MATLAB installation directory. This can be found by running `matlabroot` in the MATLAB command window as follows:
+
+```matlab
+fullfile(matlabroot(), 'bin', computer('arch'))
+```
+
+### Manually
+
+```bash
+export MATLAB_LIB_DIR="<MATLAB_PATH>"
+cargo build --release
+mv target/release/libserial_bridge.dylib serialbridge.<EXT>
+```
+
+`<EXT>` is the extension of the library file (e.g. `mexa64` for Linux, `mexw64` for Windows, `mexmaci64` for macOS).
+
+## Usage
+
+serialbridge can be used in matlab in the following way:
+- `serialbridge("Open", string_serialPort, uint_baudrate)`:
+  - **"Open"**: specifies we want to open the serial port
+  - string_serialPort: is the serial port we want to open (eg: "COM6")
+  - uint_baudrate: is the baudrate of the port (eg: 256000)
+- `serialbridge("Write", singleArray_Data)`:
+  - **"Write"**: specifies that we want to write to the serial port
+  - singleArray_Data: is the array of singles we want to write on serial (eg: [1 2 3 4.5 5.4])
+- `singleArray_Data = serialbridge("Read", uint_nData)`;
+  - **"Read"**: specifies that we want to read from the serial port
+  - uint_nData: How many floats to read from serial (eg: 1)
+  - singleArray_Data: array of floats read from the serial (eg: actuatorData)
+- `serialbridge("Close", string_serialPort, uint_baudrate)`:
+  - **"Close"**: specifies we want to close the serial port
+
+**Example** in Matlab:
+```
+serialbridge("Open", "COM6", 256000); % Opens the serial port
+serialbridge("Write", [1 2 3 4]);     % Sends the array "[1 2 3 4]" to the serial device
+data = serialbridge("Read", 2);       % Receives 2 floats and stores them in the variable "data"
+serialbridge("Close");                % Closes the serial port
+```
+
+Procedure in order to use the **MatlabTransceiver** module: https://git.skywarder.eu/scs/hermes/r2a-obsw/-/blob/Serial4Simulations-dev/src/tests/hardware_in_the_loop/README.md
+
+***WARNING***:
+* It's possible to open just ONE serial port with this module
+
+## Dev
+
+Tho have rustanalyzer working properly, you need to add a `config.toml` in the `.cargo` directory at the root of this repository with the following content:
+```toml
+[env]
+MATLAB_LIB_DIR = <MATLAB_PATH>
+```
+
+To get the `<MATLAB_PATH>` you can follow the instructions in the "How to Build" section.
diff --git a/justfile b/justfile
index 4a8a2978cbf817095ee897b1f25900893c37861a..93388d222c625e97a53c498c7fe0420953aaa3ab 100644
--- a/justfile
+++ b/justfile
@@ -1,26 +1,32 @@
+set dotenv-load
+
 alias br := build-release
 alias bd := build-debug
 alias d := docs
 
 source := 'docs/documentation.typ'
 dest := 'documentation.pdf'
-
-export MATLAB_LIB_DIR := '/Applications/MATLAB_R2021b.app/bin/maci64'
+ext := if os() == "macos" { "mexmaci64" } else if os_family() == "windows" { "mexw64" } else { "mexa64" }
 
 default:
     just --choose
 
+build-env MATLAB:
+    #!/usr/bin/env bash
+    export MATLAB_LIB_DIR={{MATLAB}}
+    just build-release
+
 build-release:
     cargo build --release
-    mv target/release/libserial_bridge.dylib serialbridge.mexmaci64
+    mv target/release/libserial_bridge.dylib serialbridge.{{ext}}
 
 build-debug:
     cargo build
-    mv target/debug/libserial_bridge.dylib serialbridge.mexmaci64
+    mv target/debug/libserial_bridge.dylib serialbridge.{{ext}}
 
 clean:
     cargo clean
-    rm serialbridge.mexmaci64
+    rm serialbridge.{{ext}}
     rm functions.pdf
     rm documentation.pdf