diff --git a/src/blenderbim/docs/devs/installation.rst b/src/blenderbim/docs/devs/installation.rst
index 44377c2a28..928406fd1e 100644
--- a/src/blenderbim/docs/devs/installation.rst
+++ b/src/blenderbim/docs/devs/installation.rst
@@ -152,8 +152,8 @@ changes, you'll need to fix your setup manually. But this is relatively rare.
that has a similar functionality.
-Distro installation
--------------------
+Packaged installation
+---------------------
- **Arch Linux**: `Stable `__.
- **Chocolatey on Windows**: `Unstable `__.
diff --git a/src/ifcopenshell-python/docs/ifcopenshell-python/installation.rst b/src/ifcopenshell-python/docs/ifcopenshell-python/installation.rst
index 502dea2bbf..4000ca5522 100644
--- a/src/ifcopenshell-python/docs/ifcopenshell-python/installation.rst
+++ b/src/ifcopenshell-python/docs/ifcopenshell-python/installation.rst
@@ -143,7 +143,10 @@ and run your script using the **Text > Run Script** menu or by clicking on the
interface. `Read more
`_.
+
Compiling from source
---------------------
-TODO
+Advanced developers may want to compile IfcOpenShell. Refer to the
+:doc:`IfcOpenShell installation guide <../ifcopenshell/installation>` for
+instructions.
diff --git a/src/ifcopenshell-python/docs/ifcopenshell.rst b/src/ifcopenshell-python/docs/ifcopenshell.rst
index 03bc090cc1..ab41e5479e 100644
--- a/src/ifcopenshell-python/docs/ifcopenshell.rst
+++ b/src/ifcopenshell-python/docs/ifcopenshell.rst
@@ -1,13 +1,20 @@
IfcOpenShell
============
-This documentation is free software! You are free to contribute and help write
-this document.
+IfcOpenShell is an open source (LGPL-3.0-or-later) software library for working
+with the Industry Foundation Classes (IFC) file format. Extensive geometric
+support is implemented for the IFC releases IFC2x3 TC1 and IFC4 Add2 TC1.
+Support for parsing is provided for IFC4x1, IFC4x2, and the IFC4x3 release
+candidates. Extending with support for arbitrary IFC schemas is possible at
+compile-time when using C++ and at run-time when using Python.
.. toctree::
+ :hidden:
:maxdepth: 1
:caption: Contents:
+ ifcopenshell/installation
+
Indices and tables
------------------
diff --git a/src/ifcopenshell-python/docs/ifcopenshell/installation.rst b/src/ifcopenshell-python/docs/ifcopenshell/installation.rst
new file mode 100644
index 0000000000..c7355dda69
--- /dev/null
+++ b/src/ifcopenshell-python/docs/ifcopenshell/installation.rst
@@ -0,0 +1,267 @@
+Installation
+============
+
+You will need:
+
+- `Git `__
+- `CMake `__ (3.1.3 or newer)
+
+IfcOpenShell depends on:
+
+- `Boost `__
+- (Optional) `OpenCascade `__ - for building IfcGeom
+ For converting IFC representation items into BRep solids and tessellated meshes
+- (Optional) `OpenCOLLADA `__ -
+ for IfcConvert to be able to write tessellated Collada (.dae) files
+- (Optional) `SWIG `__ and `Python
+ `__ - for building the IfcOpenShell Python interface
+ and use in the BlenderBIM Add-on
+- (Optional) `HDF5 `__ - for caching
+ geometry using the HDF5 format
+- (Optional) `3ds Max SDK
+ `__ - for building the
+ 3ds Max plug-in. All recent versions of 3ds Max (2014 and newer) are 64-bit
+ only, so a 64-bit installation is assumed.
+
+Compiling on Linux
+------------------
+
+The following instructions are for Ubuntu, modify as required for other
+operating systems. GCC (4.7 or newer) or Clang (any version) is required.
+
+.. seealso::
+
+ The `nix/build-all.py `__
+ script can be experimented with and studied for pointers for other operating
+ systems. Note that this script is not currently meant to be used for a
+ typical IfcOpenShell workspace setup.
+
+1. Fetch the latest source code, including all submodules.
+
+ ::
+
+ $ git clone --recursive https://github.com/IfcOpenShell/IfcOpenshell.git
+
+ .. warning::
+
+ The path where the source code is cloned to can contain spaces but non-ASCII
+ characters are very likely to cause problems with the build.
+
+2. Install basic dependencies:
+
+ ::
+
+ $ sudo apt-get install git cmake gcc g++ libboost-all-dev libcgal-dev
+
+3. Install OpenCascade Technology (OCCT).
+
+ ::
+
+ $ sudo apt-get install libocct-data-exchange-dev libocct-draw-dev libocct-foundation-dev libocct-modeling-algorithms-dev libocct-modeling-data-dev libocct-ocaf-dev libocct-visualization-dev
+
+ .. seealso::
+
+ If OCCT is not available, you can `manually compile OCCT
+ `__.
+
+ Alternatively you may use OpenCascade Community Edition (OCE) but it may lag behind OCCT so is not recommended.
+
+ ::
+
+ $ sudo apt-get install liboce-foundation-dev liboce-modeling-dev liboce-ocaf-dev liboce-visualization-dev liboce-ocaf-lite-dev
+
+ You may also manually compile OCE:
+
+ ::
+
+ $ sudo apt-get install libftgl-dev libtbb2 libtbb-dev libgl1-mesa-dev libfreetype6-dev
+ $ git clone https://github.com/tpaviot/oce.git
+ $ cd oce
+ $ mkdir build && cd build
+ $ cmake ..
+ # Replace X with number of CPU cores + 1
+ $ make -j X
+ $ sudo make install
+
+4. For building IfcConvert with COLLADA (.dae) support (on by default), OpenCOLLADA is needed:
+
+ ::
+
+ $ sudo apt-get install libpcre3-dev libxml2-dev
+ $ git clone https://github.com/KhronosGroup/OpenCOLLADA.git
+ $ cd OpenCOLLADA
+ # Using a known good revision, but HEAD should work too:
+ $ git checkout 064a60b65c2c31b94f013820856bc84fb1937cc6
+ $ mkdir build && cd build
+ $ cmake ..
+ # Replace X with number of CPU cores + 1
+ $ make -j X
+ $ sudo make install
+
+5. For building the IfcPython wrapper (on by default), SWIG and Python development are needed:
+
+ ::
+
+ $ sudo apt-get install python-all-dev swig
+
+6. For building support for HDF5 caching (off by default), install dependencies:
+
+ ::
+
+ $ sudo apt-get install libhdf5-dev libaec-dev zlibc
+
+7. Compile IfcOpenShell itself.
+
+ ::
+
+ $ cd /path/to/IfcOpenShell
+ $ mkdir build && cd build
+ # Customise the compile options to suit your environment
+ # Check all paths are valid for your environment
+ $ cmake ../cmake \
+ -DOCC_LIBRARY_DIR=/usr/lib/x86_64-linux-gnu/ \
+ -DOCC_INCLUDE_DIR=/usr/include/ \
+
+ # Optional Collada support
+ -COLLADA_SUPPORT=On
+ -DOPENCOLLADA_INCLUDE_DIR="/usr/local/include/opencollada" \
+ -DOPENCOLLADA_LIBRARY_DIR="/usr/local/lib/opencollada" \
+ -DPCRE_LIBRARY_DIR=/usr/lib/x86_64-linux-gnu/ \
+
+ # Optional HDF5 support
+ -DHDF5_SUPPORT=On
+ -DHDF5_LIBRARIES="/usr/local/hdf5/lib/libhdf5_cpp.so;/usr/local/hdf5/lib/libhdf5.so;/usr/lib64/libz.so;/usr/lib64/libsz.so;/usr/lib64/libaec.so" \
+ -DHDF5_INCLUDE_DIR="/usr/local/hdf5/include" \
+
+ -DCGAL_INCLUDE_DIR=/usr/include \
+ -DGMP_INCLUDE_DIR=/usr/include \
+ -DMPFR_INCLUDE_DIR=/usr/include \
+ -DGMP_LIBRARY_DIR=/usr/lib/x86_64-linux-gnu \
+ -DMPFR_LIBRARY_DIR=/usr/lib/x86_64-linux-gnu
+ # Replace X with number of CPU cores + 1
+ $ make -j X
+ # Optionally install to the system
+ $ sudo make install
+
+
+Compiling on MacOS
+------------------
+
+GCC (4.7 or newer) or Clang (any version) is required.
+
+1. Fetch the latest source code, including all submodules.
+
+ ::
+
+ $ git clone --recursive https://github.com/IfcOpenShell/IfcOpenshell.git
+
+ .. warning::
+
+ The path where the source code is cloned to can contain spaces but non-ASCII
+ characters are very likely to cause problems with the build.
+
+2. Install all dependencies using `Homebrew `__
+
+ ::
+
+ $ brew install boost swig cmake ftgl cgal gmp libaec opencascade
+
+3. Build IfcOpenShell with flags for Homebrew dependencies (``/usr/local/``)
+
+ ::
+
+ $ cd /path/to/IfcOpenShell
+ $ mkdir build && cd build
+ $ cmake ../cmake -DOCC_LIBRARY_DIR=/usr/local/lib/ \
+ -DOCC_INCLUDE_DIR=/usr/local/include/opencascade/ \
+ -DCOLLADA_SUPPORT=0 \
+ -DCGAL_INCLUDE_DIR=/usr/local/include/ \
+ -DGMP_LIBRARY_DIR=/usr/local/lib/ \
+ -DMPFR_LIBRARY_DIR=/usr/local/lib/
+ # Replace X with number of CPU cores + 1
+ $ make -j X -lboost_options
+
+Compiling on Windows (Visual Studio)
+------------------------------------
+
+This is for users of `Visual Studio `__ 2008 to
+2019 (2022 not yet supported by dependency CMake) with C++ toolset (or `Visual
+C++ Build Tools `__).
+
+1. Fetch the latest source code, including all submodules.
+
+ ::
+
+ $ git clone --recursive https://github.com/IfcOpenShell/IfcOpenshell.git
+
+ .. warning::
+
+ The path where the source code is cloned to can contain spaces but non-ASCII
+ characters are very likely to cause problems with the build.
+
+2. Assuming Visual Studio 2015 x64 environment variables set, build dependencies
+ and run cmake.
+
+ ::
+
+ $ cd IfcOpenShell\win
+ $ build-deps.cmd
+ $ run-cmake.bat
+
+3. Open and build the solution file in Visual Studio:
+
+ ::
+
+ $ ..\build-vs2015-x64\IfcOpenShell.sln
+
+ As the scripts default to using the ``RelWithDebInfo`` configuration, and a
+ freshly created solution by CMake defaults to ``Debug``, make sure to switch the
+ used build configuration. Build the ``INSTALL`` project (right-click -> Project
+ Only) to deploy the headers and binaries into a single location if
+ wanted/needed.
+
+ Alternatively, one can use the utility batch file(s) to build and install the
+ project easily from the command-line (installing a project will build it
+ also, if required):
+
+ ::
+
+ $ install-ifcopenshell.bat
+
+.. seealso::
+
+ For more information on configuring a Windows compilation see the `Windows
+ Readme
+ `__.
+
+Compiling on Windows (MSYS2 + MinGW)
+------------------------------------
+
+This is for users of `MSYS2 `__ and `MinGW
+`__.
+
+1. Fetch the latest source code, including all submodules.
+
+ ::
+
+ $ git clone --recursive https://github.com/IfcOpenShell/IfcOpenshell.git
+
+ .. warning::
+
+ The path where the source code is cloned to can contain spaces but non-ASCII
+ characters are very likely to cause problems with the build.
+
+2. Start the MSYS2 Shell and then:
+
+ ::
+
+ $ cd IfcOpenShell/win
+ $ ./build-deps.sh
+ $ ./run-cmake.sh
+ $ ./install-ifcopenshell.sh
+
+.. seealso::
+
+ For more information on configuring a Windows compilation see the `Windows
+ Readme
+ `__.