diff --git a/.gitignore b/.gitignore
index aae3fccce..38050b5fa 100644
--- a/.gitignore
+++ b/.gitignore
@@ -89,3 +89,6 @@ fabric.properties
openrocket.log
*.snap
+
+# Sphinx documentation
+docs/build
\ No newline at end of file
diff --git a/.readthedocs.yaml b/.readthedocs.yaml
new file mode 100644
index 000000000..3a7e5af64
--- /dev/null
+++ b/.readthedocs.yaml
@@ -0,0 +1,13 @@
+version: "2"
+
+build:
+ os: "ubuntu-22.04"
+ tools:
+ python: "3.10"
+
+python:
+ install:
+ - requirements: docs/requirements.txt
+
+sphinx:
+ configuration: docs/source/conf.py
\ No newline at end of file
diff --git a/README.md b/README.md
index 8cd2580bb..4f99b5548 100644
--- a/README.md
+++ b/README.md
@@ -6,6 +6,7 @@ OpenRocket is a free, fully featured model rocket simulator that allows you to d
[](https://www.gnu.org/licenses/gpl-3.0)

[](https://GitHub.com/openrocket/openrocket/releases/)
+[](https://openrocket.readthedocs.io/en/latest/)
[](https://snapcraft.io/openrocket)

@@ -36,16 +37,18 @@ OpenRocket is a free, fully featured model rocket simulator that allows you to d
... plus many more
-π Read more on [our website](https://openrocket.info/) or the [OpenRocket Wiki](http://wiki.openrocket.info).
+π Read more on [our website](https://openrocket.info/).
## πΎ Installers
You can find the OpenRocket installers [here](https://openrocket.info/downloads.html).
-## π Release Notes
-
Release notes are available on each [release's page](https://github.com/openrocket/openrocket/releases) or on [our website](https://openrocket.info/release_notes.html).
+## π Documentation
+
+You can find our documentation on [ReadTheDocs](https://openrocket.readthedocs.io/en/latest/).
+
## π Getting started
The easiest way to get started is to open one of our in-program example designs:
diff --git a/docs/Makefile b/docs/Makefile
new file mode 100644
index 000000000..d0c3cbf10
--- /dev/null
+++ b/docs/Makefile
@@ -0,0 +1,20 @@
+# Minimal makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line, and also
+# from the environment for the first two.
+SPHINXOPTS ?=
+SPHINXBUILD ?= sphinx-build
+SOURCEDIR = source
+BUILDDIR = build
+
+# Put it first so that "make" without argument is like "make help".
+help:
+ @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
+
+.PHONY: help Makefile
+
+# Catch-all target: route all unknown targets to Sphinx using the new
+# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
+%: Makefile
+ @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
diff --git a/docs/README.md b/docs/README.md
new file mode 100644
index 000000000..2de6e3c90
--- /dev/null
+++ b/docs/README.md
@@ -0,0 +1,16 @@
+## Building the docs
+Install Sphinx and additional dependencies using pip, Python's package manager. Open your command line interface
+inside the :file:`openrocket/docs` directory and run:
+```bash
+pip install -r requirements.txt
+```
+
+Build the docs by running in the `docs` directory:
+```bash
+make html
+```
+
+To clean your build (necessary when you change the theme or make other changes to the build configuration), run:
+```bash
+make clean
+```
\ No newline at end of file
diff --git a/docs/make.bat b/docs/make.bat
new file mode 100644
index 000000000..dc1312ab0
--- /dev/null
+++ b/docs/make.bat
@@ -0,0 +1,35 @@
+@ECHO OFF
+
+pushd %~dp0
+
+REM Command file for Sphinx documentation
+
+if "%SPHINXBUILD%" == "" (
+ set SPHINXBUILD=sphinx-build
+)
+set SOURCEDIR=source
+set BUILDDIR=build
+
+%SPHINXBUILD% >NUL 2>NUL
+if errorlevel 9009 (
+ echo.
+ echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
+ echo.installed, then set the SPHINXBUILD environment variable to point
+ echo.to the full path of the 'sphinx-build' executable. Alternatively you
+ echo.may add the Sphinx directory to PATH.
+ echo.
+ echo.If you don't have Sphinx installed, grab it from
+ echo.https://www.sphinx-doc.org/
+ exit /b 1
+)
+
+if "%1" == "" goto help
+
+%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
+goto end
+
+:help
+%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
+
+:end
+popd
diff --git a/docs/requirements.txt b/docs/requirements.txt
new file mode 100644
index 000000000..4985b4d60
--- /dev/null
+++ b/docs/requirements.txt
@@ -0,0 +1,4 @@
+sphinx
+sphinx-rtd-theme
+sphinx-rtd-dark-mode
+sphinx_new_tab_link
\ No newline at end of file
diff --git a/docs/source/_static/custom.css b/docs/source/_static/custom.css
new file mode 100644
index 000000000..0a761bf1f
--- /dev/null
+++ b/docs/source/_static/custom.css
@@ -0,0 +1,110 @@
+/* Change the ReadTheDocs theme */
+.wy-nav-content {
+ max-width: 65% !important;
+}
+
+.wy-side-nav-search, .wy-nav-top {
+ background: #1d8be1;
+}
+
+.wy-side-nav-search .logo {
+ max-width: 42% !important;
+}
+
+.seealso .admonition-title {
+ background: #85898c !important;
+}
+
+.seealso .admonition-title::before {
+ content: "\f064";
+ margin-right: 0.5em;
+}
+
+.seealso {
+ background: #eee !important;
+}
+
+.tip .admonition-title::before {
+ content: "\f0eb";
+ margin-right: 0.5em;
+}
+
+.note .admonition-title::before {
+ content: "\f05a";
+ margin-right: 0.5em;
+}
+
+.warning .admonition-title::before {
+ content: "\f071";
+ margin-right: 0.5em;
+}
+
+.attention .admonition-title {
+ background: #e87f7a !important;
+}
+
+.attention .admonition-title::before {
+ content: "\f0f3";
+ margin-right: 0.5em;
+}
+
+.attention {
+ background: #ffd6cc !important;
+}
+
+.admonition-todo {
+ background: #f4ccff !important;
+}
+
+.admonition-todo .admonition-title {
+ background: #ff33df !important;
+}
+
+.hlist {
+ table-layout: fixed; /* Ensure equals spacing between columns */
+}
+
+/* Custom OpenRocket CSS */
+
+.or-figclass {
+ text-align: center;
+}
+
+.or-image-border img {
+ border: 1px solid #ccc;
+ padding: 3px;
+}
+
+.clear-both {
+ clear: both;
+}
+
+/* Custom cell classes */
+.or-table > thead > tr > th {
+ text-align: center;
+}
+.or-table > tbody > tr > td:has(.or-table-good) {
+ background-color: #7FFF7F !important; /* Green */
+}
+
+.or-table > tbody > tr > td:has(.or-table-okay) {
+ background-color: #FFFF7F !important; /* Yellow */
+}
+
+.or-table > tbody > tr > td:has(.or-table-poor) {
+ background-color: #ffac7f !important; /* Orange */
+}
+.or-table-cell {
+ color: #2d2d2d;
+ margin: auto !important;
+ text-align: center; !important;
+}
+
+.or-table > tbody > tr > td:has(.or-table-bad) {
+ background-color: #FF7F7F !important; /* Red */
+}
+
+/* Remove the bottom margin in line blocks in tables */
+.or-table-line-blocks .line-block {
+ margin-bottom: 0 !important;
+}
diff --git a/docs/source/_static/navbar-logo.png b/docs/source/_static/navbar-logo.png
new file mode 100644
index 000000000..11576451b
Binary files /dev/null and b/docs/source/_static/navbar-logo.png differ
diff --git a/docs/source/conf.py b/docs/source/conf.py
new file mode 100644
index 000000000..af78096b3
--- /dev/null
+++ b/docs/source/conf.py
@@ -0,0 +1,102 @@
+# Configuration file for the Sphinx documentation builder.
+#
+# This file only contains a selection of the most common options. For a full
+# list see the documentation:
+# https://www.sphinx-doc.org/en/master/usage/configuration.html
+
+# -- Path setup --------------------------------------------------------------
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+#
+# import os
+# import sys
+# sys.path.insert(0, os.path.abspath('.'))
+
+
+# -- Project information -----------------------------------------------------
+
+project = 'OpenRocket'
+copyright = '2024, OpenRocket team'
+author = 'OpenRocket team'
+github_url = 'https://github.com/openrocket/openrocket'
+
+# The full version, including alpha/beta/rc tags
+release = '23.09'
+
+
+# -- General configuration ---------------------------------------------------
+
+# Add any Sphinx extension module names here, as strings. They can be
+# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
+# ones.
+extensions = [
+ 'sphinx.ext.duration',
+ 'sphinx.ext.todo',
+ 'sphinx_new_tab_link',
+ 'sphinx_rtd_dark_mode',
+]
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+# This pattern also affects html_static_path and html_extra_path.
+exclude_patterns = []
+
+# user starts in light mode
+default_dark_mode = False
+
+# -- Options for todo extension ----------------------------------------------
+
+# Show TODOs in the output
+todo_include_todos = True
+
+# -- Options for ReadTheDocs -------------------------------------------------
+
+html_theme_options = {
+ #'analytics_id': 'G-XXXXXXXXXX', # Provided by Google in your dashboard
+ #'analytics_anonymize_ip': False,
+ 'logo_only': False,
+ 'display_version': True,
+ 'prev_next_buttons_location': 'both',
+ 'style_external_links': True,
+ 'vcs_pageview_mode': '',
+ # Toc options
+ 'collapse_navigation': True,
+ 'sticky_navigation': False,
+ 'navigation_depth': 3,
+ 'includehidden': True,
+ 'titles_only': False
+}
+
+
+# -- Options for HTML output -------------------------------------------------
+
+# The theme to use for HTML and HTML Help pages. See the documentation for
+# a list of builtin themes.
+#
+html_theme = 'sphinx_rtd_theme'
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+html_static_path = ['_static']
+
+html_logo = "_static/navbar-logo.png"
+
+# Configure Sphinx to update the sidebar whenever the navigation data changes.
+html_context = {
+ 'navigation_update': True
+}
+
+html_css_files = [
+ 'custom.css',
+]
+
+# -- Substitutions -----------------------------------------------------------
+rst_prolog = """
+.. |java_vers| replace:: 17
+.. |br_no_pad| raw:: html
+
+
+"""
diff --git a/docs/source/dev_guide/api_documentation.rst b/docs/source/dev_guide/api_documentation.rst
new file mode 100644
index 000000000..bc9f1d087
--- /dev/null
+++ b/docs/source/dev_guide/api_documentation.rst
@@ -0,0 +1,4 @@
+*****************
+API Documentation
+*****************
+
diff --git a/docs/source/dev_guide/architecture.rst b/docs/source/dev_guide/architecture.rst
new file mode 100644
index 000000000..53a49a9d2
--- /dev/null
+++ b/docs/source/dev_guide/architecture.rst
@@ -0,0 +1,110 @@
+***********************
+OpenRocket Architecture
+***********************
+
+This section describes the high-level architecture of OpenRocket, the important modules and their interactions, and the technology stack.
+It is intended for developers who want to understand the structure of the code and how it works.
+
+.. contents:: Table of Contents
+ :depth: 2
+ :local:
+
+----
+
+Introduction
+============
+
+OpenRocket is a Java application that runs on the desktop. It is built using the Swing GUI toolkit. The choice of Java
+was originally made because it is a platform-independent language, making it possible to run OpenRocket on Windows, macOS, and Linux.
+While the popularity of Java has waned in recent years, it is still a good choice for desktop applications because of its
+mature libraries and tools. Additionally, rewriting OpenRocket in another language would be a massive undertaking that is
+not currently feasible given the size of the developer team. Of course, any suggestions and help in this area are welcome.
+
+OpenRocket is released under the GNU General Public License (GPL) version 3.0. This means that the source code is open and
+available for anyone to use, modify, and distribute. The only major restriction is that any derivative works must also be
+released under the GNU GPL. This ensures that the code remains open and free for everyone. So, no one can take the code and
+sell it as a proprietary product.
+
+Java Platform Module System (JPMS)
+==================================
+
+OpenRocket leverages the **Java Platform Module System** (**JPMS**) to enhance modularity, encapsulation, and maintainability.
+JPMS allows OpenRocket to be organized into two distinct modules, the ``core`` module and the ``swing`` module,
+each with its own well-defined boundaries and dependencies.
+
+Each module in OpenRocket is described by a `module-info.java` file located at the root of the module's source directory
+(:file:`/src/main/java.module-info.java`). This file declares:
+
+ * **Module Name:** A unique identifier for the module (e.g., `info.openrocket.core`, `info.openrocket.swing`).
+ * **Dependencies:** The modules that this module depends on to function correctly. For example, the `info.openrocket.swing` module depends on the `info.openrocket.core` module.
+ * **Exported Packages:** The packages within the module that are accessible to other modules.
+ * **Services:** The services provided or consumed by the module (if applicable).
+
+By embracing JPMS, OpenRocket gains several advantages:
+
+ * **Strong Encapsulation:** Modules explicitly control what packages are exposed, preventing accidental access to internal implementation details.
+ * **Reliable Configuration:** The module system verifies dependencies at compile time and runtime, reducing the risk of missing or incompatible components.
+ * **Improved Maintainability:** Modules can be developed and tested independently, making it easier to understand, modify, and evolve the codebase.
+ * **Scalability:** The modular structure facilitates the addition of new features or the replacement of existing components without impacting the entire application.
+
+
+Core Module
+===========
+
+The ``core`` module contains the core functionality of OpenRocket, such as the rocket simulation engine, the file format
+parsers and writers, and the rocket design classes. This module is intended to be reusable and can be used in other
+applications that need rocket simulation capabilities.
+
+Swing Module
+============
+
+The ``swing`` module contains the user interface of OpenRocket. It is built using the Swing GUI toolkit and provides a graphical
+interface for designing rockets, running simulations, and viewing the results. This module depends on the core module
+and uses its functionality to perform the simulations and display the results.
+
+Rocket Components
+=================
+
+
+
+Aerodynamic Calculators and Simulators
+======================================
+
+Simulation Listeners
+====================
+
+
+Component Database
+==================
+
+Thrust Curves
+=============
+
+:abbr:`OR (OpenRocket)` uses Thrustcurves.org for its thrustcurves/motors.
+
+Scripts
+=======
+
+Plugins
+=======
+
+File Format (.ork)
+==================
+
+The OpenRocket native format uses the file extension \*.ork. It is an XML format file combined with any needed graphics
+files, contained in a ZIP archive. The extension \*.ork.gz is also accepted by OpenRocket, though plain .ork is recommended.
+In other to view the contents of the file, you can simply rename the file extension to .zip and extract the contents.
+
+
+The ``version`` attribute of the tag describes the file format version used, while the ``creator``
+attribute *may* describe the software and version used to write the document. The file format version is increased
+every time the format is changed. The minor number is increased when changes are made that are mostly backward-compatible,
+meaning that older software versions should be able to read the design sans the new features. The major number is
+increased when changes are made that render the design problematic or impossible to read for older software. For maximum
+compatibility software should save a file in the oldest file format version that supports all the necessary design features.
+
+For an overview of the changes between file format versions, see the `fileformat.txt `_
+file in the root directory of the repository.
+
+
+
diff --git a/docs/source/dev_guide/building_releasing.rst b/docs/source/dev_guide/building_releasing.rst
new file mode 100644
index 000000000..7f6bee3cb
--- /dev/null
+++ b/docs/source/dev_guide/building_releasing.rst
@@ -0,0 +1,287 @@
+**********************
+Building and Releasing
+**********************
+
+This guide explains the build system of OpenRocket (Gradle), and how to release a new version of OpenRocket.
+
+.. contents:: Table of Contents
+ :depth: 2
+ :local:
+
+----
+
+Gradle
+======
+
+`Gradle `__ is the build system for OpenRocket. It is used to compile the source code, run tests, and create the JAR file.
+Key features of Gradle are:
+
+- **Incremental builds**: Gradle only rebuilds what is necessary, which makes the build process faster.
+
+- **Dependency management**: Gradle has a robust dependency management system capable of handling project and third-party libraries.
+
+- **Performance**: Gradle uses techniques like build caching and parallel execution to improve performance of the build process.
+
+The root directory of the OpenRocket repository contains several Gradle files:
+
+- ``build.gradle``: This is the main build script file where you define your project configuration and tasks such as compile and run tasks, dependency management, plugins usage, and more.
+
+- ``settings.gradle``: Used for multi-project build configurations to include which sub-projects should be part of the build.
+ For OpenRocket, this file is used to identify the ``core`` and ``swing`` sub-projects.
+
+- ``gradle.properties``: Contains project-wide properties that can be accessed from the build script. For example, the version number of OpenRocket can be defined here.
+
+- ``gradlew`` and ``gradlew.bat``: These are Gradle Wrapper scripts for Unix-based and Windows systems respectively.
+ It allows users to run Gradle builds without requiring Gradle to be installed on the system.
+
+The ``core`` and ``swing`` sub-projects contain their own ``build.gradle`` and ``gradle.properties`` files that define the tasks specific to those sub-projects.
+
+Gradle in IntelliJ
+------------------
+
+If you use IntelliJ IDEA, you can access the Gradle tasks within the IDE. First, open the Gradle tool window by going to
+:menuselection:`View --> Tool Windows --> Gradle` or by clicking on the Gradle icon in the right-hand side of the window:
+
+.. figure:: /img/dev_guide/building_releasing/gradle_in_intellij.png
+ :align: center
+ :width: 80%
+ :alt: Opening the Gradle tool window in IntelliJ IDEA.
+
+ Opening the Gradle tool window in IntelliJ IDEA.
+
+This shows the following window:
+
+.. figure:: /img/dev_guide/building_releasing/intellij_gradle_window.png
+ :align: center
+ :width: 30%
+ :alt: The Gradle tool window in IntelliJ IDEA.
+
+ The Gradle tool window in IntelliJ IDEA.
+
+Here's a breakdown of the Gradle tasks:
+
+- *info.openrocket*: the root project
+ - *Tasks*: Gradle tasks specific to the root project.
+ - *application*: Contains tasks related to running or debugging your application from within the IDE.
+ - *build*: Includes tasks for building the entire project.
+ - *build setup*: Tasks for initializing a new Gradle build, such as creating new Gradle files.
+ - *distribution*: Tasks for assembling the application distribution, like creating zips or tarballs of the build outputs.
+ - *documentation*: Tasks for generating documentation, typically using tools like Javadoc.
+ - *help*: Provides tasks that list other tasks or project properties.
+ - *info.openrocket*: Custom tasks specific to the 'info.openrocket' module.
+ - *other*: Any other tasks that do not fit into the predefined categories.
+ - *shadow*: Related to the Shadow plugin, which packages the projectβs artifacts along with its dependencies into a single "fat" JAR.
+ - *verification*: Tasks for testing and verifying the project, such as running unit tests.
+ - *Dependencies*: Lists the dependencies of the project.
+ - *Run Configurations*: Gradle run configurations that can be used in IntelliJ.
+- *core*: the core module
+ - *Tasks*: Gradle tasks specific to the 'core' module.
+ - *Dependencies*: Lists the dependencies of the 'core' module.
+- *swing*: the swing module
+ - *Tasks*: Gradle tasks specific to the 'swing' module.
+ - *Dependencies*: Lists the dependencies of the 'swing' module.
+
+Most Important Gradle Tasks
+---------------------------
+
+Here are some of the most important Gradle tasks for OpenRocket:
+
+.. list-table:: Most Important Gradle Tasks
+ :widths: 25 25 50
+ :header-rows: 1
+
+ * - Module
+ - Task
+ - Description
+
+ * - root (*info.openrocket*)
+ - ``clean``
+ - Deletes the build directory and all its contents (basically cleans up the project).
+
+ * - root (*info.openrocket*)
+ - ``run``
+ - Runs the OpenRocket application.
+
+ * - root (*info.openrocket*)
+ - ``check``
+ - Runs the unit tests and checks the code quality using the Checkstyle static analysis tool.
+
+ * - root (*info.openrocket*)
+ - ``build``
+ - Compiles the source code, runs the unit tests, and creates the JAR file for the *core* and *swing* module.
+
+ * - root (*info.openrocket*)
+ - ``dist``
+ - Creates a distributable JAR file of OpenRocket (a combination of the *core* and *swing* JAR) at :file:`openrocket/build/libs/OpenRocket-.jar`.
+
+ * - core
+ - ``serializeEngines``
+ - Fetch the latest thrust curves from ThrustCurve.org and serialize them to the OpenRocket format. The resulting serialized file is saved in the ``src`` dir so it can be used for a build.
+
+ * - core
+ - ``serializeEnginesDist``
+ - Same as ``serializeEngines``, but loads the serialized file to the distribution directory (:file:`openrocket/build`) so it can be used in the final build.
+
+ * - core
+ - ``submoduleUpdate``
+ - Updates the submodule dependencies of the *core* module.
+
+You can run these tasks from the command line using the Gradle Wrapper scripts. For example for the task ``run``, run the
+following command in the root directory of the OpenRocket repository:
+
+.. code-block:: bash
+
+ # On macOS and Linux:
+ ./gradlew run
+
+ # On Windows:
+ gradlew.bat run
+
+install4j
+=========
+
+`install4j `__ is used to create the packaged installers for OpenRocket from the JAR file.
+install4j generously provides a free license for open source projects, including OpenRocket. Currently, only the OpenRocket administrators have access
+to the install4j license.
+
+Code Signing
+------------
+
+An important part of generating the installers is `code signing `__.
+This is done to ensure that the installer is not tampered with between the time it is created and the time it is run by the user.
+Once the OpenRocket installer has been code signed, users will receive no more (or the minimum amount of) warnings from
+their operating system that the installer is from an unknown source and may contain malware.
+More information on how to do code signing in install4j can be found `here `__.
+
+Only the OpenRocket administrators have access to the code signing certificates.
+
+Code signing for Windows is done using a digital certificate from Sectigo. More information on the code signing procedure,
+including whitelisting OpenRocket by Microsoft, see the `README file on GitHub `__.
+
+For macOS, the code signing is done using an Apple Developer ID. Besides code signing, the OpenRocket app also needs to
+be notarized. Luckily, install4j takes care of this. More information on the code signing procedure for macOS can be found in the
+`README file on GitHub `__.
+
+Linux does not require code signing.
+
+Creating the Installers
+-----------------------
+
+First you need to build the project using Gradle (see above). This will create the JAR file that will be used to create the installers.
+
+Then, open install4j (requires a license) and load the project file *openrocket/install4j//openrocket-.install4j*
+from the repository. Go to the :menuselection:`Build` tab and click on the :guilabel:`Start Build` button. This will create the installers in
+the *openrocket/install4j//media/* directory.
+
+.. figure:: /img/dev_guide/building_releasing/install4j_build.png
+ :align: center
+ :width: 80%
+ :alt: Building the installers in install4j.
+
+ Building the installers in install4j.
+
+If you do not have access to the code signing certificates, you can create the installers without code signing by
+enabling the checkboxes ``Disable code signing`` and ``Disable notarization`` in the ``Build`` tab.
+
+Release Procedure
+=================
+
+The release procedure for OpenRocket is as follows:
+
+1. Update the `ReleaseNotes.md `__ with the changes that are part of the new release.
+ This includes new features, bug fixes, and other changes that are part of the release. Make sure to include the version number and the release date.
+ Take a look at the previous release notes to see how it should be formatted.
+
+2. Update the component database and thrustcurves by running the gradle tasks ``subModuleUpdate`` and ``serializeEnginesDist`` respectively.
+
+3. **Update the version number** in ``openrocket/core/src/main/resources/build.properties`` to the correct version number.
+
+ For official releases, the version number should use the format ``YY.MM`` (*year.month*). For example, if the software is released in
+ September 2023, the version number should be ``23.09``. If there are multiple releases in the same month, add an incremental number
+ to the version number, e.g. ``23.09.01``.
+
+ If a new release contains significant changes, it may be necessary to release alpha or beta versions first. In that case, the version
+ number should be appended with ``.alpha.`` or ``.beta.`` plus an incremental number. For example, if the software is in beta stage
+ in September 2023, the version number should be ``23.09.beta.01``. In general, alpha releases are not necessary. This is only for very rough releases.
+ Beta releases are only necessary if there are significant changes that need to be tested by the community before the final release.
+
+ One final option is to release a release candidate (RC) version. This is a version that is considered to be the final version,
+ but needs to be tested by the community before the final release. The version number should be appended with ``.RC.`` plus an incremental number.
+ For example, if the software is in RC stage in September 2023, the version number should be ``23.09.RC.01``.
+
+ The official release that comes after the beta release should have the same version number as the beta release, but without the ``.beta.`` part.
+ For instance, if the beta testing started in September 2023 with version number ``23.09.beta.01``, the final release should have version number ``23.09``,
+ even if the final release is in November 2023. This is to ensure consistency in the version numbering and to link the beta release(s) to the final release.
+
+4. **Build the project JAR file** using Gradle (see above).
+
+5. **Test the JAR file** to ensure that it works correctly and that the new version number is applied to the splash screen and under :menuselection:`Help --> About`.
+
+6. **Create the packaged installers** using install4j (see above).
+
+ .. warning::
+ Make sure to **enable code signing** for the installers.
+
+ Make sure that `DS_Store `__ for the macOS
+ installer is updated. Instructions can be found `here `__.
+
+7. **Test the installers** to ensure that they work correctly.
+
+8. **Prepare the website** *(for official releases only, not for alpha, beta, or release candidate releases)*.
+
+ The `source code for the website `__ needs to be updated to point to the new release.
+ Follow these steps:
+
+ - Add the release to `downloads_config.json `__.
+ - Update the ``current_version`` in `_config `__.
+ - Add a new entry to `_whats_new `__ for the new release.
+ Create a ``wn-.md`` file with the changes that are part of the new release. Please take a close look to the previous entries to see how it should be formatted.
+ - Update the `release notes `__
+ (which is a link to the What's new file that you just created). Again, take a close look at the previous entries to see how it should be formatted.
+
+ .. warning::
+ Make sure to **update the website on the** ``development`` **branch**. The ``master`` branch is the branch that is live
+ on the website. First update the ``development`` branch and test the changes on the website. In a later step, the
+ changes will be merged to the ``master`` branch.
+
+9. **Publish the release on GitHub**.
+
+ Go to the `releases page `__. Click *Draft a new release*.
+ Select *Choose a tag* and enter a new tag name, following the format ``release-``, e.g. ``release-23.09``.
+ The title should follow the format ``OpenRocket ()``, e.g. ``OpenRocket 23.09 (2023-11-16)``.
+
+ Fill in the release text, following the `ReleaseNotes.md `__.
+ If you want to credit the developers who contributed to the release, you can tag them anywhere in the release text using the `@username` syntax.
+ They will then be automatically displayed in the contributors list on the release page.
+
+ Finally, upload all the packaged installers and the JAR file to the release. The source code (zip and tar.gz) is
+ automatically appended to each release, you do not need to upload it manually.
+
+ If this is an alpha, beta, or release candidate release, tick the *Set as a pre-release* checkbox.
+
+ Click *Publish release*.
+
+10. **Push the changes to the website**
+
+ First, build the ``development`` branch locally to verify that the changes that you made in step 8 are correct.
+ If everything is working (test the download links, the release notes, and the What's new page), create a new PR
+ that merges the changes from the ``development`` branch to the ``master`` branch.
+
+11. **Send out the release announcement**.
+
+ Send out the release announcement to the OpenRocket mailing list, the TRF forum, and the OpenRocket social media channels
+ (Discord, Facebook...).
+
+ The announcement should include the new features, bug fixes, and other changes that are part of the new release.
+ Make sure to include the download links to the new release. Here is an `example announcement `__.
+
+12. **Merge the** ``unstable``` **branch to the** ``master``` **branch**.
+
+ After the release is published, merge the changes from the `unstable `__ branch
+ to the `master `__ branch.
+
+13. **Upload the new release to** `SourceForge `__.
+
+ The downloads page on SourceForge is still very actively used, so be sure to upload the new release there as well.
+
+14. **Update package managers** (e.g. snap, Chocolatey, Homebrew) with the new release.
diff --git a/docs/source/dev_guide/codebase_walkthrough.rst b/docs/source/dev_guide/codebase_walkthrough.rst
new file mode 100644
index 000000000..86c6a3b85
--- /dev/null
+++ b/docs/source/dev_guide/codebase_walkthrough.rst
@@ -0,0 +1,201 @@
+********************
+Codebase Walkthrough
+********************
+
+.. contents:: Table of Contents
+ :depth: 2
+ :local:
+ :backlinks: none
+
+----
+
+Important Modules and Packages
+==============================
+
+Root Directory Structure
+========================
+
+
+
+Module Folder Structure
+=======================
+
+OpenRocket uses the Gradle build system, where each modules (``info.openrocket.core`` and ``info.openrocket.swing``) adheres to the following folder structure:
+
+.. code-block:: none
+
+ βββ gradle # Gradle Wrapper
+ βββ libs # (optional) Library JAR files that cannot be obtained from the gradle dependency system
+ βββ resources-src # Source files for the resources in the src dir (e.g. InkScape project file for the splash screen)
+ βββ scripts # Utility scripts
+ βββ src # Source code and resources
+ β βββ main # Application source code and resources
+ β β βββ java # Java source code
+ β β βββ resources # Resource files (e.g. images, configuration files, data files)
+ β βββ test # Test source code and resources
+ β β βββ java # Java test source code
+ β β βββ resources # Resource files for testing
+ βββ src-extra # Extra source code, not part of the main application (e.g. template code for an OpenRocket plugin)
+
+Core Module
+-----------
+
+The following is an overview of the packages in the ``info.openrocket.core`` module (:file:`openrocket/core/src/main/java/info/openrocket/core`):
+
+.. code-block:: none
+
+ βββ aerodynamics # Calculation of aerodynamic properties (e.g. aerodynamic forces, CD)
+ β βββ barrowman # Barrowman method for calculating aerodynamic properties
+ βββ appearance # Appearance of components (e.g. color, texture)
+ β βββ defaults # Default appearance settings
+ βββ arch # Get info on the system architecture (macOS, Windows, Linux)
+ βββ communication # Communication with external sites/programs (e.g. retrieve the latest version of OpenRocket from GitHub)
+ βββ database # Database handling (component database, motor database)
+ β βββ motor # Thrust curve (i.e. motor) database
+ βββ document # OpenRocket document and simulation handling
+ β βββ attachments # Attachments to OpenRocket documents
+ β βββ events # OpenRocket events (i.e. document changed, simulation changed)
+ βββ file # File handling
+ β βββ iterator # Iterate files in e.g. a directory or a zip file
+ β βββ motor # Motor files handling
+ β βββ openrocket # OpenRocket file handling
+ β β βββ importt # Import OpenRocket files
+ β β βββ savers # Save OpenRocket files
+ β βββ rasaero # RASAero II file handling
+ β β βββ export # Export OpenRocket files to RASAero II
+ β β βββ importt # Import RASAero II files to OpenRocket
+ β βββ rocksim # RockSim file handling
+ β β βββ export # Export OpenRocket files to RockSim
+ β β βββ importt # Import RockSim files to OpenRocket
+ β βββ simplesax # XML file handling
+ β βββ svg # SVG file handling
+ β β βββ export # SVG export
+ β βββ wavefrontobj # Wavefront OBJ file handling
+ β βββ export # Export OpenRocket components to Wavefront OBJ
+ β βββ components # Export OpenRocket components
+ β βββ shapes # Export general geometry shapes
+ βββ formatting # Formatting of e.g. motor config names
+ βββ gui
+ β βββ util # Filename filter
+ βββ l10n # Localization (translation of OpenRocket into languages other than English)
+ βββ logging # Errors, warnings, and aborts
+ βββ masscalc # Mass property (e.g. mass, CG, moments of inertia) calculation drivers. Actual component mass calculations are in the components themselves
+ βββ material # Material properties (physical properties of materials)
+ βββ models # Physical models (e.g. atmosphere, gravity, wind)
+ β βββ atmosphere # Atmosphere models
+ β βββ gravity # Gravity models
+ β βββ wind # Wind models
+ βββ motor # Motor configuration, ID, and thrustcurves
+ βββ optimization # Optimization algorithms
+ β βββ general # Parameter search space algorithms
+ β β βββ multidim # Multidimensional parallel search optimization
+ β β βββ onedim # One dimensional golden-section search optimization
+ β βββ rocketoptimization # Optimization of rocket parameters for specified goal functions
+ β β βββ domains # Limits on optimization parameters
+ β β βββ goals # Max, min, and specific value optimization goals
+ β β βββ modifiers # Modify rocket parameters
+ β β βββ parameters # Simulation results that can be optimized
+ β βββ services # Provide parameters etc to optimizer
+ βββ plugin # Plugin interface (more general but less developed than extension interface)
+ βββ preset # Component presets
+ β βββ loader # Component database file loader
+ β βββ xml # Component database file writer
+ βββ rocketcomponent # Rocket components (e.g. fins, nose cone, tube)
+ β βββ position # Position of rocket components
+ βββ rocketvisitors # Create lists of components and motors
+ βββ scripting # Javascript scripting of OR functionality
+ βββ simulation # Flight simulation code
+ β βββ customexpression # User defined custom expression handling
+ β βββ exception # Exceptions occurring during simulation
+ β βββ extension # User defined simulation extensions
+ β β βββ example # Examples of simulation extensions
+ β β βββ impl # Helper methods for implementing extensions
+ β βββ listeners # Code "listening" to simulation to implement functionality
+ β βββ example # Example user listeners
+ β βββ system # Listeners used by OpenRocket itself
+ βββ startup # Root Application and related classes
+ βββ thrustcurve # Thrustcurve file and thrustcurve.org API
+ βββ unit # Definitions of units and unit conversions
+ βββ util # Miscellaneous utility methods
+ β βββ enums # Conversion of enums to names
+ βββ utils # More utility methods
+
+
+Swing Module
+------------
+
+The following is an overview of the packages in the ``info.openrocket.swing`` module (*openrocket/swing/src/main/java/info/openrocket/swing*):
+
+.. code-block:: none
+
+ βββ communication
+ βββ file
+ β βββ motor
+ β βββ photo
+ β βββ wavefrontobj
+ βββ gui
+ β βββ adaptors
+ β βββ components
+ β β βββ compass
+ β βββ configdialog
+ β βββ customexpression
+ β βββ dialogs
+ β β βββ flightconfiguration
+ β β βββ motor
+ β β β βββ thrustcurve
+ β β βββ optimization
+ β β βββ preferences
+ β β βββ preset
+ β βββ figure3d
+ β β βββ geometry
+ β β βββ photo
+ β β βββ exhaust
+ β β βββ sky
+ β β βββ builtin
+ β βββ figureelements
+ β βββ help
+ β β βββ tours
+ β βββ main
+ β β βββ componenttree
+ β β βββ flightconfigpanel
+ β βββ plot
+ β βββ preset
+ β βββ print
+ β β βββ components
+ β β βββ visitor
+ β βββ rocketfigure
+ β βββ scalefigure
+ β βββ simulation
+ β βββ theme
+ β βββ util
+ β βββ watcher
+ β βββ widgets
+ βββ logging
+ βββ simulation
+ β βββ extension
+ β βββ example
+ β βββ impl
+ βββ startup
+ β βββ jij
+ β βββ providers
+ βββ utils
+
+Units used in OpenRocket
+========================
+
+OpenRocket always uses internally pure SI units. For example all rocket dimensions and flight distances are in meters, all
+masses are in kilograms, density is in kg/mΒ³, temperature is in Kelvin etc. This convention is also used when storing the
+design in the OpenRocket format.
+
+The only exception to this rule is angles:
+
+- Angles are represented as radians internally, but in the file format they are converted to degrees. This is to make
+ the file format more human-readable and to avoid rounding errors.
+
+- Latitude and longitude of the launch site are represented in degrees both internally and externally.
+
+When displaying measures to the user, the values are converted into the preferred units of the user. This is performed
+using classes in the package ``info.openrocket.core.unit``. The ``Unit`` class represents a single unit and it includes methods for
+converting between that unit and SI units in addition to creating a string representation with a suitable amount of decimals.
+A ``UnitGroup`` describes a measurable quantity such as temperature and contains the units available for that quantity,
+such as Celsius, Fahrenheit and Kelvin.
diff --git a/docs/source/dev_guide/contributing_to_the_docs.rst b/docs/source/dev_guide/contributing_to_the_docs.rst
new file mode 100644
index 000000000..43b77fc00
--- /dev/null
+++ b/docs/source/dev_guide/contributing_to_the_docs.rst
@@ -0,0 +1,399 @@
+*********************************
+Contributing to the Documentation
+*********************************
+
+This document explains how to contribute to the OpenRocket documentation. It provides information on why we use Sphinx
+for our documentation, how to edit and build the documentation, and the style guide for writing documentation.
+
+.. contents:: Table of Contents
+ :depth: 2
+ :local:
+ :backlinks: none
+
+----
+
+Why Sphinx?
+===========
+
+This documentation is generated using `Sphinx `__. Sphinx is a tool that makes it
+easy to create intelligent and beautiful documentation. It is used by many open-source projects, including
+`Python `__, `NumPy `__, and `Matplotlib `__.
+Sphinx uses `reStructuredText `__ as its markup language, which is a lightweight markup language that is easy to read and write. Sphinx also supports `Markdown `__ and `LaTeX `__.
+
+Previously, OpenRocket used MediaWiki for its documentation, but we decided to switch to Sphinx for several reasons:
+
+- Sphinx is more powerful, modern, and flexible than MediaWiki. It allows us to create more complex and interactive documentation.
+
+- Sphinx is easier to maintain than MediaWiki. It is easier to update and manage the documentation in the source files.
+
+- Sphinx can give warnings and errors when building the documentation, which helps to catch mistakes and inconsistencies.
+
+- The documentation is hosted on our GitHub repository, together with the source code. This ensures all resources are concentrated,
+ makes it easier to keep the documentation in sync with the code, and allows for better version control.
+
+- Lastly, for some users who wanted to contribute to the MediaWiki documentation, their access to the MediaWiki was blocked.
+ We were never able to solve that issue.
+
+Read the Docs
+-------------
+
+The OpenRocket documentation is hosted on `Read the Docs `__. Read the Docs is a popular
+platform for hosting documentation for open-source projects. It automatically builds the documentation from the source
+files in the OpenRocket repository and makes it available online. This makes it easy for users to access the documentation
+and for contributors to update it. It also supports versioning, so you can view the documentation for different versions of
+OpenRocket, and it has a search feature that allows you to quickly find what you are looking for. Additionally, you can also
+add translations to the documentation, which makes it accessible to a wider audience.
+
+----
+
+Editing and Building the Documentation
+======================================
+
+If you would like to contribute to the documentation, you can do so by editing the reStructuredText files in the
+:file:`docs/source` directory of the OpenRocket repo. You can then build the documentation by first
+`installing Sphinx `__ and some extra dependencies.
+Open a new terminal window in the :file:`docs` directory and run the following command:
+
+.. code-block:: bash
+
+ pip install -r requirements.txt
+
+To build the docs, run the following command from the ``docs`` directory:
+
+.. code-block:: bash
+
+ make html
+
+This will generate the documentation in the :file:`docs/build/html` directory. You can then view the documentation by opening the
+``index.html`` file in your web browser.
+
+To clean your build (necessary when you change the theme or make other changes to the build configuration), run:
+
+.. code-block:: bash
+
+ make clean
+
+
+If you would like to contribute to the documentation, please submit a pull request with your changes. If you are not sure how to
+do this, please see the ``Obtaining the Source Code`` section in :doc:`Development Environment Setup `.
+Also check out the `GitHub documentation `__
+on how to submit a pull request. If you don't want to go through the hassle of setting up a development environment, you can also
+`submit an issue `__ with your proposed changes and we will take care of the rest,
+or you can `contact us `__.
+
+----
+
+Style Guide
+===========
+
+This section provides a style guide for writing documentation for OpenRocket. It covers conventions that we use in the docs
+and useful tips for writing reStructuredText/Sphinx docs.
+
+.. _heading_levels:
+
+Heading levels
+--------------
+
+Normally, in reStructuredText, there are no heading levels assigned to certain characters as the structure is determined
+from the succession of headings. However, we have set the following heading level rules for the documentation:
+
+- \# with overline, for parts *(not really used at the moment)*
+
+- \* with overline, for chapters
+
+- \= for sections
+
+- \- for subsections
+
+- \^ for subsubsections
+
+- \" for paragraphs
+
+Note that the overline and underline characters must be the same length as the text they are underlining.
+
+For example:
+
+.. code-block:: rst
+
+ *****************************************
+ H1: This is a chapter (title of the page)
+ *****************************************
+
+ H2: This is a section
+ =====================
+
+ H3: This is a subsection
+ ------------------------
+
+ H4: This is a subsubsection
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ H5: This is a paragraph
+ """""""""""""""""""""""
+
+Horizontal Rules
+----------------
+
+Horizontal rules are used to separate sections of the documentation. They are created using four or more hyphens (----).
+
+For example:
+
+.. code-block:: rst
+
+ This is a section
+ =================
+
+ ----
+
+ This is another section
+ =======================
+
+.. note::
+
+ As seen in the example, it is recommended to **always add a horizontal rule before starting a new section**
+ (H2, see :ref:`Heading levels `).
+
+Adding Images
+-------------
+
+Images are added to the documentation like this:
+
+.. code-block:: rst
+
+ .. figure:: /img/path/to/your/image.png
+ :width: 50% (please always express this as a percentage, and don't go over 95% width)
+ :align: "left", "center", or "right" ("center" should be used in general)
+ :alt: Alternative text
+ :figclass: or-image-border (optional, for custom styling)
+
+ This is the caption of the image.
+
+Images are stored in the :file:`img` directory in the :file:`docs/source` directory. When adding images, please make sure
+they are in the correct format (PNG, JPEG, or SVG) and that you place them in the correct directory. Use the same directory
+structure as the rst source file that you want to include the image in. For example, if you want to include an image in
+:file:`docs/source/user_guide/quick_start.rst`, place the image in :file:`docs/source/img/user_guide/quick_start/`.
+
+Just for fun, here is an image of my cat:
+
+.. figure:: /img/dev_guide/contributing_to_the_docs/Oscar.jpeg
+ :width: 50%
+ :align: center
+ :alt: A cute cat
+ :figclass: or-image-border
+
+ This is a picture of my cat, Oscar.
+
+Hyperlinks
+----------
+
+Hyperlinks to external sites are created like this:
+
+.. code-block:: rst
+
+ `link text `__
+
+Replace ``link text`` with the text you want to display as the hyperlink, and ``www.your_url.com`` with the actual URL
+of the hyperlink. For example: `Hey, I'm a link! `__.
+
+.. warning::
+
+ Always use a double underscore at the end. Don't use a single underscore, as this can cause issues when you have
+ multiple hyperlinks with the same text.
+
+Admonitions: Tip, Note, Warning, Attention, See also
+----------------------------------------------------
+
+As you saw just above, you can add notes and warnings to draw attention to important information. The following are
+all the possible admonition type: "**attention**", "**caution**", "**danger**", "**error**", "**hint**", "**important**",
+"**note**", "**tip**", "**warning**". More information can be found
+`here `__.
+
+The most uses admonitions in the OpenRocket docs are:
+
+Tip
+^^^
+
+.. code-block:: rst
+
+ .. tip::
+
+ This is a tip.
+
+.. tip::
+
+ This is what the tip looks like.
+
+Note
+^^^^
+
+.. code-block:: rst
+
+ .. note::
+
+ This is a note.
+
+.. note::
+
+ This is what the note looks like.
+
+Warning
+^^^^^^^
+
+.. code-block:: rst
+
+ .. warning::
+
+ This is a warning.
+
+.. warning::
+
+ This is what the warning looks like.
+
+Attention
+^^^^^^^^^
+
+.. code-block:: rst
+
+ .. attention::
+
+ This is an attention.
+
+.. attention::
+
+ This is what a point of attention looks like.
+
+See Also
+^^^^^^^^
+
+.. code-block:: rst
+
+ .. seealso::
+
+ This is a seealso.
+
+.. seealso::
+
+ See also the following page :doc:`Development Overview `
+
+Semantic Markup
+---------------
+
+Sphinx uses interpreted text roles to insert semantic markup into documents. They are written as \:rolename\:\`content\`.
+More information can be found `here `__. What
+this means is that you can add roles to pieces of text that have a specific meaning so that Sphinx renders that text
+in an appropriate way. Below you find some of the most common roles used in the OpenRocket documentation:
+
+\:menuselection\: Role
+^^^^^^^^^^^^^^^^^^^^^^
+
+The ``:menuselection:`` role is used to represent a sequence of menu selections in a user interface.
+
+Example:
+ :menuselection:`File --> Open example`
+
+(Ensure you use the correct arrow character, which is ``-->``.)
+
+\:command\: Role
+^^^^^^^^^^^^^^^^
+
+The ``:command:`` role is used to represent a command that a user can enter in a command-line interface.
+
+Example:
+ To list the contents of a directory, use the :command:`ls` command.
+
+\:file\: Role
+^^^^^^^^^^^^^
+
+The ``:file:`` role is used to indicate a file or a file path.
+
+Example:
+ Open the configuration file :file:`conf.py` to modify the settings.
+
+\:kbd\: Role
+^^^^^^^^^^^^
+
+The ``:kbd:`` role is used to indicate keyboard keys or shortcuts.
+
+Example:
+ Press :kbd:`Ctrl` + :kbd:`C` to copy the text.
+
+\:guilabel\: Role
+^^^^^^^^^^^^^^^^^
+
+The ``:guilabel:`` role is used to indicate labels of GUI elements like buttons, labels, or fields.
+
+Example:
+ Click the :guilabel:`Submit` button to save your changes.
+
+Substitutions
+-------------
+
+Sphinx allows you to define substitutions that can be used to replace text in the documentation. This is useful for
+replacing frequently used text that is prone to update (e.g. versions of something, or dates). More information can be
+found `here `__.
+Custom substitutions are defined in :file:`docs/source/conf.py` in the ``rst_prolog`` section. For example, there is a
+substitution for ``|java_vers|`` that defines the version of Java that OpenRocket requires. You can then use this
+substitution in the documentation like this: OpenRocket uses Java ``|java_vers|`` (Java |java_vers|).
+
+Escaping Special Characters
+---------------------------
+
+If you need to include a special character in your text that is normally interpreted by Sphinx, you can escape it by
+preceding it with a backslash. For example, to include a backslash in your text, you would write ``\\``. To include
+a colon, you would write ``\:``.
+
+----
+
+.. note::
+
+ The reStructuredText syntax and Sphinx' capabilities are **very rich**. This page barely scratches the surface of what you can do.
+ Please take the time to read the `documentation on reStructuredText `__
+ and `Sphinx `__. If you find interesting features that you think would be
+ useful for the OpenRocket documentation, please use them and document them here!
+
+
+Line Wrapping
+-------------
+
+Please try to keep your lines in the .rst files under Β± 120 characters. This makes it easier to read the documentation in
+the source files and prevent horizontal scrolling for code blocks. You can break up normal text on a new line without issues,
+if there is no blank line between two lines of text, the two lines will be rendered as one paragraph in the output.
+
+Here is an example of correct and incorrect line wrapping inside the source code:
+
+.. figure:: /img/dev_guide/contributing_to_the_docs/Line-Wrapping.png
+ :width: 80%
+ :align: center
+ :alt: Correct and incorrect line wrapping.
+ :figclass: or-image-border
+
+ Correct and incorrect line wrapping of a .rst file.
+
+For breaking up list items, you must ensure that the next line is indented by the same amounts of spaces as the first line
+of the list item. For example:
+
+.. code-block:: rst
+
+ - This is a list item that is very long and needs to be broken up into multiple lines. This is a list item that is very long and needs to be broken up into multiple lines. This is a list item that is very long and needs to be broken up into multiple lines.
+
+ - This is a list item that is broken up into multiple lines. This is a list item that is broken up into multiple
+ lines. This is a list item that is broken up into multiple lines.
+
+If you do not have the right indentation, you will get a compile warning when you build the documentation.
+
+ToDo's
+------
+
+If you are working on a part of the documentation that is not yet finished, you can add a ToDo note to remind yourself to
+finish it later. You can do this by adding a ``todo`` directive to the text. For example:
+
+.. code-block:: rst
+
+ .. todo::
+
+ This section is not yet finished. Please come back later to complete it.
+
+You can view the ToDo's in the documentation if you set the ``todo_include_todos`` option to ``True`` in the
+:file:`docs/source/conf.py` file. After you've done this and rebuilt the docs, you should see a list of all the ToDo's here:
+
+.. todolist::
diff --git a/docs/source/dev_guide/contributing_to_the_website.rst b/docs/source/dev_guide/contributing_to_the_website.rst
new file mode 100644
index 000000000..2d4401695
--- /dev/null
+++ b/docs/source/dev_guide/contributing_to_the_website.rst
@@ -0,0 +1,12 @@
+***************************
+Contributing to the Website
+***************************
+
+OpenRocket's website, `openrocket.info `__, is hosted on GitHub Pages. The website is built
+using `Jekyll `__, a static site generator. The website's source code is located in the
+`openrocket.github.io `__ repository. The website's content is
+written in `Markdown `__ and `HTML `__
+(including CSS and JavaScript).
+
+Please consult the `README file `__ in the
+openrocket.github.io repository for instructions on how to contribute to the website.
diff --git a/docs/source/dev_guide/contributing_to_translations.rst b/docs/source/dev_guide/contributing_to_translations.rst
new file mode 100644
index 000000000..2906ecfed
--- /dev/null
+++ b/docs/source/dev_guide/contributing_to_translations.rst
@@ -0,0 +1,111 @@
+****************************
+Contributing to Translations
+****************************
+
+OpenRocket is translated into multiple languages. If you want to help with translations, this document will guide you through the process.
+
+.. contents:: Table of Contents
+ :depth: 2
+ :local:
+
+----
+
+.. todo::
+ Reference a doc in user_guide for changing the language
+
+.. todo::
+ Add current state of translations?
+
+How Translations Work
+=====================
+
+OpenRocket's GUI elements do not (*should not*) display hard-coded text. Instead, they use a `Translator `__
+object with a certain key to look up the text to display. The Translator object is responsible for looking up the text
+in the appropriate language file and returning the translated text.
+
+The language files are located in the :file:`core/src/main/resources/l10n` directory. The base file for all translations is
+``messages.properties``, which contains the English text. Each language has its own file, named ``messages_xx.properties``,
+where ``xx`` is the language code (e.g. ``messages_nl.properties`` for Dutch). The l10n files are a simple key-value pair
+where the key is the text to be translated and the value is the translated text. For example, this is a snippet from the
+``messages.properties`` file:
+
+.. code-block:: properties
+
+ ! RocketPanel
+ RocketPanel.lbl.ViewType = View Type:
+ RocketPanel.lbl.Zoom = Zoom:
+ RocketPanel.lbl.Stability = Stability:
+
+Comments start with a ``!`` and are ignored. The key is the text to be translated, and the value is the translated text.
+The key should be unique within the file and should start with the name of the class that uses the text, followed by the type
+of widget that uses the text, followed by a representation of the text. For example, the key ``RocketPanel.lbl.ViewType``
+is used by the ``RocketPanel`` class in a label widget to display the text "View Type:". The value for this key is "View Type:".
+
+Other language files use the exact same keys as the ``messages.properties`` base file, but with the translated text as the value.
+For example, this is a snippet from the ``messages_nl.properties`` file:
+
+.. code-block:: properties
+
+ ! RocketPanel
+ RocketPanel.lbl.ViewType = Weergavetype:
+ RocketPanel.lbl.Zoom = Zoom:
+ RocketPanel.lbl.Stability = Stabiliteit:
+
+When you now create a widget in the GUI, you should use the Translator object to get the translated text. For example, to
+create a label widget with the text "View Type:", you would use the following code:
+
+.. code-block:: java
+
+ private static final Translator trans = Application.getTranslator();
+
+ JLabel label = new JLabel(trans.get("RocketPanel.lbl.ViewType"));
+
+When the GUI is displayed, the Translator object will look up the key ``RocketPanel.lbl.ViewType`` in the appropriate language
+file and return the translated text. If the key is not found in the language file, the Translator object will return the English.
+This way, the GUI can be easily translated into different languages by simply adding a new language file with the translated text.
+
+----
+
+Modifying an Existing Translation
+=================================
+
+Open the l10n file for the language you want to modify in the :file:`core/src/main/resources/l10n` directory. For example, to modify
+the French translation, open the :file:`messages_fr.properties` file, since ``fr`` corresponds to the language code of French.
+Find the key for the text you want to modify and change the value.
+
+When you are done, create a pull request with your changes. The maintainers will review your changes and merge them if they are
+appropriate.
+
+----
+
+Creating a New Translation
+==========================
+
+If you want to create a new translation for a language that is not yet supported, you can create a new language file in the
+:file:`core/src/main/resources/l10n` directory. The file should be named ``messages_xx.properties``, where ``xx`` is the language code
+of the language you want to translate to. For example, to create a translation for Finnish, you would create a file named
+:file:`messages_fi.properties`.
+
+Copy the contents of the :file:`messages.properties` file into the new file. Translate the English text into the new language and
+save the file.
+
+Edit the :file:`swing/src/main/java/info/openrocket/swing/gui/util/SwingPreferences.java` file and add the new language to the
+``SUPPORTED_LOCALES`` array. For example, to add Finnish, you would change this line:
+
+.. code-block:: java
+
+ for (String lang : new String[] { "en", "ar", "de", "es", "fr", "it", "nl", "ru", "cs", "pl", "ja", "pt", "tr" }) {
+
+To this (notice the addition of ``"fi"`` at the end)
+
+.. code-block:: java
+
+ for (String lang : new String[] { "en", "ar", "de", "es", "fr", "it", "nl", "ru", "cs", "pl", "ja", "pt", "tr", "fi" }) {
+
+Finally, add yourself to the list of translation contributors (you deserve some fame! π). This is done in the
+:file:`swing/src/main/java/info/openrocket/swing/gui/dialogs/AboutDialog.java` file.
+In this file, edit the String 'CREDITS' and add your details to the list after the 'Translations by:'-tag.
+
+When you are done, create a pull request with your changes. The maintainers will review your changes and merge them if they are.
+If you are not at all familiar with git, you can also `create an issue `__
+with your changes and the maintainers will create the pull request for you.
diff --git a/docs/source/dev_guide/development_guidelines.rst b/docs/source/dev_guide/development_guidelines.rst
new file mode 100644
index 000000000..8a695dd28
--- /dev/null
+++ b/docs/source/dev_guide/development_guidelines.rst
@@ -0,0 +1,33 @@
+**********************
+Development Guidelines
+**********************
+
+In order to maintain a high level of code quality and improve the efficiency for other developers to verify your code,
+we have established the following guidelines for contributing to the project.
+
+.. contents:: Table of Contents
+ :depth: 2
+ :local:
+
+----
+
+Coding Standards
+================
+
+Where possible, write unit tests for your code (see :doc:`Testing and Debugging `).
+This will help to ensure that your code is correct, and will help to prevent regressions in the future.
+Also include edge cases in your tests.
+
+Use `atomic commits `__. Each commit should be a single logical change.
+Don't make several logical changes in one commit. For example, if a patch fixes a bug and optimizes the performance of a
+feature, it should be split into two separate commits.
+
+Commit messages should be clear, concise, and useful. The first line should be a short description of the commit, then a blank line,
+then a more detailed explanation. The commit message should be in the present tense. For example, "Fix bug" and not "Fixed bug".
+
+If applicable, include a reference to the issue that the commit addresses. For example, if you're working on a fix for GitHub
+issue #123, then format your commit message like this: "[#123] Fix bug". This makes it easier to track which commits are
+associated with which issues.
+
+Pull Request Process
+====================
\ No newline at end of file
diff --git a/docs/source/dev_guide/development_overview.rst b/docs/source/dev_guide/development_overview.rst
new file mode 100644
index 000000000..5a55522c7
--- /dev/null
+++ b/docs/source/dev_guide/development_overview.rst
@@ -0,0 +1,74 @@
+********************
+Development Overview
+********************
+
+Welcome to the OpenRocket Development Guide! This documentation is designed for developers interested in contributing to OpenRocket.
+
+This guide covers the architecture, codebase, and development workflows in detail. To dive deeper into specific topics,
+use the links below to navigate to different sections of this development guide. To learn more about the technical aspects
+of OpenRocket, such as the aerodynamic calculations, refer to the `Technical documentation `__.
+
+Code structure
+==============
+
+OpenRocket is a Java application organized using the Java Platform Module System (JPMS) and built with `Gradle `__.
+The code is organized in the following two packages:
+
+- `info.openrocket.core `__ - The backend of OpenRocket. \
+ This package contains the classes that represent the rocket and its components, as well as the simulation engine. \
+ The classes in this package are not dependent on any GUI libraries and can be used in other applications.
+
+- `info.openrocket.swing `__ - The GUI of OpenRocket. \
+ This package contains the classes that create the user interface. OpenRocket uses the Java Swing library for the GUI.
+
+Further Reading
+===============
+
+Explore the following sections to learn more about OpenRocket's development:
+
+- :doc:`Development Environment Setup `
+ |br_no_pad|
+ *How to set up your development environment to build and run OpenRocket.*
+
+- :doc:`OpenRocket Architecture `
+ |br_no_pad|
+ *An overview of the high-level code architecture of OpenRocket.*
+
+- :doc:`Codebase Walkthrough `
+ |br_no_pad|
+ *A detailed guide to the codebase of OpenRocket.*
+
+- :doc:`Development Guidelines `
+ |br_no_pad|
+ *Guidelines for contributing to OpenRocket.*
+
+- :doc:`Testing and Debugging `
+ |br_no_pad|
+ *How to test and debug the OpenRocket code.*
+
+- :doc:`API Documentation `
+ |br_no_pad|
+ *Documentation for the OpenRocket API.*
+
+- :doc:`Building and Releasing `
+ |br_no_pad|
+ *How to build and release new OpenRocket versions.*
+
+- :doc:`Contributing to the Website `
+ |br_no_pad|
+ *How to contribute to the* `openrocket.info `__ *website.*
+
+- :doc:`Contributing to Translations `
+ |br_no_pad|
+ *How to contribute to translating the OpenRocket UI into different languages.*
+
+- :doc:`Contributing to the Documentation `
+ |br_no_pad|
+ *How to contribute to this OpenRocket documentation.*
+
+- :doc:`FAQ and Troubleshooting `
+ |br_no_pad|
+ *Frequently asked questions and troubleshooting tips for developers.*
+
+**We encourage contributions from everyone and hope this guide helps you get started with developing OpenRocket. β€οΈ**
+
diff --git a/docs/source/dev_guide/development_setup.rst b/docs/source/dev_guide/development_setup.rst
new file mode 100644
index 000000000..f25d79748
--- /dev/null
+++ b/docs/source/dev_guide/development_setup.rst
@@ -0,0 +1,243 @@
+*****************************
+Development Environment Setup
+*****************************
+
+This guide will walk you through setting up the development environment to build OpenRocket from the source code.
+
+.. contents:: Table of Contents
+ :depth: 2
+ :local:
+
+----
+
+Prerequisites
+=============
+
+- `JDK 17 `__. OpenRocket is developed using Java 17,
+ so you will need to install it to build and run OpenRocket. If you have multiple versions of Java installed, ensure that
+ Java |java_vers| is the default version.
+
+- `Git `__. Git is a version control system that is used to manage the source code for OpenRocket.
+ You will need to install Git to clone the OpenRocket repository.
+
+- `GitHub Account `__. GitHub is a platform for hosting Git repositories. You will need a GitHub account to
+ fork the OpenRocket repository and submit pull requests.
+
+- `Gradle `__. OpenRocket uses Gradle as its build system. You will need to install Gradle to build OpenRocket.
+
+Obtaining the Source Code
+=========================
+
+The source code for OpenRocket is hosted on `GitHub `__. However, you cannot change
+this code directly. This is because the OpenRocket repository is the official repository for the project, and only the project
+maintainers can make changes to it. This is to ensure that the codebase remains stable and consistent.
+Instead, you must fork the OpenRocket repository, which creates a personal copy of the repository that you can make changes to.
+You can then submit a pull request to the OpenRocket repository to propose your changes.
+
+Forking the Repository
+----------------------
+
+The first step is to fork the OpenRocket repository. As mentioned earlier, the OpenRocket repository is the official repository
+for the project, and only the project maintainers can make changes to it.
+
+Go to the OpenRocket repository on GitHub (`link `__) and click the :guilabel:`Fork` button:
+
+.. figure:: /img/dev_guide/development_setup/fork_repo.png
+ :align: center
+ :width: 90%
+ :alt: Forking the official OpenRocket repository.
+
+ Forking the official OpenRocket repository on `github.com/openrocket/openrocket `__.
+
+You can leave the default settings and click ``Create fork``. This will create a copy of the OpenRocket repository in your GitHub account:
+
+.. figure:: /img/dev_guide/development_setup/forked_repo.png
+ :align: center
+ :width: 80%
+ :alt: Your forked repo.
+
+ Your forked repo.
+
+You can always retrieve your forked repository under your GitHub account, under ``Your repositories``, or by visiting the URL
+``https://github.com//openrocket`` (replace ````
+with your actual username).
+
+Cloning the Repository
+----------------------
+
+Now that you have forked the OpenRocket repository, you can clone it to your local machine. To do this, open a terminal
+and run the following command (replace ``[YOUR USERNAME]`` with your GitHub username):
+
+.. code-block:: bash
+
+ # Use the following command if you have set up SSH keys with GitHub
+ git clone git@github.com:[YOUR USERNAME]/openrocket.git
+
+ # Otherwise, clone the repository using HTTPS
+ git clone https://github.com/[YOUR USERNAME]/openrocket.git
+
+This will clone the OpenRocket repository to your local machine. You can now make changes to the code and push them to your forked repository.
+
+One final step you need to do is to initialize the submodules. OpenRocket uses submodules for some of its dependencies.
+To initialize the submodules, run the following commands:
+
+.. code-block:: bash
+
+ git submodule init
+ git submodule update
+
+
+Keeping your Fork in Sync
+-------------------------
+
+Once you have forked the OpenRocket repository, you will need to keep your fork in sync with the official repository. This is because
+the official repository may have changes that are not in your fork, and you will want to keep your fork up-to-date with the latest changes.
+For example, in the following image you can see that your fork is 10 commits behind the official repository:
+
+.. figure:: /img/dev_guide/development_setup/forked_repo_outdated.png
+ :align: center
+ :width: 80%
+ :alt: An outdated forked repo.
+
+ An outdated forked repo.
+
+Luckily, GitHub makes it easy to keep your fork in sync with the official repository. You can do this by clicking the
+``Sync fork`` button on your forked repository page and then clicking the :guilabel:`Update branch` button:
+
+.. figure:: /img/dev_guide/development_setup/sync_fork.png
+ :align: center
+ :width: 80%
+ :alt: Syncing your forked repo on GitHub.
+
+ Syncing your forked repo on GitHub.
+
+If all went well, your fork should now be up-to-date with the official repository:
+
+.. figure:: /img/dev_guide/development_setup/forked_repo_up_to_date.png
+ :align: center
+ :width: 80%
+ :alt: An up-to-date forked repo.
+
+ An up-to-date forked repo.
+
+.. warning::
+ It is important to keep your fork in sync with the official repository. If you don't, you may encounter conflicts
+ when you try to submit a pull request.
+
+ **Regularly check your forked repository to see if it is behind the official repository**. If it is, sync your fork!
+
+Now you have updated your fork, but you still need to update your local repository (your clone).
+To do this, you need to fetch the changes from the official repository and pull them into your local repository.
+You can do this by running the following commands:
+
+.. code-block:: bash
+
+ git fetch && git pull
+
+Setting Up the Development Environment
+======================================
+
+This section will guide you through setting up the development environment to build OpenRocket from the source code.
+
+IntelliJ IDEA
+-------------
+
+`IntelliJ IDEA `__ is a popular Java IDE that is used by many developers. It has a lot of
+features that make it easier to develop Java applications. We **highly** recommend using IntelliJ IDEA for developing
+OpenRocket. You can download the Community Edition for free from the `JetBrains website `__
+(scroll down to βIntelliJ IDEA Community Editionβ and click the download button).
+
+Once you have downloaded and installed IntelliJ IDEA, you can open the OpenRocket project:
+
+1. **Open IntelliJ IDEA**
+ Start IntelliJ IDEA and select "Open" (Go to :menuselection:`File --> Open`).
+
+2. **Select the OpenRocket project**
+ Navigate to the directory where you cloned OpenRocket and select the project.
+
+3. **Import Project as Gradle Project**
+ IntelliJ should automatically detect that this is a Gradle project. If prompted, select ``Load Gradle Project``.
+
+ .. figure:: /img/dev_guide/development_setup/load_gradle_project.png
+ :align: center
+ :width: 80%
+ :alt: Load Gradle Project.
+
+ IntelliJ IDEA will automatically detect that this is a Gradle project and prompt you to load it. Click ``Load Gradle Project``.
+
+4. **Configure JDK for the Project**
+ - Go to :menuselection:`File --> Project Structure --> (Project Settings -->) Project`.
+ - Set the Project SDK to JDK |java_vers|.
+
+ .. figure:: /img/dev_guide/development_setup/project_sdk.png
+ :align: center
+ :width: 80%
+ :alt: Set the project SDK.
+
+ Set the project SDK to JDK |java_vers|.
+
+ If JDK |java_vers| is not listed, you can download it from the Project Structure dialog by \
+ going to :menuselection:`(Platform Settings -->) SDKs`, clicking the :guilabel:`+` button, and selecting ``Download JDK...``. Then select \
+ version |java_vers| and any vendor (e.g. OpenJDK, Amazon Corretto, ...).
+
+ - Confirm in the Project Structure dialog under :menuselection:`(Project Settings -->) Modules` that the SDK in each module is set to JDK |java_vers|. \
+ If not, you can change it by selecting the module and setting the SDK in the right pane. Ensure that the list view on the bottom-right \
+ does not show ````. If it does, click the *Module SDK* dropdown and click (again) on the JDK |java_vers| SDK.
+
+ .. figure:: /img/dev_guide/development_setup/modules_sdk.png
+ :align: center
+ :width: 80%
+ :alt: Set the module SDK.
+
+ Set the module SDK to JDK |java_vers|.
+
+5. **Run the Application**
+ By default, IntelliJ should be set up with 3 run configurations:
+
+ - ``SwingStartup``: Run the application directly from within IntelliJ. You will user this configuration most of the time. \
+ You can also run IntelliJ in debug mode by clicking the green bug icon next to the play button.
+
+ - ``openrocket-jar``: Run all the unit tests and build the application as a JAR file.
+
+ - ``openrocket-test``: Only run the unit tests.
+
+ .. figure:: /img/dev_guide/development_setup/run_configurations.png
+ :align: center
+ :width: 80%
+ :alt: Default installed run configurations.
+
+ The default installed run configurations.
+
+ You can run the application by selecting the ``SwingStartup`` configuration and clicking the green play button.
+ This will instantiate the OpenRocket application from within IntelliJ IDEA. If you want to stop the running application,
+ click the red square button on the top-right in IntelliJ.
+
+ .. figure:: /img/dev_guide/development_setup/swingstartup.png
+ :align: center
+ :width: 80%
+ :alt: Running OpenRocket from IntelliJ IDEA.
+
+ Running OpenRocket directly from IntelliJ IDEA.
+
+6. **That's it!** You can now start developing OpenRocket. π
+
+Command Line Interface
+----------------------
+
+It is also possible to develop in a text editor and build OpenRocket from the command line using Gradle. Please refer to the :doc:`Building and Releasing `
+section for all the possible Gradle tasks. To run OpenRocket, you can use:
+
+.. code-block:: bash
+
+ ./gradlew run
+
+Troubleshooting
+===============
+
+1. **JDK Not Recognized**
+ Ensure that the JDK path is correctly configured in :menuselection:`File --> Project Structure --> SDKs`.
+
+2. **Gradle Sync Issues**
+ - If IntelliJ fails to import Gradle projects correctly, try refreshing the Gradle project by clicking on the "Reload All Gradle Projects" icon in the Gradle tool window.
+ - Ensure the `gradle-wrapper.properties` file points to the correct Gradle version which supports Java |java_vers|.
+
diff --git a/docs/source/dev_guide/faq_troubleshooting.rst b/docs/source/dev_guide/faq_troubleshooting.rst
new file mode 100644
index 000000000..3a285640a
--- /dev/null
+++ b/docs/source/dev_guide/faq_troubleshooting.rst
@@ -0,0 +1,16 @@
+***********************
+FAQ and Troubleshooting
+***********************
+
+.. rubric:: Q: Why does OpenRocket still use the "ancient" Java language? Python and web-based programs are the future.
+
+A: Java is a very powerful language and is still widely used in the industry. While it is true that Java is not as popular
+with (new) developers as Python or web-based languages, there are currently no plans of rewriting the codebase in another
+language. The main reason for this is that it would take a lot of time to rewrite the codebase, more time than the current
+OpenRocket developers can afford to miss of their (limited) spare time. Besides, the current Java codebase is
+still working fine and has been tested by many users over the years.
+
+That being said, maintaining a Java application does have challenges, mainly in ensuring it runs on all platforms and
+hardware configurations. Maintaining the GUI and 3D view has proven to be very challenging. Additionally, Java cannot be
+run on mobile devices such as iOS devices. If you are a developer and would like to contribute to the codebase rewrite,
+please contact the OpenRocket developers to see what you could do to help!
diff --git a/docs/source/dev_guide/testing_and_debugging.rst b/docs/source/dev_guide/testing_and_debugging.rst
new file mode 100644
index 000000000..d0410db40
--- /dev/null
+++ b/docs/source/dev_guide/testing_and_debugging.rst
@@ -0,0 +1,11 @@
+*********************
+Testing and Debugging
+*********************
+
+Unit Testing
+============
+
+Debugging
+=========
+
+IDE debugger, print statements, in-program debug log, debug command line argument...
diff --git a/docs/source/img/dev_guide/building_releasing/gradle_in_intellij.png b/docs/source/img/dev_guide/building_releasing/gradle_in_intellij.png
new file mode 100644
index 000000000..db33eee7d
Binary files /dev/null and b/docs/source/img/dev_guide/building_releasing/gradle_in_intellij.png differ
diff --git a/docs/source/img/dev_guide/building_releasing/install4j_build.png b/docs/source/img/dev_guide/building_releasing/install4j_build.png
new file mode 100644
index 000000000..76ec53f81
Binary files /dev/null and b/docs/source/img/dev_guide/building_releasing/install4j_build.png differ
diff --git a/docs/source/img/dev_guide/building_releasing/intellij_gradle_window.png b/docs/source/img/dev_guide/building_releasing/intellij_gradle_window.png
new file mode 100644
index 000000000..b32bba7be
Binary files /dev/null and b/docs/source/img/dev_guide/building_releasing/intellij_gradle_window.png differ
diff --git a/docs/source/img/dev_guide/contributing_to_the_docs/Line-Wrapping.png b/docs/source/img/dev_guide/contributing_to_the_docs/Line-Wrapping.png
new file mode 100644
index 000000000..762e90102
Binary files /dev/null and b/docs/source/img/dev_guide/contributing_to_the_docs/Line-Wrapping.png differ
diff --git a/docs/source/img/dev_guide/contributing_to_the_docs/Oscar.jpeg b/docs/source/img/dev_guide/contributing_to_the_docs/Oscar.jpeg
new file mode 100644
index 000000000..8e352ab94
Binary files /dev/null and b/docs/source/img/dev_guide/contributing_to_the_docs/Oscar.jpeg differ
diff --git a/docs/source/img/dev_guide/development_setup/fork_repo.png b/docs/source/img/dev_guide/development_setup/fork_repo.png
new file mode 100644
index 000000000..db8551b38
Binary files /dev/null and b/docs/source/img/dev_guide/development_setup/fork_repo.png differ
diff --git a/docs/source/img/dev_guide/development_setup/forked_repo.png b/docs/source/img/dev_guide/development_setup/forked_repo.png
new file mode 100644
index 000000000..7f2392964
Binary files /dev/null and b/docs/source/img/dev_guide/development_setup/forked_repo.png differ
diff --git a/docs/source/img/dev_guide/development_setup/forked_repo_outdated.png b/docs/source/img/dev_guide/development_setup/forked_repo_outdated.png
new file mode 100644
index 000000000..4ceabaa6b
Binary files /dev/null and b/docs/source/img/dev_guide/development_setup/forked_repo_outdated.png differ
diff --git a/docs/source/img/dev_guide/development_setup/forked_repo_up_to_date.png b/docs/source/img/dev_guide/development_setup/forked_repo_up_to_date.png
new file mode 100644
index 000000000..21252f443
Binary files /dev/null and b/docs/source/img/dev_guide/development_setup/forked_repo_up_to_date.png differ
diff --git a/docs/source/img/dev_guide/development_setup/load_gradle_project.png b/docs/source/img/dev_guide/development_setup/load_gradle_project.png
new file mode 100644
index 000000000..5a8c22c88
Binary files /dev/null and b/docs/source/img/dev_guide/development_setup/load_gradle_project.png differ
diff --git a/docs/source/img/dev_guide/development_setup/modules_sdk.png b/docs/source/img/dev_guide/development_setup/modules_sdk.png
new file mode 100644
index 000000000..c027d9e86
Binary files /dev/null and b/docs/source/img/dev_guide/development_setup/modules_sdk.png differ
diff --git a/docs/source/img/dev_guide/development_setup/project_sdk.png b/docs/source/img/dev_guide/development_setup/project_sdk.png
new file mode 100644
index 000000000..5dd21b86c
Binary files /dev/null and b/docs/source/img/dev_guide/development_setup/project_sdk.png differ
diff --git a/docs/source/img/dev_guide/development_setup/run_configurations.png b/docs/source/img/dev_guide/development_setup/run_configurations.png
new file mode 100644
index 000000000..a25778264
Binary files /dev/null and b/docs/source/img/dev_guide/development_setup/run_configurations.png differ
diff --git a/docs/source/img/dev_guide/development_setup/swingstartup.png b/docs/source/img/dev_guide/development_setup/swingstartup.png
new file mode 100644
index 000000000..e0133a90e
Binary files /dev/null and b/docs/source/img/dev_guide/development_setup/swingstartup.png differ
diff --git a/docs/source/img/dev_guide/development_setup/sync_fork.png b/docs/source/img/dev_guide/development_setup/sync_fork.png
new file mode 100644
index 000000000..50c2b63af
Binary files /dev/null and b/docs/source/img/dev_guide/development_setup/sync_fork.png differ
diff --git a/docs/source/img/openrocket_logo_256.png b/docs/source/img/openrocket_logo_256.png
new file mode 100644
index 000000000..97bbba818
Binary files /dev/null and b/docs/source/img/openrocket_logo_256.png differ
diff --git a/docs/source/img/setup/getting_started/01.02.Rocket_Design.Tab.png b/docs/source/img/setup/getting_started/01.02.Rocket_Design.Tab.png
new file mode 100644
index 000000000..cf59bbca0
Binary files /dev/null and b/docs/source/img/setup/getting_started/01.02.Rocket_Design.Tab.png differ
diff --git a/docs/source/img/setup/getting_started/02.02.Motor-Configuration.Tab.png b/docs/source/img/setup/getting_started/02.02.Motor-Configuration.Tab.png
new file mode 100644
index 000000000..ae3a4d4a3
Binary files /dev/null and b/docs/source/img/setup/getting_started/02.02.Motor-Configuration.Tab.png differ
diff --git a/docs/source/img/setup/getting_started/02.04.01.File_Menu.png b/docs/source/img/setup/getting_started/02.04.01.File_Menu.png
new file mode 100644
index 000000000..8436f4b71
Binary files /dev/null and b/docs/source/img/setup/getting_started/02.04.01.File_Menu.png differ
diff --git a/docs/source/img/setup/getting_started/03.02.Flight_simulations.Tab.png b/docs/source/img/setup/getting_started/03.02.Flight_simulations.Tab.png
new file mode 100644
index 000000000..d0d81bce9
Binary files /dev/null and b/docs/source/img/setup/getting_started/03.02.Flight_simulations.Tab.png differ
diff --git a/docs/source/img/setup/getting_started/04.01.02.Rocket_Configuration.png b/docs/source/img/setup/getting_started/04.01.02.Rocket_Configuration.png
new file mode 100644
index 000000000..98c41fef6
Binary files /dev/null and b/docs/source/img/setup/getting_started/04.01.02.Rocket_Configuration.png differ
diff --git a/docs/source/img/setup/getting_started/04.01.05.Rocket_Configuration.Rename.png b/docs/source/img/setup/getting_started/04.01.05.Rocket_Configuration.Rename.png
new file mode 100644
index 000000000..38541349a
Binary files /dev/null and b/docs/source/img/setup/getting_started/04.01.05.Rocket_Configuration.Rename.png differ
diff --git a/docs/source/img/setup/getting_started/11.01.03.Rocket_Build.Nose_Cone.png b/docs/source/img/setup/getting_started/11.01.03.Rocket_Build.Nose_Cone.png
new file mode 100644
index 000000000..c0a28cac0
Binary files /dev/null and b/docs/source/img/setup/getting_started/11.01.03.Rocket_Build.Nose_Cone.png differ
diff --git a/docs/source/img/setup/getting_started/11.02.01.Rocket_Build.Payload_Bay.png b/docs/source/img/setup/getting_started/11.02.01.Rocket_Build.Payload_Bay.png
new file mode 100644
index 000000000..33bc131d0
Binary files /dev/null and b/docs/source/img/setup/getting_started/11.02.01.Rocket_Build.Payload_Bay.png differ
diff --git a/docs/source/img/setup/getting_started/11.02.05.Rocket_Build.Payload_Bay.png b/docs/source/img/setup/getting_started/11.02.05.Rocket_Build.Payload_Bay.png
new file mode 100644
index 000000000..c2bd69cac
Binary files /dev/null and b/docs/source/img/setup/getting_started/11.02.05.Rocket_Build.Payload_Bay.png differ
diff --git a/docs/source/img/setup/getting_started/11.02.06.Rocket_Build.Payload_Bay.png b/docs/source/img/setup/getting_started/11.02.06.Rocket_Build.Payload_Bay.png
new file mode 100644
index 000000000..c6a9e3008
Binary files /dev/null and b/docs/source/img/setup/getting_started/11.02.06.Rocket_Build.Payload_Bay.png differ
diff --git a/docs/source/img/setup/getting_started/11.03.01.Rocket_Build.Transition.png b/docs/source/img/setup/getting_started/11.03.01.Rocket_Build.Transition.png
new file mode 100644
index 000000000..4c676d54c
Binary files /dev/null and b/docs/source/img/setup/getting_started/11.03.01.Rocket_Build.Transition.png differ
diff --git a/docs/source/img/setup/getting_started/11.03.06.Rocket_Build.Transition.png b/docs/source/img/setup/getting_started/11.03.06.Rocket_Build.Transition.png
new file mode 100644
index 000000000..c22499914
Binary files /dev/null and b/docs/source/img/setup/getting_started/11.03.06.Rocket_Build.Transition.png differ
diff --git a/docs/source/img/setup/getting_started/11.03.07.Rocket_Build.Transition.png b/docs/source/img/setup/getting_started/11.03.07.Rocket_Build.Transition.png
new file mode 100644
index 000000000..3e8f6db04
Binary files /dev/null and b/docs/source/img/setup/getting_started/11.03.07.Rocket_Build.Transition.png differ
diff --git a/docs/source/img/setup/getting_started/11.04.01.Rocket_Build.Body_Tube.png b/docs/source/img/setup/getting_started/11.04.01.Rocket_Build.Body_Tube.png
new file mode 100644
index 000000000..db189f3d7
Binary files /dev/null and b/docs/source/img/setup/getting_started/11.04.01.Rocket_Build.Body_Tube.png differ
diff --git a/docs/source/img/setup/getting_started/11.04.02.Rocket_Build.Body_Tube.png b/docs/source/img/setup/getting_started/11.04.02.Rocket_Build.Body_Tube.png
new file mode 100644
index 000000000..bec0b6f21
Binary files /dev/null and b/docs/source/img/setup/getting_started/11.04.02.Rocket_Build.Body_Tube.png differ
diff --git a/docs/source/img/setup/getting_started/11.05.01.Rocket_Build.Fins.png b/docs/source/img/setup/getting_started/11.05.01.Rocket_Build.Fins.png
new file mode 100644
index 000000000..65513d17d
Binary files /dev/null and b/docs/source/img/setup/getting_started/11.05.01.Rocket_Build.Fins.png differ
diff --git a/docs/source/img/setup/getting_started/11.05.02.Rocket_Build.Fins.png b/docs/source/img/setup/getting_started/11.05.02.Rocket_Build.Fins.png
new file mode 100644
index 000000000..4b6e2bddf
Binary files /dev/null and b/docs/source/img/setup/getting_started/11.05.02.Rocket_Build.Fins.png differ
diff --git a/docs/source/img/setup/getting_started/11.05.03.Rocket_Build.Fins.png b/docs/source/img/setup/getting_started/11.05.03.Rocket_Build.Fins.png
new file mode 100644
index 000000000..35b09f9ab
Binary files /dev/null and b/docs/source/img/setup/getting_started/11.05.03.Rocket_Build.Fins.png differ
diff --git a/docs/source/img/setup/getting_started/11.06.02.Rocket_Build.Launch_Lug.png b/docs/source/img/setup/getting_started/11.06.02.Rocket_Build.Launch_Lug.png
new file mode 100644
index 000000000..e72ab9deb
Binary files /dev/null and b/docs/source/img/setup/getting_started/11.06.02.Rocket_Build.Launch_Lug.png differ
diff --git a/docs/source/img/setup/getting_started/11.06.03.Rocket_Build.3D_Unfinished.png b/docs/source/img/setup/getting_started/11.06.03.Rocket_Build.3D_Unfinished.png
new file mode 100644
index 000000000..e72223754
Binary files /dev/null and b/docs/source/img/setup/getting_started/11.06.03.Rocket_Build.3D_Unfinished.png differ
diff --git a/docs/source/img/setup/getting_started/11.06.03.Rocket_Build.Launch_Lug.png b/docs/source/img/setup/getting_started/11.06.03.Rocket_Build.Launch_Lug.png
new file mode 100644
index 000000000..091df7b27
Binary files /dev/null and b/docs/source/img/setup/getting_started/11.06.03.Rocket_Build.Launch_Lug.png differ
diff --git a/docs/source/img/setup/getting_started/11.06.04.Rocket_Build.3D_Finished.png b/docs/source/img/setup/getting_started/11.06.04.Rocket_Build.3D_Finished.png
new file mode 100644
index 000000000..4d55e6b59
Binary files /dev/null and b/docs/source/img/setup/getting_started/11.06.04.Rocket_Build.3D_Finished.png differ
diff --git a/docs/source/img/setup/getting_started/11.07.03.Rocket_Build.Parachute.png b/docs/source/img/setup/getting_started/11.07.03.Rocket_Build.Parachute.png
new file mode 100644
index 000000000..ced1a5b4f
Binary files /dev/null and b/docs/source/img/setup/getting_started/11.07.03.Rocket_Build.Parachute.png differ
diff --git a/docs/source/img/setup/getting_started/11.08.01.Rocket_Build.Parachute.png b/docs/source/img/setup/getting_started/11.08.01.Rocket_Build.Parachute.png
new file mode 100644
index 000000000..49ebfcdfe
Binary files /dev/null and b/docs/source/img/setup/getting_started/11.08.01.Rocket_Build.Parachute.png differ
diff --git a/docs/source/img/setup/getting_started/11.08.02.Rocket_Build.Parachute.png b/docs/source/img/setup/getting_started/11.08.02.Rocket_Build.Parachute.png
new file mode 100644
index 000000000..e88ad8c12
Binary files /dev/null and b/docs/source/img/setup/getting_started/11.08.02.Rocket_Build.Parachute.png differ
diff --git a/docs/source/img/setup/getting_started/11.09.01.Rocket_Build.Engine_Block.png b/docs/source/img/setup/getting_started/11.09.01.Rocket_Build.Engine_Block.png
new file mode 100644
index 000000000..951471d5a
Binary files /dev/null and b/docs/source/img/setup/getting_started/11.09.01.Rocket_Build.Engine_Block.png differ
diff --git a/docs/source/img/setup/getting_started/11.09.02.Rocket_Build.Engine_Block.png b/docs/source/img/setup/getting_started/11.09.02.Rocket_Build.Engine_Block.png
new file mode 100644
index 000000000..7a3c55267
Binary files /dev/null and b/docs/source/img/setup/getting_started/11.09.02.Rocket_Build.Engine_Block.png differ
diff --git a/docs/source/img/setup/getting_started/12.10.01.Rocket_Build_Appearance.Nose_Cone.png b/docs/source/img/setup/getting_started/12.10.01.Rocket_Build_Appearance.Nose_Cone.png
new file mode 100644
index 000000000..fd0f94418
Binary files /dev/null and b/docs/source/img/setup/getting_started/12.10.01.Rocket_Build_Appearance.Nose_Cone.png differ
diff --git a/docs/source/img/setup/getting_started/12.10.05.Rocket_Build_Appearance.Nose_Cone.png b/docs/source/img/setup/getting_started/12.10.05.Rocket_Build_Appearance.Nose_Cone.png
new file mode 100644
index 000000000..6c605ff94
Binary files /dev/null and b/docs/source/img/setup/getting_started/12.10.05.Rocket_Build_Appearance.Nose_Cone.png differ
diff --git a/docs/source/img/setup/getting_started/12.10.06.Rocket_Build_Appearance.Nose_Cone.png b/docs/source/img/setup/getting_started/12.10.06.Rocket_Build_Appearance.Nose_Cone.png
new file mode 100644
index 000000000..0174f3d86
Binary files /dev/null and b/docs/source/img/setup/getting_started/12.10.06.Rocket_Build_Appearance.Nose_Cone.png differ
diff --git a/docs/source/img/setup/getting_started/12.10.07.Rocket_Build_Appearance.Nose_Cone.png b/docs/source/img/setup/getting_started/12.10.07.Rocket_Build_Appearance.Nose_Cone.png
new file mode 100644
index 000000000..c43a4a473
Binary files /dev/null and b/docs/source/img/setup/getting_started/12.10.07.Rocket_Build_Appearance.Nose_Cone.png differ
diff --git a/docs/source/img/setup/getting_started/12.10.11.Rocket_Build_Appearance.Nose_Cone.png b/docs/source/img/setup/getting_started/12.10.11.Rocket_Build_Appearance.Nose_Cone.png
new file mode 100644
index 000000000..d47a48cc8
Binary files /dev/null and b/docs/source/img/setup/getting_started/12.10.11.Rocket_Build_Appearance.Nose_Cone.png differ
diff --git a/docs/source/img/setup/getting_started/12.10.12.Rocket_Build_Appearance.Nose_Cone.png b/docs/source/img/setup/getting_started/12.10.12.Rocket_Build_Appearance.Nose_Cone.png
new file mode 100644
index 000000000..90037e403
Binary files /dev/null and b/docs/source/img/setup/getting_started/12.10.12.Rocket_Build_Appearance.Nose_Cone.png differ
diff --git a/docs/source/img/setup/getting_started/12.10.13.Rocket_Build_Appearance.Decal.png b/docs/source/img/setup/getting_started/12.10.13.Rocket_Build_Appearance.Decal.png
new file mode 100644
index 000000000..a101dbc39
Binary files /dev/null and b/docs/source/img/setup/getting_started/12.10.13.Rocket_Build_Appearance.Decal.png differ
diff --git a/docs/source/img/setup/getting_started/12.10.16.Rocket_Build_Appearance.Payload_Bay.Decal.png b/docs/source/img/setup/getting_started/12.10.16.Rocket_Build_Appearance.Payload_Bay.Decal.png
new file mode 100644
index 000000000..d37e4bfd7
Binary files /dev/null and b/docs/source/img/setup/getting_started/12.10.16.Rocket_Build_Appearance.Payload_Bay.Decal.png differ
diff --git a/docs/source/img/setup/getting_started/12.10.19.Rocket_Build_Appearance.Payload_Bay.Decal.png b/docs/source/img/setup/getting_started/12.10.19.Rocket_Build_Appearance.Payload_Bay.Decal.png
new file mode 100644
index 000000000..f4ae314ba
Binary files /dev/null and b/docs/source/img/setup/getting_started/12.10.19.Rocket_Build_Appearance.Payload_Bay.Decal.png differ
diff --git a/docs/source/img/setup/getting_started/12.10.20.Rocket_Build_Appearance.Payload_Bay.Decal.png b/docs/source/img/setup/getting_started/12.10.20.Rocket_Build_Appearance.Payload_Bay.Decal.png
new file mode 100644
index 000000000..44c73c166
Binary files /dev/null and b/docs/source/img/setup/getting_started/12.10.20.Rocket_Build_Appearance.Payload_Bay.Decal.png differ
diff --git a/docs/source/img/setup/getting_started/12.10.21.Rocket_Build_Appearance.Fins.png b/docs/source/img/setup/getting_started/12.10.21.Rocket_Build_Appearance.Fins.png
new file mode 100644
index 000000000..8691f4869
Binary files /dev/null and b/docs/source/img/setup/getting_started/12.10.21.Rocket_Build_Appearance.Fins.png differ
diff --git a/docs/source/img/setup/getting_started/12.11.03.Rocket_Build_Appearance.Fins.png b/docs/source/img/setup/getting_started/12.11.03.Rocket_Build_Appearance.Fins.png
new file mode 100644
index 000000000..d2cca978f
Binary files /dev/null and b/docs/source/img/setup/getting_started/12.11.03.Rocket_Build_Appearance.Fins.png differ
diff --git a/docs/source/img/setup/getting_started/12.11.11.Rocket_Build_Appearance.Fins.png b/docs/source/img/setup/getting_started/12.11.11.Rocket_Build_Appearance.Fins.png
new file mode 100644
index 000000000..cedb394ca
Binary files /dev/null and b/docs/source/img/setup/getting_started/12.11.11.Rocket_Build_Appearance.Fins.png differ
diff --git a/docs/source/img/setup/getting_started/12.11.12.Rocket_Build_Appearance.Fins.png b/docs/source/img/setup/getting_started/12.11.12.Rocket_Build_Appearance.Fins.png
new file mode 100644
index 000000000..ad2cb8bb7
Binary files /dev/null and b/docs/source/img/setup/getting_started/12.11.12.Rocket_Build_Appearance.Fins.png differ
diff --git a/docs/source/img/setup/getting_started/12.12.01.Rocket_Build.Photo_Studio.png b/docs/source/img/setup/getting_started/12.12.01.Rocket_Build.Photo_Studio.png
new file mode 100644
index 000000000..e9821ca3e
Binary files /dev/null and b/docs/source/img/setup/getting_started/12.12.01.Rocket_Build.Photo_Studio.png differ
diff --git a/docs/source/img/setup/getting_started/12.12.02.Rocket_Build.Motor.png b/docs/source/img/setup/getting_started/12.12.02.Rocket_Build.Motor.png
new file mode 100644
index 000000000..283599ad1
Binary files /dev/null and b/docs/source/img/setup/getting_started/12.12.02.Rocket_Build.Motor.png differ
diff --git a/docs/source/img/setup/getting_started/12.12.02.Rocket_Build.Photo_Studio.png b/docs/source/img/setup/getting_started/12.12.02.Rocket_Build.Photo_Studio.png
new file mode 100644
index 000000000..2a8a897fc
Binary files /dev/null and b/docs/source/img/setup/getting_started/12.12.02.Rocket_Build.Photo_Studio.png differ
diff --git a/docs/source/img/setup/getting_started/12.12.03.Rocket_Build.Motor.png b/docs/source/img/setup/getting_started/12.12.03.Rocket_Build.Motor.png
new file mode 100644
index 000000000..3b6d47caa
Binary files /dev/null and b/docs/source/img/setup/getting_started/12.12.03.Rocket_Build.Motor.png differ
diff --git a/docs/source/img/setup/getting_started/12.12.03.Rocket_Build.Photo_Studio.png b/docs/source/img/setup/getting_started/12.12.03.Rocket_Build.Photo_Studio.png
new file mode 100644
index 000000000..3db2d8052
Binary files /dev/null and b/docs/source/img/setup/getting_started/12.12.03.Rocket_Build.Photo_Studio.png differ
diff --git a/docs/source/img/setup/getting_started/12.12.05.Rocket_Build.Motor.png b/docs/source/img/setup/getting_started/12.12.05.Rocket_Build.Motor.png
new file mode 100644
index 000000000..2357b1862
Binary files /dev/null and b/docs/source/img/setup/getting_started/12.12.05.Rocket_Build.Motor.png differ
diff --git a/docs/source/img/setup/getting_started/2023.01.Guide.User_Interface.png b/docs/source/img/setup/getting_started/2023.01.Guide.User_Interface.png
new file mode 100644
index 000000000..cb3ba84b3
Binary files /dev/null and b/docs/source/img/setup/getting_started/2023.01.Guide.User_Interface.png differ
diff --git a/docs/source/img/setup/getting_started/2023.01.Open_Example.png b/docs/source/img/setup/getting_started/2023.01.Open_Example.png
new file mode 100644
index 000000000..ce470a1b1
Binary files /dev/null and b/docs/source/img/setup/getting_started/2023.01.Open_Example.png differ
diff --git a/docs/source/img/setup/getting_started/Getting_Started.Components.Nose_Cone.Parts_Library.Highlighted.jpg b/docs/source/img/setup/getting_started/Getting_Started.Components.Nose_Cone.Parts_Library.Highlighted.jpg
new file mode 100644
index 000000000..2435e87a2
Binary files /dev/null and b/docs/source/img/setup/getting_started/Getting_Started.Components.Nose_Cone.Parts_Library.Highlighted.jpg differ
diff --git a/docs/source/img/setup/getting_started/Getting_Started.Components.Nose_Cone.jpg b/docs/source/img/setup/getting_started/Getting_Started.Components.Nose_Cone.jpg
new file mode 100644
index 000000000..42a01f0c5
Binary files /dev/null and b/docs/source/img/setup/getting_started/Getting_Started.Components.Nose_Cone.jpg differ
diff --git a/docs/source/img/setup/getting_started/Getting_Started.Rocket_Views.3D_Figure.jpg b/docs/source/img/setup/getting_started/Getting_Started.Rocket_Views.3D_Figure.jpg
new file mode 100644
index 000000000..8966c09fc
Binary files /dev/null and b/docs/source/img/setup/getting_started/Getting_Started.Rocket_Views.3D_Figure.jpg differ
diff --git a/docs/source/img/setup/getting_started/Getting_Started.Rocket_Views.3D_Finished.jpg b/docs/source/img/setup/getting_started/Getting_Started.Rocket_Views.3D_Finished.jpg
new file mode 100644
index 000000000..00a30c8bd
Binary files /dev/null and b/docs/source/img/setup/getting_started/Getting_Started.Rocket_Views.3D_Finished.jpg differ
diff --git a/docs/source/img/setup/getting_started/Getting_Started.Rocket_Views.3D_Unfinished.jpg b/docs/source/img/setup/getting_started/Getting_Started.Rocket_Views.3D_Unfinished.jpg
new file mode 100644
index 000000000..539b09185
Binary files /dev/null and b/docs/source/img/setup/getting_started/Getting_Started.Rocket_Views.3D_Unfinished.jpg differ
diff --git a/docs/source/img/setup/getting_started/Getting_Started.Rocket_Views.Back_View.jpg b/docs/source/img/setup/getting_started/Getting_Started.Rocket_Views.Back_View.jpg
new file mode 100644
index 000000000..829401194
Binary files /dev/null and b/docs/source/img/setup/getting_started/Getting_Started.Rocket_Views.Back_View.jpg differ
diff --git a/docs/source/img/setup/getting_started/Getting_Started.Rocket_Views.Side_View.jpg b/docs/source/img/setup/getting_started/Getting_Started.Rocket_Views.Side_View.jpg
new file mode 100644
index 000000000..d1daae16e
Binary files /dev/null and b/docs/source/img/setup/getting_started/Getting_Started.Rocket_Views.Side_View.jpg differ
diff --git a/docs/source/img/setup/getting_started/Getting_Started.Rocket_Views.Top_View.jpg b/docs/source/img/setup/getting_started/Getting_Started.Rocket_Views.Top_View.jpg
new file mode 100644
index 000000000..120bdfaae
Binary files /dev/null and b/docs/source/img/setup/getting_started/Getting_Started.Rocket_Views.Top_View.jpg differ
diff --git a/docs/source/img/setup/getting_started/OR.Guide.User_Interface.04.02.File.png b/docs/source/img/setup/getting_started/OR.Guide.User_Interface.04.02.File.png
new file mode 100644
index 000000000..748095f8e
Binary files /dev/null and b/docs/source/img/setup/getting_started/OR.Guide.User_Interface.04.02.File.png differ
diff --git a/docs/source/img/setup/getting_started/OR.Guide.User_Interface.04.03.File.png b/docs/source/img/setup/getting_started/OR.Guide.User_Interface.04.03.File.png
new file mode 100644
index 000000000..8492850f8
Binary files /dev/null and b/docs/source/img/setup/getting_started/OR.Guide.User_Interface.04.03.File.png differ
diff --git a/docs/source/img/setup/getting_started/OR.Guide.User_Interface.04.04.File.png b/docs/source/img/setup/getting_started/OR.Guide.User_Interface.04.04.File.png
new file mode 100644
index 000000000..185825190
Binary files /dev/null and b/docs/source/img/setup/getting_started/OR.Guide.User_Interface.04.04.File.png differ
diff --git a/docs/source/img/setup/installation/about_dialog.png b/docs/source/img/setup/installation/about_dialog.png
new file mode 100644
index 000000000..ba79f0c02
Binary files /dev/null and b/docs/source/img/setup/installation/about_dialog.png differ
diff --git a/docs/source/img/setup/installation/off_screen_rendering_right.png b/docs/source/img/setup/installation/off_screen_rendering_right.png
new file mode 100644
index 000000000..2845642c0
Binary files /dev/null and b/docs/source/img/setup/installation/off_screen_rendering_right.png differ
diff --git a/docs/source/img/setup/installation/off_screen_rendering_setting.png b/docs/source/img/setup/installation/off_screen_rendering_setting.png
new file mode 100644
index 000000000..a59f92c71
Binary files /dev/null and b/docs/source/img/setup/installation/off_screen_rendering_setting.png differ
diff --git a/docs/source/img/setup/installation/off_screen_rendering_wrong.png b/docs/source/img/setup/installation/off_screen_rendering_wrong.png
new file mode 100644
index 000000000..1ca9baad3
Binary files /dev/null and b/docs/source/img/setup/installation/off_screen_rendering_wrong.png differ
diff --git a/docs/source/img/setup/installation/splash_screen.png b/docs/source/img/setup/installation/splash_screen.png
new file mode 100644
index 000000000..b28129a17
Binary files /dev/null and b/docs/source/img/setup/installation/splash_screen.png differ
diff --git a/docs/source/img/setup/installation/thrust_curves_setting.png b/docs/source/img/setup/installation/thrust_curves_setting.png
new file mode 100644
index 000000000..53917e2b2
Binary files /dev/null and b/docs/source/img/setup/installation/thrust_curves_setting.png differ
diff --git a/docs/source/img/setup/preferences/Access-Preferences.png b/docs/source/img/setup/preferences/Access-Preferences.png
new file mode 100644
index 000000000..6c538cd73
Binary files /dev/null and b/docs/source/img/setup/preferences/Access-Preferences.png differ
diff --git a/docs/source/img/setup/preferences/ExportPreferences.png b/docs/source/img/setup/preferences/ExportPreferences.png
new file mode 100644
index 000000000..5feef66e8
Binary files /dev/null and b/docs/source/img/setup/preferences/ExportPreferences.png differ
diff --git a/docs/source/img/setup/preferences/FontSize13.png b/docs/source/img/setup/preferences/FontSize13.png
new file mode 100644
index 000000000..aea9b389c
Binary files /dev/null and b/docs/source/img/setup/preferences/FontSize13.png differ
diff --git a/docs/source/img/setup/preferences/FontSize17.png b/docs/source/img/setup/preferences/FontSize17.png
new file mode 100644
index 000000000..a4d11c588
Binary files /dev/null and b/docs/source/img/setup/preferences/FontSize17.png differ
diff --git a/docs/source/img/setup/preferences/FontSize9.png b/docs/source/img/setup/preferences/FontSize9.png
new file mode 100644
index 000000000..1981541d4
Binary files /dev/null and b/docs/source/img/setup/preferences/FontSize9.png differ
diff --git a/docs/source/img/setup/preferences/PodAndBoosterMarker.png b/docs/source/img/setup/preferences/PodAndBoosterMarker.png
new file mode 100644
index 000000000..ba9521e96
Binary files /dev/null and b/docs/source/img/setup/preferences/PodAndBoosterMarker.png differ
diff --git a/docs/source/img/setup/preferences/Prefs-Design.png b/docs/source/img/setup/preferences/Prefs-Design.png
new file mode 100644
index 000000000..4678f456a
Binary files /dev/null and b/docs/source/img/setup/preferences/Prefs-Design.png differ
diff --git a/docs/source/img/setup/preferences/Prefs-General.png b/docs/source/img/setup/preferences/Prefs-General.png
new file mode 100644
index 000000000..3179c11c8
Binary files /dev/null and b/docs/source/img/setup/preferences/Prefs-General.png differ
diff --git a/docs/source/img/setup/preferences/Prefs-Graphics.png b/docs/source/img/setup/preferences/Prefs-Graphics.png
new file mode 100644
index 000000000..738f9f2a8
Binary files /dev/null and b/docs/source/img/setup/preferences/Prefs-Graphics.png differ
diff --git a/docs/source/img/setup/preferences/Prefs-Launch.png b/docs/source/img/setup/preferences/Prefs-Launch.png
new file mode 100644
index 000000000..bd9fa75e8
Binary files /dev/null and b/docs/source/img/setup/preferences/Prefs-Launch.png differ
diff --git a/docs/source/img/setup/preferences/Prefs-Materials.png b/docs/source/img/setup/preferences/Prefs-Materials.png
new file mode 100644
index 000000000..a549c69b2
Binary files /dev/null and b/docs/source/img/setup/preferences/Prefs-Materials.png differ
diff --git a/docs/source/img/setup/preferences/Prefs-Simulation.png b/docs/source/img/setup/preferences/Prefs-Simulation.png
new file mode 100644
index 000000000..7e3c735f0
Binary files /dev/null and b/docs/source/img/setup/preferences/Prefs-Simulation.png differ
diff --git a/docs/source/img/setup/preferences/Prefs-Units.png b/docs/source/img/setup/preferences/Prefs-Units.png
new file mode 100644
index 000000000..890e5c824
Binary files /dev/null and b/docs/source/img/setup/preferences/Prefs-Units.png differ
diff --git a/docs/source/img/setup/preferences/Theme-Dark.png b/docs/source/img/setup/preferences/Theme-Dark.png
new file mode 100644
index 000000000..7dad66761
Binary files /dev/null and b/docs/source/img/setup/preferences/Theme-Dark.png differ
diff --git a/docs/source/img/setup/preferences/Theme-DarkContrast.png b/docs/source/img/setup/preferences/Theme-DarkContrast.png
new file mode 100644
index 000000000..c1d28e6ff
Binary files /dev/null and b/docs/source/img/setup/preferences/Theme-DarkContrast.png differ
diff --git a/docs/source/img/setup/preferences/Theme-Light.png b/docs/source/img/setup/preferences/Theme-Light.png
new file mode 100644
index 000000000..9503aff79
Binary files /dev/null and b/docs/source/img/setup/preferences/Theme-Light.png differ
diff --git a/docs/source/img/user_guide/advanced_flight_simulation/ChoosePlotVariable.png b/docs/source/img/user_guide/advanced_flight_simulation/ChoosePlotVariable.png
new file mode 100644
index 000000000..1f45abeab
Binary files /dev/null and b/docs/source/img/user_guide/advanced_flight_simulation/ChoosePlotVariable.png differ
diff --git a/docs/source/img/user_guide/advanced_flight_simulation/ComplexPlot.png b/docs/source/img/user_guide/advanced_flight_simulation/ComplexPlot.png
new file mode 100644
index 000000000..9a8c5056a
Binary files /dev/null and b/docs/source/img/user_guide/advanced_flight_simulation/ComplexPlot.png differ
diff --git a/docs/source/img/user_guide/advanced_flight_simulation/ComplexPlot2.png b/docs/source/img/user_guide/advanced_flight_simulation/ComplexPlot2.png
new file mode 100644
index 000000000..42ca7ae7d
Binary files /dev/null and b/docs/source/img/user_guide/advanced_flight_simulation/ComplexPlot2.png differ
diff --git a/docs/source/img/user_guide/advanced_flight_simulation/EditSimulationLaunchCond.png b/docs/source/img/user_guide/advanced_flight_simulation/EditSimulationLaunchCond.png
new file mode 100644
index 000000000..0ae91308a
Binary files /dev/null and b/docs/source/img/user_guide/advanced_flight_simulation/EditSimulationLaunchCond.png differ
diff --git a/docs/source/img/user_guide/advanced_flight_simulation/EditSimulationSimOpts.png b/docs/source/img/user_guide/advanced_flight_simulation/EditSimulationSimOpts.png
new file mode 100644
index 000000000..c038079b2
Binary files /dev/null and b/docs/source/img/user_guide/advanced_flight_simulation/EditSimulationSimOpts.png differ
diff --git a/docs/source/img/user_guide/advanced_flight_simulation/ExportData.png b/docs/source/img/user_guide/advanced_flight_simulation/ExportData.png
new file mode 100644
index 000000000..1f6def715
Binary files /dev/null and b/docs/source/img/user_guide/advanced_flight_simulation/ExportData.png differ
diff --git a/docs/source/img/user_guide/advanced_flight_simulation/PlotConfigs.png b/docs/source/img/user_guide/advanced_flight_simulation/PlotConfigs.png
new file mode 100644
index 000000000..f4491c295
Binary files /dev/null and b/docs/source/img/user_guide/advanced_flight_simulation/PlotConfigs.png differ
diff --git a/docs/source/img/user_guide/advanced_flight_simulation/PlotExportButton.png b/docs/source/img/user_guide/advanced_flight_simulation/PlotExportButton.png
new file mode 100644
index 000000000..a04ea6e3f
Binary files /dev/null and b/docs/source/img/user_guide/advanced_flight_simulation/PlotExportButton.png differ
diff --git a/docs/source/img/user_guide/advanced_flight_simulation/PlotExportWindow.png b/docs/source/img/user_guide/advanced_flight_simulation/PlotExportWindow.png
new file mode 100644
index 000000000..c6e9dd69c
Binary files /dev/null and b/docs/source/img/user_guide/advanced_flight_simulation/PlotExportWindow.png differ
diff --git a/docs/source/img/user_guide/advanced_flight_simulation/PlotOfSimulation.png b/docs/source/img/user_guide/advanced_flight_simulation/PlotOfSimulation.png
new file mode 100644
index 000000000..24b85e9c1
Binary files /dev/null and b/docs/source/img/user_guide/advanced_flight_simulation/PlotOfSimulation.png differ
diff --git a/docs/source/img/user_guide/advanced_flight_simulation/YaxisTypes.png b/docs/source/img/user_guide/advanced_flight_simulation/YaxisTypes.png
new file mode 100644
index 000000000..dcbe11e52
Binary files /dev/null and b/docs/source/img/user_guide/advanced_flight_simulation/YaxisTypes.png differ
diff --git a/docs/source/img/user_guide/advanced_rocket_design/ClusterAft.png b/docs/source/img/user_guide/advanced_rocket_design/ClusterAft.png
new file mode 100644
index 000000000..b30e2de2d
Binary files /dev/null and b/docs/source/img/user_guide/advanced_rocket_design/ClusterAft.png differ
diff --git a/docs/source/img/user_guide/advanced_rocket_design/ClusterTab.png b/docs/source/img/user_guide/advanced_rocket_design/ClusterTab.png
new file mode 100644
index 000000000..e56187a13
Binary files /dev/null and b/docs/source/img/user_guide/advanced_rocket_design/ClusterTab.png differ
diff --git a/docs/source/img/user_guide/advanced_rocket_design/Featherweight.png b/docs/source/img/user_guide/advanced_rocket_design/Featherweight.png
new file mode 100644
index 000000000..6a6973b12
Binary files /dev/null and b/docs/source/img/user_guide/advanced_rocket_design/Featherweight.png differ
diff --git a/docs/source/img/user_guide/advanced_rocket_design/RingTail.png b/docs/source/img/user_guide/advanced_rocket_design/RingTail.png
new file mode 100644
index 000000000..5f6048db6
Binary files /dev/null and b/docs/source/img/user_guide/advanced_rocket_design/RingTail.png differ
diff --git a/docs/source/img/user_guide/advanced_rocket_design/TubeFins.png b/docs/source/img/user_guide/advanced_rocket_design/TubeFins.png
new file mode 100644
index 000000000..e89749e4e
Binary files /dev/null and b/docs/source/img/user_guide/advanced_rocket_design/TubeFins.png differ
diff --git a/docs/source/img/user_guide/advanced_rocket_design/Unicon.png b/docs/source/img/user_guide/advanced_rocket_design/Unicon.png
new file mode 100644
index 000000000..16ac839eb
Binary files /dev/null and b/docs/source/img/user_guide/advanced_rocket_design/Unicon.png differ
diff --git a/docs/source/img/user_guide/advanced_rocket_design/Xkcd_whatif_24_model_suborbital.png b/docs/source/img/user_guide/advanced_rocket_design/Xkcd_whatif_24_model_suborbital.png
new file mode 100644
index 000000000..cfd69d876
Binary files /dev/null and b/docs/source/img/user_guide/advanced_rocket_design/Xkcd_whatif_24_model_suborbital.png differ
diff --git a/docs/source/img/user_guide/basic_flight_simulation/NewConfiguration.png b/docs/source/img/user_guide/basic_flight_simulation/NewConfiguration.png
new file mode 100644
index 000000000..cacaa09c2
Binary files /dev/null and b/docs/source/img/user_guide/basic_flight_simulation/NewConfiguration.png differ
diff --git a/docs/source/img/user_guide/basic_flight_simulation/OptimumDelay.png b/docs/source/img/user_guide/basic_flight_simulation/OptimumDelay.png
new file mode 100644
index 000000000..5c64efdf8
Binary files /dev/null and b/docs/source/img/user_guide/basic_flight_simulation/OptimumDelay.png differ
diff --git a/docs/source/img/user_guide/basic_flight_simulation/RunAll.png b/docs/source/img/user_guide/basic_flight_simulation/RunAll.png
new file mode 100644
index 000000000..305d8e425
Binary files /dev/null and b/docs/source/img/user_guide/basic_flight_simulation/RunAll.png differ
diff --git a/docs/source/img/user_guide/basic_flight_simulation/RunOne.png b/docs/source/img/user_guide/basic_flight_simulation/RunOne.png
new file mode 100644
index 000000000..786ba03ad
Binary files /dev/null and b/docs/source/img/user_guide/basic_flight_simulation/RunOne.png differ
diff --git a/docs/source/img/user_guide/basic_flight_simulation/SelectAnyMotor.png b/docs/source/img/user_guide/basic_flight_simulation/SelectAnyMotor.png
new file mode 100644
index 000000000..20b2c04dd
Binary files /dev/null and b/docs/source/img/user_guide/basic_flight_simulation/SelectAnyMotor.png differ
diff --git a/docs/source/img/user_guide/basic_flight_simulation/ShowDetails.png b/docs/source/img/user_guide/basic_flight_simulation/ShowDetails.png
new file mode 100644
index 000000000..b879e8b19
Binary files /dev/null and b/docs/source/img/user_guide/basic_flight_simulation/ShowDetails.png differ
diff --git a/docs/source/img/user_guide/basic_flight_simulation/SimOverview.png b/docs/source/img/user_guide/basic_flight_simulation/SimOverview.png
new file mode 100644
index 000000000..2e1014a01
Binary files /dev/null and b/docs/source/img/user_guide/basic_flight_simulation/SimOverview.png differ
diff --git a/docs/source/img/user_guide/basic_flight_simulation/SimResults.png b/docs/source/img/user_guide/basic_flight_simulation/SimResults.png
new file mode 100644
index 000000000..ab11f2411
Binary files /dev/null and b/docs/source/img/user_guide/basic_flight_simulation/SimResults.png differ
diff --git a/docs/source/img/user_guide/basic_rocket_design/01.New_Design.png b/docs/source/img/user_guide/basic_rocket_design/01.New_Design.png
new file mode 100644
index 000000000..e61e8d136
Binary files /dev/null and b/docs/source/img/user_guide/basic_rocket_design/01.New_Design.png differ
diff --git a/docs/source/img/user_guide/basic_rocket_design/02.Body_tube_configuration.png b/docs/source/img/user_guide/basic_rocket_design/02.Body_tube_configuration.png
new file mode 100644
index 000000000..8c73376f1
Binary files /dev/null and b/docs/source/img/user_guide/basic_rocket_design/02.Body_tube_configuration.png differ
diff --git a/docs/source/img/user_guide/basic_rocket_design/03.Motor_tube_tab.png b/docs/source/img/user_guide/basic_rocket_design/03.Motor_tube_tab.png
new file mode 100644
index 000000000..4cd8e9bdc
Binary files /dev/null and b/docs/source/img/user_guide/basic_rocket_design/03.Motor_tube_tab.png differ
diff --git a/docs/source/img/user_guide/basic_rocket_design/04.Body_tube_override_tab.png b/docs/source/img/user_guide/basic_rocket_design/04.Body_tube_override_tab.png
new file mode 100644
index 000000000..a251250e2
Binary files /dev/null and b/docs/source/img/user_guide/basic_rocket_design/04.Body_tube_override_tab.png differ
diff --git a/docs/source/img/user_guide/basic_rocket_design/05.Body_tube_appearance_tab.png b/docs/source/img/user_guide/basic_rocket_design/05.Body_tube_appearance_tab.png
new file mode 100644
index 000000000..aff5206db
Binary files /dev/null and b/docs/source/img/user_guide/basic_rocket_design/05.Body_tube_appearance_tab.png differ
diff --git a/docs/source/img/user_guide/basic_rocket_design/06.Body_tube_comment_tab.png b/docs/source/img/user_guide/basic_rocket_design/06.Body_tube_comment_tab.png
new file mode 100644
index 000000000..a0032e9a6
Binary files /dev/null and b/docs/source/img/user_guide/basic_rocket_design/06.Body_tube_comment_tab.png differ
diff --git a/docs/source/img/user_guide/basic_rocket_design/07.Component_menu.png b/docs/source/img/user_guide/basic_rocket_design/07.Component_menu.png
new file mode 100644
index 000000000..4521396ec
Binary files /dev/null and b/docs/source/img/user_guide/basic_rocket_design/07.Component_menu.png differ
diff --git a/docs/source/img/user_guide/basic_rocket_design/08.Assembly_Components_Icons.png b/docs/source/img/user_guide/basic_rocket_design/08.Assembly_Components_Icons.png
new file mode 100644
index 000000000..201f0f995
Binary files /dev/null and b/docs/source/img/user_guide/basic_rocket_design/08.Assembly_Components_Icons.png differ
diff --git a/docs/source/img/user_guide/basic_rocket_design/AddedMass.png b/docs/source/img/user_guide/basic_rocket_design/AddedMass.png
new file mode 100644
index 000000000..652e4ba0a
Binary files /dev/null and b/docs/source/img/user_guide/basic_rocket_design/AddedMass.png differ
diff --git a/docs/source/img/user_guide/basic_rocket_design/After_complete_design.png b/docs/source/img/user_guide/basic_rocket_design/After_complete_design.png
new file mode 100644
index 000000000..619b1c027
Binary files /dev/null and b/docs/source/img/user_guide/basic_rocket_design/After_complete_design.png differ
diff --git a/docs/source/img/user_guide/basic_rocket_design/BodyComplete.png b/docs/source/img/user_guide/basic_rocket_design/BodyComplete.png
new file mode 100644
index 000000000..c12608f51
Binary files /dev/null and b/docs/source/img/user_guide/basic_rocket_design/BodyComplete.png differ
diff --git a/docs/source/img/user_guide/basic_rocket_design/CenteringRings.png b/docs/source/img/user_guide/basic_rocket_design/CenteringRings.png
new file mode 100644
index 000000000..3cf6c518d
Binary files /dev/null and b/docs/source/img/user_guide/basic_rocket_design/CenteringRings.png differ
diff --git a/docs/source/img/user_guide/basic_rocket_design/ComponentBodyAndFins.png b/docs/source/img/user_guide/basic_rocket_design/ComponentBodyAndFins.png
new file mode 100644
index 000000000..11152fd63
Binary files /dev/null and b/docs/source/img/user_guide/basic_rocket_design/ComponentBodyAndFins.png differ
diff --git a/docs/source/img/user_guide/basic_rocket_design/ComponentInner.png b/docs/source/img/user_guide/basic_rocket_design/ComponentInner.png
new file mode 100644
index 000000000..1c2e5380b
Binary files /dev/null and b/docs/source/img/user_guide/basic_rocket_design/ComponentInner.png differ
diff --git a/docs/source/img/user_guide/basic_rocket_design/ComponentMasses.png b/docs/source/img/user_guide/basic_rocket_design/ComponentMasses.png
new file mode 100644
index 000000000..fa0aecc2a
Binary files /dev/null and b/docs/source/img/user_guide/basic_rocket_design/ComponentMasses.png differ
diff --git a/docs/source/img/user_guide/basic_rocket_design/ConfigNose.png b/docs/source/img/user_guide/basic_rocket_design/ConfigNose.png
new file mode 100644
index 000000000..adedc346e
Binary files /dev/null and b/docs/source/img/user_guide/basic_rocket_design/ConfigNose.png differ
diff --git a/docs/source/img/user_guide/basic_rocket_design/EngineBlockCompleted.png b/docs/source/img/user_guide/basic_rocket_design/EngineBlockCompleted.png
new file mode 100644
index 000000000..96f842264
Binary files /dev/null and b/docs/source/img/user_guide/basic_rocket_design/EngineBlockCompleted.png differ
diff --git a/docs/source/img/user_guide/basic_rocket_design/FinsComplete.png b/docs/source/img/user_guide/basic_rocket_design/FinsComplete.png
new file mode 100644
index 000000000..ab94cba40
Binary files /dev/null and b/docs/source/img/user_guide/basic_rocket_design/FinsComplete.png differ
diff --git a/docs/source/img/user_guide/basic_rocket_design/LaunchLugAdded.png b/docs/source/img/user_guide/basic_rocket_design/LaunchLugAdded.png
new file mode 100644
index 000000000..966f8f7d6
Binary files /dev/null and b/docs/source/img/user_guide/basic_rocket_design/LaunchLugAdded.png differ
diff --git a/docs/source/img/user_guide/basic_rocket_design/MotorConfigs.png b/docs/source/img/user_guide/basic_rocket_design/MotorConfigs.png
new file mode 100644
index 000000000..5bf13f4c9
Binary files /dev/null and b/docs/source/img/user_guide/basic_rocket_design/MotorConfigs.png differ
diff --git a/docs/source/img/user_guide/basic_rocket_design/MotorSelection.png b/docs/source/img/user_guide/basic_rocket_design/MotorSelection.png
new file mode 100644
index 000000000..ec2a842aa
Binary files /dev/null and b/docs/source/img/user_guide/basic_rocket_design/MotorSelection.png differ
diff --git a/docs/source/img/user_guide/basic_rocket_design/NoseComplete.png b/docs/source/img/user_guide/basic_rocket_design/NoseComplete.png
new file mode 100644
index 000000000..18e707579
Binary files /dev/null and b/docs/source/img/user_guide/basic_rocket_design/NoseComplete.png differ
diff --git a/docs/source/img/user_guide/basic_rocket_design/OpenExample.png b/docs/source/img/user_guide/basic_rocket_design/OpenExample.png
new file mode 100644
index 000000000..04a3008c4
Binary files /dev/null and b/docs/source/img/user_guide/basic_rocket_design/OpenExample.png differ
diff --git a/docs/source/img/user_guide/basic_rocket_design/ParachuteAdded.png b/docs/source/img/user_guide/basic_rocket_design/ParachuteAdded.png
new file mode 100644
index 000000000..884a1eb64
Binary files /dev/null and b/docs/source/img/user_guide/basic_rocket_design/ParachuteAdded.png differ
diff --git a/docs/source/img/user_guide/basic_rocket_design/ShockCordComplete.png b/docs/source/img/user_guide/basic_rocket_design/ShockCordComplete.png
new file mode 100644
index 000000000..90dcc3e4d
Binary files /dev/null and b/docs/source/img/user_guide/basic_rocket_design/ShockCordComplete.png differ
diff --git a/docs/source/img/user_guide/basic_rocket_design/Structure.png b/docs/source/img/user_guide/basic_rocket_design/Structure.png
new file mode 100644
index 000000000..4036afce4
Binary files /dev/null and b/docs/source/img/user_guide/basic_rocket_design/Structure.png differ
diff --git a/docs/source/img/user_guide/basic_rocket_design/body_tube_config.png b/docs/source/img/user_guide/basic_rocket_design/body_tube_config.png
new file mode 100644
index 000000000..8c73376f1
Binary files /dev/null and b/docs/source/img/user_guide/basic_rocket_design/body_tube_config.png differ
diff --git a/docs/source/img/user_guide/basic_rocket_design/main_window.png b/docs/source/img/user_guide/basic_rocket_design/main_window.png
new file mode 100644
index 000000000..e61e8d136
Binary files /dev/null and b/docs/source/img/user_guide/basic_rocket_design/main_window.png differ
diff --git a/docs/source/img/user_guide/custom_expressions/Custom_expressions.png b/docs/source/img/user_guide/custom_expressions/Custom_expressions.png
new file mode 100644
index 000000000..8c4955a37
Binary files /dev/null and b/docs/source/img/user_guide/custom_expressions/Custom_expressions.png differ
diff --git a/docs/source/img/user_guide/custom_expressions/Expression_builder.png b/docs/source/img/user_guide/custom_expressions/Expression_builder.png
new file mode 100644
index 000000000..052762ea6
Binary files /dev/null and b/docs/source/img/user_guide/custom_expressions/Expression_builder.png differ
diff --git a/docs/source/img/user_guide/simulation_extensions/Air-start-configuration.png b/docs/source/img/user_guide/simulation_extensions/Air-start-configuration.png
new file mode 100644
index 000000000..35ae30a66
Binary files /dev/null and b/docs/source/img/user_guide/simulation_extensions/Air-start-configuration.png differ
diff --git a/docs/source/img/user_guide/simulation_extensions/Air-start-pane.png b/docs/source/img/user_guide/simulation_extensions/Air-start-pane.png
new file mode 100644
index 000000000..21a163c9d
Binary files /dev/null and b/docs/source/img/user_guide/simulation_extensions/Air-start-pane.png differ
diff --git a/docs/source/img/user_guide/simulation_extensions/Example_Configurator.png b/docs/source/img/user_guide/simulation_extensions/Example_Configurator.png
new file mode 100644
index 000000000..96623dbae
Binary files /dev/null and b/docs/source/img/user_guide/simulation_extensions/Example_Configurator.png differ
diff --git a/docs/source/img/user_guide/simulation_extensions/Extension-menu.png b/docs/source/img/user_guide/simulation_extensions/Extension-menu.png
new file mode 100644
index 000000000..7a884da94
Binary files /dev/null and b/docs/source/img/user_guide/simulation_extensions/Extension-menu.png differ
diff --git a/docs/source/index.rst b/docs/source/index.rst
new file mode 100644
index 000000000..402fe17dd
--- /dev/null
+++ b/docs/source/index.rst
@@ -0,0 +1,63 @@
+Welcome to OpenRocket's documentation!
+======================================
+
+**OpenRocket** is a free, fully featured model rocket simulator that allows you to design and simulate your rockets before building and flying them.
+
+.. note::
+
+ This documentation is under active development.
+
+.. toctree::
+ :maxdepth: 1
+ :caption: Introduction
+
+ introduction/overview
+ introduction/features
+ introduction/contribute
+ introduction/FAQ
+
+.. toctree::
+ :maxdepth: 1
+ :caption: Setup
+
+ setup/installation
+ setup/getting_started
+ setup/preferences
+
+.. toctree::
+ :maxdepth: 1
+ :caption: User Guide
+
+ user_guide/basic_rocket_design
+ user_guide/basic_flight_simulation
+ user_guide/advanced_rocket_design
+ user_guide/advanced_flight_simulation
+ user_guide/overrides_and_surface_finish
+ user_guide/rocket_analysis
+ user_guide/custom_expressions
+ user_guide/simulation_extensions
+ user_guide/thrust_curves
+
+.. toctree::
+ :maxdepth: 1
+ :caption: Developer Guide
+
+ dev_guide/development_overview
+ dev_guide/development_setup
+ /dev_guide/architecture
+ /dev_guide/codebase_walkthrough
+ /dev_guide/development_guidelines
+ /dev_guide/testing_and_debugging
+ /dev_guide/api_documentation
+ /dev_guide/building_releasing
+ /dev_guide/contributing_to_translations
+ /dev_guide/contributing_to_the_docs
+ /dev_guide/contributing_to_the_website
+ /dev_guide/faq_troubleshooting
+
+Indices and tables
+==================
+
+* :ref:`genindex`
+* :ref:`modindex`
+* :ref:`search`
diff --git a/docs/source/introduction/FAQ.rst b/docs/source/introduction/FAQ.rst
new file mode 100644
index 000000000..a665dd284
--- /dev/null
+++ b/docs/source/introduction/FAQ.rst
@@ -0,0 +1,3 @@
+**************************
+Frequently Asked Questions
+**************************
diff --git a/docs/source/introduction/contribute.rst b/docs/source/introduction/contribute.rst
new file mode 100644
index 000000000..9f62616e1
--- /dev/null
+++ b/docs/source/introduction/contribute.rst
@@ -0,0 +1,5 @@
+**********
+Contribute
+**********
+
+
diff --git a/docs/source/introduction/features.rst b/docs/source/introduction/features.rst
new file mode 100644
index 000000000..6ec776206
--- /dev/null
+++ b/docs/source/introduction/features.rst
@@ -0,0 +1,577 @@
+********
+Features
+********
+
+This page lists the current features of OpenRocket and compares them to those of RockSim.
+
+.. contents:: Table of Contents
+ :depth: 2
+ :local:
+ :backlinks: none
+
+----
+
+Current features (as of OpenRocket 23.09):
+==========================================
+
+General
+-------
+
+* Fully cross-platform, written in Java
+
+* `Fully documented simulation methods `__
+
+* Open Source (see our `GitHub repository `), source code available under the `GNU GPL `__
+
+* Export OpenRocket design file to other simulation programs (RockSim, RASAero II)
+
+* Export component(s) to OBJ file for 3D printing
+
+* Extensible with custom simulation listeners, expressions, and plugins
+
+User Interface
+--------------
+
+* **Intuitive user interface**
+
+* **Real-time view of CG and CP** position
+
+* **Real-time flight altitude, velocity and acceleration** information from a continuous simulation performed in the background
+
+* Zoomable schematic view of rocket from the side or rear, with rotation around the center axis
+
+Design
+------
+
+* A multitude of available components to choose from
+
+* **Trapezoidal, elliptical, free-form and tube fins** supported
+
+* Support for **canted** fins (roll stabilization)
+
+* **Staging** and **clustering** support
+
+* **Pods** support
+
+* Automatic calculation of component mass and CG based on shape and density
+
+* Ability to **override mass, CG and CD** of components or stages separately
+
+Simulation and Analysis
+-----------------------
+
+* Full **six degree of freedom** simulation
+
+* Rocket stability computed using **extended Barrowman** method
+
+* **Automatic design optimization** β *you can optimize any number of rocket parameters for flight altitude, maximum velocity or a number of other values*
+
+* Realistic wind modeling
+
+* Analysis of the **effect of separate components** on the stability, drag and roll characteristics of the rocket
+
+* **Fully configurable plotting**, with various preset configurations
+
+* Simulation data can be **exported to CSV** files for further analysis
+
+* **Simulation listeners** allowing custom-made code to interact with the rocket during flight simulation
+
+.. raw:: html
+
+
+
+Planned Future Features
+=======================
+
+.. note::
+ OpenRocket is under constant work in the free time of the developers. If you want to **help improve it**, please refer to the :doc:`Contribute page `.
+
+Below are a few major features that are under consideration:
+
+* Better support for transonic and supersonic simulations (:doc:`help needed! `)
+
+* Monte Carlo simulation for dispersion analysis
+
+* Simulate fin flutter
+
+* Customized support for hybrid rocket motors and water rockets
+
+* Importing and plotting actual flight data from altimeters
+
+* Rocket flight animation
+
+* A βwizardβ for creating new rocket designs
+
+* More advanced rocket optimization methods
+
+* Import CD and CP data from other programs (e.g. RASAero)
+
+For a full overview of the planned features, please refer to the `GitHub issue tracker `__.
+
+.. raw:: html
+
+
+
+Comparison to RockSim
+=====================
+
+`RockSim `__ is a very powerful, commercial rocket design and simulation program.
+It is more advanced than OpenRocket in some regards, but its price tag of $124 makes it inaccessible to many hobbyists.
+OpenRocket is free, and the source code is available for modification by anyone.
+To help you decide which program is right for you, we have compiled a comparison of the features of OpenRocket 23.09 and RockSim 10 below.
+
+While hosted on the OpenRocket documentation, we have attempted to make this an objective comparison between the functionality
+of the two software products. If you think something is wrong or omitted, please `contact us `__.
+
+General
+-------
+
+.. list-table:: OpenRocket vs. RockSim: General
+ :widths: 20 20 20
+ :header-rows: 1
+ :class: or-table
+
+ * -
+ - OpenRocket
+ - RockSim
+ * - License
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Open Source (GPLv3)
+
+ - .. cssclass:: or-table-cell, or-table-poor
+
+ | Proprietary
+
+ * - Price
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Free
+
+ - .. cssclass:: or-table-cell, or-table-poor
+
+ | $124
+
+ * - Supported platforms
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Windows, Mac, Linux
+
+ - .. cssclass:: or-table-cell, or-table-okay
+
+ | Windows, Mac
+
+ * - Supported file formats
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | ORK, RKT, CDX1
+
+ - .. cssclass:: or-table-cell, or-table-poor
+
+ | RKT
+
+ * - Anti-piracy copy protection
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | None
+
+ - .. cssclass:: or-table-cell, or-table-okay
+
+ | `PACE `__
+
+UI Features
+-----------
+
+.. list-table:: OpenRocket vs. RockSim: UI Features
+ :widths: 20 20 20
+ :header-rows: 1
+ :class: or-table
+
+ * -
+ - OpenRocket
+ - RockSim
+ * - Side/back view
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ * - 3D view
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ * - Photorealistic 3D rendering
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ - .. cssclass:: or-table-cell, or-table-bad
+
+ | No
+
+ * - Export 3D design
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes (OBJ)
+
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes (3DS)
+
+ * - Design view rotation
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Any angle
+
+ - .. cssclass:: or-table-cell, or-table-poor
+
+ | Side and top only
+
+ * - Live CG/CP view
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ * - Realtime simulation
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ - .. cssclass:: or-table-cell, or-table-bad
+
+ | No
+
+Design Features
+---------------
+
+.. list-table:: OpenRocket vs. RockSim: Design Features
+ :widths: 20 20 20
+ :header-rows: 1
+ :class: or-table
+
+ * -
+ - OpenRocket
+ - RockSim
+ * - Basic components
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ * - Freeform fins
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ * - Asymmetric fin configurations
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ * - Tube fins
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ * - Ring-tail fins
+ - .. cssclass:: or-table-cell, or-table-bad
+
+ | No
+
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ * - Fins attached to fins
+ - .. cssclass:: or-table-cell, or-table-bad
+
+ | No
+
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ * - External pods
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ * - Canted fins / roll stabilization
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ - .. cssclass:: or-table-cell, or-table-bad
+
+ | No
+
+ * - Standard component libraries
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ * - Decals
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ * - Clustering support
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes, modifiable
+
+ - .. cssclass:: or-table-cell, or-table-okay
+
+ | Yes, one-time wizard only
+
+ * - Staging support
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes, unlimited
+
+ - .. cssclass:: or-table-cell, or-table-okay
+
+ | Yes, 3 stages
+
+Simulation Features
+-------------------
+
+.. list-table:: OpenRocket vs. RockSim: Simulation Features
+ :widths: 20 20 20
+ :header-rows: 1
+ :class: or-table
+
+ * -
+ - OpenRocket
+ - RockSim
+ * - Degrees of freedom
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | 6DOF
+
+ - .. cssclass:: or-table-cell, or-table-okay
+
+ | 3DOF
+
+ * - Geodetic calculation (Earth coordinates, coriolis effect)
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ - .. cssclass:: or-table-cell, or-table-bad
+
+ | No
+
+ * - Simulations extensible by own code
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ - .. cssclass:: or-table-cell, or-table-bad
+
+ | No
+
+ * - Simulation animation
+ - .. cssclass:: or-table-cell, or-table-bad
+
+ | No
+
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ * - Plotting any simulated variables
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ * - Exporting simulated data
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ * - Computing custom variables
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ - .. cssclass:: or-table-cell, or-table-bad
+
+ | No
+
+Optimization and Analysis
+-------------------------
+
+.. list-table:: OpenRocket vs. RockSim: Optimization and Analysis
+ :widths: 20 20 20
+ :header-rows: 1
+ :class: or-table
+
+ * -
+ - OpenRocket
+ - RockSim
+ * - General design optimization
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ - .. cssclass:: or-table-cell, or-table-bad
+
+ | No
+
+ * - Mass optimization
+ - .. cssclass:: or-table-cell, or-table-okay
+
+ | Yes (using general optimizer)
+
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ * - Stability analysis
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes, per component
+
+ - .. cssclass:: or-table-cell, or-table-okay
+
+ | Yes, per stage
+
+ * - Drag analysis
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes, per component
+
+ - .. cssclass:: or-table-cell, or-table-poor
+
+ | Yes, per stage
+
+ * - Roll analysis
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ - .. cssclass:: or-table-cell, or-table-bad
+
+ | No
+
+Printing
+--------
+
+.. list-table:: OpenRocket vs. RockSim: Printing
+ :widths: 20 20 20
+ :header-rows: 1
+ :class: or-table
+
+ * -
+ - OpenRocket
+ - RockSim
+ * - Schematic view
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ * - Stability information
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ * - Simulation results
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ * - Parts list
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ * - Component templates
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Nose cone, fin sets, centering rings
+
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Nose cone, fin sets, centering rings
+
+ * - Fin placement guide
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ - .. cssclass:: or-table-cell, or-table-bad
+
+ | No
+
+ * - Export to PDF
+ - .. cssclass:: or-table-cell, or-table-good
+
+ | Yes
+
+ - .. cssclass:: or-table-cell, or-table-bad
+
+ | No
diff --git a/docs/source/introduction/overview.rst b/docs/source/introduction/overview.rst
new file mode 100644
index 000000000..cd89a7b23
--- /dev/null
+++ b/docs/source/introduction/overview.rst
@@ -0,0 +1,54 @@
+********
+Overview
+********
+
+What is OpenRocket?
+===================
+
+.. figure:: /img/openrocket_logo_256.png
+ :figclass: or-figclass
+ :figwidth: 25 %
+ :align: right
+
+ The OpenRocket Logo
+
+Welcome! OpenRocket is an open-source model rocket simulation software application. It was originally developed by
+Sampo Niskanen in 2009 as part of his master thesis at what was then `Helsinki University of Technology `__.
+If you want to have a look at his thesis you can download it from `OpenRocket's technical documentation page `__.
+Written entirely in Java, OpenRocket is fully cross-platform. To install the software, please refer to the :doc:`Installation Instructions `
+
+.. rst-class:: clear-both
+
+OpenRocket is intended to be used by rocketeers who want to test the performance of a model rocket before actually
+building and flying it. The software accurately computes the aerodynamic properties of rockets and simulates their flight,
+returning a wide range of technical results.
+
+The program can be roughly divided into two sections:
+
+* **Rocket design**: In this phase, you can design the model rocket you intend to build, choosing from a wide range of \
+ **body components**, **trapezoidal**, **elliptical**, and **free-form fins**, **inner components**, and **mass objects**. \
+ During this phase, you will see a 2D representation of the rocket you are building and various technical information, \
+ *such as size, mass, apogee, max. velocity, max. acceleration, stability, center of gravity (CG), and center of pressure \
+ (CP)* about your rocket. This allows you to have a good idea of its performance even before running any simulation.
+
+* **Flight simulation**: In this phase, you can run one or more simulations of your rocket's flight, choosing from one \
+ or more **motor configurations**. Each simulation, calculated using the Runge-Kutta 4 simulator, returns a wide range \
+ of data about the rocket's flight. Unfortunately, for the moment, a graphical visualization of the rocket's flight is \
+ not available (`help needed `__).
+
+
+For more information about OpenRocket's features and a few screenshots you can have a look `here `__.
+
+How this Documentation is Organized
+===================================
+
+.. attention::
+
+ This documentation is still a work in progress, so **some sections may be incomplete**. If you want to help us improve it, please refer to the :doc:`Contribute section `.
+
+This documentation is organized in 4 main sections:
+
+#. **Introduction**: this section contains general information about OpenRocket, such as its history, its features, and how to contribute to the project.
+#. **Setup**: this section contains information about how to install and run OpenRocket on your computer.
+#. **User Guide**: this section contains information about how to use OpenRocket to design and simulate your model rockets.
+#. **Developer Guide**: this section contains information about how to contribute to the development of OpenRocket.
diff --git a/docs/source/setup/getting_started.rst b/docs/source/setup/getting_started.rst
new file mode 100644
index 000000000..cf0def8c1
--- /dev/null
+++ b/docs/source/setup/getting_started.rst
@@ -0,0 +1,800 @@
+***************
+Getting Started
+***************
+
+In this section we have a look at how OpenRocket is organized, by analyzing in detail the structure of the **user interface**.
+We will also briefly mention the **Example projects** that are accessible from the *File* menu. After reading this section
+you will have a thorough understanding of how OpenRocket is structured, and will be ready to start designing a rocket of
+your own. If you already know how this program is organized, feel free to jump to :doc:`Basic Rocket Design `,
+the next section.
+
+.. contents:: Table of Contents
+ :depth: 2
+ :local:
+ :backlinks: none
+
+----
+
+.. _the_user_interface:
+
+The User interface
+==================
+
+The OpenRocket user interface is divided horizontally into four sections:
+
+- :guilabel:`Main Menu` (green)
+- :guilabel:`Task Tabs` (black)
+- :guilabel:`Rocket Design`, :guilabel:`Motors & Configuration`, and :guilabel:`Flight Simulation Pane` (red)
+- :guilabel:`Rocket Views Pane` (blue)
+
+.. figure:: /img/setup/getting_started/2023.01.Guide.User_Interface.png
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+ UI of OpenRocket divided into four
+
+Main Menu
+---------
+
+The **Main Menu**, sometimes referred to as the **Menu Bar** or **Application Ribbon**, is located at the top of the OpenRocket
+window. On macOS, the main menu is located at the top of the screen, embedded in the native macOS menu bar. We will run through
+each of the menu options in the main menu.
+
+File
+^^^^
+
+.. figure:: /img/setup/getting_started/02.04.01.File_Menu.png
+ :width: 35%
+ :align: center
+ :figclass: or-image-border
+
+ The OpenRocket File Menu
+
+The **File Menu** is divided into five divisions by function:
+
+1. **File opening options**:
+ - :guilabel:`New`: Start a new project without closing the current one.
+ - :guilabel:`Open...`: Open a previously saved `*.ork` file.
+ - :guilabel:`Open Recent`: Open a recently opened file.
+ - :guilabel:`Open Example`: Select and open an example project included with OpenRocket.
+2. **File saving options**:
+ - :guilabel:`Save`: Save changes to the current project.
+ - :guilabel:`Save as...`: Save the project with a different filename or location.
+3. **Import and export options**:
+ - :guilabel:`Export as`: Export the project to a different file format, such as Rocksim 10 (`.rkt`).
+ - :guilabel:`Save decal image`: Save a decal image file used in the project.
+ - :guilabel:`Print design info...`: Print or export technical details of the rocket's components, fin set templates, or the rocket design to a `*.pdf`.
+4. **Closing**:
+ - :guilabel:`Close design`: Exit the current project (prompts to save unsaved changes).
+5. **Quitting**:
+ - :guilabel:`Quit`: Exit OpenRocket, saving each open project if necessary.
+
+Edit
+^^^^
+
+.. figure:: /img/setup/getting_started/OR.Guide.User_Interface.04.02.File.png
+ :width: 35%
+ :align: center
+ :figclass: or-image-border
+
+ The OpenRocket Edit Menu
+
+The **Edit Menu** is divided into three types of operations:
+
+1. :guilabel:`Undo` and :guilabel:`Redo` an action
+2. :guilabel:`Cut`, :guilabel:`Copy`, :guilabel:`Paste`, and :guilabel:`Delete` objects
+3. :guilabel:`Scale`: scale components or the entire rocket.button
+4. :guilabel:`Preferences`: access OpenRocket system preferences
+
+Tools
+^^^^^
+
+.. figure:: /img/setup/getting_started/OR.Guide.User_Interface.04.03.File.png
+ :width: 35%
+ :align: center
+ :figclass: or-image-border
+
+ The OpenRocket Tools Menu
+
+The **Tools Menu** provides the following design tools:
+
+- :guilabel:`Component Analysis`: Analyze the (aerodynamic) effect of specific components
+- :guilabel:`Rocket optimization`: Optimize particular rocket characteristics
+- :guilabel:`Custom expressions`: Create custom expressions for specialized analysis
+- :guilabel:`Photo Studio`: Display the rocket in 3D with a variety of backgrounds and effects in the photo studio
+
+Help
+^^^^
+
+.. figure:: /img/setup/getting_started/OR.Guide.User_Interface.04.04.File.png
+ :width: 25%
+ :align: center
+ :figclass: or-image-border
+
+ The OpenRocket Help Menu
+
+The **Help Menu** is divided into three sections:
+
+1. :guilabel:`Guided tours`: demonstrating the use of OpenRocket
+2. :guilabel:`Bug reporting` and :guilabel:`Debug log`: tools to assist users in providing feedback to the developers
+3. :guilabel:`License` and :guilabel:`About`: other general information about OpenRocket
+
+Task Tabs
+---------
+
+The windows shown below utilize the *A simple model rocket* example included with OpenRocket.
+
+Rocket Design
+^^^^^^^^^^^^^
+
+.. figure:: /img/setup/getting_started/01.02.Rocket_Design.Tab.png
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+The **Rocket Design** tab is divided into three sections:
+
+- *(Left)* The :guilabel:`Component tree`: A tree view of the components that make up the rocket.
+- *(Middle)* :guilabel:`Component action buttons`: Buttons to for instance edit, move, or delete the currently selected components.
+- *(Right)* :guilabel:`Component addition buttons`: Buttons to add new components to the rocket.
+
+The components available in OpenRocket are divided into four classes based upon component function:
+
+1. **Assembly Components**
+2. **Body Components and Fin Sets** (external components)
+3. **Internal Components**
+4. **Mass Components** (which include electronics and recovery components)
+
+Components are "greyed out" until it would be appropriate to add that component type to the currently selected component in
+the component tree. For example, if you selected a fin set component in the component tree, then the nose cone component button
+will be greyed out, because you can not add a nose cone to a fin set. As components are added, you will
+see the component tree (on the left side of the window) grow with each component added.
+
+.. todo::
+ For a detailed description of each component, see \:ref\:\`Component Details \`.
+
+Motors & Configuration
+^^^^^^^^^^^^^^^^^^^^^^
+
+.. figure:: /img/setup/getting_started/02.02.Motor-Configuration.Tab.png
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+The **Motors & Configurations** tab is where you select motors, recovery events, and stage timing. Motor configuration options include:
+
+- :guilabel:`New Configuration`: Create a new flight configuration
+- :guilabel:`Rename Configuration`: Rename the currently selected configuration
+- :guilabel:`Remove Configuration`: Remove the currently selected configuration
+- :guilabel:`Copy Configuration`: Copy the currently selected configuration
+
+With a specific configuration selected, you may:
+
+- :guilabel:`Select motor`: Choose a motor from the motor database for the currently selected motor mount.
+- :guilabel:`Remove motor`: Remove the currently selected motor from the motor mount.
+- :guilabel:`Select ignition`: Set the motor ignition timing for the current motor.
+- :guilabel:`Reset ignition`: Reset the motor ignition timing for the current motor to the default values.
+
+.. todo::
+ For more motors and configuration utilization details, see \:ref\:\`Motors & Configuration Details \`.
+
+Flight Simulations
+^^^^^^^^^^^^^^^^^^
+
+.. figure:: /img/setup/getting_started/03.02.Flight_simulations.Tab.png
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+The **Flight Simulations** tab is where you manage and run flight simulations and flight simulation plots. From here,
+you can add new simulations, or edit, run, or delete existing simulations. Select a single simulation, and you can
+even plot and export the simulation results.
+
+.. todo::
+ For more details on how to use these functions, see \:ref\:\`Flight Simulations Details \`.
+
+Rocket Views
+------------
+
+The windows shown below utilize the *A simple model rocket* example included with OpenRocket.
+
+Top/Side/Back View
+^^^^^^^^^^^^^^^^^^
+
+The **Top View**, **Side View**, and **Back View** are line drawings, similar to a blueprint that shows all of the rocket
+components and the placement of those components. Almost all of your design work will take place in the top, side, and back views.
+
+.. figure:: /img/setup/getting_started/Getting_Started.Rocket_Views.Top_View.jpg
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+ Top view.
+
+.. figure:: /img/setup/getting_started/Getting_Started.Rocket_Views.Side_View.jpg
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+ Side view.
+
+.. figure:: /img/setup/getting_started/Getting_Started.Rocket_Views.Back_View.jpg
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+ Back view.
+
+3D Figure/3D Unfinished
+^^^^^^^^^^^^^^^^^^^^^^^
+
+The **3D Figure** and **3D Unfinished** view allow you to look through the rocket's exterior to view many of the interior
+components. These views can help you more clearly see the relationship between the placement of different components
+inside the airframe.
+
+.. figure:: /img/setup/getting_started/Getting_Started.Rocket_Views.3D_Figure.jpg
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+ 3D Figure view.
+
+.. figure:: /img/setup/getting_started/Getting_Started.Rocket_Views.3D_Unfinished.jpg
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+ 3D Unfinished view.
+
+3D Finished
+^^^^^^^^^^^
+
+The **3D Finished** view shows you what the rocket will look like when finished. OpenRocket allows you to select
+component colors, inside and outside of outer tubes, right side or left side of fins, and even creating transparent
+components, all with or without decals (transparent or opaque).
+
+.. figure:: /img/setup/getting_started/Getting_Started.Rocket_Views.3D_Finished.jpg
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+ 3D Finished view.
+
+Become Familiar with OpenRocket
+-------------------------------
+
+For new users of OpenRocket, before attempting to create your own custom rocket design, it is strongly recommended that
+you become familiar with the OpenRocket user interface and generally accepted rocket design principles by opening and
+looking at how an example is assembled, making changes to the example, and understanding how to simulate flights.
+
+The example designs are found here:
+
+.. figure:: /img/setup/getting_started/2023.01.Open_Example.png
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+ Where to find the example design files.
+
+OpenRocket currently includes the following example designs:
+
+- "Standard" designs:
+ - **A simple model rocket**: A basic rocket design. This is a good starting point for new users. The design contains all
+ the elements of a standard rocket design, including recovery and experimentation with different motors.
+ - **Two-stage rocket**: A two-stage rocket design
+ - **Three-stage rocket**: A three-stage rocket design
+ - **TARC payload rocket**: Demonstrates payload and booster sections with individual recovery systems deployed by motor ejection.
+ TARC = Team America Rocketry Challenge
+ - **3D Printable Nose Cone and Fins**: A rocket design to test exporting the nose cone and fins to an OBJ file for 3D printing.
+- "Advanced" designs
+ - **Airstart timing**: Demonstrates the effect of different airstart timings on overall altitude.
+ - **Base drag hack (short-wide)**: Demonstrates the application of the "base drag" hack to adjust the center of pressure
+ for a short-wide rocket, one with a length to diameter ratio of less than 10:1.
+ - **Chute release**: A simple model rocket example adapted to use an electronic chute release.
+ - **Dual parachute deployment**: A standard fiberglass zipperless dual deploy rocket.
+ - **Clustered motors**: A rocket design with clustered motors.
+ - **Parallel booster staging**: Demonstrates parallel booster staging.
+ - **Pods--airframes and winglets**: Demonstrates two uses of pods, both for the traditional "wing pods", and also
+ using a phantom body tube to implement "fins on fins" for the horizontal stabilizer.
+ - **Pods--powered with recovery deployment**: Demonstrates the use of pods for powered recovery deployment.
+- Designs using advanced simulations, such as extensions and scripting
+ - **Simulation extensions**: Demonstrates active roll control and air-start using simulation extensions. The main fins are slightly misaligned, which causes roll to occur.
+ - **Simulation scripting**: Demonstrates active roll control and air-start using simulation extension written in JavaScript.
+
+----
+
+The Basics of Using OpenRocket
+==============================
+
+Rocket Configuration
+--------------------
+
+To build your first rocket, start OpenRocket, then double click the **Rocket** label at the top of the component tree to
+open the **Rocket configuration** pop-up window. OpenRocket allows you to name your design, identify the designer, make
+comments, and create a revision history.
+
+The default design name is **Rocket**, but that name can be changed, and a design name change also changes the name of
+the rocket shown on the component tree. So, rename your design and enter the designer, comments, and revision history
+information you desire.
+
+1. Double-Click **Rocket** in the component tree
+
+ .. figure:: /img/setup/getting_started/04.01.02.Rocket_Configuration.png
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+ Open the rocket configuration window.
+
+2. Rename **Rocket**
+
+ .. figure:: /img/setup/getting_started/04.01.05.Rocket_Configuration.Rename.png
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+ Change the name of your rocket.
+
+Adding External Components
+--------------------------
+
+Now it's time to start putting together components to build the rocket design. The generally accepted way of putting
+together a rocket design is from top to bottom, from nose to tail. So, we'll add the nose cone first.
+
+Adding a Nose Cone
+^^^^^^^^^^^^^^^^^^^^^
+
+With the **Stage** selected, click on the :guilabel:`Nose Cone` button and the **Nose Cone configuration** window will pop up.
+Then, click the :guilabel:`Parts Library` button on the top-right of the configuration window. This will open a new window,
+the **Component preset window**. From here, you can select a nose cone from a list of built-in nose cone presets from
+various manufacturers. Select the nose cone shown below, and click the :guilabel:`Close` button to close the
+**Nose Cone configuration** window.
+
+.. figure:: /img/setup/getting_started/11.01.03.Rocket_Build.Nose_Cone.png
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+ Adding a nose cone to the rocket.
+
+.. figure:: /img/setup/getting_started/Getting_Started.Components.Nose_Cone.Parts_Library.Highlighted.jpg
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+ Click the :guilabel:`Parts Library` button (top-right in the nose cone configuration window) to select a nose cone from the parts database.
+
+.. figure:: /img/setup/getting_started/Getting_Started.Components.Nose_Cone.jpg
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+ The nose cone has been added to the rocket.
+
+Congratulations, you've just added your first component! π
+
+Adding a Payload Bay
+^^^^^^^^^^^^^^^^^^^^
+
+Next, we will add a payload bay after the nose cone. To do this, with either the **Stage** or **Nose Cone** selected,
+click on the :guilabel:`Body Tube` button and the **Body Tube configuration** window will pop up.
+Like with the nose cone, click :guilabel:`Parts Library` to open the **Component preset window**.
+Select the body tube shown below, and click the :guilabel:`Close` button to close the **Body Tube configuration** window.
+
+.. figure:: /img/setup/getting_started/11.02.01.Rocket_Build.Payload_Bay.png
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+ Adding a payload bay to the rocket.
+
+.. figure:: /img/setup/getting_started/11.02.05.Rocket_Build.Payload_Bay.png
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+ Selecting a body tube from the parts database.
+
+.. figure:: /img/setup/getting_started/11.02.06.Rocket_Build.Payload_Bay.png
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+ The payload bay has been added to the rocket.
+
+Adding a Transition
+^^^^^^^^^^^^^^^^^^^
+
+Transitions are most often used to connect body tubes with different diameters. But, a transition can also be used to
+connect two body tubes of the same diameter, as will be done here.
+
+To do this, with either the **Stage** or **Payload Bay** selected, click on the :guilabel:`Transition` button and the
+**Transition configuration** window will pop up. The default **Transition Configuration** tab is the **General** tab.
+On this tab, change your entries in the circled areas below to match the entries shown. Then, click the **Shoulder** tab,
+and change your entries in the circled areas below to match the entries shown. Then, click the :guilabel:`Close` button.
+
+.. figure:: /img/setup/getting_started/11.03.01.Rocket_Build.Transition.png
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+ Adding a transition behind the payload bay.
+
+.. figure:: /img/setup/getting_started/11.03.06.Rocket_Build.Transition.png
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+ Setting the transition parameters in the :guilabel:`General` tab and :guilabel:`Shoulder` tab.
+
+.. figure:: /img/setup/getting_started/11.03.07.Rocket_Build.Transition.png
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+ The transition has been added to the rocket.
+
+Adding a Body Tube
+^^^^^^^^^^^^^^^^^^
+
+Now, do what you did to add the **Payload Bay**, above, but select this body tube from the parts database:
+
+.. figure:: /img/setup/getting_started/11.04.01.Rocket_Build.Body_Tube.png
+ :width: 65%
+ :align: center
+ :figclass: or-image-border
+
+ Add another body tube, behind the transition, and select it from the parts database.
+
+.. figure:: /img/setup/getting_started/11.04.02.Rocket_Build.Body_Tube.png
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+ The body tube has been added to the rocket.
+
+Adding Fins
+^^^^^^^^^^^
+
+The bottom component are the fins. OpenRocket offers four types of fins, **Trapezoidal**, **Elliptical**, **Free Form**,
+and **Tube Fins**. For this design, **Trapezoidal** fins will be used.
+
+With the **Body Tube** selected, click on the :guilabel:`Trapezoidal` fins button and the **Trapezoidal Fin Set configuration**
+window will pop up. On your default **General** tab, change your entries match the entries shown. Then, click the
+:guilabel:`Close` button.
+
+.. figure:: /img/setup/getting_started/11.05.01.Rocket_Build.Fins.png
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+ Add Trapezoidal fins inside the second body tube.
+
+.. figure:: /img/setup/getting_started/11.05.02.Rocket_Build.Fins.png
+ :width: 60%
+ :align: center
+ :figclass: or-image-border
+
+ Fin set configuration window
+
+Fins attach to another component, in this case the **Body Tube**. As circled below, the fins are shown underneath the
+**Body Tube** on the component tree.
+
+.. figure:: /img/setup/getting_started/11.05.03.Rocket_Build.Fins.png
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+ Trapezoidal fin set added to the rocket.
+
+Adding a Launch Guide
+^^^^^^^^^^^^^^^^^^^^^
+
+OpenRocket includes two styles of launch guides, **Rail Buttons** and a **Launch Lug**. Because of the diameter of the
+body tube, a **Launch Lug** will be used for this design. As with fins, launch guides attach to another component, in
+this case the body tube.
+
+You should now be able to open the **Launch Lug configuration** window without assistance. So, open your **Launch Lug configuration**
+window, and change the specifications to match those shown below.
+
+.. figure:: /img/setup/getting_started/11.06.02.Rocket_Build.Launch_Lug.png
+ :width: 60%
+ :align: center
+ :figclass: or-image-border
+
+ Launch lug configuration window.
+
+.. figure:: /img/setup/getting_started/11.06.03.Rocket_Build.Launch_Lug.png
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+ Launch lug added to the body tube.
+
+Adding a Parachute and Shock Cord
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Next we will add a **Parachute** and **Shock Cord** to the rocket for recovery.
+Select the body tube and add a **Parachute** and **Shock Cord**. The parachute and shock cord attach to the body tube.
+
+.. figure:: /img/setup/getting_started/11.07.03.Rocket_Build.Parachute.png
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+ Parachute parts library (left) and configuration window (right).
+
+.. figure:: /img/setup/getting_started/11.08.01.Rocket_Build.Parachute.png
+ :width: 60%
+ :align: center
+ :figclass: or-image-border
+
+ Shock cord configuration window.
+
+.. figure:: /img/setup/getting_started/11.08.02.Rocket_Build.Parachute.png
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+ Parachute and shock cord added to the body tube.
+
+Adding an Engine Block
+^^^^^^^^^^^^^^^^^^^^^^
+
+.. figure:: /img/setup/getting_started/11.09.01.Rocket_Build.Engine_Block.png
+ :width: 60%
+ :align: center
+ :figclass: or-image-border
+
+ Engine block configuration window.
+
+.. figure:: /img/setup/getting_started/11.09.02.Rocket_Build.Engine_Block.png
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+ Engine block added to the body tube.
+
+Viewing Your Design
+===================
+
+With the airframe complete, you can view your design in either 2D (as above) or three 3D views. The most commonly used
+of which are **3D Unfinished** and **3D Finished**.
+
+.. figure:: /img/setup/getting_started/11.06.03.Rocket_Build.3D_Unfinished.png
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+ 3D Unfinished view (body tubes are semi-transparent so that the internal components become visible).
+
+.. figure:: /img/setup/getting_started/11.06.04.Rocket_Build.3D_Finished.png
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+ 3D Finished view (what your final build would look like).
+
+----
+
+Adding Appearance Settings
+==========================
+
+If you want your OpenRocket design to visually resemble what you want to build, you can change the appearance of the components.
+When changing **Appearance** settings, it is best to be in the **3D Finished** pane so that you can see the changes that
+you are making. So, let's start by changing the view to **3D Finished**.
+
+Changing Color
+--------------
+
+The first change that will be made is to select the color for and change the color of the nose cone. Double-click on the
+nose cone in the parts tree to open the **Nose Cone configuration** window, then select the :guilabel:`Appearance` tab.
+
+.. figure:: /img/setup/getting_started/12.10.01.Rocket_Build_Appearance.Nose_Cone.png
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+ Nose cone :guilabel:`Appearance` tab in the configuration window.
+
+Now, uncheck the **Appearance** :guilabel:`Use default` box. Then, Click on the :guilabel:`Color` box to open the
+**Choose color** window. Select the color of your choice (purple will be used here). Click :guilabel:`OK` to use your
+selection, then :guilabel:`Close` the **Nose Cone configuration** window.
+
+.. figure:: /img/setup/getting_started/12.10.05.Rocket_Build_Appearance.Nose_Cone.png
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+ Changing the nose cone color.
+
+.. figure:: /img/setup/getting_started/12.10.06.Rocket_Build_Appearance.Nose_Cone.png
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+ Nose cone color changed.
+
+Repeat those steps for the **Transition**, **Body Tube**, **Trapezoidal Fin Set**, and **Launch Lug**; body tubes, launch lugs, and fins also have a **Texture** that will need to be set to **none**.
+
+.. figure:: /img/setup/getting_started/12.10.07.Rocket_Build_Appearance.Nose_Cone.png
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+ All external components, except for the payload bay have now been colored.
+
+Now for a little magic. Open the **Payload Bay** appearance tab, uncheck the **Appearance** **Use default** box, and set
+the :guilabel:`Texture` to `````. Then, click on the :guilabel:`Color` box to open the **Choose color** window.
+Click on a light blue color (the box shown with the **X** below), then click :guilabel:`OK`. Now, set the :guilabel:`Opacity`
+to **20%** and close the Payload Bay configuration window, and you have a transparent payload bay.
+
+.. figure:: /img/setup/getting_started/12.10.11.Rocket_Build_Appearance.Nose_Cone.png
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+ Change the color of the payload bay to light blue and lower the opacity to 20%.
+
+.. figure:: /img/setup/getting_started/12.10.12.Rocket_Build_Appearance.Nose_Cone.png
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+ You now have a semi-transparent payload bay!
+
+Adding Decals
+-------------
+
+One last bit of magic, let's apply a decal to the transparent Payload Bay.
+
+But, before beginning, save the following image to your device.
+
+.. figure:: /img/setup/getting_started/12.10.13.Rocket_Build_Appearance.Decal.png
+ :width: 15%
+ :align: center
+ :figclass: or-image-border
+
+ :download:`Save this decal image on your computer `.
+
+With the decal saved to your device, you're ready to start.
+
+Select Decal from File
+^^^^^^^^^^^^^^^^^^^^^^
+
+Open the Payload Bay configuration window and select the :guilabel:`Appearance` tab. Click on the :guilabel:`Texture`
+type to activate the selection drop-down, and select :guilabel:`From file...`. Now, navigate to where you saved the decal,
+and select it.
+
+.. figure:: /img/setup/getting_started/12.10.16.Rocket_Build_Appearance.Payload_Bay.Decal.png
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+Decal Type, Size and Position
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+To size and position the decal, first change the **Repeat** type to **Sticker** (you only want one symbol on the Payload Bay),
+then change the :guilabel:`Scale` and :guilabel:`Offset` :guilabel:`x` and :guilabel:`y` values to those shown below.
+
+.. figure:: /img/setup/getting_started/12.10.19.Rocket_Build_Appearance.Payload_Bay.Decal.png
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+ Change the :guilabel:`Repeat` type and set the x and y :guilabel:`Scale` and :guilabel:`Offset` values.
+
+.. figure:: /img/setup/getting_started/12.10.20.Rocket_Build_Appearance.Payload_Bay.Decal.png
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+ The decal has been added to the payload bay and sized and positioned correctly.
+
+And, there you have it, a decal on a transparent payload bay!
+
+So, let's see what you've learned, and extend your knowledge. See if you can follow the screens below without any instructions.
+Save the following image to your device.
+
+.. figure:: /img/setup/getting_started/12.10.21.Rocket_Build_Appearance.Fins.png
+ :width: 15%
+ :align: center
+ :figclass: or-image-border
+
+ :download:`Save this decal image on your computer `.
+
+.. figure:: /img/setup/getting_started/12.11.03.Rocket_Build_Appearance.Fins.png
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+ Split the Fins in the **Trapezoidal Fin Set configuration window** (left). After splitting, you'll see the separate fin
+ instances in the component tree (right).
+
+After splitting the fins, **SAVE AND REOPEN THE DESIGN FILE**, then view in **3D Finished**.
+
+.. figure:: /img/setup/getting_started/12.11.11.Rocket_Build_Appearance.Fins.png
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+ Change Appearance of **Fin #2** and **Fin #3**
+
+.. figure:: /img/setup/getting_started/12.11.12.Rocket_Build_Appearance.Fins.png
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+----
+
+Viewing in Photo Studio
+=======================
+
+So, what will this bird look like in flight? For that, we can use the **Photo Studio** tool. However, to get a representative
+representation, you need to add a motor first.
+
+Selecting a Motor
+-----------------
+
+In the :guilabel:`Task tabs` in the UI, select the :guilabel:`Motors & Configuration` tab. Then, make sure that the correct
+motor tube is selected on the left in the :guilabel:`Motor mounts` list before clicking :guilabel:`New Configuration`.
+
+.. figure:: /img/setup/getting_started/12.12.02.Rocket_Build.Motor.png
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+ Adding a new flight configuration in the :guilabel:`Motors & Configuration` tab.
+
+When you click :guilabel:`New Configuration`, the **Motor Selection** window opens. For this example, select the Estes D-12-7,
+then click :guilabel:`OK`.
+
+.. figure:: /img/setup/getting_started/12.12.03.Rocket_Build.Motor.png
+ :width: 80%
+ :align: center
+ :figclass: or-image-border
+
+ Selecting the Estes D-12-7 rocket motor in the **Motor Selection** window.
+
+Now, select the D-12-7 as the **Flight Configuration**, and you're ready to go to the **Photo Studio**.
+
+.. figure:: /img/setup/getting_started/12.12.05.Rocket_Build.Motor.png
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+ Select the D-12-7 as the **Flight Configuration**.
+
+Flying in Photo Studio
+----------------------
+
+Are you ready to see your rocket fly? Then, open :guilabel:`Photo Studio` from the :menuselection:`Tools` menu.
+
+.. figure:: /img/setup/getting_started/12.12.01.Rocket_Build.Photo_Studio.png
+ :width: 95%
+ :align: center
+ :figclass: or-image-border
+
+ Open **Photo Studio**.
+
+You can now view your creation in 3D and interact with it. You can change the background, rocket orientation, camera settings,
+and even add some cool effects.
+
+.. figure:: /img/setup/getting_started/12.12.02.Rocket_Build.Photo_Studio.png
+ :width: 85%
+ :align: center
+ :figclass: or-image-border
+
+ The rocket inside **Photo Studio**.
+
+So why did you to add a motor before going to Photo Studio? Because,
+**you can't activate the flame effect in Photo Studio if your rocket does not have a motor**, and the flame effect is
+arguably the coolest part of Photo Studio! Go to the :guilabel:`Effects` tab and enable the :guilabel:`Flame` effect.
+
+.. figure:: /img/setup/getting_started/12.12.03.Rocket_Build.Photo_Studio.png
+ :width: 85%
+ :align: center
+ :figclass: or-image-border
+
+Now, play around with the settings to your heart's content!
diff --git a/docs/source/setup/installation.rst b/docs/source/setup/installation.rst
new file mode 100644
index 000000000..d2359e38b
--- /dev/null
+++ b/docs/source/setup/installation.rst
@@ -0,0 +1,207 @@
+*************************
+Installation Instructions
+*************************
+
+.. contents:: Table of Contents
+ :depth: 1
+ :local:
+ :backlinks: none
+
+----
+
+Introduction
+============
+
+OpenRocket is released in two forms: as a *packaged application* and as a *JAR file*.
+**The easiest way to get OpenRocket up and running is to download and install one of the packaged installers.**
+The packaged installers come with everything needed, including the correct version of Java;
+*you will not need to install, update or downgrade Java on your device to run them.*
+
+Download the latest version from `our downloads page `__.
+
+.. raw:: html
+
+
+
+Pre-Installation Procedures
+===========================
+
+Some users may experience problems with the OpenRocket installation if they don't follow the pre-installation procedures below.
+
+Close All Instances of OpenRocket
+---------------------------------
+
+If you have OpenRocket running, close it before installing a new version. By default, new OpenRocket releases
+install to the same location on your device; these releases even share preferences. Because of this, if OpenRocket is
+open when you attempt to install an updated release, the installation may not update all of the files needed for
+OpenRocket to function correctly.
+
+Before installing an update, you *MUST* close all open instances of OpenRocket.
+
+(Optional) Uninstall Prior OpenRocket Releases
+----------------------------------------------
+
+As described above, by default, new releases of OpenRocket install to the same location on your device.
+Although **not expressly required**, it is suggested that all previously installed OpenRocket releases be uninstalled
+before installing the updated release. This is *not required*, but is suggested to ensure the proper function of OpenRocket.
+
+.. raw:: html
+
+
+
+Installing OpenRocket π
+========================
+
+**Download the latest version from** `our downloads page `__.
+Scroll down to download the correct installer for your platform (Windows, macOS, or Linux).
+
+Each platform has a different installation process. Click on the ``Show installation instructions`` header under your
+platform's download button to see the installation instructions.
+
+.. raw:: html
+
+
+
+After-Installation Checks
+=========================
+
+After installing OpenRocket, you need to verify that the installation was successful and potentially modify some settings
+to ensure that OpenRocket functions correctly.
+
+Verify the Installed Release Number
+-----------------------------------
+
+First, verify that you actually installed the current release of OpenRocket. You can see this in the splash screen, which
+appears when you start OpenRocket. The splash screen will show the release number on the right:
+
+.. figure:: /img/setup/installation/splash_screen.png
+ :alt: OpenRocket Splash Screen
+ :figclass: or-figclass
+ :figwidth: 60 %
+ :align: center
+
+ During startup, the OpenRocket Splash Screen shows the release number on the right.
+
+If the release number is not correct, you may have installed the wrong version of OpenRocket, or didn't follow the
+`Pre-Installation Procedures`_ above.
+
+Another way to check the release number is to open the ``Help`` menu in the application ribbon
+and select ``About``. This will open a dialog box that shows the release number:
+
+.. figure:: /img/setup/installation/about_dialog.png
+ :alt: OpenRocket About Dialog
+ :figclass: or-figclass, or-image-border
+ :figwidth: 40 %
+ :align: center
+
+ The OpenRocket About Dialog (``Help`` β ``About``) shows the release number.
+
+Check the Settings
+------------------
+
+For most users, OpenRocket's default settings will work fine. However, some users may need to change some settings.
+
+Off-screen Rendering
+^^^^^^^^^^^^^^^^^^^^
+
+Some users have reported that the rocket shown in the 3D design view is not full-size. This can occur if the off-screen
+rendering setting is not correct for your device. Using the Three-stage rocket example packaged with OpenRocket, this is
+what the problem looks like:
+
+.. figure:: /img/setup/installation/off_screen_rendering_wrong.png
+ :alt: Wrong 3D View of Three-stage Rocket
+ :figclass: or-figclass, or-image-border
+ :figwidth: 75 %
+ :align: center
+
+ The 3D view of the Three-stage rocket example is too small.
+
+To fix this, you need to change the off-screen rendering setting. To do this, open the ``Edit`` menu in the application
+ribbon and select ``Preferences``. This will open the Preferences dialog box. This window has several tabs (``General``,
+``Design``, ``Simulation``, ... You need to go to the ``Graphics`` tab (just click on that tab header) and on the bottom
+of the page change the ``Use off-screen rendering`` setting:
+
+.. figure:: /img/setup/installation/off_screen_rendering_setting.png
+ :alt: Off-screen Rendering Setting
+ :figclass: or-figclass, or-image-border
+ :figwidth: 50 %
+ :align: center
+
+ The off-screen rendering setting is on the bottom of the ``Graphics`` tab.
+
+Your 3D view should now look like this:
+
+.. figure:: /img/setup/installation/off_screen_rendering_right.png
+ :alt: Correct 3D View of Three-stage Rocket
+ :figclass: or-figclass, or-image-border
+ :figwidth: 75 %
+ :align: center
+
+ The 3D view of the Three-stage rocket example is now correct.
+
+.. note::
+
+ Whenever you face issues with 3D rendering in OpenRocket, it is a good idea to change the off-screen rendering setting
+ to see if that fixes the problem.
+
+.. _thrust_curves_setting:
+
+Thrust Curves Folder
+^^^^^^^^^^^^^^^^^^^^
+
+OpenRocket ships with a bunch of built-in motor thrust curves. However, it is possible to import your own thrust curves,
+see :ref:`Import Custom Thrust Curves `. For this to work, you need to
+**specify a folder where OpenRocket will look for thrust curves**. By default, OpenRocket will look in the ``ThrustCurves``
+folder in your application data directory. The application data directory is different for each operating system, see the
+table below for the default application data directories for each operating system.
+
+
+.. list-table:: Default Application Data Directories by Operating System
+ :widths: auto
+ :header-rows: 1
+ :class: or-table-line-blocks
+
+ * - Operating System
+ - Default Thrust Curves Directory
+ * - Windows
+ - | :file:`%APPDATA%\OpenRocket\ThrustCurves` (if ``APPDATA`` is available)\*
+ | :file:`C:\Users\[YOUR USERNAME]\OpenRocket\ThrustCurves` (fallback if ``APPDATA`` is not available)
+ |
+ | \* ``APPDATA`` is usually :file:`C:\Users\[YOUR USERNAME]\AppData\Roaming`
+ * - macOS
+ - :file:`/Users/[YOUR USERNAME]/Library/Application Support/OpenRocket/ThrustCurves/`
+ * - Linux
+ - :file:`/home/[YOUR USERNAME]/.openrocket/ThrustCurves/` (hidden directory)
+
+``[YOUR USERNAME]`` **is your user name on your device.**
+
+To view or modify the user-defined thrust curves folder(s), open the :menuselection:`Edit` menu in the application ribbon and select
+:menuselection:`Preferences`. This will open the Preferences dialog box. You need to go to the :menuselection:`General` tab
+(should be open by default) and change the :guilabel:`User-defined thrust curves` setting:
+
+.. figure:: /img/setup/installation/thrust_curves_setting.png
+ :alt: Thrust Curves Setting
+ :figclass: or-figclass, or-image-border
+ :figwidth: 50 %
+ :align: center
+
+ The setting to change the user-defined thrust curves folder.
+
+You can also add multiple thrust curve folders. To do this, click on the :guilabel:`Add` button and select the folder you want to add.
+You can also manually enter a new folder path. This path must be separated from other paths by a semicolon (``;``).
+
+Troubleshooting
+===============
+
+When you have issues with your installation, ensure that you have **read the installation instructions** for your platform.
+When you download the installer from our `downloads page `__, you can
+click on the :guilabel:`Show installation instructions` header under your platform's download button to see the
+installation instructions.
+
+If you have further issues, please `contact us `__.
+
+Uninstalling
+============
+
+.. todo::
+ Add uninstallation instructions.
diff --git a/docs/source/setup/preferences.rst b/docs/source/setup/preferences.rst
new file mode 100644
index 000000000..4024e360b
--- /dev/null
+++ b/docs/source/setup/preferences.rst
@@ -0,0 +1,486 @@
+***********
+Preferences
+***********
+
+This page describes how you can customize OpenRocket using the Preferences dialog.
+
+.. contents:: Table of Contents
+ :depth: 2
+ :local:
+ :backlinks: none
+
+----
+
+Accessing the Preferences Dialog
+================================
+
+The **Preferences dialog** can be opened by selecting :guilabel:`Preferences` from the :menuselection:`Edit` menu, or by
+pressing :kbd:`Ctrl` + :kbd:`,` (comma) on your keyboard for Windows and Linux, or :kbd:`Cmd` + :kbd:`,` (comma) on your keyboard for macOS.
+
+.. figure:: /img/setup/preferences/Access-Preferences.png
+ :alt: Accessing the Preferences dialog from the Edit menu
+ :figclass: or-figclass, or-image-border
+ :figwidth: 45 %
+ :align: center
+
+ Accessing the **Preferences dialog** from the :menuselection:`Edit` menu
+
+Explanation of the Available Preferences
+========================================
+
+.. _general_tab:
+
+General
+-------
+
+The **General** tab contains general settings for the OpenRocket application.
+
+.. figure:: /img/setup/preferences/Prefs-General.png
+ :alt: General tab in the Preferences dialog
+ :figclass: or-figclass, or-image-border
+ :figwidth: 65 %
+ :align: center
+
+ :guilabel:`General` tab in the Preferences dialog
+
+- :guilabel:`Interface language`: Select the language you want the OpenRocket GUI to be displayed in.
+
+ Currently supported languages:
+ - ``System default`` - OpenRocket will use the language set in your operating system.
+ - ``English/English`` - This is the main language of OpenRocket. All other languages are translations of the English version.
+ - ``ΔeΕ‘tina/Czech``
+ - ``Deutsch/German``
+ - ``espaΓ±ol/Spanish``
+ - ``franΓ§ais/French``
+ - ``italiano/Italian``
+ - ``Nederlands/Dutch``
+ - ``polski/Polish``
+ - ``portuguΓͺs/Portuguese``
+ - ``TΓΌrkΓ§e/Turkish``
+ - ``ΡΡΡΡΠΊΠΈΠΉ/Russian``
+ - ``ΡΠΊΡΠ°ΡΠ½ΡΡΠΊΠ°/Ukrainian``
+ - ``Arabic/Ψ§ΩΨΉΨ±Ψ¨ΩΨ©``
+ - ``δΈζ/Chinese``
+ - ``ζ₯ζ¬θͺ/Japanese``
+
+ .. note::
+ You must restart OpenRocket for the language change to take effect.
+
+ .. warning::
+ Many translations are not complete or up-to-date. Missing translations texts are displayed in English.
+
+ If you find any errors or missing translations, please let us know by creating an issue on the
+ `OpenRocket GitHub page `__
+ or by :doc:`Contributing to the OpenRocket translations `.
+
+- :guilabel:`UI Theme`: Select the theme you want the OpenRocket GUI to be displayed in.
+
+ Currently supported themes:
+ - ``Auto (detect)`` - OpenRocket will use the theme set in your operating system.
+ - ``Light (default)`` - A light theme (the "original" OpenRocket theme).
+
+ .. figure:: /img/setup/preferences/Theme-Light.png
+ :alt: Light OpenRocket UI theme.
+ :figclass: or-figclass, or-image-border
+ :figwidth: 55 %
+ :align: center
+
+ Light OpenRocket UI theme.
+
+ - ``Dark`` - A dark theme.
+
+ .. figure:: /img/setup/preferences/Theme-Dark.png
+ :alt: Dark OpenRocket UI theme.
+ :figclass: or-figclass, or-image-border
+ :figwidth: 55 %
+ :align: center
+
+ Dark OpenRocket UI theme.
+
+ - ``Dark, high-contrast`` - A dark theme, but with more contrast than the standard dark theme.
+
+ .. figure:: /img/setup/preferences/Theme-DarkContrast.png
+ :alt: Dark Contrast OpenRocket UI theme.
+ :figclass: or-figclass, or-image-border
+ :figwidth: 55 %
+ :align: center
+
+ Dark Contrast OpenRocket UI theme.
+
+ .. note::
+ You must restart OpenRocket for the UI theme change to take effect.
+
+- :guilabel:`UI Font Size`: Select the font size you want the OpenRocket GUI to be displayed in. The default is 13.
+ The smaller the number, the smaller the font size.
+
+ .. figure:: /img/setup/preferences/FontSize13.png
+ :alt: Font size 13 (default).
+ :figclass: or-figclass, or-image-border
+ :figwidth: 55 %
+ :align: center
+
+ Font size 13 (default).
+
+ .. figure:: /img/setup/preferences/FontSize9.png
+ :alt: Font size 9 (default).
+ :figclass: or-figclass, or-image-border
+ :figwidth: 55 %
+ :align: center
+
+ Font size 9.
+
+ .. figure:: /img/setup/preferences/FontSize17.png
+ :alt: Font size 17 (default).
+ :figclass: or-figclass, or-image-border
+ :figwidth: 55 %
+ :align: center
+
+ Font size 17.
+
+ .. note::
+ You must restart OpenRocket for the font size change to take effect.
+
+- :guilabel:`User-defined thrust curves`: You can specify a directory where you have stored your own thrust curves.
+ OpenRocket will scan this directory for thrust curves when you open the program. OpenRocket comes pre-installed with
+ thrust curves from the `ThrustCurve.org `__ database, but you can add your own using the
+ user-defined thrust curves. For more information, see the :doc:`Thrust Curves ` section.
+
+ You can add multiple directories if you separate the paths with a semicolon (;).
+
+ - :guilabel:`Add`: Add a directory where you have stored your own thrust curves.
+ - :guilabel:`Reset`: Reset the directories to the default directories.
+
+- :guilabel:`Always check for software updates at startup`: If this option is enabled, OpenRocket will check for software updates
+ every time you start the program. If an update is available, you will be notified.
+
+ - :guilabel:`Check now`: Check for software updates now.
+ - :guilabel:`Also check for pre-releases`: If this option is enabled, OpenRocket will also check for pre-releases (so you
+ can test new features before they are officially released and help us fix last-minute mistakes).
+
+- :guilabel:`Open last design file on startup`: If this option is enabled, OpenRocket will open the last design file you were working on
+ when you start the program.
+
+- :guilabel:`Show warning when saving in RASAero format`: If this option is enabled, OpenRocket will show a warning when you export a design
+ in RASAero format. This is because RASAero does not support all the features of OpenRocket, so some information may be lost when you save
+ in RASAero format.
+
+- :guilabel:`Show warning when saving in RockSim format`: If this option is enabled, OpenRocket will show a warning when you export a design
+ in RockSim format. This is because RockSim does not support all the features of OpenRocket, so some information may be lost when you save
+ in RockSim format.
+
+- :guilabel:`Show confirmation dialog when discarding preferences`: If this option is enabled, OpenRocket will show a confirmation dialog
+ when you discard changes to the preferences.
+
+:guilabel:`Import preferences`, :guilabel:`Export preferences`, and :guilabel:`Reset all preferences` are explained in
+:ref:`Importing and Exporting Preferences ` and :ref:`Resetting Preferences `.
+
+Design
+------
+
+The **Design** tab contains settings for the design of the rocket.
+
+.. figure:: /img/setup/preferences/Prefs-Design.png
+ :alt: Design tab in the Preferences dialog
+ :figclass: or-figclass, or-image-border
+ :figwidth: 65 %
+ :align: center
+
+ :guilabel:`Design` tab in the Preferences dialog
+
+- :guilabel:`Position to insert new body components`: Where to insert new body components in the rocket design view.
+
+ - :guilabel:`Always ask`: OpenRocket will ask you where you want to insert new body components every time you add a new component.
+ - :guilabel:`Insert in middle`: Insert new body components after the currently selected component.
+ - :guilabel:`Add to end`: Insert new body components at the end of the parent component.
+
+- :guilabel:`Position to insert new stages`: Where to insert new stages in the rocket design view.
+
+ - :guilabel:`Always ask`: OpenRocket will ask you where you want to insert new stages every time you add a new stage.
+ - :guilabel:`Insert in middle`: Insert new stages after the currently selected stage.
+ - :guilabel:`Add to end`: Insert new stages at the end of the rocket.
+
+- :guilabel:`Size of text in rocket design panel`: The size of the text in the rocket design view.
+- :guilabel:`Default Mach Number for C.P. Estimate`: Mach value that is used for the Center of Pressure (CP) calculations
+ in the rocket design view.
+- :guilabel:`Always open leftmost tab when opening a component edit dialog`: If enabled, if you edit a rocket component and
+ open the component configuration, it will always open in the leftmost tab. If disabled, the last tab you used will be opened.
+- :guilabel:`Show confirmation dialog for discarding component changes`: If enabled, OpenRocket will show a confirmation
+ dialog when you discard changes to a component (if you click the :guilabel:`Cancel` button in the component configuration window).
+- :guilabel:`Show confirmation dialog for discarding simulation changes`: If enabled, OpenRocket will show a confirmation
+ dialog when you discard changes to a simulation (if you click the :guilabel:`Cancel` button in the simulation configuration window).
+- :guilabel:`Update estimated flight parameters in design window`: If enabled, OpenRocket will calculate and update the estimated
+ flight parameters in the rocket design view (in the top-left) when you make changes to the rocket design.
+- :guilabel:`Only show pod set/booster markers when the pod set/booster is selected`: If enabled, OpenRocket will only show the
+ pod set/booster instance markers in the rocket design view when the pod set/booster is selected. The instance markers show
+ where pod/booster instances are located in the rocket design.
+
+ .. figure:: /img/setup/preferences/PodAndBoosterMarker.png
+ :alt: Booster and Pod instance markers on a body tube in the rocket design view.
+ :figclass: or-figclass, or-image-border
+ :figwidth: 55 %
+ :align: center
+
+ Booster and Pod instance markers on a body tube in the rocket design view.
+
+Simulation
+----------
+
+.. figure:: /img/setup/preferences/Prefs-Simulation.png
+ :alt: Simulation tab in the Preferences dialog
+ :figclass: or-figclass, or-image-border
+ :figwidth: 65 %
+ :align: center
+
+ :guilabel:`Simulation` tab in the Preferences dialog
+
+- :guilabel:`Confirm deletion of simulations`: If enabled, OpenRocket will show a confirmation dialog when you delete a simulation.
+- :guilabel:`Run out-dated simulations when you open the simulation tab`: If enabled, OpenRocket will run simulations that are out-dated
+ when you switch the simulation tab (in the task tabs).
+- :guilabel:`Geodetic calculations`: Which calculation method to use for coordinates on the Earth.
+- :guilabel:`Time step`: The smallest time step to use in the simulations. A smaller time step will give more accurate results but
+ will take longer to compute.
+
+ .. note::
+ OpenRocket uses optimized time steps. It will use a larger value than the set time step for parts in the simulation
+ that do not require a smaller time step.
+
+ In other words, the simulation time step is not fixed, but will vary throughout the simulation.
+
+- :guilabel:`Reset to default`: Reset the simulator options to the default values.
+
+.. attention::
+ The settings in the Launch tab have **no effect on existing simulations in your design**.
+
+ Only simulations that you create after changing these settings will be affected.
+
+Launch
+------
+
+.. figure:: /img/setup/preferences/Prefs-Launch.png
+ :alt: Launch tab in the Preferences dialog
+ :figclass: or-figclass, or-image-border
+ :figwidth: 65 %
+ :align: center
+
+ :guilabel:`Launch` tab in the Preferences dialog
+
+.. hlist::
+ :columns: 2
+
+ - Wind
+ - :guilabel:`Average windspeed`: The average wind speed relative to the ground.
+ - :guilabel:`Standard deviation`: Standard deviation of the wind speed (= a measure of the dispersion of the wind speed values).
+ The actual wind speed is within twice the standard deviation 95% of the time.
+ - :guilabel:`Turbulence intensity`: The standard deviation of the wind speed divided by the average wind speed. Typical
+ values range from 5% to 20%.
+ - :guilabel:`Wind direction`: The direction the wind is coming from. 0Β° is north, 90Β° is east, 180Β° is south, and 270Β° is west.
+ - Atmospheric conditions
+ - :guilabel:`Use International Standard Atmosphere`: If enabled, the atmospheric conditions will be set to the
+ International Standard Atmosphere (ISA). This model has a temperature of 15 Β°C and a pressure of 1013.25 mbar at
+ sea level.
+
+ If disabled, you can set the temperature and pressure manually.
+ - :guilabel:`Temperature`: The temperature at the launch site.
+ - :guilabel:`Pressure`: The pressure at the launch site.
+ - Launch site
+ - :guilabel:`Latitude`: The latitude coordinate of the launch site.
+ - :guilabel:`Longitude`: The longitude coordinate of the launch site.
+ - :guilabel:`Altitude`: The altitude of the launch site.
+ - Launch rod
+ - :guilabel:`Length`: The length of the launch rod.
+ - :guilabel:`Always launch directly up-wind or down-wind`: If enabled, the launch rod will always point into the wind.
+ - :guilabel:`Angle`: The angle of the launch rod relative to the ground. At 0Β°, the launch rod points straight up (vertical).
+ If the checkbox to "Always launch directly up-wind or down-wind" is enabled, positive angles point up-wind, and negative angles
+ point down-wind. If the checkbox is disabled, positive angles towards the direction axis. E.g. if direction is set
+ to 90Β° (East of the wind), positive angles will point the launch rod East. Negative angles will point the rod West.
+ - :guilabel:`Direction`: Direction of the launch rod relative to the wind. 0Β° is pointing in the wind direction.
+ 90Β° is pointing East of the wind.
+
+.. attention::
+ The settings in the Launch tab have **no effect on existing simulations in your design**.
+
+ Only simulations that you create after changing these settings will be affected.
+
+Units
+-----
+
+The **Units** tab allows you to set the units that OpenRocket uses throughout the program.
+
+.. figure:: /img/setup/preferences/Prefs-Units.png
+ :alt: Units tab in the Preferences dialog
+ :figclass: or-figclass, or-image-border
+ :figwidth: 65 %
+ :align: center
+
+ :guilabel:`Units` tab in the Preferences dialog
+
+.. hlist::
+ :columns: 2
+
+ - :guilabel:`Rocket dimensions`: Unit for dimensions of rocket components (e.g. diameter, length).
+ - :guilabel:`Motor dimensions`: Unit for dimensions of rocket motors (diameter, length).
+ - :guilabel:`Distance`: Unit for distances (e.g. altitude).
+ - :guilabel:`Velocity`: Unit for velocities.
+ - :guilabel:`Acceleration`: Unit for accelerations.
+ - :guilabel:`Mass`: Unit for masses.
+ - :guilabel:`Force`: Unit for forces.
+ - :guilabel:`Total impulse`: Unit for total impulse.
+ - :guilabel:`Moment of inertia`: Unit for moments of inertia.
+ - :guilabel:`Stability`: Primary unit for stability margin/static margin.
+
+ Possible values:
+
+ - ``mm``, ``cm``, ``m``, ``in``: Distance between the center of gravity (CG) and the center of pressure (CP).
+ - ``cal``: Caliber. 1 caliber = 1 diameter of the rocket.
+ - ``%``: Percentage of the rocket length.
+
+ - :guilabel:`Secondary stability`: Secondary unit for stability margin/static margin.
+
+ Same values as the primary stability unit.
+
+ - :guilabel:`Display secondary stability unit`: If enabled, display both the primary and secondary stability units in the rocket design view.
+ - :guilabel:`Line density`: Unit for line density (= one-dimensional density).
+ - :guilabel:`Surface density`: Unit for surface density (= two-dimensional density).
+ - :guilabel:`Bulk density`: Unit for bulk density (= three-dimensional density).
+ - :guilabel:`Surface roughness`: Unit for surface roughness.
+ - :guilabel:`Area`: Unit for areas.
+ - :guilabel:`Angle`: Unit for angles.
+ - :guilabel:`Roll rate`: Unit for roll rates.
+ - :guilabel:`Temperature`: Unit for temperatures.
+ - :guilabel:`Pressure`: Unit for pressures.
+ - :guilabel:`Wind speed`: Unit for wind speeds.
+ - :guilabel:`Latitude`: Unit for latitudes.
+ - :guilabel:`Longitude`: Unit for longitudes.
+
+- :guilabel:`Default metric`: Set the default unit system to metric units.
+- :guilabel:`Default imperial`: Set the default unit system to imperial units.
+
+Materials
+---------
+
+The **Materials** tab shows a list of materials that are pre-installed in OpenRocket, plus custom user-defined materials that
+you have added.
+
+.. figure:: /img/setup/preferences/Prefs-Materials.png
+ :alt: Materials tab in the Preferences dialog
+ :figclass: or-figclass, or-image-border
+ :figwidth: 65 %
+ :align: center
+
+ :guilabel:`Materials` tab in the Preferences dialog
+
+On the left are a list of all the materials in OpenRocket. Pre-installed OpenRocket materials are displayed in greyed-out text.
+User-defined materials are displayed in normal text.
+
+- :guilabel:`New`: Add a new custom material.
+- :guilabel:`Edit`: Edit the selected material. You can edit both custom materials and pre-installed OpenRocket materials.
+ However, editing a pre-installed material will create a new custom material with the same name, instead of modifying the
+ original material.
+- :guilabel:`Delete`: Delete the selected material. You can only delete custom materials.
+- :guilabel:`Revert all`: Delete all user-defined materials.
+
+.. note::
+ Editing materials will not affect existing rocket designs.
+
+
+Graphics
+--------
+
+The **Graphics** tab allows you to set the graphics settings for OpenRocket.
+
+.. figure:: /img/setup/preferences/Prefs-Graphics.png
+ :alt: Graphics tab in the Preferences dialog
+ :figclass: or-figclass, or-image-border
+ :figwidth: 65 %
+ :align: center
+
+ :guilabel:`Graphics` tab in the Preferences dialog
+
+- **Graphics Editor**: Select which graphics editor you want to use to edit textures in OpenRocket (if you click the
+ :guilabel:`Edit` button next to the Texture dropdown in the :guilabel:`Appearance` tab of the component configuration window).
+
+ - :guilabel:`Show Prompt`: OpenRocket will ask you which graphics editor you want to use every time you edit a texture.
+ - :guilabel:`Use Default Editor`: OpenRocket will use the default graphics editor you have set in your operating system.
+ - :guilabel:`Command Line`: You can set the command line for the graphics editor you want to use. This is useful if you have
+ multiple graphics editors installed and want to use a specific one. Enter the file path of the graphics editor executable
+ and any command line arguments you want to use in the text input field, or click the :guilabel:`Select Graphics Editor Program`
+ button to select the executable file.
+- **3D Graphics**
+
+ - :guilabel:`Enable 3D Graphics`: If enabled, 3D rendering is supported in OpenRocket. If disabled, you can not use any
+ 3D features inside OpenRocket.
+ - :guilabel:`Enable Anti-aliasing`: If enabled, OpenRocket will use anti-aliasing to smooth the edges of 3D graphics.
+ - :guilabel:`Use Off-screen Rendering`: If enabled, OpenRocket will render 3D graphics off-screen. This can improve performance
+ on some systems, but may cause issues on others.
+
+ .. tip::
+ If you experience issues with 3D graphics, try toggling this option (enable it if is was disabled, or vice versa).
+
+ .. note::
+ The effects will take place the next time you open a window.
+
+.. _resetting_prefs:
+
+Resetting Preferences
+=====================
+
+To reset all preferences to their default values, click the :guilabel:`Reset all preferences` button at the bottom of the
+:ref:`General tab `.
+
+.. _importing_exporting_prefs:
+
+Importing and Exporting Preferences
+===================================
+
+You can export the current preferences to an XML file, or import preferences from an XML file. This can be useful for
+instance if you need to teach other people how to use OpenRocket and want them to have the same settings as you.
+
+Export Preferences
+------------------
+
+To export preferences, click the :guilabel:`Export preferences` button at the bottom of the :ref:`General tab `.
+This will open a file dialog where you can select where to save the preferences file:
+
+.. figure:: /img/setup/preferences/ExportPreferences.png
+ :alt: Exporting preferences to an XML file
+ :figclass: or-figclass, or-image-border
+ :figwidth: 55 %
+ :align: center
+
+ Exporting preferences to an XML file
+
+There are two options in the file dialog:
+
+- :guilabel:`Export user directories` If enabled, any user directories that are set in the preferences will be exported as well.
+ If you import the preferences on another computer, the user directories will be set to the same directories as on the original computer.
+
+ You can disable this option if the target computer has different directories, or if you don't want to share the information
+ about your directories.
+- :guilabel:`Export window information (position, size...)`: If enabled, cached window information (position, size, etc.) will be exported.
+ If you import the preferences on another computer, the windows will be opened in the same position and size as on the original computer.
+
+ You can disable this option if you want the windows to be opened in the default position and size.
+
+Here is an example of the exported preferences XML file:
+
+.. code-block:: xml
+
+
+
+
+
+
+