diff --git a/BUILD.md b/BUILD.md
new file mode 100644
index 0000000..1802bef
--- /dev/null
+++ b/BUILD.md
@@ -0,0 +1,56 @@
+# Building DHTNet
+
+This document provides instructions on how to build DHTNet from source code. Ensure that you have met all the dependencies before proceeding with the build.
+
+## Dependencies
+
+DHTNet depends on the following libraries:
+
+- **OpenDHT** 2.6, used to launch DHT nodes.
+- **[pjproject](https://github.com/savoirfairelinux/pjproject)**, used for ICE negotiation.
+- **msgpack-c** 1.2+, used for data serialization.
+- **GnuTLS** 3.3+, used for cryptographic operations.
+- **Nettle** 2.4+, a GnuTLS dependency for crypto.
+- **{fmt}** 9.0+, for log formatting.
+
+## Building Instructions
+
+Follow these steps to build DHTNet:
+
+### 1. Clone the DHTNet Repository
+
+Clone the DHTNet repository to your local machine:
+
+```bash
+git clone https://github.com/savoirfairelinux/dhtnet.git
+cd dhtnet
+```
+
+### 2. Update dependencies:
+
+Ensure that you have the latest versions of the required Git submodules, pjproject, and OpenDHT. Run the following command:
+
+   ```bash
+   git submodule update --init --recursive
+   ```
+This step ensures that your project has the most up-to-date dependencies for the build process.
+
+### 3. Install dependencies:
+
+Create a build directory and use CMake to configure the build:
+
+```bash
+cd dependencies && ./build.py && cd ..
+mkdir build
+cd build
+cmake ..
+```
+Finally, initiate the build process:
+
+```bash
+make
+```
+
+## Contributing
+
+If you encounter issues or wish to contribute to DHTNet's development, please visit the [GitHub repository](https://github.com/savoirfairelinux/dhtnet) for more details on how to get involved.
\ No newline at end of file
diff --git a/dependencies/build.py b/dependencies/build.py
new file mode 100755
index 0000000..949505e
--- /dev/null
+++ b/dependencies/build.py
@@ -0,0 +1,130 @@
+#!/usr/bin/env python3
+# build.py --- Convenience script for building and running DHTNET dependencies
+
+# Copyright (C) 2023 Savoir-faire Linux Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA.
+
+import subprocess
+import os
+import logging
+
+# Configure the logging system
+logging.basicConfig(filename='install.log', level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
+
+# Define paths and directories
+opendht_dir = "opendht"
+pjproject_dir = "pjproject"
+restinio_dir = "restinio"
+install_dir = os.path.abspath("install")
+
+def build_and_install_opendht():
+    logging.info("Building and installing OpenDHT...")
+    try:
+        # Configure OpenDHT with CMake
+        subprocess.run(["cmake", ".",
+            "-DCMAKE_INSTALL_PREFIX=" + install_dir,
+            "-DCMAKE_BUILD_TYPE=Release",
+            "-DBUILD_TESTING=OFF",
+            "-DOPENDHT_PYTHON=OFF",
+            "-DOPENDHT_TOOLS=OFF",
+            "-DOPENDHT_DOCUMENTATION=OFF",
+            "-DOPENDHT_HTTP=ON",
+            "-DOPENDHT_PROXY_CLIENT=ON",
+        ], cwd=opendht_dir, check=True)
+
+        # Build and install OpenDHT
+        subprocess.run(["make", "install"], cwd=opendht_dir, check=True)
+        logging.info("OpenDHT installed successfully.")
+    except subprocess.CalledProcessError as e:
+        logging.error("Error building or installing OpenDHT: %s", e)
+
+def build_and_install_pjproject():
+    # Build PJSIP libraries
+    try:
+        configure_command = [
+            "./configure",
+            f"--prefix={install_dir}",
+            "--disable-sound",
+            "--enable-video",
+            "--enable-ext-sound",
+            "--disable-speex-aec",
+            "--disable-g711-codec",
+            "--disable-l16-codec",
+            "--disable-gsm-codec",
+            "--disable-g722-codec",
+            "--disable-g7221-codec",
+            "--disable-speex-codec",
+            "--disable-ilbc-codec",
+            "--disable-opencore-amr",
+            "--disable-silk",
+            "--disable-sdl",
+            "--disable-ffmpeg",
+            "--disable-v4l2",
+            "--disable-openh264",
+            "--disable-resample",
+            "--disable-libwebrtc",
+            f"--with-gnutls={install_dir}"
+        ]
+        subprocess.run(configure_command, cwd=pjproject_dir, check=True)
+        subprocess.run(["make"], cwd=pjproject_dir, check=True)
+        subprocess.run(["make", "install"], cwd=pjproject_dir, check=True)
+
+        logging.info("PJSIP libraries built successfully.")
+    except subprocess.CalledProcessError as e:
+        logging.error("Error building PJSIP libraries: %s", e)
+
+def build_and_install_restinio():
+    try:
+        restino_build_dir = restinio_dir + "/dev/"
+        cmake_command = [
+            "cmake",
+            f"-DCMAKE_INSTALL_PREFIX={install_dir}",
+            "-DRESTINIO_TEST=OFF",
+            "-DRESTINIO_SAMPLE=OFF",
+            "-DRESTINIO_INSTALL_SAMPLES=OFF",
+            "-DRESTINIO_BENCH=OFF",
+            "-DRESTINIO_INSTALL_BENCHES=OFF",
+            "-DRESTINIO_FIND_DEPS=ON",
+            "-DRESTINIO_ALLOW_SOBJECTIZER=Off",
+            "-DRESTINIO_USE_BOOST_ASIO=none",
+            "."
+        ]
+        subprocess.run(cmake_command, cwd=restino_build_dir, check=True)
+        subprocess.run(["make", "-j8"], cwd=restino_build_dir, check=True)
+        subprocess.run(["make", "install"], cwd=restino_build_dir, check=True)
+        # subprocess.run(["cd", "../.."], check=True)
+        # subprocess.run(["rm", "-rf", "restinio"], check=True)
+
+        logging.info("restinio built and installed successfully.")
+    except subprocess.CalledProcessError as e:
+        logging.error("Error building or installing restinio: %s", e)
+
+def main():
+    # Create install directory if it doesn't exist
+    if not os.path.exists(install_dir):
+        os.makedirs(install_dir)
+    # Build and install restinio
+    build_and_install_restinio()
+
+    # Build and install OpenDHT
+    build_and_install_opendht()
+
+    # Build and install pjproject
+    build_and_install_pjproject()
+
+
+if __name__ == "__main__":
+    main()
