diff --git a/install4j/.gitignore b/install4j/.gitignore
new file mode 100644
index 000000000..226e9d734
--- /dev/null
+++ b/install4j/.gitignore
@@ -0,0 +1,20 @@
+# Compiled class file
+*.class
+
+# Log file
+*.log
+
+# Package Files #
+*.jar
+*.war
+*.nar
+*.ear
+*.zip
+*.tar.gz
+*.rar
+
+# Install4j media
+media/
+
+# macOS files
+.DS_Store
diff --git a/install4j/15.03/openrocket-15.03.install4j b/install4j/15.03/openrocket-15.03.install4j
new file mode 100644
index 000000000..e05bc2b63
--- /dev/null
+++ b/install4j/15.03/openrocket-15.03.install4j
@@ -0,0 +1,443 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ sys.installationDir
+
+
+ context.getBooleanVariable("sys.confirmedUpdateInstallation")
+
+
+
+
+
+ ${form:welcomeMessage}
+
+ !context.isConsole()
+
+
+
+
+
+
+
+
+
+
+ updateCheck
+
+
+
+
+ ${i18n:ClickNext}
+
+
+
+
+
+ !context.getBooleanVariable("sys.confirmedUpdateInstallation")
+
+
+
+
+ sys.installationDir
+
+
+ context.getVariable("sys.responseFile") == null
+
+
+
+
+
+ ${i18n:SelectDirLabel(${compiler:sys.fullName})}
+
+
+
+
+
+
+
+ suggestAppDir
+ validateApplicationId
+ existingDirWarning
+ checkWritable
+ manualEntryAllowed
+ checkFreeSpace
+ showRequiredDiskSpace
+ showFreeDiskSpace
+ allowSpacesOnUnix
+ validationScript
+ standardValidation
+
+
+
+
+
+
+
+
+ ${i18n:SelectComponentsLabel2}
+
+ !context.isConsole()
+
+
+
+
+
+
+ selectionChangedScript
+
+
+
+
+
+
+
+
+
+ ${i18n:UninstallerMenuEntry(${compiler:sys.fullName})}
+
+ !context.getBooleanVariable("sys.programGroupDisabled")
+
+
+
+ ${compiler:sys.fullName} ${compiler:sys.version}
+
+
+
+
+
+
+ ${i18n:WizardPreparing}
+
+
+
+
+
+
+
+
+ ${form:finishedMessage}
+
+
+
+
+
+
+
+
+ ${i18n:UninstallerMenuEntry(${compiler:sys.fullName})}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${form:welcomeMessage}
+
+ !context.isConsole()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${i18n:UninstallerPreparing}
+
+
+
+
+
+
+
+
+
+ ${form:successMessage}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/install4j/22.xx/OpenRocket.icns b/install4j/22.xx/OpenRocket.icns
new file mode 100644
index 000000000..2a47188fd
Binary files /dev/null and b/install4j/22.xx/OpenRocket.icns differ
diff --git a/install4j/22.xx/openrocket-22.xx.install4j b/install4j/22.xx/openrocket-22.xx.install4j
new file mode 100644
index 000000000..580a9f04e
--- /dev/null
+++ b/install4j/22.xx/openrocket-22.xx.install4j
@@ -0,0 +1,710 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ sys.installationDir
+
+
+ context.getBooleanVariable("sys.confirmedUpdateInstallation")
+
+
+
+
+
+ ${form:welcomeMessage}
+
+ !context.isConsole()
+
+
+
+
+
+
+
+
+
+
+ updateCheck
+
+
+
+
+ ${i18n:ClickNext}
+
+
+
+
+
+ !context.getBooleanVariable("sys.confirmedUpdateInstallation")
+
+
+
+
+ sys.installationDir
+
+
+ context.getVariable("sys.responseFile") == null
+
+
+
+
+
+ ${i18n:SelectDirLabel(${compiler:sys.fullName})}
+
+
+
+
+
+
+
+ suggestAppDir
+ validateApplicationId
+ existingDirWarning
+ checkWritable
+ manualEntryAllowed
+ checkFreeSpace
+ showRequiredDiskSpace
+ showFreeDiskSpace
+ allowSpacesOnUnix
+ validationScript
+ standardValidation
+
+
+
+
+
+
+
+
+ ${i18n:SelectComponentsLabel2}
+
+ !context.isConsole()
+
+
+
+
+
+
+ selectionChangedScript
+
+
+
+
+ ${i18n:CreateDesktopIcon}
+
+ createDesktopLinkAction
+
+
+
+
+ ${i18n:AddToDock}
+
+ addToDockAction
+
+ Util.isMacOS()
+
+
+
+
+
+
+
+
+
+
+
+ context.getBooleanVariable("addToDockAction")
+
+
+
+ Education;Science
+ OpenRocket
+
+
+
+
+
+
+
+
+
+
+ !context.getBooleanVariable("sys.programGroupDisabled")
+
+
+
+ OpenRocket Model Rocket Simulator
+
+
+
+
+ ${compiler:sys.fullName}
+
+
+
+
+
+
+
+ context.getBooleanVariable("createDesktopLinkAction")
+
+
+
+ OpenRocket Design
+ ork
+ 59
+
+
+
+
+
+
+
+
+ application/x-openrocket
+
+
+
+
+
+
+
+
+
+ ${i18n:SelectAssociationsLabel}
+
+
+
+
+
+
+
+
+ selectionButtonPosition
+ showSelectionButtons
+
+
+
+
+ ${i18n:CreateDesktopIcon}
+
+ createDesktopLinkAction
+
+
+
+
+ ${i18n:AddToDock}
+
+ addToDockAction
+
+ Util.isMacOS()
+
+
+
+
+
+
+
+
+ ${i18n:UninstallerMenuEntry(${compiler:sys.fullName})}
+
+ !context.getBooleanVariable("sys.programGroupDisabled")
+
+
+
+ ${compiler:sys.fullName} ${compiler:sys.version}
+
+
+
+
+
+
+ ${i18n:WizardPreparing}
+
+
+
+
+
+
+
+
+ ${form:finishedMessage}
+
+
+
+
+
+
+
+
+ ${i18n:UninstallerMenuEntry(${compiler:sys.fullName})}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${form:welcomeMessage}
+
+ !context.isConsole()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${i18n:UninstallerPreparing}
+
+
+
+
+
+
+
+
+
+ ${form:successMessage}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/install4j/22.xx/openrocket-22.xx.install4j~ b/install4j/22.xx/openrocket-22.xx.install4j~
new file mode 100644
index 000000000..a024f6d51
--- /dev/null
+++ b/install4j/22.xx/openrocket-22.xx.install4j~
@@ -0,0 +1,485 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ sys.installationDir
+
+
+ context.getBooleanVariable("sys.confirmedUpdateInstallation")
+
+
+
+
+
+ ${form:welcomeMessage}
+
+ !context.isConsole()
+
+
+
+
+
+
+
+
+
+
+ updateCheck
+
+
+
+
+ ${i18n:ClickNext}
+
+
+
+
+
+ !context.getBooleanVariable("sys.confirmedUpdateInstallation")
+
+
+
+
+ sys.installationDir
+
+
+ context.getVariable("sys.responseFile") == null
+
+
+
+
+
+ ${i18n:SelectDirLabel(${compiler:sys.fullName})}
+
+
+
+
+
+
+
+ suggestAppDir
+ validateApplicationId
+ existingDirWarning
+ checkWritable
+ manualEntryAllowed
+ checkFreeSpace
+ showRequiredDiskSpace
+ showFreeDiskSpace
+ allowSpacesOnUnix
+ validationScript
+ standardValidation
+
+
+
+
+
+
+
+
+ ${i18n:SelectComponentsLabel2}
+
+ !context.isConsole()
+
+
+
+
+
+
+ selectionChangedScript
+
+
+
+
+
+
+
+
+ OpenRocket Rocket Files
+ ork
+ 59
+
+
+
+
+
+
+ ${i18n:SelectAssociationsLabel}
+
+
+
+
+
+
+
+ showSelectionButtons
+ selectionButtonPosition
+
+
+
+
+
+
+
+
+
+ ${i18n:UninstallerMenuEntry(${compiler:sys.fullName})}
+
+ !context.getBooleanVariable("sys.programGroupDisabled")
+
+
+
+ ${compiler:sys.fullName} ${compiler:sys.version}
+
+
+
+
+
+
+ ${i18n:WizardPreparing}
+
+
+
+
+
+
+
+
+ ${form:finishedMessage}
+
+
+
+
+
+
+
+
+ ${i18n:UninstallerMenuEntry(${compiler:sys.fullName})}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${form:welcomeMessage}
+
+ !context.isConsole()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${i18n:UninstallerPreparing}
+
+
+
+
+
+
+
+
+
+ ${form:successMessage}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/install4j/README.md b/install4j/README.md
new file mode 100644
index 000000000..a47b8edae
--- /dev/null
+++ b/install4j/README.md
@@ -0,0 +1,16 @@
+# OpenRocket Installer Files
+Originally a separate repository of Justin Hanna's, now a directory
+with its own commit history in the openrocket repository.
+
+# OpenRocket Supported Installers
+The [OpenRocket](http://www.openrocket.info) project will do its best
+to publish installers for the following platforms.
+
+* Windows, 64-bit
+* macOS, 64-bit
+* Linux, 64-bit
+
+# Maintainers
+* Neil Weinstock
+* Justin Hanney
+* Joe Pfeiffer